Professional Services Industry Signals

Companies offering specialized advisory, consulting, accounting, and audit services to businesses and government organizations.

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

Across 10 companies in Professional Services we detected 2561 areas, 435 services, 260 tools, and 239 standards — producing an aggregate signal score of 11425.

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

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

Professional Services Industry Technology Investment Report

Prepared by Naftiko May 2026

Executive Summary

The Professional Services industry — covering 8 firms across accounting, audit, and management consulting — presents one of the most technically ambitious profiles in the Naftiko scoring framework. Cloud, Data, and Security emerge as the three highest-scoring layers, signaling that these firms have invested heavily in the infrastructure required to build and deliver AI-enabled advisory services at scale. Cloud leads comprehensively, with EY scoring 195 and Accenture scoring 140, reflecting years of hyperscaler partnerships and internal platform buildout that underpin everything from client-facing analytics to internal knowledge management.

The central gap in this industry is the dramatic disparity between firms at the top and firms at the bottom. EY and Accenture consistently outscore Deloitte across nearly every layer by factors of 3x to 10x, which is a structural competitive risk for the lagging firms rather than a minor performance gap. Booz Allen, McKinsey & Company, and PwC occupy a credible middle tier, while Bain & Company and KPMG trail in specific dimensions. The industry’s strength in services portfolio breadth — EY scores 402 in Services — paired with demonstrated capability in automation and operations suggests these firms are not simply consuming AI tools but embedding them into delivery workflows. The opportunity that remains largely untapped is domain specialization and the cross-firm standardization of API and specification-layer investment.


Layer 1: Foundational Layer

Foundational Layer evaluates core AI, cloud, open-source, language, and code capabilities — the baseline from which all higher-order AI investment is built. Professional Services firms score highest here in Cloud, revealing that multi-cloud deployment and cloud-native engineering have become table stakes for competitive advisory delivery.

Artificial Intelligence — Top Company: EY (100)

EY leads the Professional Services peer group in Artificial Intelligence with a score of 100, with Accenture close behind at 91 and PwC at 65. All 8 firms in the cohort use core AI services including Amazon Web Services, Microsoft Azure, and Google Cloud Platform, and share adoption of foundational ML tooling including TensorFlow, Kubeflow, Python, and Semantic Kernel. The concentration of AI investment at EY and Accenture reflects their aggressive public commitments to AI-native transformation programs, while Deloitte’s score of 26 suggests a narrower deployment footprint despite the firm’s size.

Cloud — Top Company: EY (195)

EY’s Cloud score of 195 is the highest in the layer and nearly 40% above Accenture’s 140, underscoring EY’s position as the most deeply cloud-committed firm in the cohort. PwC (116) and Booz Allen (107) form a credible second tier. All 8 companies run on a consistent cloud services stack — AWS, Azure, Google Cloud Platform, Oracle — with Tableau, GitHub, and Datadog present universally. The uniformity of tooling signals that the competitive differentiation lies not in which cloud services firms choose but in how deeply they integrate those services into client engagement models.

Open-Source — Top Company: EY (59)

EY scores 59 in Open-Source, with Accenture (43) and Booz Allen (37) following. Universal adoption of Git, Terraform, Consul, Node.js, Angular, and TypeScript across all 8 firms indicates that open-source engineering has been thoroughly institutionalized across the cohort. Deloitte’s score of 8 stands out as anomalously low, pointing to underinvestment in open-source contribution and tooling depth that may limit the firm’s ability to field specialized technical talent in competitive engagements.

Languages — Top Company: EY (56)

EY leads in programming languages at 56, followed by Accenture at 48 and McKinsey & Company at 35. All firms demonstrate adoption of Python, R, TypeScript, and Node.js — the standard data science and web engineering stack. The tight clustering among EY, Accenture, McKinsey, Booz Allen, KPMG, and PwC (scores 56 to 31) suggests a broadly competent language capability floor, while Deloitte’s score of 15 again registers as an outlier that would limit engineering throughput on technical advisory mandates.

Code — Top Company: EY (48)

EY and Accenture lead Code at 48 and 42 respectively, with Booz Allen (41) and KPMG (41) virtually tied. The near-parity among the top four in this scoring area reflects how professionalized software engineering has become across the Big Four and adjacent strategy firms. Git, PowerShell, Elasticsearch, React Native, and Python are universally adopted, forming a common engineering vocabulary that enables lateral hiring and knowledge transfer. Deloitte (10) lags significantly and risks finding itself unable to credibly deliver technically demanding modernization engagements without partner-led capability uplift.


Layer 2: Retrieval & Grounding

Retrieval & Grounding assesses how firms build AI systems that can reliably access and contextualize proprietary data — encompassing vector databases, RAG architectures, prompt engineering, and context engineering. Professional Services firms score highest here in Data, revealing that data integration and structuring are the primary investment focus for grounding AI outputs in client-relevant context.

Data — Top Company: EY (184)

EY’s Data score of 184 is nearly 40% above Accenture’s 131, while the cohort spans down to Deloitte at 38. The universal adoption of Pandas, NumPy, Elasticsearch, Tableau, and Oracle across all 8 firms confirms that data engineering pipelines are operationally mature. The gap between the top three (EY, Accenture, PwC) and the bottom three (McKinsey, Bain, Deloitte) signals different levels of investment in enterprise-scale data architecture — the top firms are building AI grounding infrastructure while the laggards are consuming it from vendors.

Databases — Top Company: EY (44)

EY (44) and Accenture (38) lead database infrastructure investment, with PwC, Bain, and Booz Allen in a narrow band between 23 and 26. The ClickHouse presence across all 8 firms points to growing adoption of columnar analytics databases suited for large-scale log and event analysis — a critical underpinning for AI observability. Deloitte’s score of 11 is again the lowest, suggesting minimal proprietary database engineering depth beyond what third-party platforms provide out of the box.

Virtualization — Top Company: EY (37)

EY leads Virtualization at 37, with Accenture at 26 and Booz Allen at 25. Scores cluster more tightly in this area — the range between EY and Deloitte is 33 points compared to 146 points in Data — indicating that container and virtualization infrastructure has been broadly standardized across the cohort even as data capabilities diverge significantly.

Specifications — Top Company: EY (17)

EY leads Specifications at 17 with Accenture at 13, while the remaining firms score between 3 and 8. Low absolute scores across the board in this area reflect the industry’s early-stage investment in formal API specifications and contract-first development — a gap that will matter more as these firms build agentic AI products that require structured inter-service communication. The industry risks building AI systems that are difficult to audit, integrate, or scale without heavier investment in specification discipline.

Context Engineering — Industry Collective

Context Engineering signals are collective across Professional Services, with all 8 firms contributing to a shared tooling pattern built on Semantic Kernel, Python, TensorFlow, and Kubeflow. The consistent presence of Semantic Kernel across the cohort points to meaningful Microsoft-ecosystem investment in orchestrated AI context management. This is a positive structural indicator, but the industry has not yet differentiated its Context Engineering practice into proprietary frameworks — an opportunity for firms seeking to build durable AI delivery differentiation.


Layer 3: Customization & Adaptation

Customization & Adaptation covers how firms fine-tune models, manage model versions, and build multimodal infrastructure. Professional Services firms score highest here in Model Registry & Versioning, indicating that model lifecycle management has received early attention even as fine-tuning and domain specialization remain nascent.

Data Pipelines — Top Company: EY (18)

EY leads Data Pipelines at 18, with PwC second at 15 and Accenture at 11. The relatively low absolute scores across the layer reveal that fine-tuning-ready data pipeline infrastructure is not yet a firmwide capability for most players. KPMG (9) and McKinsey (8) are competitive with Accenture, while Bain (3) and Deloitte (2) lag significantly. Firms investing now in data pipeline maturity for model customization will have a material head start when client-specific model fine-tuning becomes a standard delivery expectation.

Model Registry & Versioning — Top Company: EY (26)

EY and Accenture tie at 26 in Model Registry & Versioning, with PwC and KPMG each at 16. The clustering at the top indicates that model governance disciplines are being institutionalized simultaneously across the leading firms, rather than one firm having a commanding lead. Bain’s score of 6 and Deloitte’s 8 represent a meaningful gap that will complicate systematic model deployment and audit as AI regulatory requirements intensify across financial services and government clients.

Multimodal Infrastructure — Top Company: EY (23)

EY and Accenture are tied at 23 in Multimodal Infrastructure, followed by PwC at 15. The adoption of TensorFlow, Kubeflow, and Matplotlib across all firms forms a baseline for multimodal model deployment, but scored depth reveals that true multimodal delivery capability is concentrated in a two-firm leadership tier. As client expectations shift toward voice, image, and document-processing AI use cases, firms below the top tier will face a capability gap that cannot be closed without dedicated infrastructure investment.

Domain Specialization — Top Company: McKinsey & Company (2)

Domain Specialization scores are uniformly low across the cohort, with McKinsey, Booz Allen, PwC, EY, Accenture, and KPMG all scoring 2, and two firms absent entirely. These scores signal that the industry has not yet built specialized AI models tuned to specific practice areas or regulatory environments. For an industry that charges premium rates on the basis of domain expertise, the absence of domain-specialized AI capability is both a gap and a significant market opportunity for the first firm to move decisively.


Layer 4: Efficiency & Specialization

Efficiency & Specialization examines automation, containerization, platform engineering, and operational maturity — the layer that determines whether AI capabilities can be delivered reliably at enterprise scale.

Automation — Top Company: EY (94)

EY leads Automation at 94, with Accenture at 67 and Booz Allen at 61. This is one of the highest absolute scoring areas in the dataset, reflecting that process automation has been a major investment theme across the industry for several years. PwC (54) and KPMG (45) are credible, while Deloitte (19) is operationally exposed. All 8 firms use Terraform, PowerShell, and Node.js as automation tooling cornerstones. The strength in automation positions leading firms to scale AI-augmented delivery without proportional headcount increases.

Containers — Top Company: EY (42)

EY (42), Accenture (33), and Booz Allen (30) lead container infrastructure investment. Container adoption correlates with the ability to deploy AI microservices reliably across diverse client environments, making this score a proxy for delivery scalability. McKinsey (23) and PwC (21) hold competitive positions, while Bain (15), KPMG (14), and Deloitte (5) signal lower readiness for containerized AI deployment at enterprise scale.

Platform — Top Company: Accenture (45)

Accenture (45) edges EY (43) for the Platform leadership position, with Booz Allen (39), PwC (36), and a tightly clustered group of McKinsey, Bain, and KPMG between 32 and 33. Deloitte (25) is the outlier. The competitive parity among the top six firms in Platform investment suggests that platform engineering has become a core delivery capability across the industry, reducing differentiation potential in this dimension and shifting competitive advantage toward higher-order AI orchestration.

Operations — Top Company: EY (87)

EY leads Operations at 87, followed by Booz Allen (75) and Accenture (71). Booz Allen’s strong showing in Operations reflects the firm’s government-sector delivery orientation, where operational reliability and auditability carry premium weight. PwC, KPMG, McKinsey, and Bain score between 37 and 54, forming a competent middle tier. ServiceNow and Datadog are universally adopted, confirming that IT service management and monitoring have been standardized industry-wide. Deloitte’s Operations score of 26 suggests that the firm’s AI operations posture remains underdeveloped relative to its market positioning.


Layer 5: Productivity

Productivity evaluates SaaS adoption, code generation tooling, and the breadth of services infrastructure — the dimension that most directly reflects how AI investment is translating into practitioner-level productivity gains.

Software As A Service (SaaS) — Top Company: EY (2)

SaaS scores are very low across the cohort — EY, Accenture, and Bain each score 2, McKinsey, Booz Allen, and PwC score 1 — indicating that formal SaaS product development or AI-as-a-service commercialization is nascent across the industry. Professional Services firms have traditionally been services businesses rather than software product companies, and these scores reflect that structural reality. The firms that begin building repeatable SaaS-packaged AI capabilities now will unlock a revenue model inaccessible to pure-services competitors.

Code — Top Company: EY (48)

EY leads Code productivity at 48 with Accenture at 42 and both Booz Allen and KPMG at 41. GitHub, Git, and Node.js are universal, and the presence of React Native and Angular across all firms indicates that practitioner-facing web application development is an active delivery capability. The tight clustering in Code scores suggests that the engineering talent base is broadly competitive, and that productivity differentiation will come from AI-assisted code generation tooling rather than headcount.

Services — Top Company: EY (402)

Services is the highest-scoring area in the entire dataset for Professional Services. EY scores 402, Accenture 317, and Booz Allen 211 — scores that reflect the full breadth of cloud services, SaaS platforms, and integration tooling deployed by these firms. All 8 companies run BigCommerce, HubSpot, Salesforce, Tableau, LinkedIn, YouTube, and MailChimp alongside enterprise infrastructure. The depth of services portfolio is a structural strength that enables rapid capability assembly for client engagements, though it also introduces governance and vendor management complexity that can slow AI deployment timelines.


Layer 6: Integration & Interoperability

Integration & Interoperability assesses how well firms can connect AI systems to each other and to external platforms through APIs, event-driven architectures, CNCF tooling, and integration patterns. Professional Services firms score highest here in Integrations, reflecting enterprise-scale middleware competency.

API — Top Company: EY (37)

EY leads API investment at 37, with Accenture (30) and Booz Allen (19) following. API design and consumption are universal capabilities across the cohort, though scored depth varies significantly. McKinsey (17) and Bain (13) occupy the middle tier. The industry’s low Specifications scores (see Layer 2) combined with moderate API scores suggest that many firms consume APIs effectively but have not yet adopted contract-first API design disciplines that would make their AI systems more composable and auditable.

Integrations — Top Company: EY (58)

EY (58) and Accenture (39) lead Integrations, with PwC (38) and KPMG (30) competitive. The presence of Salesforce, ServiceNow, and HubSpot across all 8 firms forms an integration backbone that enables CRM, ITSM, and marketing automation to be woven into AI-enabled advisory workflows. Booz Allen (20), Bain (16), and Deloitte (11) trail, limiting their capacity to build cross-system AI orchestration capabilities that more integrated competitors can offer.

Event-Driven — Top Company: EY (40)

EY (40) holds a significant lead in Event-Driven architecture over Accenture (22), which in turn leads McKinsey (11) and PwC (10). Event-driven architectures are a prerequisite for real-time AI agent systems that react to business events as they occur. EY’s lead here positions it to build agentic AI advisory capabilities ahead of competitors who lack the real-time event backbone required to trigger and coordinate AI workflows at runtime.

Patterns — Top Company: EY (25)

EY (25) and Accenture (18) lead Patterns investment, followed by Booz Allen (16) and McKinsey (12). Architectural patterns adoption reflects the institutionalization of engineering best practices for distributed AI systems. The scores here correlate with the firms most likely to deploy AI reliably across diverse client environments without custom re-engineering for each engagement.

Specifications — Top Company: EY (17)

EY and Accenture lead Specifications in this layer as well, consistent with their pattern across the dataset. Low absolute scores industry-wide point to an underdeveloped formal API contracting discipline that will become increasingly important as firms build agentic AI systems that interact with client data environments through defined interfaces.

Apache — Top Company: EY (21)

EY (21) leads Apache ecosystem investment, with PwC and Accenture tied at 10. Apache tooling — including Apache Spark and Apache Ant, both universally adopted across the cohort — forms the backbone of large-scale data processing pipelines that feed AI models. The broader the Apache investment, the more capable a firm is of processing unstructured client data at enterprise scale.

CNCF — Top Company: Accenture (34)

Accenture (34) edges EY (33) for CNCF leadership, with McKinsey (25) and Booz Allen (24) forming a competitive second tier. CNCF adoption encompasses Kubernetes, Consul, and Terraform — all universally deployed — plus deeper cloud-native orchestration tooling. Accenture’s CNCF lead signals a slightly stronger cloud-native engineering posture in this specific dimension, relevant for firms building portable, multi-cloud AI delivery infrastructure.


Layer 7: Statefulness

Statefulness captures how firms manage persistent context, observability, governance, security, and data across AI system lifecycles — the layer most directly tied to regulatory compliance and enterprise trust.

Observability — Top Company: EY (52)

EY leads Observability at 52, followed by Booz Allen (41) and Accenture (40). Booz Allen’s strong showing in Observability reflects the federal government market’s non-negotiable requirements for auditability and system transparency. Datadog and Elasticsearch are universally adopted as observability tooling. The spread between EY (52) and Deloitte (15) is among the widest in the dataset, indicating that Deloitte would face meaningful challenges demonstrating AI system audit trails to highly regulated clients.

Governance — Top Company: EY (73)

EY leads Governance at 73, with Accenture at 48 and PwC and KPMG tied at 35. For an industry whose core value proposition is trusted advisory, governance scores carry disproportionate strategic weight. EY’s leadership here — nearly 50% above Accenture — reflects deep investment in data governance, model risk management, and compliance frameworks that are directly monetizable in financial services, healthcare, and public sector engagements. Deloitte’s Governance score of 7 is a significant competitive exposure in regulated markets.

Security — Top Company: EY (115)

EY leads Security at 115, with Accenture (79), Booz Allen (70), and KPMG (57) following. Booz Allen’s strong Security score is consistent with its cybersecurity-heavy government client portfolio. The universal adoption of ServiceNow, Terraform, and Datadog across all 8 firms provides a common security tooling baseline, while the scored depth reflects how deeply each firm has invested in threat detection, identity management, and compliance automation. KPMG’s security score of 57 is notably higher than its scores in other dimensions, reflecting a deliberate cybersecurity practice investment.

Data — Top Company: EY (184)

EY leads Data in the Statefulness layer as well at 184, mirroring its Retrieval & Grounding score. The consistency of EY’s data investment across both layers confirms that this is a firm-level strategic priority rather than an isolated capability. Accenture (131), PwC (103), and Booz Allen (91) form a strong second tier. Data infrastructure in the Statefulness context encompasses state management for long-running AI agents, persistent context storage, and data lineage tracking — capabilities that become critical as firms move from single-turn AI interactions to multi-step agentic workflows.


Layer 8: Measurement & Accountability

Measurement & Accountability examines how firms evaluate AI systems through testing, observability, developer experience, and ROI measurement — the discipline required to deliver AI with confidence and demonstrate business value.

Testing & Quality — Top Company: EY (29)

EY (29) leads Testing & Quality, with Accenture (17) and McKinsey (10) following. The presence of SonarQube across all 8 firms signals that static code analysis has been standardized, though scored depth reveals significant variation in how rigorously automated testing disciplines have been applied to AI-specific components. Deloitte’s score of 1 in Testing & Quality represents a risk exposure for a firm operating in highly regulated audit and advisory markets where AI-generated outputs require demonstrable quality controls.

Observability — Top Company: EY (52)

EY (52), Booz Allen (41), and Accenture (40) lead Observability in the Measurement context as well, reinforcing the theme that the top firms have built monitoring and telemetry infrastructure that supports both operational reliability and business outcome tracking. Datadog, Elasticsearch, and Prometheus form the observability stack backbone across the cohort.


Industry Strategic Assessment

Professional Services occupies a structurally advantaged position in the AI readiness landscape precisely because its business model is built on deploying expertise at scale through people — and AI directly augments that motion. EY and Accenture have built the foundational infrastructure, cloud-native platforms, and automation capabilities required to operate as AI-native advisory firms, not merely AI-aware ones. Their leads across Cloud (195/140), Automation (94/67), Security (115/79), and Services (402/317) are not marginal advantages but compounding ones: each layer of investment makes the next layer faster and cheaper to build. The three firms that represent the industry’s real competitive engine — EY, Accenture, and Booz Allen — have collectively invested across enough layers that their AI delivery capacity will be difficult for lagging peers to match without structural investment programs.

The industry’s most significant unmet opportunity lies in domain specialization. Domain Specialization scores of 2 across all firms, paired with low Specifications scores, reveal that the industry has built broad horizontal AI capability without yet encoding its proprietary domain expertise — the tax code interpretations, risk frameworks, and regulatory knowledge bases that justify premium billing — into specialized AI models. The first firm to build rigorous domain-specific fine-tuned models with production-grade governance and audit trails will create a differentiation barrier that horizontal AI tooling alone cannot replicate. This represents a multi-hundred-million-dollar competitive advantage for the firm that moves first, and a multi-billion-dollar client retention risk for firms that move last.

The industry’s internal competitive structure also warrants attention. Deloitte’s scores across virtually every layer are dramatically below the cohort average — in some cases by 10x — despite being one of the four largest professional services firms globally by revenue. This divergence suggests either a fundamentally different organizational approach to technology investment disclosure, or an actual capability gap that will compound as AI becomes more central to competitive differentiation in advisory services. For any firm looking to build or deepen its AI advisory practice, a Naftiko design partnership offers the structured intelligence and scoring architecture needed to identify precisely where investment closes the most meaningful competitive gaps — and to communicate that progress in terms that resonate with boards, regulators, and talent markets.

Companies — Total:8

  • Accenture
    A global professional services company providing consulting, technology, and outsourcing services. Serves clients across more...
  • Bain & Company
    A global management consulting firm and one of the prestigious Big Three strategy consultancies. Advises...
  • Booz Allen
    A management and technology consulting firm primarily serving the U.S. government in defense, intelligence, and...
  • Deloitte
    The largest professional services firm in the world by revenue, providing audit, consulting, tax, and...
  • EY
    One of the Big Four professional services firms providing audit, tax, consulting, and advisory services....
  • KPMG
    One of the Big Four professional services firms providing audit, tax, and advisory services globally....
  • McKinsey & Company
    The world's most prestigious management consulting firm advising leading businesses, governments, and institutions on strategy,...
  • PwC
    One of the Big Four professional services firms providing audit, assurance, tax, and consulting services...

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

Sort
Expand
724 capabilities

Triggers an Azure Data Factory pipeline run, logs the run in ServiceNow, and notifies the data engineering team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Azure Data Factory Pipeline Trigger and Monitor
  description: Triggers an Azure Data Factory pipeline run, logs the run in ServiceNow, and notifies the data engineering team in Microsoft Teams.
  tags:
  - data
  - etl
  - azure-data-factory
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: data-adf
    port: 8080
    tools:
    - name: trigger-adf-pipeline-and-monitor
      description: Trigger an ADF pipeline, log in ServiceNow, and notify the data team.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: The Azure subscription ID.
      - name: resource_group
        in: body
        type: string
        description: The Azure resource group.
      - name: factory_name
        in: body
        type: string
        description: The ADF factory name.
      - name: pipeline_name
        in: body
        type: string
        description: The pipeline name to trigger.
      - name: teams_channel
        in: body
        type: string
        description: The Teams channel for data engineering.
      steps:
      - name: trigger-pipeline
        type: call
        call: adf.create-pipeline-run
        with:
          subscription_id: '{{subscription_id}}'
          resource_group: '{{resource_group}}'
          factory_name: '{{factory_name}}'
          pipeline_name: '{{pipeline_name}}'
      - name: log-run
        type: call
        call: servicenow.create-task
        with:
          short_description: 'ADF pipeline run: {{pipeline_name}}'
          description: 'Factory: {{factory_name}}. Pipeline: {{pipeline_name}}. Run ID: {{trigger-pipeline.run_id}}.'
          assigned_group: Data_Engineering
          category: etl_monitoring
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: '{{teams_channel}}'
          text: 'ADF Pipeline Triggered: {{pipeline_name}} in {{factory_name}}. Run ID: {{trigger-pipeline.run_id}}. ServiceNow: {{log-run.number}}.'
  consumes:
  - type: http
    namespace: adf
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: pipeline-runs
      path: /subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.DataFactory/factories/{{factory_name}}/pipelines/{{pipeline_name}}/createRun?api-version=2018-06-01
      inputParameters:
      - name: subscription_id
        in: path
      - name: resource_group
        in: path
      - name: factory_name
        in: path
      - name: pipeline_name
        in: path
      operations:
      - name: create-pipeline-run
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://accenture.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/General/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → azure-data-factory-pipeline-trigger-and-monitor.yml

Analyzes incident patterns from ServiceNow, identifies root causes in Snowflake, creates problem tickets, and notifies service delivery.

naftiko: '0.5'
info:
  label: Incident Trend Analysis Pipeline
  description: Analyzes incident patterns from ServiceNow, identifies root causes in Snowflake, creates problem tickets, and notifies service delivery.
  tags:
  - incident-analysis
  - servicenow
  - snowflake
  - jira
capability:
  exposes:
  - type: mcp
    namespace: incident-analysis
    port: 8080
    tools:
    - name: incident_trend_analysis_pipeline
      description: Orchestrate incident trend analysis pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: fetch-data
        type: call
        call: primary.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-data
        type: call
        call: processor.transform
        with:
          input: '{{fetch-data.result}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: records
          data: '{{process-data.output}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: operations
          text: 'Workflow {{resource_id}} complete. Record: {{create-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://co.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/records
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → incident-trend-analysis-pipeline.yml

Fetches a Google Analytics traffic summary for a given property and date range, logs the report in Salesforce as an activity, and notifies the marketing team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Google Analytics Traffic Report and Log
  description: Fetches a Google Analytics traffic summary for a given property and date range, logs the report in Salesforce as an activity, and notifies the marketing team in Microsoft Teams.
  tags:
  - marketing
  - analytics
  - google-analytics
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: marketing-analytics
    port: 8080
    tools:
    - name: get-traffic-summary-and-log
      description: Fetch a Google Analytics traffic summary, log in Salesforce, and notify Teams.
      inputParameters:
      - name: property_id
        in: body
        type: string
        description: The Google Analytics property ID.
      - name: start_date
        in: body
        type: string
        description: Report start date (YYYY-MM-DD).
      - name: end_date
        in: body
        type: string
        description: Report end date (YYYY-MM-DD).
      - name: salesforce_account_id
        in: body
        type: string
        description: The Salesforce account ID for the client.
      - name: teams_channel
        in: body
        type: string
        description: The Teams channel for marketing reports.
      steps:
      - name: run-report
        type: call
        call: googleanalytics.run-report
        with:
          property_id: '{{property_id}}'
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: log-in-salesforce
        type: call
        call: salesforce.create-task
        with:
          account_id: '{{salesforce_account_id}}'
          subject: 'GA Traffic Report: {{start_date}} to {{end_date}}'
          description: 'Sessions: {{run-report.total_sessions}}. Users: {{run-report.total_users}}. Bounce Rate: {{run-report.bounce_rate}}%.'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: '{{teams_channel}}'
          text: 'GA Report ({{start_date}} - {{end_date}}): Sessions: {{run-report.total_sessions}} | Users: {{run-report.total_users}} | Bounce Rate: {{run-report.bounce_rate}}%'
  consumes:
  - type: http
    namespace: googleanalytics
    baseUri: https://analyticsdata.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: reports
      path: /properties/{{property_id}}:runReport
      inputParameters:
      - name: property_id
        in: path
      operations:
      - name: run-report
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://accenture.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: tasks
      path: /sobjects/Task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/General/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → google-analytics-traffic-report-and-log.yml

Checks Okta group membership for access verification at Accenture.

naftiko: '0.5'
info:
  label: Okta Group Membership Check
  description: Checks Okta group membership for access verification at Accenture.
  tags:
  - security
  - okta
  - access-control
capability:
  exposes:
  - type: mcp
    namespace: identity
    port: 8080
    tools:
    - name: check-group
      description: Check user group membership.
      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://accenture.okta.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.okta_api_token
      header: Authorization
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: okta_group_membership_check
        method: GET
Open in Framework → View in Fleet → okta-group-membership-check.yml

Monitors timesheet submission from Workday, identifies late entries, sends reminders, escalates to managers, and reports compliance.

naftiko: '0.5'
info:
  label: Timesheet Compliance Enforcer
  description: Monitors timesheet submission from Workday, identifies late entries, sends reminders, escalates to managers, and reports compliance.
  tags:
  - compliance
  - timesheet
  - workday
  - slack
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: timesheet_compliance_enforcer
      description: Orchestrate timesheet compliance enforcer workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: fetch-data
        type: call
        call: primary.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-data
        type: call
        call: processor.transform
        with:
          input: '{{fetch-data.result}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: records
          data: '{{process-data.output}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: operations
          text: 'Workflow {{resource_id}} complete. Record: {{create-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://co.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/records
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → timesheet-compliance-enforcer.yml

Collects cloud costs from AWS and Azure, allocates to projects in Snowflake, generates chargeback reports in Power BI, and notifies project leads.

naftiko: '0.5'
info:
  label: Infrastructure Cost Chargeback Pipeline
  description: Collects cloud costs from AWS and Azure, allocates to projects in Snowflake, generates chargeback reports in Power BI, and notifies project leads.
  tags:
  - finops
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finops
    port: 8080
    tools:
    - name: infrastructure_cost_chargeback_pipeline
      description: Orchestrate infrastructure cost chargeback pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-cloud-costs
        type: call
        call: snowflake.run-query
        with:
          sql_query: SELECT * FROM cloud_costs WHERE period = '{{resource_id}}'
          warehouse: FINOPS_WH
      - name: allocate-costs
        type: call
        call: snowflake.run-query
        with:
          sql_query: CALL allocate_chargeback('{{resource_id}}')
          warehouse: FINOPS_WH
      - name: refresh-reports
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: cost_chargeback
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: finops
          text: 'Chargeback report for {{resource_id}} published. Total: {{allocate-costs.total}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://accenture.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: powerbi-op
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-op
        method: POST
Open in Framework → View in Fleet → infrastructure-cost-chargeback-pipeline.yml

Queries AWS cost data, identifies top-spending services, cross-checks against Azure spend, and posts a cost optimization summary to Microsoft Teams for the FinOps team.

naftiko: '0.5'
info:
  label: Cloud Cost Optimization Alert
  description: Queries AWS cost data, identifies top-spending services, cross-checks against Azure spend, and posts a cost optimization summary to Microsoft Teams for the FinOps team.
  tags:
  - finops
  - cloud
  - amazon-web-services
  - microsoft-azure
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finops-cost
    port: 8080
    tools:
    - name: generate-cost-alert
      description: Given an AWS account ID and Azure subscription, compare cloud spend and post a summary to Teams.
      inputParameters:
      - name: aws_account_id
        in: body
        type: string
        description: The AWS account ID.
      - name: azure_subscription_id
        in: body
        type: string
        description: The Azure subscription ID.
      - name: period
        in: body
        type: string
        description: The cost reporting period (YYYY-MM).
      - name: teams_channel
        in: body
        type: string
        description: The Microsoft Teams channel for FinOps alerts.
      steps:
      - name: get-aws-costs
        type: call
        call: aws.get-cost-and-usage
        with:
          account_id: '{{aws_account_id}}'
          period: '{{period}}'
      - name: get-azure-costs
        type: call
        call: azure.get-cost-management
        with:
          subscription_id: '{{azure_subscription_id}}'
          period: '{{period}}'
      - name: post-summary
        type: call
        call: msteams.send-message
        with:
          channel: '{{teams_channel}}'
          text: 'Cloud Cost Report ({{period}}):

            - AWS Total: ${{get-aws-costs.total_cost}} | Top Service: {{get-aws-costs.top_service}} (${{get-aws-costs.top_service_cost}})

            - Azure Total: ${{get-azure-costs.total_cost}} | Top Service: {{get-azure-costs.top_service}} (${{get-azure-costs.top_service_cost}})

            - Combined: ${{get-aws-costs.total_cost + get-azure-costs.total_cost}}'
  consumes:
  - type: http
    namespace: aws
    baseUri: https://ce.us-east-1.amazonaws.com
    authentication:
      type: aws-sigv4
      access_key: $secrets.aws_access_key
      secret_key: $secrets.aws_secret_key
    resources:
    - name: cost-usage
      path: /
      operations:
      - name: get-cost-and-usage
        method: POST
  - type: http
    namespace: azure
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: cost-management
      path: /subscriptions/{{subscription_id}}/providers/Microsoft.CostManagement/query?api-version=2023-03-01
      inputParameters:
      - name: subscription_id
        in: path
      operations:
      - name: get-cost-management
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/General/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → cloud-cost-optimization-alert.yml

Triggers NPS survey via Qualtrics, collects responses, analyzes in Snowflake, updates Salesforce account health, and notifies account leads.

naftiko: '0.5'
info:
  label: Client NPS Survey Pipeline
  description: Triggers NPS survey via Qualtrics, collects responses, analyzes in Snowflake, updates Salesforce account health, and notifies account leads.
  tags:
  - client-experience
  - salesforce
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: client-experience
    port: 8080
    tools:
    - name: client_nps_survey_pipeline
      description: Orchestrate client nps survey pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: trigger-survey
        type: call
        call: qualtrics.distribute-survey
        with:
          survey_id: nps_{{resource_id}}
      - name: analyze-responses
        type: call
        call: snowflake.run-query
        with:
          sql_query: CALL analyze_nps('{{resource_id}}')
          warehouse: CX_WH
      - name: update-salesforce
        type: call
        call: salesforce.update-account-health
        with:
          account_id: '{{resource_id}}'
          nps: '{{analyze-responses.nps_score}}'
      - name: notify
        type: call
        call: slack.send-message
        with:
          channel: account-leads
          text: 'NPS for {{resource_id}}: {{analyze-responses.nps_score}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://accenture.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: snowflake
    baseUri: https://accenture.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → client-nps-survey-pipeline.yml

Executes a query against SAP HANA, stages the result in Amazon S3, and triggers a Databricks notebook for downstream processing.

naftiko: '0.5'
info:
  label: SAP HANA Data Extraction Pipeline
  description: Executes a query against SAP HANA, stages the result in Amazon S3, and triggers a Databricks notebook for downstream processing.
  tags:
  - data
  - etl
  - sap-hana
  - amazon-s3
  - databricks
capability:
  exposes:
  - type: mcp
    namespace: data-extraction
    port: 8080
    tools:
    - name: extract-hana-to-databricks
      description: Given a HANA SQL query, extract data to S3 and trigger a Databricks processing notebook.
      inputParameters:
      - name: hana_query
        in: body
        type: string
        description: The SAP HANA SQL query to execute.
      - name: s3_bucket
        in: body
        type: string
        description: The target S3 bucket name.
      - name: s3_key
        in: body
        type: string
        description: The S3 object key for the extract.
      - name: databricks_notebook_path
        in: body
        type: string
        description: The Databricks notebook path to trigger.
      steps:
      - name: extract-data
        type: call
        call: hana.execute-query
        with:
          query: '{{hana_query}}'
      - name: upload-to-s3
        type: call
        call: s3.put-object
        with:
          bucket: '{{s3_bucket}}'
          key: '{{s3_key}}'
          body: '{{extract-data.result_csv}}'
      - name: trigger-notebook
        type: call
        call: databricks.run-notebook
        with:
          notebook_path: '{{databricks_notebook_path}}'
          base_parameters: '{"s3_path": "s3://{{s3_bucket}}/{{s3_key}}"}'
  consumes:
  - type: http
    namespace: hana
    baseUri: https://accenture-hana.sap.com/api/v1
    authentication:
      type: basic
      username: $secrets.hana_user
      password: $secrets.hana_password
    resources:
    - name: sql
      path: /sql
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: s3
    baseUri: https://s3.amazonaws.com
    authentication:
      type: aws-sigv4
      access_key: $secrets.aws_access_key
      secret_key: $secrets.aws_secret_key
    resources:
    - name: objects
      path: /{{bucket}}/{{key}}
      inputParameters:
      - name: bucket
        in: path
      - name: key
        in: path
      operations:
      - name: put-object
        method: PUT
  - type: http
    namespace: databricks
    baseUri: https://accenture.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/runs/submit
      operations:
      - name: run-notebook
        method: POST
Open in Framework → View in Fleet → sap-hana-data-extraction-pipeline.yml

Analyzes skill gaps from Workday, maps to available Pluralsight courses, creates learning plans, assigns in LMS, and notifies managers.

naftiko: '0.5'
info:
  label: Training Needs Analysis Pipeline
  description: Analyzes skill gaps from Workday, maps to available Pluralsight courses, creates learning plans, assigns in LMS, and notifies managers.
  tags:
  - learning
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: learning
    port: 8080
    tools:
    - name: training_needs_analysis_pipeline
      description: Orchestrate training needs analysis pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-skill-gaps
        type: call
        call: workday.get-skill-assessment
        with:
          team_id: '{{resource_id}}'
      - name: find-courses
        type: call
        call: pluralsight.search-courses
        with:
          skills: '{{get-skill-gaps.missing_skills}}'
      - name: create-plan
        type: call
        call: servicenow.create-record
        with:
          table: learning_plans
          team: '{{resource_id}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: learning-dev
          text: 'Training plan for {{resource_id}}: {{get-skill-gaps.gap_count}} gaps, {{find-courses.count}} courses'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/accenture
    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://accenture.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-op
        method: POST
Open in Framework → View in Fleet → training-needs-analysis-pipeline.yml

Collects project metrics from Jira, client satisfaction from Salesforce, cost actuals from SAP, generates health scorecard in Power BI, and escalates risks.

naftiko: '0.5'
info:
  label: Client Delivery Health Check
  description: Collects project metrics from Jira, client satisfaction from Salesforce, cost actuals from SAP, generates health scorecard in Power BI, and escalates risks.
  tags:
  - delivery
  - jira
  - salesforce
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: delivery
    port: 8080
    tools:
    - name: client_delivery_health_check
      description: Orchestrate client delivery health check workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-metrics
        type: call
        call: jira.get-project-metrics
        with:
          project_key: '{{resource_id}}'
      - name: get-satisfaction
        type: call
        call: salesforce.get-csat
        with:
          project_id: '{{resource_id}}'
      - name: refresh-scorecard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: delivery_health
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: delivery-mgmt
          text: 'Health check for {{resource_id}}: Velocity {{get-metrics.velocity}}, CSAT {{get-satisfaction.score}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://accenture.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: salesforce
    baseUri: https://accenture.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: salesforce-op
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: powerbi-op
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-op
        method: POST
Open in Framework → View in Fleet → client-delivery-health-check.yml

Fetches employee skill profiles from Workday, cross-references with Pluralsight learning progress, and creates a Jira improvement task when certification gaps are found.

naftiko: '0.5'
info:
  label: Talent Skills Gap Analysis Pipeline
  description: Fetches employee skill profiles from Workday, cross-references with Pluralsight learning progress, and creates a Jira improvement task when certification gaps are found.
  tags:
  - talent
  - learning
  - workday
  - pluralsight
  - jira
capability:
  exposes:
  - type: mcp
    namespace: talent-development
    port: 8080
    tools:
    - name: analyze-skills-gap
      description: Given an employee ID and required skill list, check Workday skills and Pluralsight progress, then create a Jira task for any gaps.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      - name: required_skills
        in: body
        type: string
        description: Comma-separated list of required skill tags.
      - name: project_key
        in: body
        type: string
        description: The Jira project key for talent tasks.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: get-learning-progress
        type: call
        call: pluralsight.get-user-progress
        with:
          email: '{{get-employee.work_email}}'
      - name: create-gap-task
        type: call
        call: jira.create-issue
        with:
          project_key: '{{project_key}}'
          issuetype: Task
          summary: 'Skills gap: {{get-employee.full_name}} — missing certifications'
          description: 'Employee: {{get-employee.full_name}}

            Required: {{required_skills}}

            Completed courses: {{get-learning-progress.completed_count}}

            In progress: {{get-learning-progress.in_progress_count}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: pluralsight
    baseUri: https://api.pluralsight.com/api-v0.9
    authentication:
      type: bearer
      token: $secrets.pluralsight_token
    resources:
    - name: user-progress
      path: /users/{{email}}/course-progress
      inputParameters:
      - name: email
        in: path
      operations:
      - name: get-user-progress
        method: GET
  - type: http
    namespace: jira
    baseUri: https://accenture.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → talent-skills-gap-analysis-pipeline.yml

Identifies cross-practice opportunities from Salesforce, matches expertise in Workday, creates collaboration proposals, and notifies practice leads.

naftiko: '0.5'
info:
  label: Cross-Practice Collaboration Pipeline
  description: Identifies cross-practice opportunities from Salesforce, matches expertise in Workday, creates collaboration proposals, and notifies practice leads.
  tags:
  - collaboration
  - cross-practice
  - salesforce
  - workday
capability:
  exposes:
  - type: mcp
    namespace: collaboration
    port: 8080
    tools:
    - name: cross_practice_collaboration_pipeline
      description: Orchestrate cross-practice collaboration pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: fetch-data
        type: call
        call: primary.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-data
        type: call
        call: processor.transform
        with:
          input: '{{fetch-data.result}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: records
          data: '{{process-data.output}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: operations
          text: 'Workflow {{resource_id}} complete. Record: {{create-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://co.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/records
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → cross-practice-collaboration-pipeline.yml

Fetches metadata and download URL for a Box file by ID. Used by consultants to access shared client deliverables.

naftiko: '0.5'
info:
  label: Box Document Retrieval
  description: Fetches metadata and download URL for a Box file by ID. Used by consultants to access shared client deliverables.
  tags:
  - content-management
  - collaboration
  - box
capability:
  exposes:
  - type: mcp
    namespace: content-docs
    port: 8080
    tools:
    - name: get-box-file
      description: Retrieve a Box file's metadata and download link by file ID.
      inputParameters:
      - name: file_id
        in: body
        type: string
        description: The Box file ID.
      call: box.get-file
      with:
        file_id: '{{file_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.name
      - name: size
        type: string
        mapping: $.size
      - name: download_url
        type: string
        mapping: $.shared_link.download_url
  consumes:
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files/{{file_id}}
      inputParameters:
      - name: file_id
        in: path
      operations:
      - name: get-file
        method: GET
Open in Framework → View in Fleet → box-document-retrieval.yml

Fetches the latest build run status from an Azure DevOps pipeline. Used by DevOps consultants to monitor client CI/CD pipelines.

naftiko: '0.5'
info:
  label: Azure DevOps Pipeline Status
  description: Fetches the latest build run status from an Azure DevOps pipeline. Used by DevOps consultants to monitor client CI/CD pipelines.
  tags:
  - devops
  - cicd
  - azure-devops
capability:
  exposes:
  - type: mcp
    namespace: devops-cicd
    port: 8080
    tools:
    - name: get-pipeline-status
      description: Look up the latest run of an Azure DevOps pipeline by project and pipeline ID.
      inputParameters:
      - name: project
        in: body
        type: string
        description: The Azure DevOps project name.
      - name: pipeline_id
        in: body
        type: string
        description: The pipeline definition ID.
      call: azuredevops.get-pipeline-run
      with:
        project: '{{project}}'
        pipeline_id: '{{pipeline_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.state
      - name: result
        type: string
        mapping: $.result
      - name: started
        type: string
        mapping: $.createdDate
  consumes:
  - type: http
    namespace: azuredevops
    baseUri: https://dev.azure.com/accenture
    authentication:
      type: basic
      username: ''
      password: $secrets.azuredevops_pat
    resources:
    - name: pipeline-runs
      path: /{{project}}/_apis/pipelines/{{pipeline_id}}/runs?$top=1&api-version=7.0
      inputParameters:
      - name: project
        in: path
      - name: pipeline_id
        in: path
      operations:
      - name: get-pipeline-run
        method: GET
Open in Framework → View in Fleet → azure-devops-pipeline-status.yml

Searches consultant skills in Workday, matches against project requirements from Salesforce, creates staffing proposals, notifies resource managers.

naftiko: '0.5'
info:
  label: Talent Matching Orchestrator
  description: Searches consultant skills in Workday, matches against project requirements from Salesforce, creates staffing proposals, notifies resource managers.
  tags:
  - workforce
  - workday
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: workforce
    port: 8080
    tools:
    - name: talent_matching_orchestrator
      description: Orchestrate talent matching orchestrator workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-requirements
        type: call
        call: salesforce.get-staffing-needs
        with:
          project_id: '{{resource_id}}'
      - name: search-talent
        type: call
        call: workday.search-by-skills
        with:
          skills: '{{get-requirements.required_skills}}'
      - name: create-proposal
        type: call
        call: servicenow.create-record
        with:
          table: staffing_proposals
          project: '{{resource_id}}'
      - name: notify
        type: call
        call: slack.send-message
        with:
          channel: resource-mgmt
          text: 'Staffing proposal for {{resource_id}}: {{search-talent.match_count}} candidates'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://accenture.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: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/accenture
    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://accenture.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → talent-matching-orchestrator.yml

Retrieves an Oracle Financials journal entry by batch name. Used by finance transformation consultants to audit GL postings.

naftiko: '0.5'
info:
  label: Oracle Cloud ERP Journal Entry Lookup
  description: Retrieves an Oracle Financials journal entry by batch name. Used by finance transformation consultants to audit GL postings.
  tags:
  - finance
  - erp
  - oracle
capability:
  exposes:
  - type: mcp
    namespace: finance-erp
    port: 8080
    tools:
    - name: get-journal-entry
      description: Look up an Oracle Financials journal entry by batch name.
      inputParameters:
      - name: journal_batch_name
        in: body
        type: string
        description: The GL journal batch name.
      call: oracle.get-journal
      with:
        batch_name: '{{journal_batch_name}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.Status
      - name: total_debit
        type: string
        mapping: $.TotalDebit
      - name: total_credit
        type: string
        mapping: $.TotalCredit
      - name: period
        type: string
        mapping: $.AccountingPeriod
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://accenture.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: journals
      path: /generalLedgerJournals?q=JournalBatchName={{batch_name}}
      inputParameters:
      - name: batch_name
        in: query
      operations:
      - name: get-journal
        method: GET
Open in Framework → View in Fleet → oracle-cloud-erp-journal-entry-lookup.yml

Collects merged PRs from GitHub, maps to Jira stories, generates formatted release notes in Confluence, notifies stakeholders, and updates Salesforce project status.

naftiko: '0.5'
info:
  label: Release Notes Generator
  description: Collects merged PRs from GitHub, maps to Jira stories, generates formatted release notes in Confluence, notifies stakeholders, and updates Salesforce project status.
  tags:
  - devops
  - github
  - jira
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: devops
    port: 8080
    tools:
    - name: release_notes_generator
      description: Orchestrate release notes generator workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-prs
        type: call
        call: github.get-merged-prs
        with:
          repo: '{{resource_id}}'
          since: last_release
      - name: get-stories
        type: call
        call: jira.get-linked-issues
        with:
          pr_ids: '{{get-prs.ids}}'
      - name: create-notes
        type: call
        call: confluence.create-page
        with:
          space: RELEASES
          title: 'Release notes: {{resource_id}}'
      - name: notify
        type: call
        call: slack.send-message
        with:
          channel: releases
          text: 'Release notes published for {{resource_id}}: {{get-prs.count}} changes'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: github-op
        method: POST
  - type: http
    namespace: jira
    baseUri: https://accenture.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://accenture.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: confluence-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → release-notes-generator.yml

Checks the status of a GitHub Actions workflow run for Accenture development projects.

naftiko: '0.5'
info:
  label: GitHub Actions Run Status
  description: Checks the status of a GitHub Actions workflow run for Accenture development projects.
  tags:
  - devops
  - github
  - ci-cd
capability:
  exposes:
  - type: mcp
    namespace: ci-cd
    port: 8080
    tools:
    - name: get-run-status
      description: Get workflow run status.
      inputParameters:
      - name: run_id
        in: body
        type: string
        description: The run_id to look up.
      call: github.get-run_id
      with:
        run_id: '{{run_id}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: github_actions_run_status
        method: GET
Open in Framework → View in Fleet → github-actions-run-status.yml

On new project in Salesforce, creates Jira project, provisions SharePoint site, sets up Teams channel, creates ServiceNow cost center, and notifies the delivery team.

naftiko: '0.5'
info:
  label: Client Project Kickoff Automation
  description: On new project in Salesforce, creates Jira project, provisions SharePoint site, sets up Teams channel, creates ServiceNow cost center, and notifies the delivery team.
  tags:
  - delivery
  - salesforce
  - jira
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: delivery
    port: 8080
    tools:
    - name: client_project_kickoff_automation
      description: Orchestrate client project kickoff automation workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-project
        type: call
        call: salesforce.get-opportunity
        with:
          opp_id: '{{resource_id}}'
      - name: create-jira
        type: call
        call: jira.create-project
        with:
          name: '{{get-project.name}}'
          key: '{{get-project.code}}'
      - name: create-cost-center
        type: call
        call: servicenow.create-record
        with:
          table: cost_centers
          project: '{{resource_id}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: delivery-ops
          text: 'Project {{get-project.name}} kicked off. Jira: {{create-jira.key}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://accenture.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: jira
    baseUri: https://accenture.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://accenture.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-op
        method: POST
Open in Framework → View in Fleet → client-project-kickoff-automation.yml

Monitors consultant certifications from Workday, identifies expirations, creates renewal tasks, and notifies learning team.

naftiko: '0.5'
info:
  label: Employee Certification Tracker
  description: Monitors consultant certifications from Workday, identifies expirations, creates renewal tasks, and notifies learning team.
  tags:
  - learning
  - certifications
  - workday
  - slack
capability:
  exposes:
  - type: mcp
    namespace: learning
    port: 8080
    tools:
    - name: employee_certification_tracker
      description: Orchestrate employee certification tracker workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: fetch-data
        type: call
        call: primary.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-data
        type: call
        call: processor.transform
        with:
          input: '{{fetch-data.result}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: records
          data: '{{process-data.output}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: operations
          text: 'Workflow {{resource_id}} complete. Record: {{create-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://co.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/records
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → employee-certification-tracker.yml

Retrieves timesheet entries from Workday by employee ID for Accenture consultants.

naftiko: '0.5'
info:
  label: Workday Timesheet Lookup
  description: Retrieves timesheet entries from Workday by employee ID for Accenture consultants.
  tags:
  - hr
  - workday
  - time-tracking
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: get-timesheet
      description: Look up timesheet by employee ID.
      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/accenture
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: workday_timesheet_lookup
        method: GET
Open in Framework → View in Fleet → workday-timesheet-lookup.yml

When a compensation change is approved in Workday, retrieves the updated salary data, logs it in Oracle Financials for budget tracking, and notifies HR Business Partner in Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Compensation Change Notification
  description: When a compensation change is approved in Workday, retrieves the updated salary data, logs it in Oracle Financials for budget tracking, and notifies HR Business Partner in Microsoft Teams.
  tags:
  - hr
  - compensation
  - workday
  - oracle
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-compensation
    port: 8080
    tools:
    - name: process-compensation-change
      description: Given an employee ID and compensation change ID, fetch the new salary, log in Oracle, and notify HR.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      - name: compensation_change_id
        in: body
        type: string
        description: The Workday compensation change event ID.
      - name: hrbp_upn
        in: body
        type: string
        description: The Microsoft UPN of the HR Business Partner.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: get-compensation
        type: call
        call: workday.get-compensation
        with:
          worker_id: '{{employee_id}}'
          change_id: '{{compensation_change_id}}'
      - name: log-budget-entry
        type: call
        call: oracle.create-journal
        with:
          description: 'Compensation change: {{get-employee.full_name}} — {{get-compensation.new_salary}} {{get-compensation.currency}}'
          amount: '{{get-compensation.new_salary}}'
          cost_center: '{{get-employee.cost_center}}'
      - name: notify-hrbp
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{hrbp_upn}}'
          text: 'Compensation Change Processed: {{get-employee.full_name}} | New salary: {{get-compensation.new_salary}} {{get-compensation.currency}} | Effective: {{get-compensation.effective_date}} | Oracle journal: {{log-budget-entry.journal_id}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
    - name: compensation
      path: /workers/{{worker_id}}/compensationPlans/{{change_id}}
      inputParameters:
      - name: worker_id
        in: path
      - name: change_id
        in: path
      operations:
      - name: get-compensation
        method: GET
  - type: http
    namespace: oracle
    baseUri: https://accenture.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: journals
      path: /generalLedgerJournals
      operations:
      - name: create-journal
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-compensation-change-notification.yml

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

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

Fetches a Datadog monitor by ID and returns current status, last triggered time, and alert message. Used by operations consultants monitoring client infrastructure.

naftiko: '0.5'
info:
  label: Datadog Monitor Alert Lookup
  description: Fetches a Datadog monitor by ID and returns current status, last triggered time, and alert message. Used by operations consultants monitoring client infrastructure.
  tags:
  - observability
  - monitoring
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: observability-alerts
    port: 8080
    tools:
    - name: get-monitor-status
      description: Look up a Datadog monitor by ID and return its current state.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: The Datadog monitor ID.
      call: datadog.get-monitor
      with:
        monitor_id: '{{monitor_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.name
      - name: overall_state
        type: string
        mapping: $.overall_state
      - name: message
        type: string
        mapping: $.message
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      header: DD-API-KEY
      key: $secrets.datadog_api_key
    resources:
    - name: monitors
      path: /monitor/{{monitor_id}}
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: get-monitor
        method: GET
Open in Framework → View in Fleet → datadog-monitor-alert-lookup.yml

Tracks SOW expiration in Salesforce, collects delivery metrics from Jira, generates renewal proposal in Confluence, routes for approval in ServiceNow, and notifies the account team.

naftiko: '0.5'
info:
  label: SOW Renewal Orchestrator
  description: Tracks SOW expiration in Salesforce, collects delivery metrics from Jira, generates renewal proposal in Confluence, routes for approval in ServiceNow, and notifies the account team.
  tags:
  - commercial
  - salesforce
  - jira
  - confluence
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: commercial
    port: 8080
    tools:
    - name: sow_renewal_orchestrator
      description: Orchestrate sow renewal orchestrator workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-sow
        type: call
        call: salesforce.get-contract
        with:
          contract_id: '{{resource_id}}'
      - name: get-delivery-metrics
        type: call
        call: jira.get-project-metrics
        with:
          project_key: '{{get-sow.project_code}}'
      - name: create-proposal
        type: call
        call: confluence.create-page
        with:
          space: COMMERCIAL
          title: 'SOW renewal: {{resource_id}}'
      - name: create-approval
        type: call
        call: servicenow.create-request
        with:
          short_description: 'SOW renewal: {{resource_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://accenture.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: jira
    baseUri: https://accenture.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://accenture.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: servicenow
    baseUri: https://accenture.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
Open in Framework → View in Fleet → sow-renewal-orchestrator.yml

Collects CI/CD metrics from GitHub, incident data from PagerDuty, deployment frequency from Datadog, scores maturity, and generates report in Confluence.

naftiko: '0.5'
info:
  label: DevOps Maturity Assessment
  description: Collects CI/CD metrics from GitHub, incident data from PagerDuty, deployment frequency from Datadog, scores maturity, and generates report in Confluence.
  tags:
  - devops
  - github
  - pagerduty
  - datadog
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: devops
    port: 8080
    tools:
    - name: devops_maturity_assessment
      description: Orchestrate devops maturity assessment workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-cicd-metrics
        type: call
        call: github.get-workflow-metrics
        with:
          org: '{{resource_id}}'
      - name: get-incidents
        type: call
        call: pagerduty.get-analytics
        with:
          service: '{{resource_id}}'
      - name: get-deployments
        type: call
        call: datadog.get-deployment-frequency
        with:
          service: '{{resource_id}}'
      - name: create-report
        type: call
        call: confluence.create-page
        with:
          space: DEVOPS
          title: 'Maturity: {{resource_id}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: github-op
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: pagerduty-op
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
      header: DD-API-KEY
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: datadog-op
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://accenture.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: confluence-op
        method: POST
Open in Framework → View in Fleet → devops-maturity-assessment.yml

Tracks vendor performance in ServiceNow, calculates scores in Snowflake, creates reviews in Jira, and notifies procurement.

naftiko: '0.5'
info:
  label: Vendor Management Pipeline
  description: Tracks vendor performance in ServiceNow, calculates scores in Snowflake, creates reviews in Jira, and notifies procurement.
  tags:
  - procurement
  - vendor
  - servicenow
  - jira
capability:
  exposes:
  - type: mcp
    namespace: procurement
    port: 8080
    tools:
    - name: vendor_management_pipeline
      description: Orchestrate vendor management pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: fetch-data
        type: call
        call: primary.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-data
        type: call
        call: processor.transform
        with:
          input: '{{fetch-data.result}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: records
          data: '{{process-data.output}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: operations
          text: 'Workflow {{resource_id}} complete. Record: {{create-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://co.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/records
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → vendor-management-pipeline.yml

Retrieves the operational status of a PagerDuty service at Accenture.

naftiko: '0.5'
info:
  label: PagerDuty Service Status
  description: Retrieves the operational status of a PagerDuty service at Accenture.
  tags:
  - devops
  - pagerduty
  - operational-status
capability:
  exposes:
  - type: mcp
    namespace: operations
    port: 8080
    tools:
    - name: get-service-status
      description: Get service operational status.
      inputParameters:
      - name: service_id
        in: body
        type: string
        description: The service_id to look up.
      call: pagerduty.get-service_id
      with:
        service_id: '{{service_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_service_status
        method: GET
Open in Framework → View in Fleet → pagerduty-service-status.yml

Scans cloud architecture against best practices, identifies anti-patterns in Snowflake, creates recommendations in Confluence, and notifies architects.

naftiko: '0.5'
info:
  label: Cloud Architecture Review Pipeline
  description: Scans cloud architecture against best practices, identifies anti-patterns in Snowflake, creates recommendations in Confluence, and notifies architects.
  tags:
  - architecture
  - cloud
  - snowflake
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: architecture
    port: 8080
    tools:
    - name: cloud_architecture_review_pipeline
      description: Orchestrate cloud architecture review pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: fetch-data
        type: call
        call: primary.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-data
        type: call
        call: processor.transform
        with:
          input: '{{fetch-data.result}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: records
          data: '{{process-data.output}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: operations
          text: 'Workflow {{resource_id}} complete. Record: {{create-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://co.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/records
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → cloud-architecture-review-pipeline.yml

Aggregates timesheet data from Workday, calculates utilization in Snowflake, updates Power BI dashboards, and alerts managers about under-utilization.

naftiko: '0.5'
info:
  label: Consultant Utilization Tracker
  description: Aggregates timesheet data from Workday, calculates utilization in Snowflake, updates Power BI dashboards, and alerts managers about under-utilization.
  tags:
  - workforce
  - workday
  - snowflake
  - power-bi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: workforce
    port: 8080
    tools:
    - name: consultant_utilization_tracker
      description: Orchestrate consultant utilization tracker workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-timesheets
        type: call
        call: workday.get-timesheets
        with:
          period: '{{resource_id}}'
      - name: calculate-util
        type: call
        call: snowflake.run-query
        with:
          sql_query: CALL calc_utilization('{{resource_id}}')
          warehouse: HR_WH
      - name: refresh-bi
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: consultant_utilization
      - name: notify
        type: call
        call: slack.send-message
        with:
          channel: workforce-mgmt
          text: 'Utilization report for {{resource_id}}: avg {{calculate-util.avg_util}}%'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/accenture
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: workday-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://accenture.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: powerbi-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → consultant-utilization-tracker.yml

Collects SonarQube metrics, tracks quality trends in Snowflake, creates improvement tasks in Jira, and notifies engineering leads.

naftiko: '0.5'
info:
  label: Code Quality Governance Pipeline
  description: Collects SonarQube metrics, tracks quality trends in Snowflake, creates improvement tasks in Jira, and notifies engineering leads.
  tags:
  - quality
  - sonarqube
  - snowflake
  - jira
capability:
  exposes:
  - type: mcp
    namespace: quality
    port: 8080
    tools:
    - name: code_quality_governance_pipeline
      description: Orchestrate code quality governance pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: fetch-data
        type: call
        call: primary.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-data
        type: call
        call: processor.transform
        with:
          input: '{{fetch-data.result}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: records
          data: '{{process-data.output}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: operations
          text: 'Workflow {{resource_id}} complete. Record: {{create-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://co.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/records
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → code-quality-governance-pipeline.yml

When a Zendesk ticket priority is set to urgent, creates a ServiceNow incident, assigns it based on Workday org data, and notifies the on-call manager in Microsoft Teams.

naftiko: '0.5'
info:
  label: Zendesk Ticket Escalation Pipeline
  description: When a Zendesk ticket priority is set to urgent, creates a ServiceNow incident, assigns it based on Workday org data, and notifies the on-call manager in Microsoft Teams.
  tags:
  - support
  - escalation
  - zendesk
  - servicenow
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: support-escalation
    port: 8080
    tools:
    - name: escalate-urgent-ticket
      description: Given a Zendesk ticket ID and assigned team, escalate to ServiceNow and notify the on-call manager.
      inputParameters:
      - name: zendesk_ticket_id
        in: body
        type: string
        description: The Zendesk ticket ID.
      - name: assigned_team
        in: body
        type: string
        description: The team slug responsible for the ticket.
      - name: oncall_manager_id
        in: body
        type: string
        description: The Workday worker ID of the on-call manager.
      steps:
      - name: get-ticket
        type: call
        call: zendesk.get-ticket
        with:
          ticket_id: '{{zendesk_ticket_id}}'
      - name: get-manager
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{oncall_manager_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Escalation: {{get-ticket.subject}}'
          priority: '1'
          assigned_group: '{{assigned_team}}'
          description: 'Zendesk #{{zendesk_ticket_id}}: {{get-ticket.description}}. Requestor: {{get-ticket.requester_name}}.'
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-manager.work_email}}'
          text: 'URGENT Escalation: Zendesk #{{zendesk_ticket_id}} — {{get-ticket.subject}}. ServiceNow: {{create-incident.number}}. Please review immediately.'
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://accenture.zendesk.com/api/v2
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: tickets
      path: /tickets/{{ticket_id}}
      inputParameters:
      - name: ticket_id
        in: path
      operations:
      - name: get-ticket
        method: GET
  - type: http
    namespace: 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://accenture.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → zendesk-ticket-escalation-pipeline.yml

When a SAP Ariba requisition exceeds a spend threshold, routes for manager approval via Workday and notifies the requestor in Microsoft Teams with approval status.

naftiko: '0.5'
info:
  label: Procurement Requisition Approval Router
  description: When a SAP Ariba requisition exceeds a spend threshold, routes for manager approval via Workday and notifies the requestor in Microsoft Teams with approval status.
  tags:
  - procurement
  - sap-ariba
  - workday
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: procurement-approval
    port: 8080
    tools:
    - name: route-requisition-approval
      description: Given an Ariba requisition ID, resolve the approver from Workday, and notify both parties in Microsoft Teams.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The SAP Ariba requisition identifier.
      - name: requestor_employee_id
        in: body
        type: string
        description: The Workday employee ID of the requestor.
      - name: spend_amount
        in: body
        type: number
        description: The total spend amount on the requisition.
      steps:
      - name: get-requisition
        type: call
        call: ariba.get-requisition
        with:
          requisition_id: '{{requisition_id}}'
      - name: get-requestor
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{requestor_employee_id}}'
      - name: get-manager
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{get-requestor.manager_id}}'
      - name: notify-approver
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-manager.work_email}}'
          text: 'Approval Required: Ariba requisition {{requisition_id}} from {{get-requestor.full_name}} for ${{spend_amount}}. Vendor: {{get-requisition.vendor_name}}. Please review: {{get-requisition.approval_url}}'
      - name: notify-requestor
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-requestor.work_email}}'
          text: Your requisition {{requisition_id}} (${{spend_amount}}) has been routed to {{get-manager.full_name}} for approval.
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/purchase-req/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: requisitions
      path: /requisitions/{{requisition_id}}
      inputParameters:
      - name: requisition_id
        in: path
      operations:
      - name: get-requisition
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → procurement-requisition-approval-router.yml

Pulls project hours from Microsoft Project, retrieves billing rates from SAP S/4HANA, generates an invoice line in Oracle Financials, and emails the client via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Client Invoice Generation Pipeline
  description: Pulls project hours from Microsoft Project, retrieves billing rates from SAP S/4HANA, generates an invoice line in Oracle Financials, and emails the client via Microsoft Outlook.
  tags:
  - finance
  - billing
  - microsoft-project
  - sap-s4hana
  - oracle
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: finance-billing
    port: 8080
    tools:
    - name: generate-client-invoice
      description: Given a project code and billing period, pull hours, compute charges, create an Oracle invoice, and email the client.
      inputParameters:
      - name: project_code
        in: body
        type: string
        description: The project or engagement code.
      - name: billing_period
        in: body
        type: string
        description: The billing period (e.g., 2026-03).
      - name: client_email
        in: body
        type: string
        description: The client finance contact email.
      steps:
      - name: get-project-hours
        type: call
        call: msproject.get-timesheet
        with:
          project_code: '{{project_code}}'
          period: '{{billing_period}}'
      - name: get-rates
        type: call
        call: sap.get-billing-rates
        with:
          project_code: '{{project_code}}'
      - name: create-invoice
        type: call
        call: oracle.create-invoice
        with:
          project_code: '{{project_code}}'
          period: '{{billing_period}}'
          total_hours: '{{get-project-hours.total_hours}}'
          rate: '{{get-rates.blended_rate}}'
          amount: '{{get-project-hours.total_hours * get-rates.blended_rate}}'
      - name: email-client
        type: call
        call: outlook.send-mail
        with:
          to: '{{client_email}}'
          subject: Invoice for {{project_code}} — {{billing_period}}
          body: 'Please find attached invoice {{create-invoice.invoice_number}} for ${{create-invoice.total_amount}}. Payment due: {{create-invoice.due_date}}.'
  consumes:
  - type: http
    namespace: msproject
    baseUri: https://graph.microsoft.com/v1.0/sites/accenture.sharepoint.com/lists
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: timesheets
      path: /ProjectTimesheets/items?$filter=ProjectCode eq '{{project_code}}' and Period eq '{{period}}'
      inputParameters:
      - name: project_code
        in: query
      - name: period
        in: query
      operations:
      - name: get-timesheet
        method: GET
  - type: http
    namespace: sap
    baseUri: https://accenture-s4.sap.com/sap/opu/odata/sap/API_BILLING_DOCUMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: billing-rates
      path: /A_BillingRate?$filter=ProjectCode eq '{{project_code}}'
      inputParameters:
      - name: project_code
        in: query
      operations:
      - name: get-billing-rates
        method: GET
  - type: http
    namespace: oracle
    baseUri: https://accenture.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: invoices
      path: /receivablesInvoices
      operations:
      - name: create-invoice
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → client-invoice-generation-pipeline.yml

Shares a Google Drive document with specified recipients. Used by consultants to share deliverables with client stakeholders in Google Workspace environments.

naftiko: '0.5'
info:
  label: Google Drive Document Sharing
  description: Shares a Google Drive document with specified recipients. Used by consultants to share deliverables with client stakeholders in Google Workspace environments.
  tags:
  - collaboration
  - content-management
  - google-drive
capability:
  exposes:
  - type: mcp
    namespace: collab-sharing
    port: 8080
    tools:
    - name: share-document
      description: Share a Google Drive file with a list of email recipients.
      inputParameters:
      - name: file_id
        in: body
        type: string
        description: The Google Drive file ID.
      - name: email
        in: body
        type: string
        description: The recipient email address.
      - name: role
        in: body
        type: string
        description: The permission role (reader, writer, commenter).
      call: googledrive.create-permission
      with:
        file_id: '{{file_id}}'
        email: '{{email}}'
        role: '{{role}}'
  consumes:
  - type: http
    namespace: googledrive
    baseUri: https://www.googleapis.com/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_drive_token
    resources:
    - name: permissions
      path: /files/{{file_id}}/permissions
      inputParameters:
      - name: file_id
        in: path
      operations:
      - name: create-permission
        method: POST
Open in Framework → View in Fleet → google-drive-document-sharing.yml

Queries specific panel data from Grafana dashboards at Accenture.

naftiko: '0.5'
info:
  label: Grafana Panel Data Query
  description: Queries specific panel data from Grafana dashboards at Accenture.
  tags:
  - monitoring
  - grafana
  - metrics
capability:
  exposes:
  - type: mcp
    namespace: monitoring
    port: 8080
    tools:
    - name: query-panel
      description: Query Grafana panel data.
      inputParameters:
      - name: panel_id
        in: body
        type: string
        description: The panel_id to look up.
      call: grafana.get-panel_id
      with:
        panel_id: '{{panel_id}}'
  consumes:
  - type: http
    namespace: grafana
    baseUri: https://accenture-grafana.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_api_key
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: grafana_panel_data_query
        method: GET
Open in Framework → View in Fleet → grafana-panel-data-query.yml

Triggers a refresh of a Power BI dataset for Accenture client reporting.

naftiko: '0.5'
info:
  label: Power BI Report Refresh Trigger
  description: Triggers a refresh of a Power BI dataset for Accenture client reporting.
  tags:
  - analytics
  - power-bi
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: trigger-refresh
      description: Trigger dataset refresh.
      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_report_refresh
        method: GET
Open in Framework → View in Fleet → power-bi-report-refresh-trigger.yml

Pulls Jira sprint metrics, Confluence status page data, and Datadog SLO compliance for a client engagement, then posts a consolidated health summary to Microsoft Teams.

naftiko: '0.5'
info:
  label: Client Delivery Health Dashboard Sync
  description: Pulls Jira sprint metrics, Confluence status page data, and Datadog SLO compliance for a client engagement, then posts a consolidated health summary to Microsoft Teams.
  tags:
  - delivery
  - reporting
  - jira
  - confluence
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: delivery-health
    port: 8080
    tools:
    - name: generate-delivery-health-report
      description: Given a Jira board ID, Confluence page ID, and Datadog SLO ID, compile a delivery health report and post it to Teams.
      inputParameters:
      - name: jira_board_id
        in: body
        type: string
        description: The Jira board ID for the engagement.
      - name: confluence_page_id
        in: body
        type: string
        description: The Confluence status page ID.
      - name: datadog_slo_id
        in: body
        type: string
        description: The Datadog SLO ID for the engagement.
      - name: teams_channel
        in: body
        type: string
        description: The Microsoft Teams channel for delivery updates.
      steps:
      - name: get-sprint
        type: call
        call: jira.get-board-sprint
        with:
          board_id: '{{jira_board_id}}'
      - name: get-status-page
        type: call
        call: confluence.get-page
        with:
          page_id: '{{confluence_page_id}}'
      - name: get-slo
        type: call
        call: datadog.get-slo
        with:
          slo_id: '{{datadog_slo_id}}'
      - name: post-summary
        type: call
        call: msteams.send-message
        with:
          channel: '{{teams_channel}}'
          text: 'Delivery Health Report:

            - Sprint: {{get-sprint.name}} | Velocity: {{get-sprint.completed_points}}/{{get-sprint.total_points}}

            - Status: {{get-status-page.status}}

            - SLO Compliance: {{get-slo.overall_status}} ({{get-slo.sli_value}}%)'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://accenture.atlassian.net/rest/agile/1.0
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: sprints
      path: /board/{{board_id}}/sprint?state=active
      inputParameters:
      - name: board_id
        in: path
      operations:
      - name: get-board-sprint
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://accenture.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content/{{page_id}}
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: get-page
        method: GET
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      header: DD-API-KEY
      key: $secrets.datadog_api_key
    resources:
    - name: slos
      path: /slo/{{slo_id}}
      inputParameters:
      - name: slo_id
        in: path
      operations:
      - name: get-slo
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/General/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → client-delivery-health-dashboard-sync.yml

Invokes an AWS Lambda function with a JSON payload. Used by cloud consultants to trigger serverless workloads for client applications.

naftiko: '0.5'
info:
  label: AWS Lambda Function Invocation
  description: Invokes an AWS Lambda function with a JSON payload. Used by cloud consultants to trigger serverless workloads for client applications.
  tags:
  - cloud
  - serverless
  - aws-lambda
capability:
  exposes:
  - type: mcp
    namespace: cloud-serverless
    port: 8080
    tools:
    - name: invoke-lambda
      description: Invoke an AWS Lambda function by name with a JSON payload.
      inputParameters:
      - name: function_name
        in: body
        type: string
        description: The Lambda function name or ARN.
      - name: payload
        in: body
        type: string
        description: The JSON payload to send to the function.
      call: lambda.invoke
      with:
        function_name: '{{function_name}}'
        payload: '{{payload}}'
  consumes:
  - type: http
    namespace: lambda
    baseUri: https://lambda.us-east-1.amazonaws.com/2015-03-31
    authentication:
      type: aws-sigv4
      access_key: $secrets.aws_access_key
      secret_key: $secrets.aws_secret_key
    resources:
    - name: functions
      path: /functions/{{function_name}}/invocations
      inputParameters:
      - name: function_name
        in: path
      operations:
      - name: invoke
        method: POST
Open in Framework → View in Fleet → aws-lambda-function-invocation.yml

Triggers a Checkmarx scan on a GitHub repository, waits for results, and creates a Jira security issue with findings summary. Used by AppSec consultants.

naftiko: '0.5'
info:
  label: Security Vulnerability Scan Pipeline
  description: Triggers a Checkmarx scan on a GitHub repository, waits for results, and creates a Jira security issue with findings summary. Used by AppSec consultants.
  tags:
  - security
  - appsec
  - checkmarx
  - github
  - jira
capability:
  exposes:
  - type: mcp
    namespace: security-scan
    port: 8080
    tools:
    - name: trigger-security-scan
      description: Given a GitHub repo and Checkmarx project ID, trigger a scan and create a Jira issue with findings.
      inputParameters:
      - name: checkmarx_project_id
        in: body
        type: string
        description: The Checkmarx project ID.
      - name: repo_url
        in: body
        type: string
        description: The GitHub repository URL to scan.
      - name: jira_project_key
        in: body
        type: string
        description: The Jira project key for security issues.
      steps:
      - name: trigger-scan
        type: call
        call: checkmarx.create-scan
        with:
          project_id: '{{checkmarx_project_id}}'
          source_url: '{{repo_url}}'
      - name: create-security-issue
        type: call
        call: jira.create-issue
        with:
          project_key: '{{jira_project_key}}'
          issuetype: Bug
          summary: '[Security Scan] Checkmarx results for {{repo_url}}'
          description: 'Scan ID: {{trigger-scan.scan_id}}. Status: {{trigger-scan.status}}. Review findings at {{trigger-scan.results_url}}.'
          priority: High
  consumes:
  - type: http
    namespace: checkmarx
    baseUri: https://accenture.checkmarx.net/cxrestapi
    authentication:
      type: bearer
      token: $secrets.checkmarx_token
    resources:
    - name: scans
      path: /sast/scans
      operations:
      - name: create-scan
        method: POST
  - type: http
    namespace: jira
    baseUri: https://accenture.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → security-vulnerability-scan-pipeline.yml

Collects agile maturity metrics from Jira, calculates team health in Snowflake, generates transformation reports, and notifies coaches.

naftiko: '0.5'
info:
  label: Agile Transformation Metrics Pipeline
  description: Collects agile maturity metrics from Jira, calculates team health in Snowflake, generates transformation reports, and notifies coaches.
  tags:
  - agile
  - transformation
  - jira
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: agile
    port: 8080
    tools:
    - name: agile_transformation_metrics_pipeline
      description: Orchestrate agile transformation metrics pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: fetch-data
        type: call
        call: primary.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-data
        type: call
        call: processor.transform
        with:
          input: '{{fetch-data.result}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: records
          data: '{{process-data.output}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: operations
          text: 'Workflow {{resource_id}} complete. Record: {{create-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://co.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/records
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → agile-transformation-metrics-pipeline.yml

Retrieves a specific Confluence page by ID from Accenture knowledge base.

naftiko: '0.5'
info:
  label: Confluence Document Retrieval
  description: Retrieves a specific Confluence page by ID from Accenture knowledge base.
  tags:
  - collaboration
  - confluence
  - documentation
capability:
  exposes:
  - type: mcp
    namespace: knowledge
    port: 8080
    tools:
    - name: get-page
      description: Retrieve Confluence page by ID.
      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://accenture.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_document_retrieval
        method: GET
Open in Framework → View in Fleet → confluence-document-retrieval.yml

Runs API load tests, collects latency metrics from Datadog, compares against SLOs in Grafana, creates tickets for regressions, and publishes report.

naftiko: '0.5'
info:
  label: API Performance Benchmark Pipeline
  description: Runs API load tests, collects latency metrics from Datadog, compares against SLOs in Grafana, creates tickets for regressions, and publishes report.
  tags:
  - performance
  - datadog
  - grafana
  - jira
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: performance
    port: 8080
    tools:
    - name: api_performance_benchmark_pipeline
      description: Orchestrate api performance benchmark pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: run-load-test
        type: call
        call: k6.run-test
        with:
          test_id: '{{resource_id}}'
      - name: get-metrics
        type: call
        call: datadog.get-latency-metrics
        with:
          service: '{{resource_id}}'
      - name: check-slos
        type: call
        call: grafana.get-slo-status
        with:
          service: '{{resource_id}}'
      - name: create-report
        type: call
        call: confluence.create-page
        with:
          space: PERF
          title: 'Benchmark: {{resource_id}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
      header: DD-API-KEY
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: datadog-op
        method: POST
  - type: http
    namespace: grafana
    baseUri: https://accenture-grafana.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_api_key
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: grafana-op
        method: POST
  - type: http
    namespace: jira
    baseUri: https://accenture.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://accenture.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: confluence-op
        method: POST
Open in Framework → View in Fleet → api-performance-benchmark-pipeline.yml

When a qualifying LinkedIn signal occurs, enriches the Salesforce contact record with current profile data, syncs to HubSpot, and alerts the owning business development rep in Microsoft Teams.

naftiko: '0.5'
info:
  label: Sales Lead Enrichment Pipeline
  description: When a qualifying LinkedIn signal occurs, enriches the Salesforce contact record with current profile data, syncs to HubSpot, and alerts the owning business development rep in Microsoft Teams.
  tags:
  - sales
  - crm
  - salesforce
  - hubspot
  - linkedin
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sales-intelligence
    port: 8080
    tools:
    - name: enrich-lead-from-linkedin
      description: Given a LinkedIn member URN and Salesforce contact ID, enrich the Salesforce record, sync to HubSpot, and notify the owning rep.
      inputParameters:
      - name: linkedin_member_urn
        in: body
        type: string
        description: The LinkedIn member URN for the contact.
      - name: salesforce_contact_id
        in: body
        type: string
        description: The Salesforce contact record ID to enrich.
      - name: signal_type
        in: body
        type: string
        description: The LinkedIn signal type (e.g., job_change, content_share).
      - name: rep_upn
        in: body
        type: string
        description: The Microsoft UPN of the owning sales rep.
      steps:
      - name: get-linkedin-profile
        type: call
        call: linkedin.get-profile
        with:
          member_urn: '{{linkedin_member_urn}}'
      - name: update-salesforce
        type: call
        call: salesforce.update-contact
        with:
          contact_id: '{{salesforce_contact_id}}'
          title: '{{get-linkedin-profile.headline}}'
          company: '{{get-linkedin-profile.current_company}}'
          linkedin_url: '{{get-linkedin-profile.profile_url}}'
      - name: sync-hubspot
        type: call
        call: hubspot.update-contact
        with:
          email: '{{update-salesforce.email}}'
          jobtitle: '{{get-linkedin-profile.headline}}'
          company: '{{get-linkedin-profile.current_company}}'
          hs_lead_status: OPEN_DEAL
      - name: alert-rep
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{rep_upn}}'
          text: 'Warm Lead Signal: {{get-linkedin-profile.first_name}} {{get-linkedin-profile.last_name}} | Signal: {{signal_type}} | Title: {{get-linkedin-profile.headline}} | Company: {{get-linkedin-profile.current_company}} | Salesforce updated.'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: profiles
      path: /people/{{member_urn}}
      inputParameters:
      - name: member_urn
        in: path
      operations:
      - name: get-profile
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://accenture.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /sobjects/Contact/{{contact_id}}
      inputParameters:
      - name: contact_id
        in: path
      operations:
      - name: update-contact
        method: PATCH
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /objects/contacts/{{email}}
      inputParameters:
      - name: email
        in: path
      operations:
      - name: update-contact
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sales-lead-enrichment-pipeline.yml

Retrieves APM service health from Datadog for Accenture managed applications.

naftiko: '0.5'
info:
  label: Datadog APM Service Status
  description: Retrieves APM service health from Datadog for Accenture managed applications.
  tags:
  - observability
  - datadog
  - apm
capability:
  exposes:
  - type: mcp
    namespace: observability
    port: 8080
    tools:
    - name: get-service-health
      description: Get service APM status.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The service_name to look up.
      call: datadog.get-service_name
      with:
        service_name: '{{service_name}}'
  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_apm_service_status
        method: GET
Open in Framework → View in Fleet → datadog-apm-service-status.yml

Searches Confluence for knowledge base articles, extracts the top result, and shares it with the requester via Microsoft Teams message.

naftiko: '0.5'
info:
  label: Confluence Knowledge Base Search and Share
  description: Searches Confluence for knowledge base articles, extracts the top result, and shares it with the requester via Microsoft Teams message.
  tags:
  - knowledge-management
  - documentation
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: km-search
    port: 8080
    tools:
    - name: search-and-share-knowledge
      description: Search Confluence for articles matching a query and share the top result via Teams.
      inputParameters:
      - name: query
        in: body
        type: string
        description: The search query string.
      - name: space_key
        in: body
        type: string
        description: Optional Confluence space key to narrow the search.
      - name: requester_upn
        in: body
        type: string
        description: The Microsoft UPN of the person requesting information.
      steps:
      - name: search-articles
        type: call
        call: confluence.search
        with:
          cql: text ~ '{{query}}' and space = '{{space_key}}'
      - name: share-result
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{requester_upn}}'
          text: 'Knowledge Base Result for ''{{query}}'': {{search-articles.results[0].title}} — {{search-articles.results[0].url}} ({{search-articles.total_size}} total results found)'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://accenture.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: search
      path: /search?cql={{cql}}
      inputParameters:
      - name: cql
        in: query
      operations:
      - name: search
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → confluence-knowledge-base-search-and-share.yml

Triggers a Tableau workbook extract refresh and notifies the analytics team in Microsoft Teams when complete. Used by analytics consultants to ensure client dashboards display the latest data.

naftiko: '0.5'
info:
  label: Tableau Dashboard Refresh and Notify
  description: Triggers a Tableau workbook extract refresh and notifies the analytics team in Microsoft Teams when complete. Used by analytics consultants to ensure client dashboards display the latest data.
  tags:
  - analytics
  - bi
  - tableau
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: analytics-tableau
    port: 8080
    tools:
    - name: refresh-workbook-and-notify
      description: Trigger a Tableau workbook extract refresh and notify the analytics team.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: The Tableau site ID.
      - name: workbook_id
        in: body
        type: string
        description: The Tableau workbook ID.
      - name: teams_channel
        in: body
        type: string
        description: The Teams channel for analytics alerts.
      steps:
      - name: trigger-refresh
        type: call
        call: tableau.refresh-workbook
        with:
          site_id: '{{site_id}}'
          workbook_id: '{{workbook_id}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: '{{teams_channel}}'
          text: 'Tableau refresh triggered for workbook {{workbook_id}}. Job ID: {{trigger-refresh.job_id}}. Status: {{trigger-refresh.status}}.'
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://accenture.online.tableau.com/api/3.22
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/{{site_id}}/workbooks/{{workbook_id}}/refresh
      inputParameters:
      - name: site_id
        in: path
      - name: workbook_id
        in: path
      operations:
      - name: refresh-workbook
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/General/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → tableau-dashboard-refresh-and-notify.yml

Searches Splunk for application logs at Accenture managed services environments.

naftiko: '0.5'
info:
  label: Splunk Application Log Search
  description: Searches Splunk for application logs at Accenture managed services environments.
  tags:
  - devops
  - splunk
  - logging
capability:
  exposes:
  - type: mcp
    namespace: logging
    port: 8080
    tools:
    - name: search-app-logs
      description: Search application logs.
      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://accenture-splunk.com/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: splunk_application_log_search
        method: GET
Open in Framework → View in Fleet → splunk-application-log-search.yml

When a GitHub pull request is approved, merges it, triggers an Azure DevOps release pipeline, and posts the deployment status to Microsoft Teams.

naftiko: '0.5'
info:
  label: GitHub Pull Request Merge and Deploy
  description: When a GitHub pull request is approved, merges it, triggers an Azure DevOps release pipeline, and posts the deployment status to Microsoft Teams.
  tags:
  - devops
  - cicd
  - github
  - azure-devops
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: devops-deploy
    port: 8080
    tools:
    - name: merge-and-deploy
      description: Given a GitHub repo and PR number, merge the PR, trigger an Azure DevOps release, and notify the team in Microsoft Teams.
      inputParameters:
      - name: repo_owner
        in: body
        type: string
        description: The GitHub repository owner.
      - name: repo_name
        in: body
        type: string
        description: The GitHub repository name.
      - name: pr_number
        in: body
        type: string
        description: The pull request number.
      - name: azdo_project
        in: body
        type: string
        description: The Azure DevOps project name.
      - name: release_definition_id
        in: body
        type: string
        description: The Azure DevOps release definition ID.
      steps:
      - name: merge-pr
        type: call
        call: github.merge-pr
        with:
          owner: '{{repo_owner}}'
          repo: '{{repo_name}}'
          pull_number: '{{pr_number}}'
          merge_method: squash
      - name: trigger-release
        type: call
        call: azuredevops.create-release
        with:
          project: '{{azdo_project}}'
          definition_id: '{{release_definition_id}}'
          description: 'Automated release from PR #{{pr_number}} merge'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: deployments
          text: 'Deployment triggered: {{repo_owner}}/{{repo_name}} PR #{{pr_number}} merged. Release: {{trigger-release.id}} | Status: {{trigger-release.status}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: pull-requests
      path: /repos/{{owner}}/{{repo}}/pulls/{{pull_number}}/merge
      inputParameters:
      - name: owner
        in: path
      - name: repo
        in: path
      - name: pull_number
        in: path
      operations:
      - name: merge-pr
        method: PUT
  - type: http
    namespace: azuredevops
    baseUri: https://vsrm.dev.azure.com/accenture
    authentication:
      type: basic
      username: ''
      password: $secrets.azuredevops_pat
    resources:
    - name: releases
      path: /{{project}}/_apis/release/releases?api-version=7.0
      inputParameters:
      - name: project
        in: path
      operations:
      - name: create-release
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/General/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → github-pull-request-merge-and-deploy.yml

Retrieves IT asset details from Accenture ServiceNow CMDB.

naftiko: '0.5'
info:
  label: ServiceNow Asset Lookup
  description: Retrieves IT asset details from Accenture ServiceNow CMDB.
  tags:
  - itsm
  - servicenow
  - asset-management
capability:
  exposes:
  - type: mcp
    namespace: itsm
    port: 8080
    tools:
    - name: get-asset
      description: Look up IT asset by tag.
      inputParameters:
      - name: asset_tag
        in: body
        type: string
        description: The asset_tag to look up.
      call: servicenow.get-asset_tag
      with:
        asset_tag: '{{asset_tag}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://accenture.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_asset_lookup
        method: GET
Open in Framework → View in Fleet → servicenow-asset-lookup.yml

Runs automated accessibility scans, collects WCAG violations, creates remediation tasks in Jira, generates audit report in Confluence, and notifies the UX team.

naftiko: '0.5'
info:
  label: Accessibility Audit Pipeline
  description: Runs automated accessibility scans, collects WCAG violations, creates remediation tasks in Jira, generates audit report in Confluence, and notifies the UX team.
  tags:
  - accessibility
  - jira
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: accessibility
    port: 8080
    tools:
    - name: accessibility_audit_pipeline
      description: Orchestrate accessibility audit pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: run-scan
        type: call
        call: axe.scan-urls
        with:
          url_list: '{{resource_id}}'
      - name: analyze-violations
        type: call
        call: snowflake.run-query
        with:
          sql_query: CALL analyze_a11y('{{resource_id}}')
          warehouse: QA_WH
      - name: create-tasks
        type: call
        call: jira.create-issue
        with:
          project: A11Y
          summary: 'WCAG violations: {{resource_id}}'
      - name: notify
        type: call
        call: slack.send-message
        with:
          channel: ux-team
          text: 'Accessibility audit for {{resource_id}}: {{analyze-violations.violation_count}} issues'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://accenture.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://accenture.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → accessibility-audit-pipeline.yml

Triggers a dataset refresh in Power BI and notifies the analytics team in Microsoft Teams when the refresh completes. Used by analytics consultants to ensure dashboards have current data before client presentations.

naftiko: '0.5'
info:
  label: Power BI Report Refresh and Notify
  description: Triggers a dataset refresh in Power BI and notifies the analytics team in Microsoft Teams when the refresh completes. Used by analytics consultants to ensure dashboards have current data before client presentations.
  tags:
  - analytics
  - bi
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: analytics-bi
    port: 8080
    tools:
    - name: refresh-dataset-and-notify
      description: Trigger a Power BI dataset refresh and notify the analytics team in Microsoft Teams.
      inputParameters:
      - name: group_id
        in: body
        type: string
        description: The Power BI workspace (group) ID.
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID.
      - name: teams_channel
        in: body
        type: string
        description: The Microsoft Teams channel for analytics updates.
      steps:
      - name: trigger-refresh
        type: call
        call: powerbi.trigger-refresh
        with:
          group_id: '{{group_id}}'
          dataset_id: '{{dataset_id}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: '{{teams_channel}}'
          text: 'Power BI dataset {{dataset_id}} refresh triggered. Request ID: {{trigger-refresh.request_id}}. Status: {{trigger-refresh.status}}.'
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /groups/{{group_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: group_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/General/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → power-bi-report-refresh-and-notify.yml

Creates a Microsoft Teams meeting, adds participants from Workday org data, and sends a calendar invite via Microsoft Outlook. Used for automated client meeting scheduling.

naftiko: '0.5'
info:
  label: Microsoft Teams Meeting Scheduler
  description: Creates a Microsoft Teams meeting, adds participants from Workday org data, and sends a calendar invite via Microsoft Outlook. Used for automated client meeting scheduling.
  tags:
  - collaboration
  - scheduling
  - microsoft-teams
  - workday
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: collab-scheduling
    port: 8080
    tools:
    - name: schedule-client-meeting
      description: Given a list of participant worker IDs, create a Teams meeting and send Outlook invites.
      inputParameters:
      - name: meeting_subject
        in: body
        type: string
        description: The meeting subject line.
      - name: start_time
        in: body
        type: string
        description: Meeting start time (ISO 8601).
      - name: end_time
        in: body
        type: string
        description: Meeting end time (ISO 8601).
      - name: organizer_worker_id
        in: body
        type: string
        description: The Workday worker ID of the organizer.
      - name: participant_emails
        in: body
        type: string
        description: Comma-separated participant email addresses.
      steps:
      - name: get-organizer
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{organizer_worker_id}}'
      - name: create-meeting
        type: call
        call: msteams.create-online-meeting
        with:
          subject: '{{meeting_subject}}'
          startDateTime: '{{start_time}}'
          endDateTime: '{{end_time}}'
          organizer: '{{get-organizer.work_email}}'
      - name: send-invite
        type: call
        call: outlook.send-mail
        with:
          to: '{{participant_emails}}'
          subject: 'Meeting Invite: {{meeting_subject}}'
          body: 'You are invited to: {{meeting_subject}}

            Time: {{start_time}} - {{end_time}}

            Join link: {{create-meeting.join_url}}'
  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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: online-meetings
      path: /users/{{organizer}}/onlineMeetings
      inputParameters:
      - name: organizer
        in: path
      operations:
      - name: create-online-meeting
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → microsoft-teams-meeting-scheduler.yml

Executes a SQL query against Snowflake, exports results to Amazon S3, and notifies the data team in Microsoft Teams with the export location.

naftiko: '0.5'
info:
  label: Snowflake Query and Export Pipeline
  description: Executes a SQL query against Snowflake, exports results to Amazon S3, and notifies the data team in Microsoft Teams with the export location.
  tags:
  - data
  - analytics
  - snowflake
  - amazon-s3
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: data-warehouse
    port: 8080
    tools:
    - name: run-snowflake-query-and-export
      description: Execute a SQL query against Snowflake, export results to S3, and notify the team.
      inputParameters:
      - name: warehouse
        in: body
        type: string
        description: The Snowflake warehouse name.
      - name: database
        in: body
        type: string
        description: The target database.
      - name: sql_statement
        in: body
        type: string
        description: The SQL statement to execute.
      - name: s3_bucket
        in: body
        type: string
        description: The S3 bucket for the export.
      - name: teams_channel
        in: body
        type: string
        description: The Teams channel for data notifications.
      steps:
      - name: execute-query
        type: call
        call: snowflake.execute-statement
        with:
          warehouse: '{{warehouse}}'
          database: '{{database}}'
          statement: '{{sql_statement}}'
      - name: export-to-s3
        type: call
        call: s3.put-object
        with:
          bucket: '{{s3_bucket}}'
          key: exports/{{database}}/{{execute-query.statement_handle}}.csv
          body: '{{execute-query.result_csv}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: '{{teams_channel}}'
          text: 'Snowflake export complete. Query handle: {{execute-query.statement_handle}}. Rows: {{execute-query.row_count}}. S3: s3://{{s3_bucket}}/exports/{{database}}/{{execute-query.statement_handle}}.csv'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://accenture.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: s3
    baseUri: https://s3.amazonaws.com
    authentication:
      type: aws-sigv4
      access_key: $secrets.aws_access_key
      secret_key: $secrets.aws_secret_key
    resources:
    - name: objects
      path: /{{bucket}}/{{key}}
      inputParameters:
      - name: bucket
        in: path
      - name: key
        in: path
      operations:
      - name: put-object
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/General/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → snowflake-query-and-export-pipeline.yml

Looks up table metadata from Accenture Snowflake data catalog.

naftiko: '0.5'
info:
  label: Snowflake Data Catalog Lookup
  description: Looks up table metadata from Accenture Snowflake data catalog.
  tags:
  - data
  - snowflake
  - data-catalog
capability:
  exposes:
  - type: mcp
    namespace: data-mgmt
    port: 8080
    tools:
    - name: get-table-info
      description: Look up table metadata.
      inputParameters:
      - name: table_name
        in: body
        type: string
        description: The table_name to look up.
      call: snowflake.get-table_name
      with:
        table_name: '{{table_name}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://accenture.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake_data_catalog_lookup
        method: GET
Open in Framework → View in Fleet → snowflake-data-catalog-lookup.yml

Queries the Jira backlog for unresolved items in an Accenture delivery project.

naftiko: '0.5'
info:
  label: Jira Backlog Query
  description: Queries the Jira backlog for unresolved items in an Accenture delivery project.
  tags:
  - agile
  - jira
  - backlog
capability:
  exposes:
  - type: mcp
    namespace: delivery
    port: 8080
    tools:
    - name: query-backlog
      description: Get backlog items by project.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The project_key to look up.
      call: jira.get-project_key
      with:
        project_key: '{{project_key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://accenture.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_backlog_query
        method: GET
Open in Framework → View in Fleet → jira-backlog-query.yml

Scans on-prem infrastructure, assesses cloud readiness in Snowflake, generates migration plan in Confluence, creates tasks in Jira, and notifies the migration team.

naftiko: '0.5'
info:
  label: Cloud Migration Assessment Pipeline
  description: Scans on-prem infrastructure, assesses cloud readiness in Snowflake, generates migration plan in Confluence, creates tasks in Jira, and notifies the migration team.
  tags:
  - cloud-migration
  - snowflake
  - confluence
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cloud-migration
    port: 8080
    tools:
    - name: cloud_migration_assessment_pipeline
      description: Orchestrate cloud migration assessment pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: scan-infra
        type: call
        call: servicenow.get-cmdb-assets
        with:
          filter: '{{resource_id}}'
      - name: assess-readiness
        type: call
        call: snowflake.run-query
        with:
          sql_query: CALL assess_cloud_readiness('{{resource_id}}')
          warehouse: MIGRATION_WH
      - name: create-plan
        type: call
        call: confluence.create-page
        with:
          space: MIGRATION
          title: 'Migration plan: {{resource_id}}'
      - name: create-tasks
        type: call
        call: jira.create-issue
        with:
          project: MIG
          summary: 'Migration: {{resource_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://accenture.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://accenture.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://accenture.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://accenture.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
Open in Framework → View in Fleet → cloud-migration-assessment-pipeline.yml

Retrieves work item details from Azure DevOps for Accenture project management.

naftiko: '0.5'
info:
  label: Azure DevOps Work Item Lookup
  description: Retrieves work item details from Azure DevOps for Accenture project management.
  tags:
  - project-management
  - azure-devops
  - work-items
capability:
  exposes:
  - type: mcp
    namespace: project-mgmt
    port: 8080
    tools:
    - name: get-work-item
      description: Look up work item by ID.
      inputParameters:
      - name: work_item_id
        in: body
        type: string
        description: The work_item_id to look up.
      call: azure-devops.get-work_item_id
      with:
        work_item_id: '{{work_item_id}}'
  consumes:
  - type: http
    namespace: azuredevops
    baseUri: https://dev.azure.com/accenture/_apis
    authentication:
      type: bearer
      token: $secrets.azuredevops_pat
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: azure_devops_work_item_lookup
        method: GET
Open in Framework → View in Fleet → azure-devops-work-item-lookup.yml

On new consultant creation in Workday, provisions a SharePoint project folder, creates a ServiceNow onboarding request, and sends a Microsoft Teams welcome message with first-day logistics.

naftiko: '0.5'
info:
  label: Consultant Onboarding Orchestrator
  description: On new consultant creation in Workday, provisions a SharePoint project folder, creates a ServiceNow onboarding request, and sends a Microsoft Teams welcome message with first-day logistics.
  tags:
  - hr
  - onboarding
  - workday
  - servicenow
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-onboarding
    port: 8080
    tools:
    - name: trigger-consultant-onboarding
      description: Given a Workday employee ID and project assignment, orchestrate the full onboarding sequence across ServiceNow, SharePoint, and Microsoft Teams.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: The Workday worker ID for the new consultant.
      - name: start_date
        in: body
        type: string
        description: The consultant start date in YYYY-MM-DD format.
      - name: project_code
        in: body
        type: string
        description: The engagement or project code the consultant is joining.
      steps:
      - name: get-consultant
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: open-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Consultant onboarding: {{get-consultant.full_name}} — {{project_code}}'
          category: hr_onboarding
          assigned_group: IT_Onboarding
          description: Onboarding for {{get-consultant.full_name}} starting {{start_date}} on project {{project_code}}.
      - name: provision-folder
        type: call
        call: sharepoint.create-folder
        with:
          site_id: engagement_sites
          folder_path: Onboarding/{{get-consultant.full_name}}_{{project_code}}
      - name: send-welcome
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-consultant.work_email}}'
          text: Welcome to Accenture, {{get-consultant.first_name}}! Your onboarding ticket is {{open-ticket.number}}. Project docs are at {{provision-folder.url}}. Your project code is {{project_code}}.
  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://accenture.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → consultant-onboarding-orchestrator.yml

Executes a Splunk search query, creates a Jira issue if critical events are found, and notifies the security team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Splunk Log Search and Alert Pipeline
  description: Executes a Splunk search query, creates a Jira issue if critical events are found, and notifies the security team in Microsoft Teams.
  tags:
  - security
  - observability
  - splunk
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: security-logs
    port: 8080
    tools:
    - name: search-and-alert-logs
      description: Execute a Splunk search, create a Jira issue for findings, and alert the security team.
      inputParameters:
      - name: search_query
        in: body
        type: string
        description: The Splunk SPL search query.
      - name: earliest_time
        in: body
        type: string
        description: Search window start (e.g., -24h).
      - name: latest_time
        in: body
        type: string
        description: Search window end (e.g., now).
      - name: jira_project_key
        in: body
        type: string
        description: The Jira project key for security issues.
      - name: teams_channel
        in: body
        type: string
        description: The Teams channel for security alerts.
      steps:
      - name: run-search
        type: call
        call: splunk.create-search
        with:
          search: '{{search_query}}'
          earliest_time: '{{earliest_time}}'
          latest_time: '{{latest_time}}'
      - name: create-issue
        type: call
        call: jira.create-issue
        with:
          project_key: '{{jira_project_key}}'
          issuetype: Bug
          summary: '[Security] Splunk alert: {{run-search.event_count}} events found'
          description: 'Search: {{search_query}}

            Time range: {{earliest_time}} to {{latest_time}}

            Events found: {{run-search.event_count}}

            Search ID: {{run-search.sid}}'
      - name: notify-security
        type: call
        call: msteams.send-message
        with:
          channel: '{{teams_channel}}'
          text: 'Security Alert: Splunk found {{run-search.event_count}} events. Jira: {{create-issue.key}}. Search ID: {{run-search.sid}}.'
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://accenture-splunk.splunkcloud.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: searches
      path: /search/jobs
      operations:
      - name: create-search
        method: POST
  - type: http
    namespace: jira
    baseUri: https://accenture.atlassian.net/rest/api/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: /teams/{{channel}}/channels/General/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → splunk-log-search-and-alert-pipeline.yml

Retrieves client account details from Accenture Salesforce instance.

naftiko: '0.5'
info:
  label: Salesforce Account Lookup
  description: Retrieves client account details from Accenture Salesforce instance.
  tags:
  - crm
  - salesforce
  - accounts
capability:
  exposes:
  - type: mcp
    namespace: crm
    port: 8080
    tools:
    - name: get-account
      description: Look up Salesforce account by ID.
      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://accenture.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_lookup
        method: GET
Open in Framework → View in Fleet → salesforce-account-lookup.yml

Plans data migration, executes extraction, validates in Snowflake, loads to target system, and notifies migration team.

naftiko: '0.5'
info:
  label: Client Data Migration Orchestrator
  description: Plans data migration, executes extraction, validates in Snowflake, loads to target system, and notifies migration team.
  tags:
  - migration
  - data
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: migration
    port: 8080
    tools:
    - name: client_data_migration_orchestrator
      description: Orchestrate client data migration orchestrator workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: fetch-data
        type: call
        call: primary.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-data
        type: call
        call: processor.transform
        with:
          input: '{{fetch-data.result}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: records
          data: '{{process-data.output}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: operations
          text: 'Workflow {{resource_id}} complete. Record: {{create-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://co.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/records
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → client-data-migration-orchestrator.yml

Fetches a ServiceNow incident by number and returns state, priority, assigned group, and short description. Used by project managers to check incident progress.

naftiko: '0.5'
info:
  label: ServiceNow Incident Status
  description: Fetches a ServiceNow incident by number and returns state, priority, assigned group, and short description. Used by project managers to check incident progress.
  tags:
  - operations
  - itsm
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: itsm-ops
    port: 8080
    tools:
    - name: get-incident-status
      description: Look up a ServiceNow incident by number. Returns state, priority, assigned group, and short description.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number (e.g., INC0012345).
      call: servicenow.get-incident
      with:
        incident_number: '{{incident_number}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.result.state
      - name: priority
        type: string
        mapping: $.result.priority
      - name: assigned_group
        type: string
        mapping: $.result.assignment_group.display_value
      - name: short_description
        type: string
        mapping: $.result.short_description
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://accenture.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident?sysparm_query=number={{incident_number}}
      inputParameters:
      - name: incident_number
        in: query
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → servicenow-incident-status.yml

Creates a Google Forms survey for client feedback, distributes via MailChimp email campaign, and logs the campaign in Salesforce for account tracking.

naftiko: '0.5'
info:
  label: Client Satisfaction Survey Pipeline
  description: Creates a Google Forms survey for client feedback, distributes via MailChimp email campaign, and logs the campaign in Salesforce for account tracking.
  tags:
  - client-experience
  - survey
  - google-forms
  - mailchimp
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: cx-survey
    port: 8080
    tools:
    - name: launch-satisfaction-survey
      description: Given a Salesforce opportunity ID and survey template, create a Google Form, send via MailChimp, and log in Salesforce.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID.
      - name: survey_title
        in: body
        type: string
        description: The survey title.
      - name: recipient_list_id
        in: body
        type: string
        description: The MailChimp audience list ID.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: create-survey
        type: call
        call: googleforms.create-form
        with:
          title: '{{survey_title}} — {{get-opportunity.account_name}}'
      - name: send-campaign
        type: call
        call: mailchimp.create-campaign
        with:
          list_id: '{{recipient_list_id}}'
          subject: 'We value your feedback: {{survey_title}}'
          body: 'Please take a moment to share your feedback: {{create-survey.responder_url}}'
      - name: log-activity
        type: call
        call: salesforce.create-task
        with:
          opportunity_id: '{{opportunity_id}}'
          subject: 'Client satisfaction survey sent: {{survey_title}}'
          description: 'Survey URL: {{create-survey.responder_url}}. MailChimp campaign: {{send-campaign.campaign_id}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://accenture.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
    - name: tasks
      path: /sobjects/Task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: googleforms
    baseUri: https://forms.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_forms_token
    resources:
    - name: forms
      path: /forms
      operations:
      - name: create-form
        method: POST
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: basic
      username: anystring
      password: $secrets.mailchimp_api_key
    resources:
    - name: campaigns
      path: /campaigns
      operations:
      - name: create-campaign
        method: POST
Open in Framework → View in Fleet → client-satisfaction-survey-pipeline.yml

Retrieves a Workday employee record by worker ID. Returns name, title, department, manager, and location for talent management queries.

naftiko: '0.5'
info:
  label: Workday Employee Directory Lookup
  description: Retrieves a Workday employee record by worker ID. Returns name, title, department, manager, and location for talent management queries.
  tags:
  - hr
  - talent
  - workday
capability:
  exposes:
  - type: mcp
    namespace: hr-directory
    port: 8080
    tools:
    - name: get-employee
      description: Look up a Workday employee by worker ID. Returns name, title, department, manager, and office location.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: The Workday worker ID.
      call: workday.get-worker
      with:
        worker_id: '{{worker_id}}'
      outputParameters:
      - name: full_name
        type: string
        mapping: $.full_name
      - name: title
        type: string
        mapping: $.business_title
      - name: department
        type: string
        mapping: $.supervisory_organization
      - name: manager
        type: string
        mapping: $.manager.full_name
      - name: location
        type: string
        mapping: $.primary_work_location
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
Open in Framework → View in Fleet → workday-employee-directory-lookup.yml

Receives escalations from Salesforce, creates response teams, tracks resolution in ServiceNow, and notifies account leadership.

naftiko: '0.5'
info:
  label: Client Escalation Management Pipeline
  description: Receives escalations from Salesforce, creates response teams, tracks resolution in ServiceNow, and notifies account leadership.
  tags:
  - client-management
  - escalation
  - salesforce
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: client-management
    port: 8080
    tools:
    - name: client_escalation_management_pipeline
      description: Orchestrate client escalation management pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: fetch-data
        type: call
        call: primary.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-data
        type: call
        call: processor.transform
        with:
          input: '{{fetch-data.result}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: records
          data: '{{process-data.output}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: operations
          text: 'Workflow {{resource_id}} complete. Record: {{create-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://co.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/records
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → client-escalation-management-pipeline.yml

Creates an Adobe Campaign workflow, sets up Google Tag Manager tracking, configures Salesforce Marketing Cloud email send, and posts the launch status to Microsoft Teams.

naftiko: '0.5'
info:
  label: Marketing Campaign Launch Orchestrator
  description: Creates an Adobe Campaign workflow, sets up Google Tag Manager tracking, configures Salesforce Marketing Cloud email send, and posts the launch status to Microsoft Teams.
  tags:
  - marketing
  - campaign
  - adobe-campaign
  - google-tag-manager
  - salesforce-marketing-cloud
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: marketing-launch
    port: 8080
    tools:
    - name: launch-marketing-campaign
      description: Given campaign details, orchestrate the launch across Adobe Campaign, Google Tag Manager, Salesforce Marketing Cloud, and notify via Teams.
      inputParameters:
      - name: campaign_name
        in: body
        type: string
        description: The marketing campaign name.
      - name: target_audience
        in: body
        type: string
        description: The target audience segment identifier.
      - name: gtm_container_id
        in: body
        type: string
        description: The Google Tag Manager container ID.
      - name: teams_channel
        in: body
        type: string
        description: The Microsoft Teams channel for marketing updates.
      steps:
      - name: create-adobe-workflow
        type: call
        call: adobecampaign.create-workflow
        with:
          name: '{{campaign_name}}'
          audience_segment: '{{target_audience}}'
      - name: create-gtm-tag
        type: call
        call: gtm.create-tag
        with:
          container_id: '{{gtm_container_id}}'
          tag_name: '{{campaign_name}}_tracking'
          event_name: campaign_{{campaign_name}}
      - name: create-sfmc-send
        type: call
        call: sfmc.create-email-send
        with:
          campaign_name: '{{campaign_name}}'
          audience: '{{target_audience}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: '{{teams_channel}}'
          text: 'Campaign Launched: {{campaign_name}}

            - Adobe workflow: {{create-adobe-workflow.workflow_id}}

            - GTM tag: {{create-gtm-tag.tag_id}}

            - SFMC send: {{create-sfmc-send.send_id}}'
  consumes:
  - type: http
    namespace: adobecampaign
    baseUri: https://mc.adobe.io/accenture/campaign
    authentication:
      type: bearer
      token: $secrets.adobe_campaign_token
    inputParameters:
    - name: x-api-key
      in: header
      value: $secrets.adobe_api_key
    resources:
    - name: workflows
      path: /workflow/create
      operations:
      - name: create-workflow
        method: POST
  - type: http
    namespace: gtm
    baseUri: https://www.googleapis.com/tagmanager/v2
    authentication:
      type: bearer
      token: $secrets.google_tagmanager_token
    resources:
    - name: tags
      path: /accounts/accenture/containers/{{container_id}}/workspaces/default/tags
      inputParameters:
      - name: container_id
        in: path
      operations:
      - name: create-tag
        method: POST
  - type: http
    namespace: sfmc
    baseUri: https://accenture.rest.marketingcloudapis.com/messaging/v1
    authentication:
      type: bearer
      token: $secrets.sfmc_token
    resources:
    - name: email-sends
      path: /messageDefinitionSends
      operations:
      - name: create-email-send
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/General/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → marketing-campaign-launch-orchestrator.yml

Aggregates service health from Datadog, SLA metrics from ServiceNow, generates reports in Power BI, and notifies delivery leads.

naftiko: '0.5'
info:
  label: Managed Services Health Dashboard
  description: Aggregates service health from Datadog, SLA metrics from ServiceNow, generates reports in Power BI, and notifies delivery leads.
  tags:
  - managed-services
  - datadog
  - servicenow
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: managed-services
    port: 8080
    tools:
    - name: managed_services_health_dashboard
      description: Orchestrate managed services health dashboard workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: fetch-data
        type: call
        call: primary.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-data
        type: call
        call: processor.transform
        with:
          input: '{{fetch-data.result}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: records
          data: '{{process-data.output}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: operations
          text: 'Workflow {{resource_id}} complete. Record: {{create-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://co.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/records
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → managed-services-health-dashboard.yml

When a new Salesforce opportunity reaches Closed Won, creates a Jira project board, provisions a Confluence space, opens a Microsoft Planner plan, and notifies the delivery lead in Microsoft Teams.

naftiko: '0.5'
info:
  label: Client Engagement Kickoff Pipeline
  description: When a new Salesforce opportunity reaches Closed Won, creates a Jira project board, provisions a Confluence space, opens a Microsoft Planner plan, and notifies the delivery lead in Microsoft Teams.
  tags:
  - delivery
  - project-management
  - salesforce
  - jira
  - confluence
  - microsoft-planner
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: delivery-kickoff
    port: 8080
    tools:
    - name: initiate-engagement-kickoff
      description: Given a Salesforce opportunity ID and delivery lead email, set up Jira, Confluence, and Planner for the new engagement.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity record ID.
      - name: delivery_lead_upn
        in: body
        type: string
        description: The Microsoft UPN of the delivery lead.
      - name: engagement_name
        in: body
        type: string
        description: The name of the client engagement.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: create-jira-project
        type: call
        call: jira.create-project
        with:
          key: '{{engagement_name}}'
          name: '{{get-opportunity.account_name}} — {{engagement_name}}'
          project_type: software
      - name: create-confluence-space
        type: call
        call: confluence.create-space
        with:
          key: '{{engagement_name}}'
          name: '{{get-opportunity.account_name}} — {{engagement_name}}'
      - name: create-planner
        type: call
        call: planner.create-plan
        with:
          title: '{{engagement_name}} Delivery Plan'
          owner: '{{delivery_lead_upn}}'
      - name: notify-lead
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{delivery_lead_upn}}'
          text: 'Engagement Kickoff: {{engagement_name}} for {{get-opportunity.account_name}}. Jira: {{create-jira-project.url}} | Confluence: {{create-confluence-space.url}} | Planner: {{create-planner.url}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://accenture.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
  - type: http
    namespace: jira
    baseUri: https://accenture.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: projects
      path: /project
      operations:
      - name: create-project
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://accenture.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: spaces
      path: /space
      operations:
      - name: create-space
        method: POST
  - type: http
    namespace: planner
    baseUri: https://graph.microsoft.com/v1.0/planner
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: plans
      path: /plans
      operations:
      - name: create-plan
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → client-engagement-kickoff-pipeline.yml

Receives invoice dispute from client portal, validates against SAP records, creates resolution workflow in ServiceNow, notifies finance, and updates Salesforce.

naftiko: '0.5'
info:
  label: Invoice Dispute Resolution Pipeline
  description: Receives invoice dispute from client portal, validates against SAP records, creates resolution workflow in ServiceNow, notifies finance, and updates Salesforce.
  tags:
  - finance
  - sap
  - servicenow
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finance
    port: 8080
    tools:
    - name: invoice_dispute_resolution_pipeline
      description: Orchestrate invoice dispute resolution pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-dispute
        type: call
        call: salesforce.get-case
        with:
          case_id: '{{resource_id}}'
      - name: validate-invoice
        type: call
        call: sap.get-invoice
        with:
          invoice_id: '{{get-dispute.invoice_id}}'
      - name: create-resolution
        type: call
        call: servicenow.create-request
        with:
          short_description: 'Invoice dispute: {{resource_id}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: finance-ops
          text: 'Dispute {{resource_id}} for invoice {{get-dispute.invoice_id}}. Resolution: {{create-resolution.number}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://accenture.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: sap
    baseUri: https://accenture-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://accenture.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-op
        method: POST
Open in Framework → View in Fleet → invoice-dispute-resolution-pipeline.yml

Extracts project learnings from Confluence, classifies using AI, tags in the knowledge base, creates reusable assets, and notifies the CoE team in Slack.

naftiko: '0.5'
info:
  label: Knowledge Harvesting Pipeline
  description: Extracts project learnings from Confluence, classifies using AI, tags in the knowledge base, creates reusable assets, and notifies the CoE team in Slack.
  tags:
  - knowledge-mgmt
  - confluence
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: knowledge-mgmt
    port: 8080
    tools:
    - name: knowledge_harvesting_pipeline
      description: Orchestrate knowledge harvesting pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: extract-learnings
        type: call
        call: confluence.search-pages
        with:
          query: lessons learned {{resource_id}}
      - name: classify
        type: call
        call: snowflake.run-query
        with:
          sql_query: CALL classify_knowledge('{{resource_id}}')
          warehouse: KM_WH
      - name: tag-assets
        type: call
        call: confluence.update-labels
        with:
          page_ids: '{{extract-learnings.page_ids}}'
          labels: '{{classify.tags}}'
      - name: notify
        type: call
        call: slack.send-message
        with:
          channel: knowledge-coe
          text: 'Knowledge harvested for {{resource_id}}: {{extract-learnings.count}} items classified'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://accenture.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://accenture.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → knowledge-harvesting-pipeline.yml

Pulls client requirements from Salesforce, retrieves templates from SharePoint, generates cost estimates from SAP, assembles in Confluence, and notifies the bid team.

naftiko: '0.5'
info:
  label: Proposal Generation Orchestrator
  description: Pulls client requirements from Salesforce, retrieves templates from SharePoint, generates cost estimates from SAP, assembles in Confluence, and notifies the bid team.
  tags:
  - sales
  - salesforce
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sales
    port: 8080
    tools:
    - name: proposal_generation_orchestrator
      description: Orchestrate proposal generation orchestrator workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-requirements
        type: call
        call: salesforce.get-opportunity
        with:
          opp_id: '{{resource_id}}'
      - name: get-template
        type: call
        call: sharepoint.get-template
        with:
          template_type: proposal
      - name: create-proposal
        type: call
        call: confluence.create-page
        with:
          space: PROPOSALS
          title: 'Proposal: {{get-requirements.name}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: bid-team
          text: 'Proposal draft created for {{resource_id}}: {{create-proposal.url}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://accenture.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: confluence
    baseUri: https://accenture.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-op
        method: POST
Open in Framework → View in Fleet → proposal-generation-orchestrator.yml

Runs data quality rules in Snowflake, logs results in Grafana, creates alerts for violations in PagerDuty, and publishes scorecard to Confluence.

naftiko: '0.5'
info:
  label: Data Quality Monitoring Pipeline
  description: Runs data quality rules in Snowflake, logs results in Grafana, creates alerts for violations in PagerDuty, and publishes scorecard to Confluence.
  tags:
  - data-quality
  - snowflake
  - grafana
  - pagerduty
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: data_quality_monitoring_pipeline
      description: Orchestrate data quality monitoring pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: run-dq-rules
        type: call
        call: snowflake.run-query
        with:
          sql_query: CALL run_dq_checks('{{resource_id}}')
          warehouse: DQ_WH
      - name: log-metrics
        type: call
        call: grafana.push-metrics
        with:
          dashboard_uid: data-quality
          scores: '{{run-dq-rules.scores}}'
      - name: create-alerts
        type: call
        call: pagerduty.create-incident
        with:
          title: 'DQ violation: {{resource_id}}'
          severity: '{{run-dq-rules.severity}}'
      - name: update-scorecard
        type: call
        call: confluence.update-page
        with:
          page_id: dq_scorecard
          content: '{{run-dq-rules.summary}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://accenture.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: grafana
    baseUri: https://accenture-grafana.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_api_key
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: grafana-op
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: pagerduty-op
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://accenture.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: confluence-op
        method: POST
Open in Framework → View in Fleet → data-quality-monitoring-pipeline.yml

Retrieves a Jira issue by key and returns summary, status, assignee, and priority. Used by project managers to quickly check issue status.

naftiko: '0.5'
info:
  label: Jira Issue Lookup
  description: Retrieves a Jira issue by key and returns summary, status, assignee, and priority. Used by project managers to quickly check issue status.
  tags:
  - project-management
  - agile
  - jira
capability:
  exposes:
  - type: mcp
    namespace: pm-agile
    port: 8080
    tools:
    - name: get-jira-issue
      description: Look up a Jira issue by key. Returns summary, status, assignee, and priority.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: The Jira issue key (e.g., ENG-1234).
      call: jira.get-issue
      with:
        issue_key: '{{issue_key}}'
      outputParameters:
      - name: summary
        type: string
        mapping: $.fields.summary
      - name: status
        type: string
        mapping: $.fields.status.name
      - name: assignee
        type: string
        mapping: $.fields.assignee.displayName
      - name: priority
        type: string
        mapping: $.fields.priority.name
  consumes:
  - type: http
    namespace: jira
    baseUri: https://accenture.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-issue-lookup.yml

Creates a Grafana dashboard snapshot for sharing with client stakeholders. Used by SRE consultants to produce point-in-time observability views.

naftiko: '0.5'
info:
  label: Grafana Dashboard Snapshot
  description: Creates a Grafana dashboard snapshot for sharing with client stakeholders. Used by SRE consultants to produce point-in-time observability views.
  tags:
  - observability
  - monitoring
  - grafana
capability:
  exposes:
  - type: mcp
    namespace: observability-dashboards
    port: 8080
    tools:
    - name: create-dashboard-snapshot
      description: Create a Grafana dashboard snapshot by dashboard UID.
      inputParameters:
      - name: dashboard_uid
        in: body
        type: string
        description: The Grafana dashboard UID.
      - name: expires_seconds
        in: body
        type: number
        description: Snapshot expiry in seconds.
      call: grafana.create-snapshot
      with:
        dashboard_uid: '{{dashboard_uid}}'
        expires: '{{expires_seconds}}'
  consumes:
  - type: http
    namespace: grafana
    baseUri: https://accenture.grafana.net/api
    authentication:
      type: bearer
      token: $secrets.grafana_token
    resources:
    - name: snapshots
      path: /snapshots
      operations:
      - name: create-snapshot
        method: POST
Open in Framework → View in Fleet → grafana-dashboard-snapshot.yml

Triggers an Informatica data quality job, fetches results, and creates a Jira task for any data quality exceptions that need manual remediation.

naftiko: '0.5'
info:
  label: Informatica Data Quality Pipeline
  description: Triggers an Informatica data quality job, fetches results, and creates a Jira task for any data quality exceptions that need manual remediation.
  tags:
  - data
  - data-quality
  - informatica
  - jira
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: run-data-quality-check
      description: Trigger an Informatica DQ job and create Jira tasks for quality exceptions.
      inputParameters:
      - name: job_name
        in: body
        type: string
        description: The Informatica job name.
      - name: connection_name
        in: body
        type: string
        description: The Informatica connection to use.
      - name: jira_project_key
        in: body
        type: string
        description: The Jira project key for data quality issues.
      steps:
      - name: trigger-job
        type: call
        call: informatica.start-job
        with:
          job_name: '{{job_name}}'
          connection: '{{connection_name}}'
      - name: create-dq-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: '{{jira_project_key}}'
          issuetype: Task
          summary: '[Data Quality] Exceptions in {{job_name}}'
          description: 'Informatica job {{trigger-job.job_id}} completed. Status: {{trigger-job.status}}. Exception count: {{trigger-job.exception_count}}. Review results at {{trigger-job.results_url}}.'
  consumes:
  - type: http
    namespace: informatica
    baseUri: https://dm-us.informaticacloud.com/saas/api/v2
    authentication:
      type: bearer
      token: $secrets.informatica_token
    resources:
    - name: jobs
      path: /job
      operations:
      - name: start-job
        method: POST
  - type: http
    namespace: jira
    baseUri: https://accenture.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → informatica-data-quality-pipeline.yml

Fetches an Adobe Analytics campaign performance report, uploads the summary to Google Sheets, and notifies the marketing team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Adobe Analytics Campaign Report and Distribution
  description: Fetches an Adobe Analytics campaign performance report, uploads the summary to Google Sheets, and notifies the marketing team in Microsoft Teams.
  tags:
  - marketing
  - analytics
  - adobe-analytics
  - google-sheets
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: marketing-adobe
    port: 8080
    tools:
    - name: get-campaign-report-and-distribute
      description: Fetch an Adobe Analytics report, push to Google Sheets, and notify the team.
      inputParameters:
      - name: report_suite_id
        in: body
        type: string
        description: The Adobe Analytics report suite ID.
      - name: start_date
        in: body
        type: string
        description: Report start date (YYYY-MM-DD).
      - name: end_date
        in: body
        type: string
        description: Report end date (YYYY-MM-DD).
      - name: spreadsheet_id
        in: body
        type: string
        description: The Google Sheets spreadsheet ID.
      - name: teams_channel
        in: body
        type: string
        description: The Teams channel for campaign updates.
      steps:
      - name: get-report
        type: call
        call: adobe.get-report
        with:
          rsid: '{{report_suite_id}}'
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: update-sheet
        type: call
        call: googlesheets.update-values
        with:
          spreadsheet_id: '{{spreadsheet_id}}'
          range: CampaignData!A1
          values: '{{get-report.rows}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: '{{teams_channel}}'
          text: 'Adobe Analytics Report ({{start_date}} - {{end_date}}): {{get-report.total_visits}} visits, {{get-report.total_conversions}} conversions. Spreadsheet updated: https://docs.google.com/spreadsheets/d/{{spreadsheet_id}}'
  consumes:
  - type: http
    namespace: adobe
    baseUri: https://analytics.adobe.io/api
    authentication:
      type: bearer
      token: $secrets.adobe_analytics_token
    inputParameters:
    - name: x-api-key
      in: header
      value: $secrets.adobe_api_key
    resources:
    - name: reports
      path: /{{rsid}}/reports
      inputParameters:
      - name: rsid
        in: path
      operations:
      - name: get-report
        method: POST
  - 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-values
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/General/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → adobe-analytics-campaign-report-and-distribution.yml

Runs vulnerability scans, checks compliance posture in Datadog, creates remediation tickets in Jira, updates compliance dashboard, and notifies security team.

naftiko: '0.5'
info:
  label: Security Compliance Scan Pipeline
  description: Runs vulnerability scans, checks compliance posture in Datadog, creates remediation tickets in Jira, updates compliance dashboard, and notifies security team.
  tags:
  - security
  - compliance
  - datadog
  - jira
  - grafana
capability:
  exposes:
  - type: mcp
    namespace: security
    port: 8080
    tools:
    - name: security_compliance_scan_pipeline
      description: Orchestrate security compliance scan pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: run-scan
        type: call
        call: qualys.launch-scan
        with:
          target: '{{resource_id}}'
      - name: check-compliance
        type: call
        call: datadog.get-compliance-status
        with:
          service: '{{resource_id}}'
      - name: create-tickets
        type: call
        call: jira.create-issue
        with:
          project: SEC
          summary: 'Compliance: {{resource_id}}'
      - name: update-dashboard
        type: call
        call: grafana.annotate
        with:
          dashboard_uid: compliance
          text: 'Scan: {{resource_id}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
      header: DD-API-KEY
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: datadog-op
        method: POST
  - type: http
    namespace: jira
    baseUri: https://accenture.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: grafana
    baseUri: https://accenture-grafana.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_api_key
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: grafana-op
        method: POST
Open in Framework → View in Fleet → security-compliance-scan-pipeline.yml

Tracks bench consultants in Workday, matches to open requirements from Salesforce, creates proposals, and notifies resource managers.

naftiko: '0.5'
info:
  label: Resource Bench Management Pipeline
  description: Tracks bench consultants in Workday, matches to open requirements from Salesforce, creates proposals, and notifies resource managers.
  tags:
  - workforce
  - bench
  - workday
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: workforce
    port: 8080
    tools:
    - name: resource_bench_management_pipeline
      description: Orchestrate resource bench management pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: fetch-data
        type: call
        call: primary.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-data
        type: call
        call: processor.transform
        with:
          input: '{{fetch-data.result}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: records
          data: '{{process-data.output}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: operations
          text: 'Workflow {{resource_id}} complete. Record: {{create-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://co.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/records
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → resource-bench-management-pipeline.yml

On a protected-branch pipeline failure in Azure DevOps, creates a Datadog event, opens a Jira bug, and alerts the engineering channel in Microsoft Teams.

naftiko: '0.5'
info:
  label: CI/CD Failure Observability Chain
  description: On a protected-branch pipeline failure in Azure DevOps, creates a Datadog event, opens a Jira bug, and alerts the engineering channel in Microsoft Teams.
  tags:
  - devops
  - observability
  - azure-devops
  - datadog
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: devops-observability
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a pipeline failure event, create a Datadog event, open a Jira bug, and alert Slack with full context.
      inputParameters:
      - name: pipeline_id
        in: body
        type: string
      - name: project
        in: body
        type: string
      - name: ref
        in: body
        type: string
      - name: failed_job_name
        in: body
        type: string
      - name: log_url
        in: body
        type: string
      - name: commit_sha
        in: body
        type: string
      steps:
      - name: create-event
        type: call
        call: datadog.create-event
        with:
          title: 'Pipeline failure: {{project}} / {{ref}}'
          text: 'Job {{failed_job_name}} failed on commit {{commit_sha}}. Log: {{log_url}}'
          alert_type: error
          tags: project:{{project}},ref:{{ref}}
      - name: create-bug
        type: call
        call: jira.create-issue
        with:
          project_key: ENG
          issuetype: Bug
          summary: '[CI Failure] {{project}} / {{ref}} — {{failed_job_name}}'
          description: 'Pipeline: {{pipeline_id}}

            Branch: {{ref}}

            Commit: {{commit_sha}}

            Log: {{log_url}}

            Datadog event: {{create-event.id}}'
      - name: post-alert
        type: call
        call: msteams.send-message
        with:
          channel: engineering-alerts
          text: 'Pipeline Failure: {{project}} | Branch: {{ref}} | Job: {{failed_job_name}} | Jira: {{create-bug.key}} | Log: {{log_url}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      header: DD-API-KEY
      key: $secrets.datadog_api_key
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: jira
    baseUri: https://accenture.atlassian.net/rest/api/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: /teams/{{channel}}/channels/General/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → ci-cd-failure-observability-chain.yml

Initiates DR failover test, validates services in target region, runs health checks via Datadog, generates report in Confluence, and notifies SRE team.

naftiko: '0.5'
info:
  label: Multi-Cloud Disaster Recovery Test
  description: Initiates DR failover test, validates services in target region, runs health checks via Datadog, generates report in Confluence, and notifies SRE team.
  tags:
  - disaster-recovery
  - datadog
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: disaster-recovery
    port: 8080
    tools:
    - name: multi_cloud_disaster_recovery_test
      description: Orchestrate multi-cloud disaster recovery test workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: initiate-failover
        type: call
        call: terraform.apply-plan
        with:
          workspace: dr_{{resource_id}}
      - name: validate-services
        type: call
        call: datadog.get-service-checks
        with:
          tag: dr:{{resource_id}}
      - name: generate-report
        type: call
        call: confluence.create-page
        with:
          space: SRE
          title: 'DR test: {{resource_id}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: sre-team
          text: 'DR test {{resource_id}}: {{validate-services.healthy_count}}/{{validate-services.total}} services healthy'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
      header: DD-API-KEY
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: datadog-op
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://accenture.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-op
        method: POST
Open in Framework → View in Fleet → multi-cloud-disaster-recovery-test.yml

Retrieves the status of an Appian process instance by ID. Used by low-code consultants to monitor automated workflows built for clients.

naftiko: '0.5'
info:
  label: Appian Process Automation Status
  description: Retrieves the status of an Appian process instance by ID. Used by low-code consultants to monitor automated workflows built for clients.
  tags:
  - automation
  - low-code
  - appian
capability:
  exposes:
  - type: mcp
    namespace: automation-bpm
    port: 8080
    tools:
    - name: get-process-status
      description: Look up an Appian process instance by ID and return its status.
      inputParameters:
      - name: process_id
        in: body
        type: string
        description: The Appian process instance ID.
      call: appian.get-process
      with:
        process_id: '{{process_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: started_by
        type: string
        mapping: $.startedBy
      - name: start_time
        type: string
        mapping: $.startTime
  consumes:
  - type: http
    namespace: appian
    baseUri: https://accenture.appiancloud.com/suite/webapi
    authentication:
      type: bearer
      token: $secrets.appian_token
    resources:
    - name: processes
      path: /process-instances/{{process_id}}
      inputParameters:
      - name: process_id
        in: path
      operations:
      - name: get-process
        method: GET
Open in Framework → View in Fleet → appian-process-automation-status.yml

When a project staffing request arrives, queries Workday for consultant availability, checks Microsoft Project schedule conflicts, and notifies the resource manager in Microsoft Teams with a staffing recommendation.

naftiko: '0.5'
info:
  label: Resource Allocation Tracker
  description: When a project staffing request arrives, queries Workday for consultant availability, checks Microsoft Project schedule conflicts, and notifies the resource manager in Microsoft Teams with a staffing recommendation.
  tags:
  - resource-management
  - staffing
  - workday
  - microsoft-project
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: resource-mgmt
    port: 8080
    tools:
    - name: check-resource-availability
      description: Given a consultant worker ID and requested engagement dates, check Workday assignment status and Microsoft Project conflicts, then notify the resource manager.
      inputParameters:
      - name: consultant_worker_id
        in: body
        type: string
        description: The Workday worker ID for the consultant.
      - name: engagement_start
        in: body
        type: string
        description: Requested engagement start date (YYYY-MM-DD).
      - name: engagement_end
        in: body
        type: string
        description: Requested engagement end date (YYYY-MM-DD).
      - name: resource_manager_upn
        in: body
        type: string
        description: The Microsoft UPN of the resource manager.
      steps:
      - name: get-consultant
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{consultant_worker_id}}'
      - name: check-schedule
        type: call
        call: msproject.get-assignments
        with:
          resource_id: '{{consultant_worker_id}}'
          start_date: '{{engagement_start}}'
          end_date: '{{engagement_end}}'
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{resource_manager_upn}}'
          text: 'Staffing Check: {{get-consultant.full_name}} ({{get-consultant.business_title}}) requested for {{engagement_start}} to {{engagement_end}}. Current assignments: {{check-schedule.assignment_count}}. Availability: {{check-schedule.available_pct}}%.'
  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: msproject
    baseUri: https://graph.microsoft.com/v1.0/sites/accenture.sharepoint.com/lists
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: assignments
      path: /ProjectAssignments/items?$filter=ResourceId eq '{{resource_id}}' and Start ge '{{start_date}}' and Finish le '{{end_date}}'
      inputParameters:
      - name: resource_id
        in: query
      - name: start_date
        in: query
      - name: end_date
        in: query
      operations:
      - name: get-assignments
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → resource-allocation-tracker.yml

Retrieves client account data from Salesforce, pulls a proposal template from SharePoint, generates a draft in Microsoft Word via Graph API, and uploads to Box for client review.

naftiko: '0.5'
info:
  label: Proposal Document Assembly Pipeline
  description: Retrieves client account data from Salesforce, pulls a proposal template from SharePoint, generates a draft in Microsoft Word via Graph API, and uploads to Box for client review.
  tags:
  - sales
  - proposals
  - salesforce
  - sharepoint
  - microsoft-word
  - box
capability:
  exposes:
  - type: mcp
    namespace: sales-proposals
    port: 8080
    tools:
    - name: assemble-proposal
      description: Given a Salesforce account ID and template path, assemble a proposal document and upload to Box.
      inputParameters:
      - name: salesforce_account_id
        in: body
        type: string
        description: The Salesforce account record ID.
      - name: template_path
        in: body
        type: string
        description: The SharePoint path to the proposal template.
      - name: box_folder_id
        in: body
        type: string
        description: The Box folder ID for the completed proposal.
      steps:
      - name: get-account
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{salesforce_account_id}}'
      - name: get-template
        type: call
        call: sharepoint.get-file
        with:
          file_path: '{{template_path}}'
      - name: upload-proposal
        type: call
        call: box.upload-file
        with:
          folder_id: '{{box_folder_id}}'
          file_name: Proposal_{{get-account.Name}}_{{get-account.Industry}}.docx
          content: '{{get-template.content}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://accenture.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: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites/accenture.sharepoint.com
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /drive/root:/{{file_path}}:/content
      inputParameters:
      - name: file_path
        in: path
      operations:
      - name: get-file
        method: GET
  - type: http
    namespace: box
    baseUri: https://upload.box.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files/content
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → proposal-document-assembly-pipeline.yml

Retrieves a Salesforce opportunity by ID and returns stage, amount, close date, and account name. Used by engagement leads to check deal health without logging into Salesforce.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Lookup
  description: Retrieves a Salesforce opportunity by ID and returns stage, amount, close date, and account name. Used by engagement leads to check deal health without logging into Salesforce.
  tags:
  - sales
  - crm
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: sales-crm
    port: 8080
    tools:
    - name: get-opportunity
      description: Look up a Salesforce opportunity by record ID. Returns stage, amount, close date, and account name.
      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://accenture.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
Open in Framework → View in Fleet → salesforce-opportunity-lookup.yml

Queries Azure Kubernetes Service for node and pod health status. Used by cloud engineers to monitor managed Kubernetes clusters for client workloads.

naftiko: '0.5'
info:
  label: Kubernetes Cluster Health Check
  description: Queries Azure Kubernetes Service for node and pod health status. Used by cloud engineers to monitor managed Kubernetes clusters for client workloads.
  tags:
  - cloud
  - infrastructure
  - azure-kubernetes-service
capability:
  exposes:
  - type: mcp
    namespace: cloud-k8s
    port: 8080
    tools:
    - name: get-cluster-health
      description: Fetch AKS cluster health by subscription, resource group, and cluster name.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: The Azure subscription ID.
      - name: resource_group
        in: body
        type: string
        description: The Azure resource group name.
      - name: cluster_name
        in: body
        type: string
        description: The AKS cluster name.
      call: aks.get-cluster
      with:
        subscription_id: '{{subscription_id}}'
        resource_group: '{{resource_group}}'
        cluster_name: '{{cluster_name}}'
      outputParameters:
      - name: provisioning_state
        type: string
        mapping: $.properties.provisioningState
      - name: kubernetes_version
        type: string
        mapping: $.properties.kubernetesVersion
      - name: node_count
        type: string
        mapping: $.properties.agentPoolProfiles[0].count
  consumes:
  - type: http
    namespace: aks
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: clusters
      path: /subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.ContainerService/managedClusters/{{cluster_name}}?api-version=2023-10-01
      inputParameters:
      - name: subscription_id
        in: path
      - name: resource_group
        in: path
      - name: cluster_name
        in: path
      operations:
      - name: get-cluster
        method: GET
Open in Framework → View in Fleet → kubernetes-cluster-health-check.yml

Deploys a MuleSoft API to CloudHub, registers it in the API Manager, and posts the deployment status to Microsoft Teams.

naftiko: '0.5'
info:
  label: MuleSoft API Deployment Pipeline
  description: Deploys a MuleSoft API to CloudHub, registers it in the API Manager, and posts the deployment status to Microsoft Teams.
  tags:
  - integration
  - api-management
  - mulesoft
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: integration-deploy
    port: 8080
    tools:
    - name: deploy-mulesoft-api
      description: Given an application name and environment, deploy to CloudHub and register in API Manager.
      inputParameters:
      - name: app_name
        in: body
        type: string
        description: The MuleSoft application name.
      - name: environment
        in: body
        type: string
        description: The target environment (e.g., sandbox, production).
      - name: api_version
        in: body
        type: string
        description: The API version to register.
      - name: teams_channel
        in: body
        type: string
        description: The Microsoft Teams channel for deployment notifications.
      steps:
      - name: deploy-app
        type: call
        call: mulesoft.deploy-application
        with:
          app_name: '{{app_name}}'
          environment: '{{environment}}'
      - name: register-api
        type: call
        call: mulesoft.register-api
        with:
          api_name: '{{app_name}}'
          version: '{{api_version}}'
          environment: '{{environment}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: '{{teams_channel}}'
          text: 'MuleSoft Deployment: {{app_name}} v{{api_version}} deployed to {{environment}}. App status: {{deploy-app.status}}. API ID: {{register-api.api_id}}'
  consumes:
  - type: http
    namespace: mulesoft
    baseUri: https://anypoint.mulesoft.com/accounts/api
    authentication:
      type: bearer
      token: $secrets.mulesoft_token
    resources:
    - name: applications
      path: /v2/applications
      operations:
      - name: deploy-application
        method: POST
    - name: apis
      path: /v1/organizations/accenture/environments/{{environment}}/apis
      inputParameters:
      - name: environment
        in: path
      operations:
      - name: register-api
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/General/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → mulesoft-api-deployment-pipeline.yml

Runs a Terraform plan via GitHub Actions, parses drift output, and creates a Jira ticket with remediation details if drift is detected.

naftiko: '0.5'
info:
  label: Terraform Infrastructure Drift Detection
  description: Runs a Terraform plan via GitHub Actions, parses drift output, and creates a Jira ticket with remediation details if drift is detected.
  tags:
  - devops
  - infrastructure
  - github
  - github-actions
  - jira
capability:
  exposes:
  - type: mcp
    namespace: infra-drift
    port: 8080
    tools:
    - name: detect-infrastructure-drift
      description: Trigger a Terraform plan workflow in GitHub Actions and create a Jira ticket if drift is found.
      inputParameters:
      - name: repo_owner
        in: body
        type: string
        description: The GitHub repository owner.
      - name: repo_name
        in: body
        type: string
        description: The GitHub repository name.
      - name: workflow_id
        in: body
        type: string
        description: The GitHub Actions workflow file name.
      - name: jira_project_key
        in: body
        type: string
        description: The Jira project key for infrastructure tasks.
      steps:
      - name: trigger-plan
        type: call
        call: github.dispatch-workflow
        with:
          owner: '{{repo_owner}}'
          repo: '{{repo_name}}'
          workflow_id: '{{workflow_id}}'
          ref: main
      - name: create-drift-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: '{{jira_project_key}}'
          issuetype: Task
          summary: '[Drift] Infrastructure drift detected in {{repo_owner}}/{{repo_name}}'
          description: 'Terraform plan workflow {{workflow_id}} triggered. Run ID: {{trigger-plan.run_id}}. Review the plan output and remediate.'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflows
      path: /repos/{{owner}}/{{repo}}/actions/workflows/{{workflow_id}}/dispatches
      inputParameters:
      - name: owner
        in: path
      - name: repo
        in: path
      - name: workflow_id
        in: path
      operations:
      - name: dispatch-workflow
        method: POST
  - type: http
    namespace: jira
    baseUri: https://accenture.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → terraform-infrastructure-drift-detection.yml

Checks contract deliverables against milestones in Jira, validates SLAs from ServiceNow, calculates penalties in Snowflake, and reports to account management.

naftiko: '0.5'
info:
  label: Contract Compliance Monitor
  description: Checks contract deliverables against milestones in Jira, validates SLAs from ServiceNow, calculates penalties in Snowflake, and reports to account management.
  tags:
  - compliance
  - jira
  - servicenow
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: contract_compliance_monitor
      description: Orchestrate contract compliance monitor workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-milestones
        type: call
        call: jira.get-project-milestones
        with:
          project_key: '{{resource_id}}'
      - name: check-slas
        type: call
        call: servicenow.get-sla-status
        with:
          contract_id: '{{resource_id}}'
      - name: calculate-penalties
        type: call
        call: snowflake.run-query
        with:
          sql_query: CALL calc_sla_penalties('{{resource_id}}')
          warehouse: COMPLIANCE_WH
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: account-mgmt
          text: 'SLA report for {{resource_id}}: {{check-slas.met_count}}/{{check-slas.total}} met'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://accenture.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://accenture.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://accenture.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-op
        method: POST
Open in Framework → View in Fleet → contract-compliance-monitor.yml

Collects ESG metrics from client systems, aggregates in Snowflake, generates sustainability reports, and publishes to stakeholders.

naftiko: '0.5'
info:
  label: Sustainability Reporting Pipeline
  description: Collects ESG metrics from client systems, aggregates in Snowflake, generates sustainability reports, and publishes to stakeholders.
  tags:
  - sustainability
  - esg
  - snowflake
  - confluence
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: fetch-data
        type: call
        call: primary.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-data
        type: call
        call: processor.transform
        with:
          input: '{{fetch-data.result}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: records
          data: '{{process-data.output}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: operations
          text: 'Workflow {{resource_id}} complete. Record: {{create-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://co.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/records
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sustainability-reporting-pipeline.yml

Retrieves a SAP S/4HANA purchase order by number and returns header status, vendor, total value, and currency. Used by procurement consultants to audit client PO data.

naftiko: '0.5'
info:
  label: SAP S/4HANA Purchase Order Lookup
  description: Retrieves a SAP S/4HANA purchase order by number and returns header status, vendor, total value, and currency. Used by procurement consultants to audit client PO data.
  tags:
  - procurement
  - erp
  - sap
  - sap-s4hana
capability:
  exposes:
  - type: mcp
    namespace: erp-procurement
    port: 8080
    tools:
    - name: get-purchase-order
      description: Look up a SAP S/4HANA purchase order by PO number. Returns header status, vendor, total value, and currency.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: The SAP purchase order number (10-digit).
      call: sap.get-po
      with:
        po_number: '{{po_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.d.OverallStatus
      - name: vendor
        type: string
        mapping: $.d.Supplier.CompanyName
      - name: total_value
        type: string
        mapping: $.d.TotalAmount
      - name: currency
        type: string
        mapping: $.d.TransactionCurrency
  consumes:
  - type: http
    namespace: sap
    baseUri: https://accenture-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    - name: sap-client
      in: header
      value: '100'
    resources:
    - name: purchase-orders
      path: /A_PurchaseOrder('{{po_number}}')
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-po
        method: GET
        outputRawFormat: xml
Open in Framework → View in Fleet → sap-s-4hana-purchase-order-lookup.yml

Exports a Figma design file, uploads assets to SharePoint, creates a Jira development task with design links, and notifies the dev team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Figma Design Handoff Orchestrator
  description: Exports a Figma design file, uploads assets to SharePoint, creates a Jira development task with design links, and notifies the dev team in Microsoft Teams.
  tags:
  - design
  - handoff
  - figma
  - sharepoint
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: design-handoff
    port: 8080
    tools:
    - name: handoff-design-to-dev
      description: Given a Figma file key and Jira project, export designs, upload to SharePoint, create a dev task, and notify the team.
      inputParameters:
      - name: figma_file_key
        in: body
        type: string
        description: The Figma file key.
      - name: jira_project_key
        in: body
        type: string
        description: The Jira project key for development tasks.
      - name: sharepoint_site_id
        in: body
        type: string
        description: The SharePoint site ID for design assets.
      - name: teams_channel
        in: body
        type: string
        description: The Microsoft Teams channel for design notifications.
      steps:
      - name: get-figma-file
        type: call
        call: figma.get-file
        with:
          file_key: '{{figma_file_key}}'
      - name: upload-assets
        type: call
        call: sharepoint.create-folder
        with:
          site_id: '{{sharepoint_site_id}}'
          folder_path: DesignAssets/{{get-figma-file.name}}
      - name: create-dev-task
        type: call
        call: jira.create-issue
        with:
          project_key: '{{jira_project_key}}'
          issuetype: Story
          summary: 'Implement design: {{get-figma-file.name}}'
          description: 'Figma file: https://www.figma.com/file/{{figma_file_key}}

            Assets: {{upload-assets.url}}

            Last modified: {{get-figma-file.last_modified}}'
      - name: notify-dev-team
        type: call
        call: msteams.send-message
        with:
          channel: '{{teams_channel}}'
          text: 'Design Handoff: {{get-figma-file.name}} | Jira: {{create-dev-task.key}} | Figma: https://www.figma.com/file/{{figma_file_key}} | Assets: {{upload-assets.url}}'
  consumes:
  - type: http
    namespace: figma
    baseUri: https://api.figma.com/v1
    authentication:
      type: bearer
      token: $secrets.figma_token
    resources:
    - name: files
      path: /files/{{file_key}}
      inputParameters:
      - name: file_key
        in: path
      operations:
      - name: get-file
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: jira
    baseUri: https://accenture.atlassian.net/rest/api/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: /teams/{{channel}}/channels/General/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → figma-design-handoff-orchestrator.yml

Creates a new user in Azure Active Directory, assigns licenses, and adds to the appropriate security group. Used for client identity management engagements.

naftiko: '0.5'
info:
  label: Azure Active Directory User Provisioning
  description: Creates a new user in Azure Active Directory, assigns licenses, and adds to the appropriate security group. Used for client identity management engagements.
  tags:
  - identity
  - provisioning
  - azure-active-directory
capability:
  exposes:
  - type: mcp
    namespace: identity-provisioning
    port: 8080
    tools:
    - name: provision-aad-user
      description: Create an Azure AD user, assign a license, and add to a security group.
      inputParameters:
      - name: display_name
        in: body
        type: string
        description: The user display name.
      - name: user_principal_name
        in: body
        type: string
        description: The user principal name (UPN).
      - name: department
        in: body
        type: string
        description: The user's department.
      - name: license_sku
        in: body
        type: string
        description: The license SKU to assign.
      - name: group_id
        in: body
        type: string
        description: The security group ID to add the user to.
      steps:
      - name: create-user
        type: call
        call: aad.create-user
        with:
          displayName: '{{display_name}}'
          userPrincipalName: '{{user_principal_name}}'
          department: '{{department}}'
          accountEnabled: true
      - name: assign-license
        type: call
        call: aad.assign-license
        with:
          user_id: '{{create-user.id}}'
          sku_id: '{{license_sku}}'
      - name: add-to-group
        type: call
        call: aad.add-group-member
        with:
          group_id: '{{group_id}}'
          member_id: '{{create-user.id}}'
  consumes:
  - type: http
    namespace: aad
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users
      operations:
      - name: create-user
        method: POST
    - name: license-assignment
      path: /users/{{user_id}}/assignLicense
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: assign-license
        method: POST
    - name: group-members
      path: /groups/{{group_id}}/members/$ref
      inputParameters:
      - name: group_id
        in: path
      operations:
      - name: add-group-member
        method: POST
Open in Framework → View in Fleet → azure-active-directory-user-provisioning.yml

Identifies repetitive ops tasks from ServiceNow, measures toil in Snowflake, creates automation tasks in Jira, and tracks reduction.

naftiko: '0.5'
info:
  label: Platform SRE Toil Reducer
  description: Identifies repetitive ops tasks from ServiceNow, measures toil in Snowflake, creates automation tasks in Jira, and tracks reduction.
  tags:
  - sre
  - automation
  - servicenow
  - jira
capability:
  exposes:
  - type: mcp
    namespace: sre
    port: 8080
    tools:
    - name: platform_sre_toil_reducer
      description: Orchestrate platform sre toil reducer workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: fetch-data
        type: call
        call: primary.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-data
        type: call
        call: processor.transform
        with:
          input: '{{fetch-data.result}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: records
          data: '{{process-data.output}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: operations
          text: 'Workflow {{resource_id}} complete. Record: {{create-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://co.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/records
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → platform-sre-toil-reducer.yml

Fetches a Databricks job run status, and if the run failed, creates a Jira bug and notifies the data engineering team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Databricks Job Failure Handler
  description: Fetches a Databricks job run status, and if the run failed, creates a Jira bug and notifies the data engineering team in Microsoft Teams.
  tags:
  - data
  - etl
  - databricks
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: data-etl
    port: 8080
    tools:
    - name: handle-databricks-job-result
      description: Check a Databricks job run status and create a Jira bug and Teams alert if it failed.
      inputParameters:
      - name: run_id
        in: body
        type: string
        description: The Databricks job run ID.
      - name: jira_project_key
        in: body
        type: string
        description: The Jira project key for data issues.
      - name: teams_channel
        in: body
        type: string
        description: The Teams channel for data engineering alerts.
      steps:
      - name: get-run
        type: call
        call: databricks.get-run
        with:
          run_id: '{{run_id}}'
      - name: create-bug
        type: call
        call: jira.create-issue
        with:
          project_key: '{{jira_project_key}}'
          issuetype: Bug
          summary: '[Databricks] Job run {{run_id}} — {{get-run.state.result_state}}'
          description: 'Run ID: {{run_id}}

            State: {{get-run.state.life_cycle_state}}

            Result: {{get-run.state.result_state}}

            Start: {{get-run.start_time}}

            Cluster: {{get-run.cluster_instance.cluster_id}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: '{{teams_channel}}'
          text: 'Databricks Job Alert: Run {{run_id}} — {{get-run.state.result_state}}. Jira: {{create-bug.key}}.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://accenture.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: runs
      path: /jobs/runs/get?run_id={{run_id}}
      inputParameters:
      - name: run_id
        in: query
      operations:
      - name: get-run
        method: GET
  - type: http
    namespace: jira
    baseUri: https://accenture.atlassian.net/rest/api/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: /teams/{{channel}}/channels/General/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → databricks-job-failure-handler.yml

Searches audit logs in Elasticsearch for Accenture compliance reviews.

naftiko: '0.5'
info:
  label: Elasticsearch Audit Log Search
  description: Searches audit logs in Elasticsearch for Accenture compliance reviews.
  tags:
  - compliance
  - elasticsearch
  - audit
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: search-audit-logs
      description: Search audit logs.
      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://accenture-es.com:9200
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: elasticsearch_audit_log_search
        method: GET
Open in Framework → View in Fleet → elasticsearch-audit-log-search.yml

Analyzes project portfolio metrics from Salesforce, calculates ROI in Snowflake, identifies optimization opportunities, and notifies PMO.

naftiko: '0.5'
info:
  label: Project Portfolio Optimization Pipeline
  description: Analyzes project portfolio metrics from Salesforce, calculates ROI in Snowflake, identifies optimization opportunities, and notifies PMO.
  tags:
  - portfolio
  - optimization
  - salesforce
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: portfolio
    port: 8080
    tools:
    - name: project_portfolio_optimization_pipeline
      description: Orchestrate project portfolio optimization pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: fetch-data
        type: call
        call: primary.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-data
        type: call
        call: processor.transform
        with:
          input: '{{fetch-data.result}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: records
          data: '{{process-data.output}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: operations
          text: 'Workflow {{resource_id}} complete. Record: {{create-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://co.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/records
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → project-portfolio-optimization-pipeline.yml

Fetches the recording URL for a completed Zoom meeting. Used by consultants to retrieve client workshop recordings for documentation.

naftiko: '0.5'
info:
  label: Zoom Meeting Recording Retrieval
  description: Fetches the recording URL for a completed Zoom meeting. Used by consultants to retrieve client workshop recordings for documentation.
  tags:
  - collaboration
  - meetings
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: collab-recordings
    port: 8080
    tools:
    - name: get-meeting-recording
      description: Retrieve Zoom meeting recording URLs by meeting ID.
      inputParameters:
      - name: meeting_id
        in: body
        type: string
        description: The Zoom meeting ID.
      call: zoom.get-recordings
      with:
        meeting_id: '{{meeting_id}}'
      outputParameters:
      - name: recording_count
        type: string
        mapping: $.recording_count
      - name: download_url
        type: string
        mapping: $.recording_files[0].download_url
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_token
    resources:
    - name: recordings
      path: /meetings/{{meeting_id}}/recordings
      inputParameters:
      - name: meeting_id
        in: path
      operations:
      - name: get-recordings
        method: GET
Open in Framework → View in Fleet → zoom-meeting-recording-retrieval.yml

Triggers a SailPoint identity access review, fetches results, and creates a ServiceNow change request for any access that needs remediation.

naftiko: '0.5'
info:
  label: SailPoint Access Certification Pipeline
  description: Triggers a SailPoint identity access review, fetches results, and creates a ServiceNow change request for any access that needs remediation.
  tags:
  - security
  - identity
  - sailpoint
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: identity-governance
    port: 8080
    tools:
    - name: run-access-certification
      description: Trigger a SailPoint access certification campaign and create ServiceNow change requests for flagged access.
      inputParameters:
      - name: campaign_name
        in: body
        type: string
        description: The SailPoint certification campaign name.
      - name: identity_id
        in: body
        type: string
        description: The SailPoint identity ID to certify.
      steps:
      - name: trigger-certification
        type: call
        call: sailpoint.create-campaign
        with:
          name: '{{campaign_name}}'
          identity_id: '{{identity_id}}'
      - name: create-change-request
        type: call
        call: servicenow.create-change
        with:
          short_description: 'Access certification remediation: {{campaign_name}}'
          description: SailPoint campaign {{trigger-certification.campaign_id}} flagged access for identity {{identity_id}}. Review and remediate.
          assigned_group: Identity_Governance
          category: access_review
  consumes:
  - type: http
    namespace: sailpoint
    baseUri: https://accenture.api.identitynow.com/v3
    authentication:
      type: bearer
      token: $secrets.sailpoint_token
    resources:
    - name: campaigns
      path: /campaigns
      operations:
      - name: create-campaign
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://accenture.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
Open in Framework → View in Fleet → sailpoint-access-certification-pipeline.yml

Prepares a client workshop by creating a Microsoft Teams meeting, provisioning a shared Google Drive folder, generating an agenda in Confluence, and sending pre-read materials via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Client Workshop Orchestrator
  description: Prepares a client workshop by creating a Microsoft Teams meeting, provisioning a shared Google Drive folder, generating an agenda in Confluence, and sending pre-read materials via Microsoft Outlook.
  tags:
  - consulting
  - workshops
  - microsoft-teams
  - google-drive
  - confluence
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: workshop-prep
    port: 8080
    tools:
    - name: prepare-workshop
      description: Given workshop details, set up all logistics including meeting, shared folder, agenda, and pre-reads.
      inputParameters:
      - name: workshop_title
        in: body
        type: string
        description: Title of the workshop.
      - name: case_code
        in: body
        type: string
        description: Bain case code.
      - name: attendee_emails
        in: body
        type: string
        description: Comma-separated attendee emails.
      - name: date
        in: body
        type: string
        description: Workshop date (YYYY-MM-DD).
      steps:
      - name: create-meeting
        type: call
        call: msteams.create-meeting
        with:
          subject: '{{workshop_title}} - {{case_code}}'
          attendees: '{{attendee_emails}}'
          start_date: '{{date}}'
      - name: create-shared-folder
        type: call
        call: google-drive.create-folder
        with:
          name: '{{workshop_title}}_{{date}}'
          parent_folder: case_{{case_code}}_workshops
      - name: create-agenda
        type: call
        call: confluence.create-page
        with:
          space_key: '{{case_code}}'
          title: 'Workshop Agenda: {{workshop_title}} - {{date}}'
          body: 'Meeting link: {{create-meeting.join_url}} | Shared folder: {{create-shared-folder.url}}'
      - name: send-prereads
        type: call
        call: outlook.send-email
        with:
          to: '{{attendee_emails}}'
          subject: 'Pre-read Materials: {{workshop_title}} - {{date}}'
          body: 'Workshop agenda: {{create-agenda.url}} | Shared folder: {{create-shared-folder.url}} | Teams link: {{create-meeting.join_url}}'
  consumes:
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: online-meetings
      path: /me/onlineMeetings
      operations:
      - name: create-meeting
        method: POST
  - type: http
    namespace: google-drive
    baseUri: https://www.googleapis.com/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_drive_token
    resources:
    - name: files
      path: /files
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://bain.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: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → client-workshop-orchestrator.yml

Triggers a Power BI dataset refresh, waits for completion, and sends a notification with the dashboard link to the case team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Power BI Dashboard Refresh and Notify
  description: Triggers a Power BI dataset refresh, waits for completion, and sends a notification with the dashboard link to the case team in Microsoft Teams.
  tags:
  - analytics
  - dashboards
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: bi-refresh
    port: 8080
    tools:
    - name: refresh-and-notify
      description: Trigger a Power BI dataset refresh and notify the case team when complete.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: Power BI workspace GUID.
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset GUID.
      - name: team_channel_id
        in: body
        type: string
        description: Microsoft Teams channel for notification.
      steps:
      - name: trigger-refresh
        type: call
        call: powerbi.trigger-refresh
        with:
          workspace_id: '{{workspace_id}}'
          dataset_id: '{{dataset_id}}'
      - name: get-refresh-status
        type: call
        call: powerbi.get-refresh-status
        with:
          workspace_id: '{{workspace_id}}'
          dataset_id: '{{dataset_id}}'
      - name: notify-team
        type: call
        call: msteams.send-channel-message
        with:
          channel_id: '{{team_channel_id}}'
          text: 'Power BI dashboard refreshed. Status: {{get-refresh-status.status}}. View at: https://app.powerbi.com/groups/{{workspace_id}}/dashboards'
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refresh
      path: /groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: workspace_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
      - name: get-refresh-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: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → power-bi-dashboard-refresh-and-notify.yml

Retrieves a document from knowledge management. Used by Bain and Company teams.

naftiko: '0.5'
info:
  label: Bain and Company Document Retrieval
  description: Retrieves a document from knowledge management. Used by Bain and Company teams.
  tags:
  - consulting
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: hubspot
    port: 8080
    tools:
    - name: get-document_retrieval
      description: Retrieves a document from knowledge management. Used by Bain and Company teams.
      inputParameters:
      - name: document_id
        in: body
        type: string
        description: The document_id to look up.
      call: hubspot.get-document_id
      with:
        document_id: '{{document_id}}'
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: bain_document_retrieval
        method: GET
Open in Framework → View in Fleet → bain-and-company-document-retrieval.yml

Assembles a client proposal by pulling prior case examples from Elasticsearch, team bios from Workday, pricing from Salesforce, and generates a draft proposal document uploaded to SharePoint.

naftiko: '0.5'
info:
  label: Proposal Development Orchestrator
  description: Assembles a client proposal by pulling prior case examples from Elasticsearch, team bios from Workday, pricing from Salesforce, and generates a draft proposal document uploaded to SharePoint.
  tags:
  - business-development
  - proposals
  - elasticsearch
  - workday
  - salesforce
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: proposal-builder
    port: 8080
    tools:
    - name: build-proposal
      description: Given a prospect and engagement scope, assemble a proposal from case examples, team bios, and pricing.
      inputParameters:
      - name: prospect_name
        in: body
        type: string
        description: Prospective client name.
      - name: industry
        in: body
        type: string
        description: Industry vertical.
      - name: engagement_type
        in: body
        type: string
        description: Type of engagement (e.g., 'Strategy', 'Due Diligence', 'Performance Improvement').
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID.
      steps:
      - name: find-case-examples
        type: call
        call: elasticsearch.search
        with:
          index: case_knowledge
          query: '{{industry}} {{engagement_type}}'
      - name: get-team-bios
        type: call
        call: workday.search-workers
        with:
          skill: '{{industry}}'
          job_level: Manager,Partner
      - name: get-pricing
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: upload-proposal
        type: call
        call: sharepoint.upload-file
        with:
          site_id: proposals_site
          folder_path: Proposals/{{prospect_name}}
          file_name: Proposal_{{prospect_name}}_{{engagement_type}}_{{$now}}.docx
  consumes:
  - type: http
    namespace: elasticsearch
    baseUri: https://bain-search.es.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: search
      path: /case_knowledge/_search
      operations:
      - name: search
        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
      operations:
      - name: search-workers
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://bain.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: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → proposal-development-orchestrator.yml

Executes a SQL query against Snowflake, exports results to Google Drive, and sends the download link to the requesting analyst via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Snowflake Query and Visualize
  description: Executes a SQL query against Snowflake, exports results to Google Drive, and sends the download link to the requesting analyst via Microsoft Outlook.
  tags:
  - analytics
  - data
  - snowflake
  - google-drive
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: data-query
    port: 8080
    tools:
    - name: query-and-share
      description: Execute a Snowflake query, export to Google Drive, and email the analyst.
      inputParameters:
      - name: database
        in: body
        type: string
        description: Snowflake database name.
      - name: sql_statement
        in: body
        type: string
        description: SQL query to execute.
      - name: analyst_email
        in: body
        type: string
        description: Analyst email for delivery.
      steps:
      - name: run-query
        type: call
        call: snowflake.execute-statement
        with:
          database: '{{database}}'
          statement: '{{sql_statement}}'
      - name: export-results
        type: call
        call: google-drive.upload-file
        with:
          folder_id: analytics_exports
          file_name: query_results_{{$now}}.csv
          content: '{{run-query.result_set}}'
      - name: notify-analyst
        type: call
        call: outlook.send-email
        with:
          to: '{{analyst_email}}'
          subject: Snowflake query results ready
          body: 'Your query results are available at: {{export-results.url}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bain.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: google-drive
    baseUri: https://www.googleapis.com/upload/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_drive_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → snowflake-query-and-visualize.yml

Sends a message to a Microsoft Teams channel, used for case team announcements and automated notifications.

naftiko: '0.5'
info:
  label: Microsoft Teams Channel Message
  description: Sends a message to a Microsoft Teams channel, used for case team announcements and automated notifications.
  tags:
  - collaboration
  - communications
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: teams-messaging
    port: 8080
    tools:
    - name: send-channel-message
      description: Send a message to a Microsoft Teams channel.
      inputParameters:
      - name: team_id
        in: body
        type: string
        description: Microsoft Teams team ID.
      - name: channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID.
      - name: message
        in: body
        type: string
        description: Message text to send.
      call: msteams.post-channel-message
      with:
        team_id: '{{team_id}}'
        channel_id: '{{channel_id}}'
        content: '{{message}}'
  consumes:
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → microsoft-teams-channel-message.yml

Pulls website analytics from Google Analytics, compares against industry benchmarks in Snowflake, and uploads a performance report to SharePoint for the case team.

naftiko: '0.5'
info:
  label: Google Analytics Client Benchmark Report
  description: Pulls website analytics from Google Analytics, compares against industry benchmarks in Snowflake, and uploads a performance report to SharePoint for the case team.
  tags:
  - analytics
  - digital
  - google-analytics
  - snowflake
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: web-analytics
    port: 8080
    tools:
    - name: build-analytics-benchmark
      description: Given a GA property and industry, build a benchmarked analytics report.
      inputParameters:
      - name: property_id
        in: body
        type: string
        description: GA4 property ID.
      - name: start_date
        in: body
        type: string
        description: Report start date (YYYY-MM-DD).
      - name: end_date
        in: body
        type: string
        description: Report end date (YYYY-MM-DD).
      - name: industry
        in: body
        type: string
        description: Industry for benchmark comparison.
      - name: case_code
        in: body
        type: string
        description: Bain case code.
      steps:
      - name: get-analytics
        type: call
        call: google-analytics.run-report
        with:
          property_id: '{{property_id}}'
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: get-benchmarks
        type: call
        call: snowflake.execute-statement
        with:
          database: ANALYTICS
          statement: SELECT * FROM DIGITAL_BENCHMARKS WHERE industry='{{industry}}'
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: case_management_site
          folder_path: Cases/{{case_code}}/Analytics
          file_name: GA_Benchmark_{{start_date}}_{{end_date}}.xlsx
  consumes:
  - type: http
    namespace: google-analytics
    baseUri: https://analyticsdata.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: reports
      path: /properties/{{property_id}}:runReport
      inputParameters:
      - name: property_id
        in: path
      operations:
      - name: run-report
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://bain.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → google-analytics-client-benchmark-report.yml

Retrieves a Zendesk support ticket by ID, returning status, priority, assignee, and latest comment for internal IT support tracking.

naftiko: '0.5'
info:
  label: Zendesk Ticket Status
  description: Retrieves a Zendesk support ticket by ID, returning status, priority, assignee, and latest comment for internal IT support tracking.
  tags:
  - it-operations
  - support
  - zendesk
capability:
  exposes:
  - type: mcp
    namespace: support-ticket
    port: 8080
    tools:
    - name: get-ticket
      description: Look up a Zendesk ticket by ID.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: Zendesk ticket ID.
      call: zendesk.get-ticket
      with:
        ticket_id: '{{ticket_id}}'
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://bain.zendesk.com/api/v2
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: tickets
      path: /tickets/{{ticket_id}}
      inputParameters:
      - name: ticket_id
        in: path
      operations:
      - name: get-ticket
        method: GET
Open in Framework → View in Fleet → zendesk-ticket-status.yml

Triggers an Azure DevOps build pipeline by definition ID, used by the internal tools team to deploy internal analytics applications.

naftiko: '0.5'
info:
  label: Azure DevOps Pipeline Trigger
  description: Triggers an Azure DevOps build pipeline by definition ID, used by the internal tools team to deploy internal analytics applications.
  tags:
  - development
  - ci-cd
  - azure-devops
capability:
  exposes:
  - type: mcp
    namespace: devops-pipeline
    port: 8080
    tools:
    - name: trigger-build
      description: Trigger an Azure DevOps build pipeline.
      inputParameters:
      - name: project
        in: body
        type: string
        description: Azure DevOps project name.
      - name: definition_id
        in: body
        type: string
        description: Build definition ID.
      call: azure-devops.queue-build
      with:
        project: '{{project}}'
        definition_id: '{{definition_id}}'
  consumes:
  - type: http
    namespace: azure-devops
    baseUri: https://dev.azure.com/bain
    authentication:
      type: basic
      username: ''
      password: $secrets.azure_devops_pat
    resources:
    - name: builds
      path: /{{project}}/_apis/build/builds?api-version=7.0
      inputParameters:
      - name: project
        in: path
      operations:
      - name: queue-build
        method: POST
Open in Framework → View in Fleet → azure-devops-pipeline-trigger.yml

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

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

When a consultant transitions off a case, extracts their Confluence contributions, archives key documents to SharePoint, creates a handover summary, and notifies the incoming consultant via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Knowledge Transfer Orchestrator
  description: When a consultant transitions off a case, extracts their Confluence contributions, archives key documents to SharePoint, creates a handover summary, and notifies the incoming consultant via Microsoft Outlook.
  tags:
  - knowledge-management
  - case-management
  - confluence
  - sharepoint
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: knowledge-transfer
    port: 8080
    tools:
    - name: execute-knowledge-transfer
      description: Given the departing and incoming consultant details, orchestrate the knowledge transfer process.
      inputParameters:
      - name: departing_email
        in: body
        type: string
        description: Email of the departing consultant.
      - name: incoming_email
        in: body
        type: string
        description: Email of the incoming consultant.
      - name: case_code
        in: body
        type: string
        description: Bain case code.
      steps:
      - name: get-contributions
        type: call
        call: confluence.search
        with:
          cql: contributor="{{departing_email}}" AND space="{{case_code}}"
      - name: create-handover
        type: call
        call: confluence.create-page
        with:
          space_key: '{{case_code}}'
          title: 'Handover Notes: {{departing_email}} to {{incoming_email}}'
          body: 'Key contributions: {{get-contributions.page_count}} pages. Review: {{get-contributions.page_titles}}'
      - name: archive-docs
        type: call
        call: sharepoint.copy-files
        with:
          site_id: case_management_site
          source_path: Cases/{{case_code}}/WorkingDocs/{{departing_email}}
          destination_path: Cases/{{case_code}}/Archive/{{departing_email}}
      - name: notify-incoming
        type: call
        call: outlook.send-email
        with:
          to: '{{incoming_email}}'
          subject: Knowledge transfer for case {{case_code}}
          body: 'Handover notes: {{create-handover.url}} | Archived docs: {{archive-docs.url}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://bain.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
    - 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:/{{source_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: source_path
        in: path
      operations:
      - name: copy-files
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → knowledge-transfer-orchestrator.yml

Pulls expense reports from SAP Concur for a case code, matches against the Workday cost center budget, flags overages, and posts a summary to the case lead in Microsoft Teams.

naftiko: '0.5'
info:
  label: Travel Expense Reconciliation Pipeline
  description: Pulls expense reports from SAP Concur for a case code, matches against the Workday cost center budget, flags overages, and posts a summary to the case lead in Microsoft Teams.
  tags:
  - finance
  - expense-management
  - sap-concur
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: expense-reconciliation
    port: 8080
    tools:
    - name: reconcile-expenses
      description: Given a case code, reconcile SAP Concur expenses against Workday budget and notify the case lead.
      inputParameters:
      - name: case_code
        in: body
        type: string
        description: Bain case code.
      - name: cost_center
        in: body
        type: string
        description: Workday cost center ID.
      - name: case_lead_email
        in: body
        type: string
        description: Case lead email for notifications.
      steps:
      - name: get-expenses
        type: call
        call: concur.get-expense-reports
        with:
          case_code: '{{case_code}}'
      - name: get-budget
        type: call
        call: workday.get-budget
        with:
          cost_center: '{{cost_center}}'
      - name: notify-lead
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{case_lead_email}}'
          text: 'Expense reconciliation for {{case_code}}: Total spend {{get-expenses.total_amount}} vs budget {{get-budget.remaining_budget}}.'
  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
      operations:
      - name: get-expense-reports
        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: budgets
      path: /financial-management/budgets/{{cost_center}}
      inputParameters:
      - name: cost_center
        in: path
      operations:
      - name: get-budget
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chat-messages
      path: /users/{{recipient_upn}}/chats
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → travel-expense-reconciliation-pipeline.yml

Searches application logs for matching patterns. Used by Bain and Company teams.

naftiko: '0.5'
info:
  label: Bain and Company Log Search Query
  description: Searches application logs for matching patterns. Used by Bain and Company teams.
  tags:
  - consulting
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: snowflake
    port: 8080
    tools:
    - name: get-log_search_query
      description: Searches application logs for matching patterns. Used by Bain and Company teams.
      inputParameters:
      - name: search_query
        in: body
        type: string
        description: The search_query to look up.
      call: snowflake.get-search_query
      with:
        search_query: '{{search_query}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bain-and-company.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: bain_log_search_query
        method: GET
Open in Framework → View in Fleet → bain-and-company-log-search-query.yml

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

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

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

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

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

naftiko: '0.5'
info:
  label: Datadog Service Health Check
  description: Queries Datadog for the current health status of a monitored service, returning uptime percentage, error rate, and active alerts.
  tags:
  - it-operations
  - monitoring
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: service-health
    port: 8080
    tools:
    - name: get-service-health
      description: Check Datadog health metrics for a service.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: Name of the monitored service.
      call: datadog.query-metrics
      with:
        query: avg:system.cpu.user{service:{{service_name}}}
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /query
      operations:
      - name: query-metrics
        method: GET
Open in Framework → View in Fleet → datadog-service-health-check.yml

Pulls a target company profile from Bloomberg Enterprise Data, enriches with ZoomInfo firmographics, retrieves recent Factiva news, and assembles a summary in a Confluence page for the deal team.

naftiko: '0.5'
info:
  label: Due Diligence Company Profiler
  description: Pulls a target company profile from Bloomberg Enterprise Data, enriches with ZoomInfo firmographics, retrieves recent Factiva news, and assembles a summary in a Confluence page for the deal team.
  tags:
  - due-diligence
  - m-and-a
  - bloomberg-enterprise-data
  - zoominfo
  - factiva
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: dd-company-profile
    port: 8080
    tools:
    - name: build-company-profile
      description: Given a target company name and Bloomberg ticker, assemble a due diligence company profile from Bloomberg, ZoomInfo, and Factiva into Confluence.
      inputParameters:
      - name: company_name
        in: body
        type: string
        description: The target company name.
      - name: bloomberg_ticker
        in: body
        type: string
        description: Bloomberg ticker symbol for the target.
      - name: case_code
        in: body
        type: string
        description: Bain case code for the engagement.
      steps:
      - name: get-bloomberg-profile
        type: call
        call: bloomberg.get-company
        with:
          ticker: '{{bloomberg_ticker}}'
      - name: get-zoominfo-profile
        type: call
        call: zoominfo.search-company
        with:
          company_name: '{{company_name}}'
      - name: get-factiva-news
        type: call
        call: factiva.search-articles
        with:
          query: '{{company_name}}'
          date_range: last_90_days
      - name: create-profile-page
        type: call
        call: confluence.create-page
        with:
          space_key: '{{case_code}}'
          title: 'Company Profile: {{company_name}}'
          body: 'Revenue: {{get-bloomberg-profile.revenue}} | Employees: {{get-zoominfo-profile.employee_count}} | Industry: {{get-zoominfo-profile.industry}} | Recent news items: {{get-factiva-news.article_count}}'
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap
    authentication:
      type: bearer
      token: $secrets.bloomberg_enterprise_token
    resources:
    - name: companies
      path: /companies/{{ticker}}
      inputParameters:
      - name: ticker
        in: path
      operations:
      - name: get-company
        method: GET
  - type: http
    namespace: zoominfo
    baseUri: https://api.zoominfo.com
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: company-search
      path: /search/company
      operations:
      - name: search-company
        method: POST
  - type: http
    namespace: factiva
    baseUri: https://api.dowjones.com/content
    authentication:
      type: bearer
      token: $secrets.factiva_token
    resources:
    - name: articles
      path: /articles
      operations:
      - name: search-articles
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://bain.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → due-diligence-company-profiler.yml

Queries metric values from a monitoring dashboard. Used by Bain and Company teams.

naftiko: '0.5'
info:
  label: Bain and Company Metric Dashboard Query
  description: Queries metric values from a monitoring dashboard. Used by Bain and Company teams.
  tags:
  - consulting
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: powerbi
    port: 8080
    tools:
    - name: get-metric_dashboard_query
      description: Queries metric values from a monitoring dashboard. Used by Bain and Company teams.
      inputParameters:
      - name: metric_name
        in: body
        type: string
        description: The metric_name to look up.
      call: powerbi.get-metric_name
      with:
        metric_name: '{{metric_name}}'
  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: bain_metric_dashboard_query
        method: GET
Open in Framework → View in Fleet → bain-and-company-metric-dashboard-query.yml

Publishes a thought leadership article to the Bain LinkedIn company page, pulling content from a Confluence page and notifying the marketing team in Microsoft Teams.

naftiko: '0.5'
info:
  label: LinkedIn Thought Leadership Publisher
  description: Publishes a thought leadership article to the Bain LinkedIn company page, pulling content from a Confluence page and notifying the marketing team in Microsoft Teams.
  tags:
  - marketing
  - thought-leadership
  - linkedin
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: linkedin-publishing
    port: 8080
    tools:
    - name: publish-article
      description: Given a Confluence page ID, publish the content as a LinkedIn article and notify marketing.
      inputParameters:
      - name: confluence_page_id
        in: body
        type: string
        description: Confluence page ID containing the article.
      - name: marketing_channel_id
        in: body
        type: string
        description: Microsoft Teams marketing channel ID.
      steps:
      - name: get-content
        type: call
        call: confluence.get-page
        with:
          page_id: '{{confluence_page_id}}'
      - name: publish-to-linkedin
        type: call
        call: linkedin.create-post
        with:
          organization_id: bain-and-company
          text: '{{get-content.title}}: {{get-content.excerpt}}'
          article_url: '{{get-content.url}}'
      - name: notify-marketing
        type: call
        call: msteams.send-channel-message
        with:
          channel_id: '{{marketing_channel_id}}'
          text: 'Published to LinkedIn: {{get-content.title}} - {{publish-to-linkedin.post_url}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://bain.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content/{{page_id}}?expand=body.storage
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: get-page
        method: GET
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: shares
      path: /shares
      operations:
      - name: create-post
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → linkedin-thought-leadership-publisher.yml

When a new client engagement is created in Salesforce, provisions a SharePoint case folder, creates a Confluence knowledge space, schedules a kickoff meeting in Microsoft Teams, and notifies the case team via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Client Engagement Kickoff Orchestrator
  description: When a new client engagement is created in Salesforce, provisions a SharePoint case folder, creates a Confluence knowledge space, schedules a kickoff meeting in Microsoft Teams, and notifies the case team via Microsoft Outlook.
  tags:
  - consulting
  - client-engagement
  - salesforce
  - sharepoint
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: engagement-kickoff
    port: 8080
    tools:
    - name: trigger-engagement-kickoff
      description: Given a Salesforce opportunity ID, orchestrate full engagement kickoff across SharePoint, Confluence, Microsoft Teams, and Outlook.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID for the new engagement.
      - name: case_code
        in: body
        type: string
        description: The Bain internal case code.
      - name: partner_email
        in: body
        type: string
        description: Email of the lead partner on the case.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: create-case-folder
        type: call
        call: sharepoint.create-folder
        with:
          site_id: case_management_site
          folder_path: Cases/{{case_code}}_{{get-opportunity.account_name}}
      - name: create-knowledge-space
        type: call
        call: confluence.create-space
        with:
          space_key: '{{case_code}}'
          name: '{{case_code}} - {{get-opportunity.account_name}}'
          description: Knowledge space for {{get-opportunity.name}}
      - name: schedule-kickoff
        type: call
        call: msteams.create-meeting
        with:
          subject: 'Kickoff: {{get-opportunity.account_name}} - {{case_code}}'
          attendees: '{{partner_email}}'
      - name: notify-team
        type: call
        call: outlook.send-email
        with:
          to: '{{partner_email}}'
          subject: Engagement {{case_code}} provisioned
          body: 'Case folder: {{create-case-folder.url}} | Wiki: {{create-knowledge-space.url}} | Kickoff: {{schedule-kickoff.join_url}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://bain.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: 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: confluence
    baseUri: https://bain.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: spaces
      path: /space
      operations:
      - name: create-space
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: online-meetings
      path: /me/onlineMeetings
      operations:
      - name: create-meeting
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → client-engagement-kickoff-orchestrator.yml

Tests DR procedures, validates backup integrity, generates readiness reports, and notifies leadership.

naftiko: '0.5'
info:
  label: Disaster Recovery Readiness Pipeline
  description: Tests DR procedures, validates backup integrity, generates readiness reports, and notifies leadership.
  tags:
  - disaster-recovery
  - servicenow
  - confluence
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: disaster-recovery
    port: 8080
    tools:
    - name: disaster_recovery_readiness_pipeline
      description: Orchestrate disaster recovery readiness pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-servicenow
        type: call
        call: servicenow.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-confluence
        type: call
        call: confluence.process-resource
        with:
          data: '{{get-servicenow.result}}'
      - name: create-powerbi
        type: call
        call: powerbi.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Disaster Recovery Readiness Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bain-and-company.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://bain-and-company.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: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: powerbi-op
        method: POST
Open in Framework → View in Fleet → disaster-recovery-readiness-pipeline.yml

Reviews and curates knowledge assets, updates taxonomy, publishes to repository, and notifies teams.

naftiko: '0.5'
info:
  label: Knowledge Asset Curation Pipeline
  description: Reviews and curates knowledge assets, updates taxonomy, publishes to repository, and notifies teams.
  tags:
  - knowledge
  - confluence
  - elasticsearch
  - slack
capability:
  exposes:
  - type: mcp
    namespace: knowledge
    port: 8080
    tools:
    - name: bain_knowledge_asset_curation_pipeline
      description: Orchestrate knowledge asset curation 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-elasticsearch
        type: call
        call: elasticsearch.process-resource
        with:
          data: '{{get-confluence.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Knowledge Asset Curation Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://bain-and-company.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: elasticsearch
    baseUri: https://bain-and-company-es.com:9200
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: elasticsearch-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → knowledge-asset-curation-pipeline.yml

Monitors service levels, detects SLA breaches, creates escalation tickets, and reports to management.

naftiko: '0.5'
info:
  label: SLA Compliance Monitoring Pipeline
  description: Monitors service levels, detects SLA breaches, creates escalation tickets, and reports to management.
  tags:
  - operations
  - datadog
  - servicenow
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: operations
    port: 8080
    tools:
    - name: sla_compliance_monitoring_pipeline
      description: Orchestrate sla compliance monitoring pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-datadog
        type: call
        call: datadog.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          data: '{{get-datadog.result}}'
      - name: create-powerbi
        type: call
        call: powerbi.create-resource
        with:
          channel: '{{notification_channel}}'
          text: SLA Compliance Monitoring Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
      header: DD-API-KEY
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: datadog-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bain-and-company.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: powerbi-op
        method: POST
Open in Framework → View in Fleet → sla-compliance-monitoring-pipeline.yml

Triggers a data reload for a Qlik Sense application, used to refresh analytics apps before client steering committee meetings.

naftiko: '0.5'
info:
  label: Qlik Sense App Reload
  description: Triggers a data reload for a Qlik Sense application, used to refresh analytics apps before client steering committee meetings.
  tags:
  - analytics
  - visualization
  - qlik-sense
capability:
  exposes:
  - type: mcp
    namespace: qlik-reload
    port: 8080
    tools:
    - name: reload-app
      description: Trigger a Qlik Sense app reload by app ID.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: Qlik Sense application ID.
      call: qlik.reload-app
      with:
        app_id: '{{app_id}}'
  consumes:
  - type: http
    namespace: qlik
    baseUri: https://bain.us.qlikcloud.com/api/v1
    authentication:
      type: bearer
      token: $secrets.qlik_token
    resources:
    - name: reloads
      path: /reloads
      operations:
      - name: reload-app
        method: POST
Open in Framework → View in Fleet → qlik-sense-app-reload.yml

Retrieves a ServiceNow incident by number, returning state, priority, assigned group, and resolution notes.

naftiko: '0.5'
info:
  label: ServiceNow Incident Lookup
  description: Retrieves a ServiceNow incident by number, returning state, priority, assigned group, and resolution notes.
  tags:
  - it-operations
  - support
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: itsm-lookup
    port: 8080
    tools:
    - name: get-incident
      description: Look up a ServiceNow incident by number.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number (e.g., INC0012345).
      call: servicenow.get-incident
      with:
        incident_number: '{{incident_number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bain.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident?sysparm_query=number={{incident_number}}
      inputParameters:
      - name: incident_number
        in: query
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → servicenow-incident-lookup.yml

Searches ZoomInfo for a contact by name and company, returning direct phone, email, title, and seniority level for client outreach.

naftiko: '0.5'
info:
  label: ZoomInfo Contact Enrichment
  description: Searches ZoomInfo for a contact by name and company, returning direct phone, email, title, and seniority level for client outreach.
  tags:
  - research
  - contact-enrichment
  - zoominfo
capability:
  exposes:
  - type: mcp
    namespace: contact-enrichment
    port: 8080
    tools:
    - name: enrich-contact
      description: Search ZoomInfo for a contact and return enriched profile data.
      inputParameters:
      - name: first_name
        in: body
        type: string
        description: Contact first name.
      - name: last_name
        in: body
        type: string
        description: Contact last name.
      - name: company_name
        in: body
        type: string
        description: Company name to narrow the search.
      call: zoominfo.search-contact
      with:
        first_name: '{{first_name}}'
        last_name: '{{last_name}}'
        company_name: '{{company_name}}'
  consumes:
  - type: http
    namespace: zoominfo
    baseUri: https://api.zoominfo.com
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: contact-search
      path: /search/contact
      operations:
      - name: search-contact
        method: POST
Open in Framework → View in Fleet → zoominfo-contact-enrichment.yml

Retrieves the status and performance metrics of a MailChimp email campaign, including open rate, click rate, and send count for marketing effectiveness tracking.

naftiko: '0.5'
info:
  label: MailChimp Campaign Status
  description: Retrieves the status and performance metrics of a MailChimp email campaign, including open rate, click rate, and send count for marketing effectiveness tracking.
  tags:
  - marketing
  - email
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: email-marketing
    port: 8080
    tools:
    - name: get-campaign-status
      description: Retrieve a MailChimp campaign report by campaign ID.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: MailChimp campaign ID.
      call: mailchimp.get-campaign-report
      with:
        campaign_id: '{{campaign_id}}'
  consumes:
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: basic
      username: anystring
      password: $secrets.mailchimp_api_key
    resources:
    - name: reports
      path: /reports/{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-campaign-report
        method: GET
Open in Framework → View in Fleet → mailchimp-campaign-status.yml

Assigns a Pluralsight learning path to a consultant based on their Workday skill profile, tracks completion progress, and updates their development plan in Confluence.

naftiko: '0.5'
info:
  label: Consultant Learning Path Orchestrator
  description: Assigns a Pluralsight learning path to a consultant based on their Workday skill profile, tracks completion progress, and updates their development plan in Confluence.
  tags:
  - talent
  - learning
  - pluralsight
  - workday
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: learning-path
    port: 8080
    tools:
    - name: assign-learning-path
      description: Given a consultant and skill gap, assign a Pluralsight learning path and track in Confluence.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: Workday worker ID.
      - name: skill_gap
        in: body
        type: string
        description: Skill area to develop (e.g., 'data-science', 'cloud-architecture').
      steps:
      - name: get-worker-skills
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{worker_id}}'
      - name: find-learning-path
        type: call
        call: pluralsight.search-paths
        with:
          query: '{{skill_gap}}'
      - name: assign-path
        type: call
        call: pluralsight.assign-path
        with:
          user_email: '{{get-worker-skills.work_email}}'
          path_id: '{{find-learning-path.top_path_id}}'
      - name: update-dev-plan
        type: call
        call: confluence.create-page
        with:
          space_key: TALENT
          title: 'Development Plan: {{get-worker-skills.full_name}} - {{skill_gap}}'
          body: 'Assigned Pluralsight path: {{find-learning-path.top_path_title}} ({{assign-path.estimated_hours}} hours)'
  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: pluralsight
    baseUri: https://api.pluralsight.com/api-v0.9
    authentication:
      type: bearer
      token: $secrets.pluralsight_token
    resources:
    - name: paths
      path: /paths/search
      operations:
      - name: search-paths
        method: GET
    - name: assignments
      path: /assignments
      operations:
      - name: assign-path
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://bain.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → consultant-learning-path-orchestrator.yml

Analyzes deal pipeline, runs forecast models, generates revenue projections, and updates leadership.

naftiko: '0.5'
info:
  label: Deal Pipeline Forecasting Pipeline
  description: Analyzes deal pipeline, runs forecast models, generates revenue projections, and updates leadership.
  tags:
  - sales
  - salesforce
  - snowflake
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: sales
    port: 8080
    tools:
    - name: bain_deal_pipeline_forecasting_pipeline
      description: Orchestrate deal pipeline forecasting 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-snowflake
        type: call
        call: snowflake.process-resource
        with:
          data: '{{get-salesforce.result}}'
      - name: create-powerbi
        type: call
        call: powerbi.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Deal Pipeline Forecasting Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://bain-and-company.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: snowflake
    baseUri: https://bain-and-company.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: powerbi-op
        method: POST
Open in Framework → View in Fleet → deal-pipeline-forecasting-pipeline.yml

Pulls industry revenue data from Circana, enriches with Bloomberg Economics macro indicators, runs an Alteryx sizing model, and stores results in Snowflake for Tableau visualization.

naftiko: '0.5'
info:
  label: Market Sizing Data Pipeline
  description: Pulls industry revenue data from Circana, enriches with Bloomberg Economics macro indicators, runs an Alteryx sizing model, and stores results in Snowflake for Tableau visualization.
  tags:
  - analytics
  - market-sizing
  - circana
  - bloomberg-economics
  - alteryx
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: market-sizing
    port: 8080
    tools:
    - name: run-market-sizing
      description: Given an industry code and geography, execute the market sizing pipeline from data ingestion through Snowflake storage.
      inputParameters:
      - name: industry_code
        in: body
        type: string
        description: Circana industry classification code.
      - name: geography
        in: body
        type: string
        description: Target geography (e.g., 'US', 'EU', 'APAC').
      - name: case_code
        in: body
        type: string
        description: Bain case code for output tagging.
      steps:
      - name: get-industry-data
        type: call
        call: circana.get-industry-revenue
        with:
          industry_code: '{{industry_code}}'
          geography: '{{geography}}'
      - name: get-macro-indicators
        type: call
        call: bloomberg-econ.get-indicators
        with:
          geography: '{{geography}}'
          indicators: GDP,CPI,UNEMPLOYMENT
      - name: run-sizing-model
        type: call
        call: alteryx.run-workflow
        with:
          workflow_id: market_sizing_v3
          inputs: '{{get-industry-data.dataset_id}},{{get-macro-indicators.dataset_id}}'
      - name: store-results
        type: call
        call: snowflake.insert-dataset
        with:
          database: ANALYTICS
          schema: MARKET_SIZING
          table: RESULTS_{{case_code}}
          data_source: '{{run-sizing-model.output_id}}'
  consumes:
  - type: http
    namespace: circana
    baseUri: https://api.circana.com/v2
    authentication:
      type: bearer
      token: $secrets.circana_token
    resources:
    - name: industry-revenue
      path: /industry/revenue
      operations:
      - name: get-industry-revenue
        method: GET
  - type: http
    namespace: bloomberg-econ
    baseUri: https://api.bloomberg.com/eap/economics
    authentication:
      type: bearer
      token: $secrets.bloomberg_enterprise_token
    resources:
    - name: indicators
      path: /indicators
      operations:
      - name: get-indicators
        method: GET
  - type: http
    namespace: alteryx
    baseUri: https://bain.alteryxcloud.com/api/v3
    authentication:
      type: bearer
      token: $secrets.alteryx_token
    resources:
    - name: workflows
      path: /workflows/{{workflow_id}}/run
      inputParameters:
      - name: workflow_id
        in: path
      operations:
      - name: run-workflow
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://bain.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: datasets
      path: /statements
      operations:
      - name: insert-dataset
        method: POST
Open in Framework → View in Fleet → market-sizing-data-pipeline.yml

Collects audit events, validates against policies, generates compliance reports, and notifies auditors.

naftiko: '0.5'
info:
  label: Compliance Audit Trail Pipeline
  description: Collects audit events, validates against policies, generates compliance reports, and notifies auditors.
  tags:
  - compliance
  - elasticsearch
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: compliance_audit_trail_pipeline
      description: Orchestrate compliance audit trail pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-elasticsearch
        type: call
        call: elasticsearch.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-confluence
        type: call
        call: confluence.process-resource
        with:
          data: '{{get-elasticsearch.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Compliance Audit Trail Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: elasticsearch
    baseUri: https://bain-and-company-es.com:9200
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: elasticsearch-op
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://bain-and-company.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: confluence-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → compliance-audit-trail-pipeline.yml

Audits license usage, identifies underutilized licenses, recommends optimization, and notifies IT.

naftiko: '0.5'
info:
  label: Software License Optimization Pipeline
  description: Audits license usage, identifies underutilized licenses, recommends optimization, and notifies IT.
  tags:
  - operations
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: operations
    port: 8080
    tools:
    - name: software_license_optimization
      description: Orchestrate software license optimization pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-servicenow
        type: call
        call: servicenow.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          data: '{{get-servicenow.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Software License Optimization Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bain-and-company.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://bain-and-company.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → software-license-optimization-pipeline.yml

On case completion, archives the SharePoint case folder, closes the Salesforce opportunity, publishes final deliverables to Confluence, and sends a closeout summary to the case team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Case Closeout Orchestrator
  description: On case completion, archives the SharePoint case folder, closes the Salesforce opportunity, publishes final deliverables to Confluence, and sends a closeout summary to the case team via Microsoft Teams.
  tags:
  - consulting
  - case-management
  - sharepoint
  - salesforce
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: case-closeout
    port: 8080
    tools:
    - name: close-case
      description: Given a case code, archive documents, close CRM records, publish deliverables, and notify the team.
      inputParameters:
      - name: case_code
        in: body
        type: string
        description: Bain case code.
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID.
      - name: team_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID for the case team.
      steps:
      - name: archive-folder
        type: call
        call: sharepoint.move-folder
        with:
          site_id: case_management_site
          source_path: Cases/{{case_code}}
          destination_path: Archive/{{case_code}}
      - name: close-opportunity
        type: call
        call: salesforce.update-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
          stage: Closed Won
      - name: publish-deliverables
        type: call
        call: confluence.create-page
        with:
          space_key: DELIVERABLES
          title: 'Final Deliverables: {{case_code}}'
          body: 'Case {{case_code}} completed. Archive: {{archive-folder.url}}'
      - name: notify-team
        type: call
        call: msteams.send-channel-message
        with:
          channel_id: '{{team_channel_id}}'
          text: 'Case {{case_code}} has been closed out. Deliverables: {{publish-deliverables.url}} | Archive: {{archive-folder.url}}'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{source_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: source_path
        in: path
      operations:
      - name: move-folder
        method: PATCH
  - type: http
    namespace: salesforce
    baseUri: https://bain.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://bain.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/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → case-closeout-orchestrator.yml

Pulls industry benchmark data from Circana, financial comps from Bloomberg, and historical client data from Snowflake, then publishes a benchmarking analysis to Confluence.

naftiko: '0.5'
info:
  label: Industry Benchmarking Pipeline
  description: Pulls industry benchmark data from Circana, financial comps from Bloomberg, and historical client data from Snowflake, then publishes a benchmarking analysis to Confluence.
  tags:
  - analytics
  - benchmarking
  - circana
  - bloomberg-enterprise-data
  - snowflake
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: benchmarking
    port: 8080
    tools:
    - name: run-benchmarking
      description: Given an industry and metrics, run a benchmarking analysis across multiple data sources.
      inputParameters:
      - name: industry_code
        in: body
        type: string
        description: Circana industry code.
      - name: metrics
        in: body
        type: string
        description: Comma-separated metrics to benchmark (e.g., 'revenue_growth,margin,roic').
      - name: case_code
        in: body
        type: string
        description: Bain case code.
      steps:
      - name: get-industry-benchmarks
        type: call
        call: circana.get-benchmarks
        with:
          industry_code: '{{industry_code}}'
          metrics: '{{metrics}}'
      - name: get-financial-comps
        type: call
        call: bloomberg.screen-companies
        with:
          sector: '{{industry_code}}'
          fields: '{{metrics}}'
      - name: get-historical-data
        type: call
        call: snowflake.execute-statement
        with:
          database: ANALYTICS
          statement: SELECT * FROM BENCHMARKS WHERE industry='{{industry_code}}' ORDER BY year DESC
      - name: publish-analysis
        type: call
        call: confluence.create-page
        with:
          space_key: '{{case_code}}'
          title: 'Industry Benchmarking: {{industry_code}}'
          body: 'Industry median: {{get-industry-benchmarks.median_values}} | Peer set: {{get-financial-comps.peer_count}} companies | Historical trend: {{get-historical-data.row_count}} years'
  consumes:
  - type: http
    namespace: circana
    baseUri: https://api.circana.com/v2
    authentication:
      type: bearer
      token: $secrets.circana_token
    resources:
    - name: benchmarks
      path: /industry/benchmarks
      operations:
      - name: get-benchmarks
        method: GET
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap
    authentication:
      type: bearer
      token: $secrets.bloomberg_enterprise_token
    resources:
    - name: screening
      path: /screening
      operations:
      - name: screen-companies
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://bain.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://bain.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → industry-benchmarking-pipeline.yml

Screens potential acquisition targets by pulling financials from Bloomberg, ownership data from ZoomInfo, patent counts from Google, and compiles a screening matrix in Snowflake for Tableau visualization.

naftiko: '0.5'
info:
  label: M&A Target Screening Pipeline
  description: Screens potential acquisition targets by pulling financials from Bloomberg, ownership data from ZoomInfo, patent counts from Google, and compiles a screening matrix in Snowflake for Tableau visualization.
  tags:
  - m-and-a
  - due-diligence
  - bloomberg-enterprise-data
  - zoominfo
  - snowflake
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: ma-screening
    port: 8080
    tools:
    - name: screen-targets
      description: Given sector criteria and deal parameters, screen M&A targets across multiple data sources.
      inputParameters:
      - name: sector
        in: body
        type: string
        description: Industry sector for screening.
      - name: min_revenue
        in: body
        type: string
        description: Minimum revenue threshold in millions.
      - name: geography
        in: body
        type: string
        description: Target geography.
      - name: case_code
        in: body
        type: string
        description: Bain case code.
      steps:
      - name: get-sector-companies
        type: call
        call: bloomberg.screen-companies
        with:
          sector: '{{sector}}'
          min_revenue: '{{min_revenue}}'
          geography: '{{geography}}'
      - name: enrich-ownership
        type: call
        call: zoominfo.search-company
        with:
          company_list: '{{get-sector-companies.company_ids}}'
      - name: store-screening
        type: call
        call: snowflake.execute-statement
        with:
          database: DEALS
          statement: INSERT INTO MA_SCREENING (case_code, sector, results) VALUES ('{{case_code}}', '{{sector}}', '{{enrich-ownership.dataset_id}}')
      - name: refresh-dashboard
        type: call
        call: tableau.refresh-extract
        with:
          datasource_id: ma_screening_{{case_code}}
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap
    authentication:
      type: bearer
      token: $secrets.bloomberg_enterprise_token
    resources:
    - name: screening
      path: /screening
      operations:
      - name: screen-companies
        method: POST
  - type: http
    namespace: zoominfo
    baseUri: https://api.zoominfo.com
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: company-search
      path: /search/company
      operations:
      - name: search-company
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://bain.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://bain.online.tableau.com/api/3.21
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /sites/{{site_id}}/datasources/{{datasource_id}}/refresh
      inputParameters:
      - name: site_id
        in: path
      - name: datasource_id
        in: path
      operations:
      - name: refresh-extract
        method: POST
Open in Framework → View in Fleet → m-a-target-screening-pipeline.yml

After a client meeting, logs the activity in Salesforce, uploads meeting notes to SharePoint, and updates the engagement timeline in Microsoft Project.

naftiko: '0.5'
info:
  label: Client CRM Activity Logger
  description: After a client meeting, logs the activity in Salesforce, uploads meeting notes to SharePoint, and updates the engagement timeline in Microsoft Project.
  tags:
  - client-engagement
  - crm
  - salesforce
  - sharepoint
  - microsoft-project
capability:
  exposes:
  - type: mcp
    namespace: crm-activity-log
    port: 8080
    tools:
    - name: log-client-activity
      description: Log a client meeting activity across Salesforce, SharePoint, and Microsoft Project.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID.
      - name: meeting_subject
        in: body
        type: string
        description: Subject of the client meeting.
      - name: meeting_notes
        in: body
        type: string
        description: Summary notes from the meeting.
      - name: case_code
        in: body
        type: string
        description: Bain case code.
      steps:
      - name: create-activity
        type: call
        call: salesforce.create-task
        with:
          what_id: '{{opportunity_id}}'
          subject: '{{meeting_subject}}'
          description: '{{meeting_notes}}'
          status: Completed
      - name: upload-notes
        type: call
        call: sharepoint.upload-file
        with:
          site_id: case_management_site
          folder_path: Cases/{{case_code}}/MeetingNotes
          file_name: '{{meeting_subject}}_{{$now}}.md'
          content: '{{meeting_notes}}'
      - name: update-timeline
        type: call
        call: msproject.update-task
        with:
          project_id: '{{case_code}}'
          task_name: '{{meeting_subject}}'
          percent_complete: '100'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://bain.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: tasks
      path: /sobjects/Task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: 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: msproject
    baseUri: https://graph.microsoft.com/v1.0/planner
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: tasks
      path: /tasks
      operations:
      - name: update-task
        method: PATCH
Open in Framework → View in Fleet → client-crm-activity-logger.yml

Retrieves a Salesforce opportunity by ID, enriches it with the account contact from HubSpot, and posts a deal summary to the partner in Microsoft Teams.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Enrichment
  description: Retrieves a Salesforce opportunity by ID, enriches it with the account contact from HubSpot, and posts a deal summary to the partner in Microsoft Teams.
  tags:
  - sales
  - crm
  - salesforce
  - hubspot
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: crm-lookup
    port: 8080
    tools:
    - name: enrich-opportunity
      description: Look up a Salesforce opportunity, enrich with HubSpot contact data, and notify the partner.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID.
      - name: partner_email
        in: body
        type: string
        description: Partner email for notification.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: enrich-contact
        type: call
        call: hubspot.get-contact
        with:
          email: '{{get-opportunity.contact_email}}'
      - name: notify-partner
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{partner_email}}'
          text: 'Deal update: {{get-opportunity.account_name}} ({{get-opportunity.stage}}) - Amount: {{get-opportunity.amount}} | Contact: {{enrich-contact.full_name}}, {{enrich-contact.title}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://bain.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /crm/v3/objects/contacts/{{email}}?idProperty=email
      inputParameters:
      - name: email
        in: path
      operations:
      - name: get-contact
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chat-messages
      path: /users/{{recipient_upn}}/chats
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-opportunity-enrichment.yml

Retrieves the details of a support ticket. Used by Bain and Company teams.

naftiko: '0.5'
info:
  label: Bain and Company Ticket Details Lookup
  description: Retrieves the details of a support ticket. Used by Bain and Company teams.
  tags:
  - consulting
  - slack
capability:
  exposes:
  - type: mcp
    namespace: slack
    port: 8080
    tools:
    - name: get-ticket_details_lookup
      description: Retrieves the details of a support ticket. Used by Bain and Company teams.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: The ticket_id to look up.
      call: slack.get-ticket_id
      with:
        ticket_id: '{{ticket_id}}'
  consumes:
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: bain_ticket_details_lookup
        method: GET
Open in Framework → View in Fleet → bain-and-company-ticket-details-lookup.yml

For M&A engagements, pulls revenue data for acquirer and target from Bloomberg, customer overlap from Snowflake, and market opportunity from Circana, then compiles a synergy estimate in Confluence.

naftiko: '0.5'
info:
  label: Revenue Synergy Analysis Pipeline
  description: For M&A engagements, pulls revenue data for acquirer and target from Bloomberg, customer overlap from Snowflake, and market opportunity from Circana, then compiles a synergy estimate in Confluence.
  tags:
  - m-and-a
  - due-diligence
  - revenue-synergies
  - bloomberg-enterprise-data
  - snowflake
  - circana
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: revenue-synergy
    port: 8080
    tools:
    - name: analyze-revenue-synergies
      description: Given acquirer and target tickers, analyze revenue synergy potential across data sources.
      inputParameters:
      - name: acquirer_ticker
        in: body
        type: string
        description: Bloomberg ticker for the acquirer.
      - name: target_ticker
        in: body
        type: string
        description: Bloomberg ticker for the target.
      - name: case_code
        in: body
        type: string
        description: Bain case code.
      steps:
      - name: get-acquirer-revenue
        type: call
        call: bloomberg.get-company
        with:
          ticker: '{{acquirer_ticker}}'
      - name: get-target-revenue
        type: call
        call: bloomberg.get-company
        with:
          ticker: '{{target_ticker}}'
      - name: get-customer-overlap
        type: call
        call: snowflake.execute-statement
        with:
          database: DEALS
          statement: SELECT overlap_pct FROM CUSTOMER_OVERLAP WHERE acquirer='{{acquirer_ticker}}' AND target='{{target_ticker}}'
      - name: get-market-opportunity
        type: call
        call: circana.get-industry-revenue
        with:
          industry_code: '{{get-target-revenue.sector}}'
          geography: GLOBAL
      - name: publish-synergy-analysis
        type: call
        call: confluence.create-page
        with:
          space_key: '{{case_code}}'
          title: 'Revenue Synergy Analysis: {{acquirer_ticker}} + {{target_ticker}}'
          body: 'Acquirer revenue: {{get-acquirer-revenue.revenue}} | Target revenue: {{get-target-revenue.revenue}} | Customer overlap: {{get-customer-overlap.overlap_pct}}% | Market size: {{get-market-opportunity.total_revenue}}'
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap
    authentication:
      type: bearer
      token: $secrets.bloomberg_enterprise_token
    resources:
    - name: companies
      path: /companies/{{ticker}}
      inputParameters:
      - name: ticker
        in: path
      operations:
      - name: get-company
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://bain.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: circana
    baseUri: https://api.circana.com/v2
    authentication:
      type: bearer
      token: $secrets.circana_token
    resources:
    - name: industry-revenue
      path: /industry/revenue
      operations:
      - name: get-industry-revenue
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://bain.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → revenue-synergy-analysis-pipeline.yml

Aggregates market data, runs analytical models, generates insights, and distributes to consultants.

naftiko: '0.5'
info:
  label: Market Analysis Data Pipeline
  description: Aggregates market data, runs analytical models, generates insights, and distributes to consultants.
  tags:
  - research
  - snowflake
  - powerbi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: research
    port: 8080
    tools:
    - name: bain_market_analysis_data_pipeline
      description: Orchestrate market analysis data pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-snowflake
        type: call
        call: snowflake.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-powerbi
        type: call
        call: powerbi.process-resource
        with:
          data: '{{get-snowflake.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Market Analysis Data Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bain-and-company.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: powerbi-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → market-analysis-data-pipeline.yml

Queries Workday for consultant utilization rates, pulls billing data from Oracle E-Business Suite, computes metrics in Alteryx, and distributes the report via Microsoft Outlook and uploads to SharePoint.

naftiko: '0.5'
info:
  label: Weekly Utilization Report Generator
  description: Queries Workday for consultant utilization rates, pulls billing data from Oracle E-Business Suite, computes metrics in Alteryx, and distributes the report via Microsoft Outlook and uploads to SharePoint.
  tags:
  - operations
  - utilization
  - workday
  - oracle-e-business-suite
  - alteryx
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: utilization-report
    port: 8080
    tools:
    - name: generate-utilization-report
      description: Generate the weekly utilization report across Workday time data and Oracle billing.
      inputParameters:
      - name: week_ending
        in: body
        type: string
        description: Week ending date (YYYY-MM-DD).
      - name: office
        in: body
        type: string
        description: Office location filter.
      - name: ops_lead_email
        in: body
        type: string
        description: Operations lead email for distribution.
      steps:
      - name: get-time-data
        type: call
        call: workday.get-time-entries
        with:
          week_ending: '{{week_ending}}'
          office: '{{office}}'
      - name: get-billing-data
        type: call
        call: oracle-ebs.get-billing
        with:
          period: '{{week_ending}}'
          office: '{{office}}'
      - name: compute-metrics
        type: call
        call: alteryx.run-workflow
        with:
          workflow_id: weekly_utilization_v2
          inputs: '{{get-time-data.dataset_id}},{{get-billing-data.dataset_id}}'
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: operations_site
          folder_path: Utilization/{{week_ending}}
          file_name: Utilization_{{office}}_{{week_ending}}.xlsx
          content: '{{compute-metrics.output_file}}'
      - name: distribute-report
        type: call
        call: outlook.send-email
        with:
          to: '{{ops_lead_email}}'
          subject: Weekly Utilization Report - {{office}} - {{week_ending}}
          body: 'Report uploaded: {{upload-report.url}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: time-entries
      path: /time-tracking/entries
      operations:
      - name: get-time-entries
        method: GET
  - type: http
    namespace: oracle-ebs
    baseUri: https://bain-ebs.oracle.com/webservices/rest
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: billing
      path: /billing/summary
      operations:
      - name: get-billing
        method: GET
  - type: http
    namespace: alteryx
    baseUri: https://bain.alteryxcloud.com/api/v3
    authentication:
      type: bearer
      token: $secrets.alteryx_token
    resources:
    - name: workflows
      path: /workflows/{{workflow_id}}/run
      inputParameters:
      - name: workflow_id
        in: path
      operations:
      - name: run-workflow
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → weekly-utilization-report-generator.yml

Retrieves target financials from Bloomberg, pulls comparable transactions from Snowflake, generates a valuation model in Alteryx, and uploads the output to Google Drive for partner review.

naftiko: '0.5'
info:
  label: Deal Financial Model Builder
  description: Retrieves target financials from Bloomberg, pulls comparable transactions from Snowflake, generates a valuation model in Alteryx, and uploads the output to Google Drive for partner review.
  tags:
  - due-diligence
  - financial-modeling
  - bloomberg-enterprise-data
  - snowflake
  - alteryx
  - google-drive
capability:
  exposes:
  - type: mcp
    namespace: deal-modeling
    port: 8080
    tools:
    - name: build-financial-model
      description: Given a target company ticker and case code, build a financial model from Bloomberg data, comps from Snowflake, and Alteryx modeling.
      inputParameters:
      - name: bloomberg_ticker
        in: body
        type: string
        description: Bloomberg ticker for the target.
      - name: case_code
        in: body
        type: string
        description: Bain case code.
      - name: partner_email
        in: body
        type: string
        description: Partner email for review notification.
      steps:
      - name: get-target-financials
        type: call
        call: bloomberg.get-company
        with:
          ticker: '{{bloomberg_ticker}}'
      - name: get-comps
        type: call
        call: snowflake.execute-statement
        with:
          database: DEALS
          statement: SELECT * FROM COMPS WHERE sector='{{get-target-financials.sector}}' ORDER BY close_date DESC LIMIT 10
      - name: run-valuation
        type: call
        call: alteryx.run-workflow
        with:
          workflow_id: dcf_model_v2
          inputs: '{{get-target-financials.dataset_id}},{{get-comps.result_id}}'
      - name: upload-model
        type: call
        call: google-drive.upload-file
        with:
          folder_id: case_{{case_code}}_models
          file_name: Valuation_{{bloomberg_ticker}}_{{$now}}.xlsx
          content: '{{run-valuation.output_file}}'
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap
    authentication:
      type: bearer
      token: $secrets.bloomberg_enterprise_token
    resources:
    - name: companies
      path: /companies/{{ticker}}
      inputParameters:
      - name: ticker
        in: path
      operations:
      - name: get-company
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://bain.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: alteryx
    baseUri: https://bain.alteryxcloud.com/api/v3
    authentication:
      type: bearer
      token: $secrets.alteryx_token
    resources:
    - name: workflows
      path: /workflows/{{workflow_id}}/run
      inputParameters:
      - name: workflow_id
        in: path
      operations:
      - name: run-workflow
        method: POST
  - type: http
    namespace: google-drive
    baseUri: https://www.googleapis.com/upload/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_drive_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → deal-financial-model-builder.yml

Evaluates vendor security posture, scores risk, creates assessment records, and notifies procurement.

naftiko: '0.5'
info:
  label: Vendor Risk Assessment Pipeline
  description: Evaluates vendor security posture, scores risk, creates assessment records, and notifies procurement.
  tags:
  - procurement
  - servicenow
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: procurement
    port: 8080
    tools:
    - name: vendor_risk_assessment_pipeline
      description: Orchestrate vendor risk assessment pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-servicenow
        type: call
        call: servicenow.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-confluence
        type: call
        call: confluence.process-resource
        with:
          data: '{{get-servicenow.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Vendor Risk Assessment Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bain-and-company.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://bain-and-company.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: confluence-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → vendor-risk-assessment-pipeline.yml

Retrieves code repository information. Used by Bain and Company teams.

naftiko: '0.5'
info:
  label: Bain and Company Repository Info Lookup
  description: Retrieves code repository information. Used by Bain and Company teams.
  tags:
  - consulting
  - grafana
capability:
  exposes:
  - type: mcp
    namespace: grafana
    port: 8080
    tools:
    - name: get-repository_info_lookup
      description: Retrieves code repository information. Used by Bain and Company teams.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: The repo_name to look up.
      call: grafana.get-repo_name
      with:
        repo_name: '{{repo_name}}'
  consumes:
  - type: http
    namespace: grafana
    baseUri: https://bain-and-company-grafana.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_api_key
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: bain_repository_info_lookup
        method: GET
Open in Framework → View in Fleet → bain-and-company-repository-info-lookup.yml

Runs a Splunk search for security anomalies, creates a ServiceNow incident if threats are found, and notifies the security operations team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Splunk Security Incident Pipeline
  description: Runs a Splunk search for security anomalies, creates a ServiceNow incident if threats are found, and notifies the security operations team in Microsoft Teams.
  tags:
  - it-operations
  - security
  - splunk
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: log-analysis
    port: 8080
    tools:
    - name: investigate-security-event
      description: Search Splunk for security anomalies, create a ServiceNow incident, and alert the SOC team.
      inputParameters:
      - name: search_query
        in: body
        type: string
        description: Splunk SPL search query.
      - name: earliest
        in: body
        type: string
        description: Earliest time bound (e.g., '-24h').
      - name: soc_channel_id
        in: body
        type: string
        description: Microsoft Teams SOC channel ID.
      steps:
      - name: search-logs
        type: call
        call: splunk.create-search
        with:
          search: '{{search_query}}'
          earliest_time: '{{earliest}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Security anomaly detected: {{search-logs.event_count}} events'
          category: security
          priority: '2'
          description: 'Splunk search: {{search_query}} | Results: {{search-logs.event_count}} events found'
      - name: alert-soc
        type: call
        call: msteams.send-channel-message
        with:
          channel_id: '{{soc_channel_id}}'
          text: 'Security alert: {{search-logs.event_count}} anomalies detected. Incident: {{create-incident.number}}'
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://bain-splunk.splunkcloud.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search-jobs
      path: /search/jobs
      operations:
      - name: create-search
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bain.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → splunk-security-incident-pipeline.yml

Retrieves metadata for a Tableau workbook by name, including last refresh time, owner, and embedded data source details.

naftiko: '0.5'
info:
  label: Tableau Workbook Lookup
  description: Retrieves metadata for a Tableau workbook by name, including last refresh time, owner, and embedded data source details.
  tags:
  - analytics
  - visualization
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: tableau-lookup
    port: 8080
    tools:
    - name: get-workbook
      description: Look up a Tableau workbook by name and return metadata.
      inputParameters:
      - name: workbook_name
        in: body
        type: string
        description: Name of the Tableau workbook.
      call: tableau.get-workbook
      with:
        workbook_name: '{{workbook_name}}'
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://bain.online.tableau.com/api/3.21
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/{{site_id}}/workbooks
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: get-workbook
        method: GET
Open in Framework → View in Fleet → tableau-workbook-lookup.yml

Tracks consultant allocation, calculates utilization rates, identifies gaps, and notifies staffing.

naftiko: '0.5'
info:
  label: Consultant Utilization Pipeline
  description: Tracks consultant allocation, calculates utilization rates, identifies gaps, and notifies staffing.
  tags:
  - operations
  - workday
  - powerbi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: operations
    port: 8080
    tools:
    - name: bain_consultant_utilization_pipeline
      description: Orchestrate consultant utilization pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-workday
        type: call
        call: workday.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-powerbi
        type: call
        call: powerbi.process-resource
        with:
          data: '{{get-workday.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Consultant Utilization Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/bain-and-company
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: workday-op
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: powerbi-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → consultant-utilization-pipeline.yml

Identifies deprecated API consumers, sends migration notices, tracks adoption, and reports progress.

naftiko: '0.5'
info:
  label: API Deprecation Notice Pipeline
  description: Identifies deprecated API consumers, sends migration notices, tracks adoption, and reports progress.
  tags:
  - engineering
  - datadog
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: engineering
    port: 8080
    tools:
    - name: api_deprecation_notice_pipeline
      description: Orchestrate api deprecation notice pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-datadog
        type: call
        call: datadog.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-jira
        type: call
        call: jira.process-resource
        with:
          data: '{{get-datadog.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: API Deprecation Notice Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
      header: DD-API-KEY
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: datadog-op
        method: POST
  - type: http
    namespace: jira
    baseUri: https://bain-and-company.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → api-deprecation-notice-pipeline.yml

Generates a PowerPoint deck by pulling case data from Snowflake, charts from Tableau, and client branding from SharePoint, then uploads the assembled deck to Google Drive for review.

naftiko: '0.5'
info:
  label: Client Presentation Builder
  description: Generates a PowerPoint deck by pulling case data from Snowflake, charts from Tableau, and client branding from SharePoint, then uploads the assembled deck to Google Drive for review.
  tags:
  - consulting
  - presentations
  - snowflake
  - tableau
  - sharepoint
  - google-drive
capability:
  exposes:
  - type: mcp
    namespace: deck-builder
    port: 8080
    tools:
    - name: build-presentation
      description: Given a case code and template, assemble a client presentation from analytics and branding assets.
      inputParameters:
      - name: case_code
        in: body
        type: string
        description: Bain case code.
      - name: template_id
        in: body
        type: string
        description: PowerPoint template identifier from SharePoint.
      - name: tableau_workbook
        in: body
        type: string
        description: Tableau workbook name for chart exports.
      steps:
      - name: get-case-data
        type: call
        call: snowflake.execute-statement
        with:
          database: ANALYTICS
          statement: SELECT * FROM CASE_SUMMARY WHERE case_code='{{case_code}}'
      - name: export-charts
        type: call
        call: tableau.export-views
        with:
          workbook_name: '{{tableau_workbook}}'
          format: png
      - name: get-template
        type: call
        call: sharepoint.get-file
        with:
          site_id: brand_assets
          file_path: Templates/{{template_id}}.pptx
      - name: upload-deck
        type: call
        call: google-drive.upload-file
        with:
          folder_id: case_{{case_code}}_decks
          file_name: '{{case_code}}_presentation_{{$now}}.pptx'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bain.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://bain.online.tableau.com/api/3.21
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: views
      path: /sites/{{site_id}}/views/{{view_id}}/image
      inputParameters:
      - name: site_id
        in: path
      - name: view_id
        in: path
      operations:
      - name: export-views
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: get-file
        method: GET
  - type: http
    namespace: google-drive
    baseUri: https://www.googleapis.com/upload/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_drive_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → client-presentation-builder.yml

Collects access entitlements, routes for review, revokes expired access, and creates audit records.

naftiko: '0.5'
info:
  label: Access Review Certification Pipeline
  description: Collects access entitlements, routes for review, revokes expired access, and creates audit records.
  tags:
  - security
  - okta
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: security
    port: 8080
    tools:
    - name: access_review_certification_pipeline
      description: Orchestrate access review certification pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-okta
        type: call
        call: okta.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          data: '{{get-okta.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Access Review Certification Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: okta
    baseUri: https://bain-and-company.okta.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.okta_api_token
      header: Authorization
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: okta-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bain-and-company.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → access-review-certification-pipeline.yml

Aggregates customer data from multiple sources, deduplicates, enriches profiles, and syncs to CRM.

naftiko: '0.5'
info:
  label: Customer 360 Data Sync Pipeline
  description: Aggregates customer data from multiple sources, deduplicates, enriches profiles, and syncs to CRM.
  tags:
  - data
  - snowflake
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: data
    port: 8080
    tools:
    - name: customer_360_data_sync_pipeline
      description: Orchestrate customer 360 data sync pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-snowflake
        type: call
        call: snowflake.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-salesforce
        type: call
        call: salesforce.process-resource
        with:
          data: '{{get-snowflake.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Customer 360 Data Sync Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bain-and-company.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://bain-and-company.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: salesforce-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → customer-360-data-sync-pipeline.yml

Creates project workspace, provisions tools access, generates kickoff materials, and notifies the case team.

naftiko: '0.5'
info:
  label: Client Engagement Setup Pipeline
  description: Creates project workspace, provisions tools access, generates kickoff materials, and notifies the case team.
  tags:
  - engagement
  - confluence
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: engagement
    port: 8080
    tools:
    - name: client_engagement_setup_pipeline
      description: Orchestrate client engagement setup pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-confluence
        type: call
        call: confluence.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-jira
        type: call
        call: jira.process-resource
        with:
          data: '{{get-confluence.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Client Engagement Setup Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://bain-and-company.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://bain-and-company.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → client-engagement-setup-pipeline.yml

Checks availability of an API endpoint. Used by Bain and Company teams.

naftiko: '0.5'
info:
  label: Bain and Company API Endpoint Status
  description: Checks availability of an API endpoint. Used by Bain and Company teams.
  tags:
  - consulting
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: datadog
    port: 8080
    tools:
    - name: get-api_endpoint_status
      description: Checks availability of an API endpoint. Used by Bain and Company teams.
      inputParameters:
      - name: endpoint_url
        in: body
        type: string
        description: The endpoint_url to look up.
      call: datadog.get-endpoint_url
      with:
        endpoint_url: '{{endpoint_url}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
      header: DD-API-KEY
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: bain_api_endpoint_status
        method: GET
Open in Framework → View in Fleet → bain-and-company-api-endpoint-status.yml

Fetches Bloomberg Intelligence research for a sector, cross-references with Factiva news coverage, and publishes a consolidated briefing to the case team Confluence space.

naftiko: '0.5'
info:
  label: Bloomberg Intelligence Briefing Pipeline
  description: Fetches Bloomberg Intelligence research for a sector, cross-references with Factiva news coverage, and publishes a consolidated briefing to the case team Confluence space.
  tags:
  - research
  - market-intelligence
  - bloomberg-intelligence
  - factiva
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: market-research
    port: 8080
    tools:
    - name: build-sector-briefing
      description: Given a sector and case code, build a consolidated BI briefing from Bloomberg and Factiva into Confluence.
      inputParameters:
      - name: sector
        in: body
        type: string
        description: The BI sector code (e.g., TECH, HLTH).
      - name: date_from
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: case_code
        in: body
        type: string
        description: Bain case code.
      steps:
      - name: get-bi-research
        type: call
        call: bloomberg-intel.get-research
        with:
          sector: '{{sector}}'
          date_from: '{{date_from}}'
      - name: get-news-coverage
        type: call
        call: factiva.search-articles
        with:
          query: '{{sector}}'
          date_range: '{{date_from}}'
      - name: publish-briefing
        type: call
        call: confluence.create-page
        with:
          space_key: '{{case_code}}'
          title: 'Sector Briefing: {{sector}} - {{date_from}}'
          body: 'BI research notes: {{get-bi-research.note_count}} | Key themes: {{get-bi-research.themes}} | News articles: {{get-news-coverage.article_count}}'
  consumes:
  - type: http
    namespace: bloomberg-intel
    baseUri: https://api.bloomberg.com/eap/intelligence
    authentication:
      type: bearer
      token: $secrets.bloomberg_enterprise_token
    resources:
    - name: research-notes
      path: /research?sector={{sector}}&from={{date_from}}
      inputParameters:
      - name: sector
        in: query
      - name: date_from
        in: query
      operations:
      - name: get-research
        method: GET
  - type: http
    namespace: factiva
    baseUri: https://api.dowjones.com/content
    authentication:
      type: bearer
      token: $secrets.factiva_token
    resources:
    - name: articles
      path: /articles
      operations:
      - name: search-articles
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://bain.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → bloomberg-intelligence-briefing-pipeline.yml

Finds expert contacts in ZoomInfo, sends interview requests via Microsoft Outlook, creates calendar holds, and tracks responses in a Salesforce activity log for knowledge gathering during case work.

naftiko: '0.5'
info:
  label: Expert Interview Scheduling Pipeline
  description: Finds expert contacts in ZoomInfo, sends interview requests via Microsoft Outlook, creates calendar holds, and tracks responses in a Salesforce activity log for knowledge gathering during case work.
  tags:
  - research
  - expert-interviews
  - zoominfo
  - microsoft-outlook
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: expert-scheduling
    port: 8080
    tools:
    - name: schedule-expert-interview
      description: Given expert criteria, find contacts, send requests, and track in Salesforce.
      inputParameters:
      - name: industry
        in: body
        type: string
        description: Industry vertical for expert search.
      - name: title_keywords
        in: body
        type: string
        description: Job title keywords (e.g., 'VP Supply Chain').
      - name: case_code
        in: body
        type: string
        description: Bain case code.
      - name: analyst_email
        in: body
        type: string
        description: Email of the requesting analyst.
      steps:
      - name: find-experts
        type: call
        call: zoominfo.search-contact
        with:
          job_title: '{{title_keywords}}'
          industry: '{{industry}}'
          seniority: VP,Director,C-Level
      - name: send-request
        type: call
        call: outlook.send-email
        with:
          to: '{{find-experts.top_contact_email}}'
          subject: Expert Interview Request - {{industry}} Insights
          body: We are conducting research on {{industry}} trends and would value your perspective. Would you be available for a 30-minute call?
      - name: create-calendar-hold
        type: call
        call: outlook.create-event
        with:
          subject: 'Expert Interview: {{find-experts.top_contact_name}}'
          attendees: '{{analyst_email}}'
          duration: '30'
      - name: log-activity
        type: call
        call: salesforce.create-task
        with:
          subject: 'Expert interview request: {{find-experts.top_contact_name}}'
          description: Sent to {{find-experts.top_contact_email}} for {{case_code}}
          status: In Progress
  consumes:
  - type: http
    namespace: zoominfo
    baseUri: https://api.zoominfo.com
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: contact-search
      path: /search/contact
      operations:
      - name: search-contact
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
    - name: events
      path: /me/events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://bain.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: tasks
      path: /sobjects/Task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → expert-interview-scheduling-pipeline.yml

On new hire creation in Workday, provisions a Microsoft 365 account, creates a ServiceNow onboarding ticket, adds to the appropriate Microsoft Teams channels, and sends a welcome email via Outlook.

naftiko: '0.5'
info:
  label: New Hire Onboarding Orchestrator
  description: On new hire creation in Workday, provisions a Microsoft 365 account, creates a ServiceNow onboarding ticket, adds to the appropriate Microsoft Teams channels, and sends a welcome email via Outlook.
  tags:
  - hr
  - onboarding
  - workday
  - servicenow
  - microsoft-teams
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: hr-onboarding
    port: 8080
    tools:
    - name: trigger-onboarding
      description: Given a Workday employee ID and start date, orchestrate the full onboarding sequence.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: The Workday worker ID for the new hire.
      - name: start_date
        in: body
        type: string
        description: Employee start date (YYYY-MM-DD).
      - name: office_location
        in: body
        type: string
        description: Office location (e.g., 'Boston', 'London', 'Mumbai').
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: open-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'New hire onboarding: {{get-employee.full_name}}'
          category: hr_onboarding
          assigned_group: IT_Onboarding_{{office_location}}
      - name: add-to-teams
        type: call
        call: msteams.add-member
        with:
          team_id: consulting_{{office_location}}
          user_upn: '{{get-employee.work_email}}'
      - name: send-welcome
        type: call
        call: outlook.send-email
        with:
          to: '{{get-employee.work_email}}'
          subject: Welcome to Bain & Company
          body: Welcome {{get-employee.first_name}}! Your onboarding ticket is {{open-ticket.number}}. You have been added to the {{office_location}} consulting team channel.
  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://bain.service-now.com/api/now
    authentication:
      type: 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: team-members
      path: /teams/{{team_id}}/members
      inputParameters:
      - name: team_id
        in: path
      operations:
      - name: add-member
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → new-hire-onboarding-orchestrator.yml

Detects security incidents, enriches with context, creates response tickets, and notifies the SOC.

naftiko: '0.5'
info:
  label: Security Incident Response Pipeline
  description: Detects security incidents, enriches with context, creates response tickets, and notifies the SOC.
  tags:
  - security
  - splunk
  - servicenow
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: security
    port: 8080
    tools:
    - name: security_incident_response_pipeline
      description: Orchestrate security incident response pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-salesforce
        type: call
        call: salesforce.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          data: '{{get-salesforce.result}}'
      - name: create-powerbi
        type: call
        call: powerbi.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Security Incident Response Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://bain-and-company.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: salesforce-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bain-and-company.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: powerbi-op
        method: POST
Open in Framework → View in Fleet → security-incident-response-pipeline.yml

Pulls case context from Confluence, sends it to OpenAI for hypothesis generation, and publishes the structured analysis back to the case Confluence space for team review.

naftiko: '0.5'
info:
  label: AI-Powered Case Hypothesis Generator
  description: Pulls case context from Confluence, sends it to OpenAI for hypothesis generation, and publishes the structured analysis back to the case Confluence space for team review.
  tags:
  - artificial-intelligence
  - research
  - openai
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: ai-insights
    port: 8080
    tools:
    - name: generate-hypotheses
      description: Given a case code, pull context from Confluence, generate AI hypotheses, and publish results.
      inputParameters:
      - name: case_code
        in: body
        type: string
        description: Bain case code.
      - name: focus_area
        in: body
        type: string
        description: Specific area of analysis (e.g., 'growth strategy', 'cost reduction').
      steps:
      - name: get-case-context
        type: call
        call: confluence.search
        with:
          cql: space="{{case_code}}" AND type=page ORDER BY lastModified DESC
      - name: generate-insights
        type: call
        call: openai.create-completion
        with:
          model: gpt-4
          prompt: 'Based on this case context: {{get-case-context.excerpts}}. Generate hypotheses for {{focus_area}}.'
      - name: publish-hypotheses
        type: call
        call: confluence.create-page
        with:
          space_key: '{{case_code}}'
          title: 'AI Hypotheses: {{focus_area}} - {{$now}}'
          body: '{{generate-insights.response}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://bain.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
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: openai
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_api_key
    resources:
    - name: chat-completions
      path: /chat/completions
      operations:
      - name: create-completion
        method: POST
Open in Framework → View in Fleet → ai-powered-case-hypothesis-generator.yml

Retrieves compliance check status. Used by Bain and Company teams.

naftiko: '0.5'
info:
  label: Bain and Company Compliance Check Status
  description: Retrieves compliance check status. Used by Bain and Company teams.
  tags:
  - consulting
  - okta
capability:
  exposes:
  - type: mcp
    namespace: okta
    port: 8080
    tools:
    - name: get-compliance_check_status
      description: Retrieves compliance check status. Used by Bain and Company teams.
      inputParameters:
      - name: check_id
        in: body
        type: string
        description: The check_id to look up.
      call: okta.get-check_id
      with:
        check_id: '{{check_id}}'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://bain-and-company.okta.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.okta_api_token
      header: Authorization
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: bain_compliance_check_status
        method: GET
Open in Framework → View in Fleet → bain-and-company-compliance-check-status.yml

Identifies stale articles, assigns review tasks, tracks updates, and publishes freshness reports.

naftiko: '0.5'
info:
  label: Knowledge Base Freshness Pipeline
  description: Identifies stale articles, assigns review tasks, tracks updates, and publishes freshness reports.
  tags:
  - knowledge
  - confluence
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: knowledge
    port: 8080
    tools:
    - name: knowledge_base_freshness_pipeline
      description: Orchestrate knowledge base freshness pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-confluence
        type: call
        call: confluence.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-jira
        type: call
        call: jira.process-resource
        with:
          data: '{{get-confluence.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Knowledge Base Freshness Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://bain-and-company.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://bain-and-company.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → knowledge-base-freshness-pipeline.yml

Initiates review cycles, collects feedback, aggregates scores, and distributes to managers.

naftiko: '0.5'
info:
  label: Performance Review Cycle Pipeline
  description: Initiates review cycles, collects feedback, aggregates scores, and distributes to managers.
  tags:
  - hr
  - workday
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: performance_review_cycle_pipeline
      description: Orchestrate performance review cycle pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-workday
        type: call
        call: workday.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-confluence
        type: call
        call: confluence.process-resource
        with:
          data: '{{get-workday.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Performance Review Cycle Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/bain-and-company
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: workday-op
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://bain-and-company.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: confluence-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → performance-review-cycle-pipeline.yml

Searches the Bain SharePoint document library by keyword and returns matching documents with titles, paths, and last modified dates.

naftiko: '0.5'
info:
  label: SharePoint Document Search
  description: Searches the Bain SharePoint document library by keyword and returns matching documents with titles, paths, and last modified dates.
  tags:
  - knowledge-management
  - documents
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: doc-search
    port: 8080
    tools:
    - name: search-documents
      description: Search SharePoint for documents by keyword.
      inputParameters:
      - name: query
        in: body
        type: string
        description: Search keywords.
      - name: site_id
        in: body
        type: string
        description: SharePoint site ID to search within.
      call: sharepoint.search
      with:
        query: '{{query}}'
        site_id: '{{site_id}}'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: search
      path: /sites/{{site_id}}/drive/root/search(q='{{query}}')
      inputParameters:
      - name: site_id
        in: path
      - name: query
        in: path
      operations:
      - name: search
        method: GET
Open in Framework → View in Fleet → sharepoint-document-search.yml

Searches Factiva for recent news articles by company or topic, returning headlines, sources, and publication dates for case research.

naftiko: '0.5'
info:
  label: Factiva News Alert Search
  description: Searches Factiva for recent news articles by company or topic, returning headlines, sources, and publication dates for case research.
  tags:
  - research
  - news
  - factiva
capability:
  exposes:
  - type: mcp
    namespace: news-search
    port: 8080
    tools:
    - name: search-news
      description: Search Factiva for news articles by query.
      inputParameters:
      - name: query
        in: body
        type: string
        description: Search query (company name or topic).
      - name: date_range
        in: body
        type: string
        description: Date range filter (e.g., 'last_30_days').
      call: factiva.search-articles
      with:
        query: '{{query}}'
        date_range: '{{date_range}}'
  consumes:
  - type: http
    namespace: factiva
    baseUri: https://api.dowjones.com/content
    authentication:
      type: bearer
      token: $secrets.factiva_token
    resources:
    - name: articles
      path: /articles
      operations:
      - name: search-articles
        method: POST
Open in Framework → View in Fleet → factiva-news-alert-search.yml

Retrieves user account details from the directory. Used by Bain and Company teams.

naftiko: '0.5'
info:
  label: Bain and Company User Account Lookup
  description: Retrieves user account details from the directory. Used by Bain and Company teams.
  tags:
  - consulting
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: confluence
    port: 8080
    tools:
    - name: get-user_account_lookup
      description: Retrieves user account details from the directory. Used by Bain and Company teams.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: The user_id to look up.
      call: confluence.get-user_id
      with:
        user_id: '{{user_id}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://bain-and-company.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: bain_user_account_lookup
        method: GET
Open in Framework → View in Fleet → bain-and-company-user-account-lookup.yml

Searches the Bain Confluence knowledge base by keyword and returns matching page titles, URLs, and excerpts for rapid case team research.

naftiko: '0.5'
info:
  label: Confluence Knowledge Page Lookup
  description: Searches the Bain Confluence knowledge base by keyword and returns matching page titles, URLs, and excerpts for rapid case team research.
  tags:
  - knowledge-management
  - research
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: knowledge-search
    port: 8080
    tools:
    - name: search-knowledge-base
      description: Search Confluence for knowledge articles by keyword.
      inputParameters:
      - name: query
        in: body
        type: string
        description: Search keywords or CQL query.
      - name: space_key
        in: body
        type: string
        description: Optional Confluence space key to narrow results.
      call: confluence.search
      with:
        cql: text~"{{query}}" AND space="{{space_key}}"
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://bain.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: search
      path: /search
      operations:
      - name: search
        method: GET
Open in Framework → View in Fleet → confluence-knowledge-page-lookup.yml

Checks the health status of a monitored service. Used by Bain and Company teams.

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

Pulls website metrics from Adobe Analytics, compares with Google Analytics data for cross-validation, and publishes the audit findings to the case Confluence space.

naftiko: '0.5'
info:
  label: Adobe Analytics Digital Audit Pipeline
  description: Pulls website metrics from Adobe Analytics, compares with Google Analytics data for cross-validation, and publishes the audit findings to the case Confluence space.
  tags:
  - digital
  - analytics
  - adobe-analytics
  - google-analytics
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: digital-audit
    port: 8080
    tools:
    - name: run-digital-audit
      description: Given analytics IDs, run a cross-platform digital audit and publish findings.
      inputParameters:
      - name: report_suite_id
        in: body
        type: string
        description: Adobe Analytics report suite ID.
      - name: ga_property_id
        in: body
        type: string
        description: Google Analytics GA4 property ID.
      - name: date_from
        in: body
        type: string
        description: Start date (YYYY-MM-DD).
      - name: date_to
        in: body
        type: string
        description: End date (YYYY-MM-DD).
      - name: case_code
        in: body
        type: string
        description: Bain case code.
      steps:
      - name: get-adobe-data
        type: call
        call: adobe-analytics.get-report
        with:
          rsid: '{{report_suite_id}}'
          date_from: '{{date_from}}'
          date_to: '{{date_to}}'
      - name: get-ga-data
        type: call
        call: google-analytics.run-report
        with:
          property_id: '{{ga_property_id}}'
          start_date: '{{date_from}}'
          end_date: '{{date_to}}'
      - name: publish-audit
        type: call
        call: confluence.create-page
        with:
          space_key: '{{case_code}}'
          title: 'Digital Audit: {{date_from}} to {{date_to}}'
          body: 'Adobe sessions: {{get-adobe-data.total_visits}} | GA sessions: {{get-ga-data.total_sessions}} | Adobe bounce rate: {{get-adobe-data.bounce_rate}} | GA bounce rate: {{get-ga-data.bounce_rate}}'
  consumes:
  - type: http
    namespace: adobe-analytics
    baseUri: https://analytics.adobe.io/api
    authentication:
      type: bearer
      token: $secrets.adobe_analytics_token
    resources:
    - name: reports
      path: /{{report_suite_id}}/reports
      inputParameters:
      - name: report_suite_id
        in: path
      operations:
      - name: get-report
        method: POST
  - type: http
    namespace: google-analytics
    baseUri: https://analyticsdata.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: reports
      path: /properties/{{property_id}}:runReport
      inputParameters:
      - name: property_id
        in: path
      operations:
      - name: run-report
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://bain.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → adobe-analytics-digital-audit-pipeline.yml

Retrieves a HubSpot contact, enriches with ZoomInfo firmographic data, and logs the enriched profile as a Salesforce activity for BD pipeline tracking.

naftiko: '0.5'
info:
  label: HubSpot Lead Enrichment Pipeline
  description: Retrieves a HubSpot contact, enriches with ZoomInfo firmographic data, and logs the enriched profile as a Salesforce activity for BD pipeline tracking.
  tags:
  - business-development
  - crm
  - hubspot
  - zoominfo
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: bd-contact-lookup
    port: 8080
    tools:
    - name: enrich-lead
      description: Look up a HubSpot contact, enrich with ZoomInfo, and log to Salesforce.
      inputParameters:
      - name: email
        in: body
        type: string
        description: Contact email address.
      - name: opportunity_id
        in: body
        type: string
        description: Related Salesforce opportunity ID.
      steps:
      - name: get-hubspot-contact
        type: call
        call: hubspot.get-contact
        with:
          email: '{{email}}'
      - name: enrich-firmographics
        type: call
        call: zoominfo.search-company
        with:
          company_name: '{{get-hubspot-contact.company}}'
      - name: log-enrichment
        type: call
        call: salesforce.create-task
        with:
          what_id: '{{opportunity_id}}'
          subject: 'Lead enriched: {{get-hubspot-contact.full_name}} at {{get-hubspot-contact.company}}'
          description: 'Industry: {{enrich-firmographics.industry}} | Revenue: {{enrich-firmographics.revenue}} | Employees: {{enrich-firmographics.employee_count}}'
  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}}?idProperty=email
      inputParameters:
      - name: email
        in: path
      operations:
      - name: get-contact
        method: GET
  - type: http
    namespace: zoominfo
    baseUri: https://api.zoominfo.com
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: company-search
      path: /search/company
      operations:
      - name: search-company
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://bain.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: tasks
      path: /sobjects/Task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → hubspot-lead-enrichment-pipeline.yml

Retrieves current monitoring alert status. Used by Bain and Company teams.

naftiko: '0.5'
info:
  label: Bain and Company Alert Status Check
  description: Retrieves current monitoring alert status. Used by Bain and Company teams.
  tags:
  - consulting
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: tableau
    port: 8080
    tools:
    - name: get-alert_status_check
      description: Retrieves current monitoring alert status. Used by Bain and Company teams.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The alert_id to look up.
      call: tableau.get-alert_id
      with:
        alert_id: '{{alert_id}}'
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://bain-and-company-tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: bain_alert_status_check
        method: GET
Open in Framework → View in Fleet → bain-and-company-alert-status-check.yml

Tracks mandatory training completion, sends reminders, escalates non-compliance, and reports status.

naftiko: '0.5'
info:
  label: Training Compliance Tracker Pipeline
  description: Tracks mandatory training completion, sends reminders, escalates non-compliance, and reports status.
  tags:
  - compliance
  - workday
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: training_compliance_tracker_pipeline
      description: Orchestrate training compliance tracker pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-workday
        type: call
        call: workday.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          data: '{{get-workday.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Training Compliance Tracker Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/bain-and-company
    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://bain-and-company.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → training-compliance-tracker-pipeline.yml

Monitors integration endpoints, detects failures, creates support tickets, and notifies integration team.

naftiko: '0.5'
info:
  label: Third-Party Integration Health Pipeline
  description: Monitors integration endpoints, detects failures, creates support tickets, and notifies integration team.
  tags:
  - integrations
  - datadog
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: integrations
    port: 8080
    tools:
    - name: third_party_integration_health_pipeline
      description: Orchestrate third-party integration health pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-datadog
        type: call
        call: datadog.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          data: '{{get-datadog.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Third-Party Integration Health Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
      header: DD-API-KEY
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: datadog-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bain-and-company.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → third-party-integration-health-pipeline.yml

Gathers competitor data from Bloomberg Enterprise Data, recent news from Reuters, social sentiment from LinkedIn, and compiles a competitive brief in a Confluence page.

naftiko: '0.5'
info:
  label: Competitive Intelligence Aggregator
  description: Gathers competitor data from Bloomberg Enterprise Data, recent news from Reuters, social sentiment from LinkedIn, and compiles a competitive brief in a Confluence page.
  tags:
  - due-diligence
  - competitive-intelligence
  - bloomberg-enterprise-data
  - reuters
  - linkedin
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: competitive-intel
    port: 8080
    tools:
    - name: build-competitive-brief
      description: Given a competitor name and case code, assemble a competitive intelligence brief from multiple sources into Confluence.
      inputParameters:
      - name: competitor_name
        in: body
        type: string
        description: Name of the competitor company.
      - name: bloomberg_ticker
        in: body
        type: string
        description: Bloomberg ticker for the competitor.
      - name: case_code
        in: body
        type: string
        description: Bain case code.
      steps:
      - name: get-financials
        type: call
        call: bloomberg.get-company
        with:
          ticker: '{{bloomberg_ticker}}'
      - name: get-news
        type: call
        call: reuters.search-news
        with:
          query: '{{competitor_name}}'
          limit: '20'
      - name: get-linkedin-profile
        type: call
        call: linkedin.get-company
        with:
          company_name: '{{competitor_name}}'
      - name: publish-brief
        type: call
        call: confluence.create-page
        with:
          space_key: '{{case_code}}'
          title: 'Competitive Brief: {{competitor_name}}'
          body: 'Revenue: {{get-financials.revenue}} | Market Cap: {{get-financials.market_cap}} | Employee Count: {{get-linkedin-profile.employee_count}} | Recent Headlines: {{get-news.headline_summary}}'
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap
    authentication:
      type: bearer
      token: $secrets.bloomberg_enterprise_token
    resources:
    - name: companies
      path: /companies/{{ticker}}
      inputParameters:
      - name: ticker
        in: path
      operations:
      - name: get-company
        method: GET
  - type: http
    namespace: reuters
    baseUri: https://api.reuters.com/v2
    authentication:
      type: bearer
      token: $secrets.reuters_token
    resources:
    - name: news
      path: /news/search
      operations:
      - name: search-news
        method: GET
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: companies
      path: /organizations
      operations:
      - name: get-company
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://bain.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → competitive-intelligence-aggregator.yml

Tracks spending against budgets, forecasts overruns, creates alerts, and notifies finance leaders.

naftiko: '0.5'
info:
  label: Cost Center Budget Tracking Pipeline
  description: Tracks spending against budgets, forecasts overruns, creates alerts, and notifies finance leaders.
  tags:
  - finance
  - snowflake
  - powerbi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: finance
    port: 8080
    tools:
    - name: cost_center_budget_tracking
      description: Orchestrate cost center budget tracking pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-snowflake
        type: call
        call: snowflake.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-powerbi
        type: call
        call: powerbi.process-resource
        with:
          data: '{{get-snowflake.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Cost Center Budget Tracking Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bain-and-company.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: powerbi-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → cost-center-budget-tracking-pipeline.yml

Runs a digital maturity assessment by pulling tech stack data from G2, website performance from Google Analytics, IT service catalog from ServiceNow, and compiles an assessment report in Confluence.

naftiko: '0.5'
info:
  label: Client Digital Transformation Assessment
  description: Runs a digital maturity assessment by pulling tech stack data from G2, website performance from Google Analytics, IT service catalog from ServiceNow, and compiles an assessment report in Confluence.
  tags:
  - digital-transformation
  - assessment
  - g2
  - google-analytics
  - servicenow
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: digital-assessment
    port: 8080
    tools:
    - name: run-digital-assessment
      description: Given a client company, assess their digital maturity across tech stack, web performance, and IT operations.
      inputParameters:
      - name: company_name
        in: body
        type: string
        description: Client company name.
      - name: company_domain
        in: body
        type: string
        description: Client company domain for web analytics.
      - name: case_code
        in: body
        type: string
        description: Bain case code.
      steps:
      - name: get-tech-stack
        type: call
        call: g2.get-company-stack
        with:
          company_name: '{{company_name}}'
      - name: get-web-performance
        type: call
        call: google-analytics.run-report
        with:
          property_id: '{{company_domain}}'
          start_date: '{{$now_minus_90d}}'
          end_date: '{{$now}}'
      - name: get-it-catalog
        type: call
        call: servicenow.get-service-catalog
        with:
          company: '{{company_name}}'
      - name: publish-assessment
        type: call
        call: confluence.create-page
        with:
          space_key: '{{case_code}}'
          title: 'Digital Maturity Assessment: {{company_name}}'
          body: 'Tech stack size: {{get-tech-stack.product_count}} | Web sessions: {{get-web-performance.total_sessions}} | IT services: {{get-it-catalog.service_count}}'
  consumes:
  - type: http
    namespace: g2
    baseUri: https://data.g2.com/api/v1
    authentication:
      type: bearer
      token: $secrets.g2_token
    resources:
    - name: company-stack
      path: /companies/tech-stack
      operations:
      - name: get-company-stack
        method: GET
  - type: http
    namespace: google-analytics
    baseUri: https://analyticsdata.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: reports
      path: /properties/{{property_id}}:runReport
      inputParameters:
      - name: property_id
        in: path
      operations:
      - name: run-report
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bain.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: service-catalog
      path: /table/sc_cat_item
      operations:
      - name: get-service-catalog
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://bain.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → client-digital-transformation-assessment.yml

Analyzes resource utilization trends, forecasts capacity needs, creates procurement requests, and reports.

naftiko: '0.5'
info:
  label: Capacity Planning Forecast Pipeline
  description: Analyzes resource utilization trends, forecasts capacity needs, creates procurement requests, and reports.
  tags:
  - infrastructure
  - grafana
  - snowflake
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: infrastructure
    port: 8080
    tools:
    - name: capacity_planning_forecast_pipeline
      description: Orchestrate capacity planning forecast pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-grafana
        type: call
        call: grafana.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          data: '{{get-grafana.result}}'
      - name: create-powerbi
        type: call
        call: powerbi.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Capacity Planning Forecast Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: grafana
    baseUri: https://bain-and-company-grafana.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_api_key
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: grafana-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://bain-and-company.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: powerbi-op
        method: POST
Open in Framework → View in Fleet → capacity-planning-forecast-pipeline.yml

Compares deployed state against desired config, identifies drift, creates remediation tickets, and alerts ops.

naftiko: '0.5'
info:
  label: Infrastructure Drift Detection Pipeline
  description: Compares deployed state against desired config, identifies drift, creates remediation tickets, and alerts ops.
  tags:
  - devops
  - github
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: devops
    port: 8080
    tools:
    - name: infrastructure_drift_detection
      description: Orchestrate infrastructure drift detection pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-github
        type: call
        call: github.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-jira
        type: call
        call: jira.process-resource
        with:
          data: '{{get-github.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Infrastructure Drift Detection Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: github-op
        method: POST
  - type: http
    namespace: jira
    baseUri: https://bain-and-company.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → infrastructure-drift-detection-pipeline.yml

Triggers an Alteryx Server workflow by ID, used to run recurring analytics models for client engagements.

naftiko: '0.5'
info:
  label: Alteryx Workflow Trigger
  description: Triggers an Alteryx Server workflow by ID, used to run recurring analytics models for client engagements.
  tags:
  - analytics
  - automation
  - alteryx
capability:
  exposes:
  - type: mcp
    namespace: alteryx-runner
    port: 8080
    tools:
    - name: run-workflow
      description: Trigger an Alteryx workflow by workflow ID.
      inputParameters:
      - name: workflow_id
        in: body
        type: string
        description: Alteryx Server workflow ID.
      call: alteryx.run-workflow
      with:
        workflow_id: '{{workflow_id}}'
  consumes:
  - type: http
    namespace: alteryx
    baseUri: https://bain.alteryxcloud.com/api/v3
    authentication:
      type: bearer
      token: $secrets.alteryx_token
    resources:
    - name: workflows
      path: /workflows/{{workflow_id}}/run
      inputParameters:
      - name: workflow_id
        in: path
      operations:
      - name: run-workflow
        method: POST
Open in Framework → View in Fleet → alteryx-workflow-trigger.yml

Checks the current status of a project. Used by Bain and Company teams.

naftiko: '0.5'
info:
  label: Bain and Company Project Status Check
  description: Checks the current status of a project. Used by Bain and Company teams.
  tags:
  - consulting
  - jira
capability:
  exposes:
  - type: mcp
    namespace: jira
    port: 8080
    tools:
    - name: get-project_status_check
      description: Checks the current status of a project. Used by Bain and Company teams.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The project_key to look up.
      call: jira.get-project_key
      with:
        project_key: '{{project_key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bain-and-company.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: bain_project_status_check
        method: GET
Open in Framework → View in Fleet → bain-and-company-project-status-check.yml

Queries cost and spending data. Used by Bain and Company teams.

naftiko: '0.5'
info:
  label: Bain and Company Cost Report Query
  description: Queries cost and spending data. Used by Bain and Company teams.
  tags:
  - consulting
  - workday
capability:
  exposes:
  - type: mcp
    namespace: workday
    port: 8080
    tools:
    - name: get-cost_report_query
      description: Queries cost and spending data. Used by Bain and Company teams.
      inputParameters:
      - name: cost_center
        in: body
        type: string
        description: The cost_center to look up.
      call: workday.get-cost_center
      with:
        cost_center: '{{cost_center}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/bain-and-company
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: bain_cost_report_query
        method: GET
Open in Framework → View in Fleet → bain-and-company-cost-report-query.yml

When a new consulting role is opened in Workday, creates a LinkedIn Recruiter project, posts to the careers page, and sends a Slack notification to the recruiting team lead.

naftiko: '0.5'
info:
  label: Talent Requisition Pipeline
  description: When a new consulting role is opened in Workday, creates a LinkedIn Recruiter project, posts to the careers page, and sends a Slack notification to the recruiting team lead.
  tags:
  - talent
  - recruiting
  - workday
  - linkedin
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: talent-pipeline
    port: 8080
    tools:
    - name: open-requisition-pipeline
      description: Given a Workday job requisition ID, orchestrate creation of LinkedIn project, career page posting, and team notification.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: Workday job requisition ID.
      - name: recruiter_email
        in: body
        type: string
        description: Email of the assigned recruiter.
      steps:
      - name: get-requisition
        type: call
        call: workday.get-requisition
        with:
          requisition_id: '{{requisition_id}}'
      - name: create-linkedin-project
        type: call
        call: linkedin.create-project
        with:
          title: '{{get-requisition.job_title}} - {{get-requisition.location}}'
          description: '{{get-requisition.job_description}}'
      - name: notify-recruiter
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{recruiter_email}}'
          text: 'New requisition {{requisition_id}}: {{get-requisition.job_title}}. LinkedIn project: {{create-linkedin-project.url}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: requisitions
      path: /job-requisitions/{{requisition_id}}
      inputParameters:
      - name: requisition_id
        in: path
      operations:
      - name: get-requisition
        method: GET
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_recruiter_token
    resources:
    - name: hiring-projects
      path: /hiringProjects
      operations:
      - name: create-project
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chat-messages
      path: /users/{{recipient_upn}}/chats
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → talent-requisition-pipeline.yml

Pulls consultant performance data from Workday, gathers 360 feedback from Google Forms, compiles review notes in Confluence, and notifies the reviewer in Microsoft Outlook.

naftiko: '0.5'
info:
  label: Consulting Performance Review Pipeline
  description: Pulls consultant performance data from Workday, gathers 360 feedback from Google Forms, compiles review notes in Confluence, and notifies the reviewer in Microsoft Outlook.
  tags:
  - talent
  - performance-management
  - workday
  - google-forms
  - confluence
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: perf-review
    port: 8080
    tools:
    - name: compile-performance-review
      description: Given a consultant worker ID, compile performance data and 360 feedback into a Confluence review page.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: Workday worker ID for the consultant.
      - name: review_period
        in: body
        type: string
        description: Review period (e.g., 'H1-2026').
      - name: reviewer_email
        in: body
        type: string
        description: Email of the reviewing partner/manager.
      steps:
      - name: get-performance-data
        type: call
        call: workday.get-worker-performance
        with:
          worker_id: '{{worker_id}}'
          period: '{{review_period}}'
      - name: get-feedback
        type: call
        call: google-forms.get-responses
        with:
          form_id: 360_feedback_{{review_period}}
          filter: subject_id={{worker_id}}
      - name: create-review-page
        type: call
        call: confluence.create-page
        with:
          space_key: TALENT
          title: 'Performance Review: {{get-performance-data.full_name}} - {{review_period}}'
          body: 'Cases completed: {{get-performance-data.case_count}} | Avg rating: {{get-feedback.avg_score}} | Feedback count: {{get-feedback.response_count}}'
      - name: notify-reviewer
        type: call
        call: outlook.send-email
        with:
          to: '{{reviewer_email}}'
          subject: 'Performance review ready: {{get-performance-data.full_name}}'
          body: 'Review page: {{create-review-page.url}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: worker-performance
      path: /workers/{{worker_id}}/performance
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker-performance
        method: GET
  - type: http
    namespace: google-forms
    baseUri: https://forms.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_forms_token
    resources:
    - name: responses
      path: /forms/{{form_id}}/responses
      inputParameters:
      - name: form_id
        in: path
      operations:
      - name: get-responses
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://bain.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: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → consulting-performance-review-pipeline.yml

Checks status of a recent deployment. Used by Bain and Company teams.

naftiko: '0.5'
info:
  label: Bain and Company Deployment Status Check
  description: Checks status of a recent deployment. Used by Bain and Company teams.
  tags:
  - consulting
  - elasticsearch
capability:
  exposes:
  - type: mcp
    namespace: elasticsearc
    port: 8080
    tools:
    - name: get-deployment_status_check
      description: Checks status of a recent deployment. Used by Bain and Company teams.
      inputParameters:
      - name: deployment_id
        in: body
        type: string
        description: The deployment_id to look up.
      call: elasticsearch.get-deployment_id
      with:
        deployment_id: '{{deployment_id}}'
  consumes:
  - type: http
    namespace: elasticsearch
    baseUri: https://bain-and-company-es.com:9200
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: bain_deployment_status_check
        method: GET
Open in Framework → View in Fleet → bain-and-company-deployment-status-check.yml

Retrieves vulnerability scan results. Used by Bain and Company teams.

naftiko: '0.5'
info:
  label: Bain and Company Security Scan Results
  description: Retrieves vulnerability scan results. Used by Bain and Company teams.
  tags:
  - consulting
  - github
capability:
  exposes:
  - type: mcp
    namespace: github
    port: 8080
    tools:
    - name: get-security_scan_results
      description: Retrieves vulnerability scan results. Used by Bain and Company teams.
      inputParameters:
      - name: scan_id
        in: body
        type: string
        description: The scan_id to look up.
      call: github.get-scan_id
      with:
        scan_id: '{{scan_id}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: bain_security_scan_results
        method: GET
Open in Framework → View in Fleet → bain-and-company-security-scan-results.yml

For performance improvement engagements, pulls spend data from SAP Concur, headcount from Workday, vendor contracts from Oracle E-Business Suite, runs an optimization model in Alteryx, and publishes findings to Confluence.

naftiko: '0.5'
info:
  label: Cost Optimization Analysis Pipeline
  description: For performance improvement engagements, pulls spend data from SAP Concur, headcount from Workday, vendor contracts from Oracle E-Business Suite, runs an optimization model in Alteryx, and publishes findings to Confluence.
  tags:
  - consulting
  - cost-optimization
  - sap-concur
  - workday
  - oracle-e-business-suite
  - alteryx
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: cost-optimization
    port: 8080
    tools:
    - name: run-cost-analysis
      description: Given a client cost center and case code, run a full cost optimization analysis.
      inputParameters:
      - name: cost_center
        in: body
        type: string
        description: Client cost center ID.
      - name: case_code
        in: body
        type: string
        description: Bain case code.
      - name: period
        in: body
        type: string
        description: Analysis period (e.g., 'FY2025').
      steps:
      - name: get-spend-data
        type: call
        call: concur.get-expense-reports
        with:
          cost_center: '{{cost_center}}'
          period: '{{period}}'
      - name: get-headcount
        type: call
        call: workday.get-headcount
        with:
          cost_center: '{{cost_center}}'
      - name: get-vendor-contracts
        type: call
        call: oracle-ebs.get-contracts
        with:
          cost_center: '{{cost_center}}'
      - name: run-optimization
        type: call
        call: alteryx.run-workflow
        with:
          workflow_id: cost_optimization_v3
          inputs: '{{get-spend-data.dataset_id}},{{get-headcount.dataset_id}},{{get-vendor-contracts.dataset_id}}'
      - name: publish-findings
        type: call
        call: confluence.create-page
        with:
          space_key: '{{case_code}}'
          title: 'Cost Optimization Analysis: {{cost_center}} - {{period}}'
          body: 'Total spend: {{get-spend-data.total}} | Headcount: {{get-headcount.count}} | Vendor contracts: {{get-vendor-contracts.count}} | Savings opportunity: {{run-optimization.savings_estimate}}'
  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
      operations:
      - name: get-expense-reports
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: headcount
      path: /staffing/headcount
      operations:
      - name: get-headcount
        method: GET
  - type: http
    namespace: oracle-ebs
    baseUri: https://bain-ebs.oracle.com/webservices/rest
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: contracts
      path: /procurement/contracts
      operations:
      - name: get-contracts
        method: GET
  - type: http
    namespace: alteryx
    baseUri: https://bain.alteryxcloud.com/api/v3
    authentication:
      type: bearer
      token: $secrets.alteryx_token
    resources:
    - name: workflows
      path: /workflows/{{workflow_id}}/run
      inputParameters:
      - name: workflow_id
        in: path
      operations:
      - name: run-workflow
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://bain.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → cost-optimization-analysis-pipeline.yml

Executes a read-only analytics query. Used by Bain and Company teams.

naftiko: '0.5'
info:
  label: Bain and Company Database Query Runner
  description: Executes a read-only analytics query. Used by Bain and Company teams.
  tags:
  - consulting
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: servicenow
    port: 8080
    tools:
    - name: get-database_query_runner
      description: Executes a read-only analytics query. Used by Bain and Company teams.
      inputParameters:
      - name: sql_query
        in: body
        type: string
        description: The sql_query to look up.
      call: servicenow.get-sql_query
      with:
        sql_query: '{{sql_query}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bain-and-company.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: bain_database_query_runner
        method: GET
Open in Framework → View in Fleet → bain-and-company-database-query-runner.yml

Searches the Bain Elasticsearch index for case studies and prior work by keyword, returning matching case summaries with relevance scores.

naftiko: '0.5'
info:
  label: Elasticsearch Case Search
  description: Searches the Bain Elasticsearch index for case studies and prior work by keyword, returning matching case summaries with relevance scores.
  tags:
  - knowledge-management
  - search
  - elasticsearch
capability:
  exposes:
  - type: mcp
    namespace: case-search
    port: 8080
    tools:
    - name: search-cases
      description: Search the case knowledge index by keyword.
      inputParameters:
      - name: query
        in: body
        type: string
        description: Search keywords.
      - name: industry_filter
        in: body
        type: string
        description: Optional industry filter.
      call: elasticsearch.search
      with:
        index: case_knowledge
        query: '{{query}}'
        filter_industry: '{{industry_filter}}'
  consumes:
  - type: http
    namespace: elasticsearch
    baseUri: https://bain-search.es.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: search
      path: /case_knowledge/_search
      operations:
      - name: search
        method: POST
Open in Framework → View in Fleet → elasticsearch-case-search.yml

Queries Workday for available consultants by skill and seniority, checks their Google Calendar availability, and posts a staffing proposal to the case lead in Microsoft Teams.

naftiko: '0.5'
info:
  label: Case Team Staffing Orchestrator
  description: Queries Workday for available consultants by skill and seniority, checks their Google Calendar availability, and posts a staffing proposal to the case lead in Microsoft Teams.
  tags:
  - talent
  - staffing
  - workday
  - microsoft-teams
  - google-drive
capability:
  exposes:
  - type: mcp
    namespace: case-staffing
    port: 8080
    tools:
    - name: propose-staffing
      description: Given a skill requirement and case code, find available consultants and propose staffing to the case lead.
      inputParameters:
      - name: skill_required
        in: body
        type: string
        description: Primary skill needed (e.g., 'private-equity', 'digital-transformation').
      - name: seniority_level
        in: body
        type: string
        description: Consultant level (e.g., 'AC', 'Senior AC', 'Consultant', 'Manager').
      - name: case_lead_email
        in: body
        type: string
        description: Email of the case lead to receive the proposal.
      steps:
      - name: search-workers
        type: call
        call: workday.search-workers
        with:
          skill: '{{skill_required}}'
          job_level: '{{seniority_level}}'
      - name: check-availability
        type: call
        call: google-calendar.freebusy
        with:
          emails: '{{search-workers.email_list}}'
          time_min: '{{$now}}'
          time_max: '{{$now_plus_14d}}'
      - name: send-proposal
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{case_lead_email}}'
          text: 'Staffing candidates for {{skill_required}} ({{seniority_level}}): {{check-availability.available_names}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers
      operations:
      - name: search-workers
        method: GET
  - type: http
    namespace: google-calendar
    baseUri: https://www.googleapis.com/calendar/v3
    authentication:
      type: bearer
      token: $secrets.google_calendar_token
    resources:
    - name: freebusy
      path: /freeBusy
      operations:
      - name: freebusy
        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}}/chats
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → case-team-staffing-orchestrator.yml

Runs a compliance check across cloud resources, logs findings in Splunk, creates ServiceNow audit records, and uploads the report to SharePoint.

naftiko: '0.5'
info:
  label: Government Compliance Audit Pipeline
  description: Runs a compliance check across cloud resources, logs findings in Splunk, creates ServiceNow audit records, and uploads the report to SharePoint.
  tags:
  - compliance
  - audit
  - splunk
  - servicenow
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: compliance-audit
    port: 8080
    tools:
    - name: run-compliance-audit
      description: Given a compliance framework and scope, run audit and distribute findings.
      inputParameters:
      - name: framework
        in: body
        type: string
        description: Compliance framework (e.g., FedRAMP, NIST 800-53).
      - name: scope
        in: body
        type: string
        description: Audit scope description.
      - name: audit_date
        in: body
        type: string
        description: Audit date (YYYY-MM-DD).
      steps:
      - name: log-audit-start
        type: call
        call: splunk.log-event
        with:
          source: compliance-audit
          event: 'Compliance audit started: {{framework}}. Scope: {{scope}}. Date: {{audit_date}}.'
      - name: create-audit-record
        type: call
        call: servicenow.create-audit
        with:
          short_description: '{{framework}} compliance audit - {{audit_date}}'
          category: compliance_audit
          description: 'Framework: {{framework}}. Scope: {{scope}}.'
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: compliance_site
          folder_path: Audits/{{framework}}/{{audit_date}}
          file_name: audit_report_{{framework}}_{{audit_date}}.pdf
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.boozallen.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: events
      path: /receivers/simple
      operations:
      - name: log-event
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://boozallen.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: audits
      path: /table/sn_audit_record
      operations:
      - name: create-audit
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → government-compliance-audit-pipeline.yml

Retrieves the endpoint protection status from McAfee ePO for a government workstation by hostname.

naftiko: '0.5'
info:
  label: McAfee Endpoint Status
  description: Retrieves the endpoint protection status from McAfee ePO for a government workstation by hostname.
  tags:
  - security
  - mcafee
capability:
  exposes:
  - type: mcp
    namespace: endpoint-security
    port: 8080
    tools:
    - name: get-endpoint-status
      description: Look up McAfee endpoint protection status by hostname.
      inputParameters:
      - name: hostname
        in: body
        type: string
        description: Workstation hostname.
      call: mcafee.get-system
      with:
        hostname: '{{hostname}}'
  consumes:
  - type: http
    namespace: mcafee
    baseUri: https://epo.boozallen.com/remote
    authentication:
      type: bearer
      token: $secrets.mcafee_token
    resources:
    - name: systems
      path: /system.find
      inputParameters:
      - name: hostname
        in: query
      operations:
      - name: get-system
        method: GET
Open in Framework → View in Fleet → mcafee-endpoint-status.yml

Retrieves the status and review details of a Bitbucket pull request for government code review workflows.

naftiko: '0.5'
info:
  label: Bitbucket Pull Request Status
  description: Retrieves the status and review details of a Bitbucket pull request for government code review workflows.
  tags:
  - development
  - bitbucket
capability:
  exposes:
  - type: mcp
    namespace: code-review
    port: 8080
    tools:
    - name: get-pr-status
      description: Look up a Bitbucket pull request by repo slug and PR ID.
      inputParameters:
      - name: repo_slug
        in: body
        type: string
        description: Repository slug.
      - name: pr_id
        in: body
        type: string
        description: Pull request ID.
      call: bitbucket.get-pullrequest
      with:
        repo: '{{repo_slug}}'
        pr_id: '{{pr_id}}'
  consumes:
  - type: http
    namespace: bitbucket
    baseUri: https://bitbucket.boozallen.com/rest/api/1.0
    authentication:
      type: bearer
      token: $secrets.bitbucket_token
    resources:
    - name: pull-requests
      path: /projects/GOV/repos/{{repo_slug}}/pull-requests/{{pr_id}}
      inputParameters:
      - name: repo_slug
        in: path
      - name: pr_id
        in: path
      operations:
      - name: get-pullrequest
        method: GET
Open in Framework → View in Fleet → bitbucket-pull-request-status.yml

Runs automated penetration testing by triggering a Nessus scan, correlating findings with Splunk threat intelligence, creating Jira remediation tickets, and generating a Confluence report.

naftiko: '0.5'
info:
  label: Automated Penetration Test Pipeline
  description: Runs automated penetration testing by triggering a Nessus scan, correlating findings with Splunk threat intelligence, creating Jira remediation tickets, and generating a Confluence report.
  tags:
  - security
  - pentest
  - nessus
  - splunk
  - jira
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: pentest-automation
    port: 8080
    tools:
    - name: run-pentest
      description: Execute automated penetration test across Nessus, Splunk, Jira, and Confluence.
      inputParameters:
      - name: target_network
        in: body
        type: string
        description: Target network CIDR.
      - name: scan_policy
        in: body
        type: string
        description: Nessus scan policy name.
      steps:
      - name: launch-scan
        type: call
        call: nessus.launch-scan
        with:
          targets: '{{target_network}}'
          policy: '{{scan_policy}}'
      - name: correlate-threats
        type: call
        call: splunk.search
        with:
          query: index=threat_intel host IN ({{launch-scan.affected_hosts}})
      - name: create-tickets
        type: call
        call: jira.create-issue
        with:
          project_key: VULN
          summary: 'Pentest findings: {{target_network}}'
          issue_type: Bug
          description: 'Vulnerabilities: {{launch-scan.critical_count}} critical, {{launch-scan.high_count}} high. Threat correlations: {{correlate-threats.result_count}}.'
      - name: generate-report
        type: call
        call: confluence.create-page
        with:
          space_key: SECURITY
          title: 'Pentest Report: {{target_network}}'
          body: 'Target: {{target_network}}. Critical: {{launch-scan.critical_count}}. High: {{launch-scan.high_count}}. Jira: {{create-tickets.key}}.'
  consumes:
  - type: http
    namespace: nessus
    baseUri: https://nessus.boozallen.com/rest
    authentication:
      type: apiKey
      key: $secrets.nessus_api_key
    resources:
    - name: scans
      path: /scans
      operations:
      - name: launch-scan
        method: POST
  - type: http
    namespace: splunk
    baseUri: https://splunk.boozallen.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search
      path: /search/jobs
      operations:
      - name: search
        method: POST
  - type: http
    namespace: jira
    baseUri: https://boozallen.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://boozallen.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → automated-penetration-test-pipeline.yml

Retrieves Helm release status for Kubernetes-based government application deployments.

naftiko: '0.5'
info:
  label: Helm Chart Deployment Status
  description: Retrieves Helm release status for Kubernetes-based government application deployments.
  tags:
  - cloud
  - helm
  - kubernetes
capability:
  exposes:
  - type: mcp
    namespace: helm-releases
    port: 8080
    tools:
    - name: get-helm-release
      description: Look up a Helm release status.
      inputParameters:
      - name: release_name
        in: body
        type: string
        description: Helm release name.
      - name: namespace
        in: body
        type: string
        description: Kubernetes namespace.
      call: helm.get-release
      with:
        release_name: '{{release_name}}'
        namespace: '{{namespace}}'
  consumes:
  - type: http
    namespace: helm
    baseUri: https://openshift.boozallen.com:6443/apis/helm.openshift.io/v1beta1
    authentication:
      type: bearer
      token: $secrets.openshift_token
    resources:
    - name: releases
      path: /namespaces/{{namespace}}/helmreleases/{{release_name}}
      inputParameters:
      - name: namespace
        in: path
      - name: release_name
        in: path
      operations:
      - name: get-release
        method: GET
Open in Framework → View in Fleet → helm-chart-deployment-status.yml

Scores a proposal draft by analyzing it with Azure Machine Learning, comparing against historical wins in Snowflake, generating a score report in Power BI, and emailing the capture lead.

naftiko: '0.5'
info:
  label: Agency Proposal Scoring Pipeline
  description: Scores a proposal draft by analyzing it with Azure Machine Learning, comparing against historical wins in Snowflake, generating a score report in Power BI, and emailing the capture lead.
  tags:
  - proposals
  - scoring
  - azure-machine-learning
  - snowflake
  - power-bi
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: proposal-scoring
    port: 8080
    tools:
    - name: score-proposal
      description: Score proposal quality using ML, historical data, Power BI, and Outlook notification.
      inputParameters:
      - name: proposal_id
        in: body
        type: string
        description: Proposal document ID.
      - name: agency
        in: body
        type: string
        description: Target government agency.
      steps:
      - name: analyze-proposal
        type: call
        call: azureml.run-inference
        with:
          model_name: proposal-scorer
          input: '{{proposal_id}}'
      - name: get-historical
        type: call
        call: snowflake.run-query
        with:
          query: SELECT win_rate, avg_score FROM proposal_history WHERE agency = '{{agency}}'
      - name: refresh-scorecard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: proposal-scoring-ds
      - name: email-results
        type: call
        call: outlook.send-email
        with:
          to: capture-team@boozallen.com
          subject: 'Proposal Score: {{proposal_id}} for {{agency}}'
          body: 'Score: {{analyze-proposal.score}}/100. Agency win rate: {{get-historical.win_rate}}%. Scorecard refreshed.'
  consumes:
  - type: http
    namespace: azureml
    baseUri: https://boozallen-gov.api.azureml.ms/mlflow/v2.0
    authentication:
      type: bearer
      token: $secrets.azureml_token
    resources:
    - name: models
      path: /score
      operations:
      - name: run-inference
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://boozallen.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: queries
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/proposal-scoring-ds/refreshes
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → agency-proposal-scoring-pipeline.yml

Plans infrastructure capacity by analyzing CloudWatch metrics, forecasting growth in Snowflake, estimating costs in AWS Cost Explorer, and presenting findings via Power BI.

naftiko: '0.5'
info:
  label: Capacity Planning Pipeline
  description: Plans infrastructure capacity by analyzing CloudWatch metrics, forecasting growth in Snowflake, estimating costs in AWS Cost Explorer, and presenting findings via Power BI.
  tags:
  - capacity
  - planning
  - cloudwatch
  - snowflake
  - aws
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: capacity-planning
    port: 8080
    tools:
    - name: plan-capacity
      description: Plan infrastructure capacity across CloudWatch, Snowflake, AWS Cost Explorer, and Power BI.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: Service name.
      - name: forecast_months
        in: body
        type: string
        description: Number of months to forecast.
      steps:
      - name: get-utilization
        type: call
        call: cloudwatch.get-metrics
        with:
          namespace: '{{service_name}}'
          metric: CPUUtilization
      - name: forecast-growth
        type: call
        call: snowflake.run-query
        with:
          query: CALL capacity_forecast('{{service_name}}', {{forecast_months}})
      - name: estimate-costs
        type: call
        call: aws.get-cost-forecast
        with:
          service: '{{service_name}}'
          months: '{{forecast_months}}'
      - name: refresh-report
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: capacity-planning-ds
  consumes:
  - type: http
    namespace: cloudwatch
    baseUri: https://monitoring.us-gov-west-1.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_govcloud_token
    resources:
    - name: metrics
      path: /
      inputParameters:
      - name: namespace
        in: query
      - name: metric
        in: query
      operations:
      - name: get-metrics
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://boozallen.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: queries
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: aws
    baseUri: https://ce.us-gov-west-1.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_govcloud_token
    resources:
    - name: forecast
      path: /
      operations:
      - name: get-cost-forecast
        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/capacity-planning-ds/refreshes
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → capacity-planning-pipeline.yml

Retrieves the current status and outputs of an AWS CloudFormation stack used in government cloud deployments.

naftiko: '0.5'
info:
  label: CloudFormation Stack Status
  description: Retrieves the current status and outputs of an AWS CloudFormation stack used in government cloud deployments.
  tags:
  - cloud
  - cloudformation
capability:
  exposes:
  - type: mcp
    namespace: cloud-provisioning
    port: 8080
    tools:
    - name: get-stack-status
      description: Look up a CloudFormation stack status by stack name.
      inputParameters:
      - name: stack_name
        in: body
        type: string
        description: The CloudFormation stack name.
      call: cloudformation.describe-stack
      with:
        stack_name: '{{stack_name}}'
  consumes:
  - type: http
    namespace: cloudformation
    baseUri: https://cloudformation.us-gov-west-1.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_govcloud_token
    resources:
    - name: stacks
      path: /
      inputParameters:
      - name: stack_name
        in: query
      operations:
      - name: describe-stack
        method: GET
Open in Framework → View in Fleet → cloudformation-stack-status.yml

Triggers an Azure Databricks job for government data analytics and AI processing.

naftiko: '0.5'
info:
  label: Azure Databricks Analytics Job
  description: Triggers an Azure Databricks job for government data analytics and AI processing.
  tags:
  - data
  - analytics
  - azure-databricks
capability:
  exposes:
  - type: mcp
    namespace: databricks-analytics
    port: 8080
    tools:
    - name: run-databricks-job
      description: Trigger a Databricks job by ID.
      inputParameters:
      - name: job_id
        in: body
        type: string
        description: The Databricks job ID.
      call: databricks.run-job
      with:
        job_id: '{{job_id}}'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://boozallen.azuredatabricks.net/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
Open in Framework → View in Fleet → azure-databricks-analytics-job.yml

Retrieves the latest GitHub Actions workflow run for Booz Allen open-source projects.

naftiko: '0.5'
info:
  label: GitHub Actions Workflow Status
  description: Retrieves the latest GitHub Actions workflow run for Booz Allen open-source projects.
  tags:
  - ci
  - github-actions
  - development
capability:
  exposes:
  - type: mcp
    namespace: github-ci
    port: 8080
    tools:
    - name: get-workflow-run
      description: Look up the latest GitHub Actions workflow run.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: Repository (owner/name).
      - name: workflow_id
        in: body
        type: string
        description: Workflow ID or filename.
      call: github.get-workflow-runs
      with:
        repo: '{{repo}}'
        workflow_id: '{{workflow_id}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflow-runs
      path: /repos/{{repo}}/actions/workflows/{{workflow_id}}/runs?per_page=1
      inputParameters:
      - name: repo
        in: path
      - name: workflow_id
        in: path
      operations:
      - name: get-workflow-runs
        method: GET
Open in Framework → View in Fleet → github-actions-workflow-status.yml

Retrieves usage data from Amazon API Gateway for government API management.

naftiko: '0.5'
info:
  label: Amazon API Gateway Usage Report
  description: Retrieves usage data from Amazon API Gateway for government API management.
  tags:
  - cloud
  - amazon-api-gateway
  - api-management
capability:
  exposes:
  - type: mcp
    namespace: api-management
    port: 8080
    tools:
    - name: get-api-usage
      description: Look up API Gateway usage by usage plan ID.
      inputParameters:
      - name: usage_plan_id
        in: body
        type: string
        description: API Gateway usage plan ID.
      - 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: apigateway.get-usage
      with:
        usage_plan_id: '{{usage_plan_id}}'
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
  consumes:
  - type: http
    namespace: apigateway
    baseUri: https://apigateway.us-east-1.amazonaws.com
    authentication:
      type: aws-sigv4
      accessKeyId: $secrets.aws_access_key
      secretAccessKey: $secrets.aws_secret_key
    resources:
    - name: usage
      path: /usageplans/{{usage_plan_id}}/usage?startDate={{start_date}}&endDate={{end_date}}
      inputParameters:
      - name: usage_plan_id
        in: path
      - name: start_date
        in: query
      - name: end_date
        in: query
      operations:
      - name: get-usage
        method: GET
Open in Framework → View in Fleet → amazon-api-gateway-usage-report.yml

Retrieves Microsoft Sentinel security alerts for government SOC operations.

naftiko: '0.5'
info:
  label: Microsoft Sentinel Security Alert
  description: Retrieves Microsoft Sentinel security alerts for government SOC operations.
  tags:
  - cybersecurity
  - microsoft-sentinel
  - siem
capability:
  exposes:
  - type: mcp
    namespace: siem-alerts
    port: 8080
    tools:
    - name: get-sentinel-alert
      description: Look up a Microsoft Sentinel alert.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The Sentinel alert ID.
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID.
      - name: resource_group
        in: body
        type: string
        description: Resource group.
      - name: workspace_name
        in: body
        type: string
        description: Log Analytics workspace name.
      call: sentinel.get-alert
      with:
        alert_id: '{{alert_id}}'
        subscription_id: '{{subscription_id}}'
        resource_group: '{{resource_group}}'
        workspace_name: '{{workspace_name}}'
  consumes:
  - type: http
    namespace: sentinel
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: alerts
      path: /subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.OperationalInsights/workspaces/{{workspace_name}}/providers/Microsoft.SecurityInsights/incidents/{{alert_id}}?api-version=2023-02-01
      inputParameters:
      - name: subscription_id
        in: path
      - name: resource_group
        in: path
      - name: workspace_name
        in: path
      - name: alert_id
        in: path
      operations:
      - name: get-alert
        method: GET
Open in Framework → View in Fleet → microsoft-sentinel-security-alert.yml

When preparing a FedRAMP authorization package, gathers security scan results from Fortify, pulls infrastructure inventory from AWS, compiles documentation from SharePoint, and creates a tracking issue in Jira.

naftiko: '0.5'
info:
  label: FedRAMP Authorization Package Pipeline
  description: When preparing a FedRAMP authorization package, gathers security scan results from Fortify, pulls infrastructure inventory from AWS, compiles documentation from SharePoint, and creates a tracking issue in Jira.
  tags:
  - compliance
  - fedramp
  - fortify
  - aws
  - sharepoint
  - jira
capability:
  exposes:
  - type: mcp
    namespace: fedramp-compliance
    port: 8080
    tools:
    - name: prepare-auth-package
      description: Compile FedRAMP authorization package across security, infrastructure, and documentation systems.
      inputParameters:
      - name: system_name
        in: body
        type: string
        description: Information system name.
      - name: scan_id
        in: body
        type: string
        description: Fortify scan ID.
      - name: aws_account
        in: body
        type: string
        description: AWS GovCloud account ID.
      steps:
      - name: get-scan-results
        type: call
        call: fortify.get-scan-results
        with:
          scan_id: '{{scan_id}}'
      - name: get-inventory
        type: call
        call: aws.describe-instances
        with:
          account_id: '{{aws_account}}'
      - name: get-documentation
        type: call
        call: sharepoint.search-documents
        with:
          query: FedRAMP {{system_name}}
      - name: create-tracking
        type: call
        call: jira.create-issue
        with:
          project_key: FEDRAMP
          summary: 'Auth Package: {{system_name}}'
          issue_type: Epic
          description: 'FedRAMP package prep. Scan findings: {{get-scan-results.total_findings}}. Assets: {{get-inventory.instance_count}}. Docs: {{get-documentation.total_count}}.'
  consumes:
  - type: http
    namespace: fortify
    baseUri: https://fortify.boozallen.com/ssc/api/v1
    authentication:
      type: bearer
      token: $secrets.fortify_token
    resources:
    - name: scans
      path: /projectVersions/{{scan_id}}/issues
      inputParameters:
      - name: scan_id
        in: path
      operations:
      - name: get-scan-results
        method: GET
  - type: http
    namespace: aws
    baseUri: https://ec2.us-gov-west-1.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_govcloud_token
    resources:
    - name: instances
      path: /
      inputParameters:
      - name: account_id
        in: query
      operations:
      - name: describe-instances
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /boozallen.sharepoint.com/drive/root/search(q='{{query}}')
      inputParameters:
      - name: query
        in: path
      operations:
      - name: search-documents
        method: GET
  - type: http
    namespace: jira
    baseUri: https://boozallen.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → fedramp-authorization-package-pipeline.yml

Conducts threat hunting by querying Microsoft Sentinel for indicators, enriching with Splunk threat intel, blocking suspects in Palo Alto Networks, and escalating via ServiceNow.

naftiko: '0.5'
info:
  label: Threat Hunting Pipeline
  description: Conducts threat hunting by querying Microsoft Sentinel for indicators, enriching with Splunk threat intel, blocking suspects in Palo Alto Networks, and escalating via ServiceNow.
  tags:
  - security
  - threat-hunting
  - microsoft-sentinel
  - splunk
  - palo-alto-networks
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: threat-hunting
    port: 8080
    tools:
    - name: hunt-threats
      description: Conduct threat hunting across Sentinel, Splunk, Palo Alto, and ServiceNow.
      inputParameters:
      - name: indicator
        in: body
        type: string
        description: Threat indicator (IP, hash, or domain).
      - name: indicator_type
        in: body
        type: string
        description: Indicator type.
      steps:
      - name: search-sentinel
        type: call
        call: sentinel.search-indicators
        with:
          value: '{{indicator}}'
          type: '{{indicator_type}}'
      - name: enrich-intel
        type: call
        call: splunk.search
        with:
          query: index=threat_intel {{indicator_type}}={{indicator}} | stats count by source
      - name: block-indicator
        type: call
        call: paloalto.add-to-block-list
        with:
          indicator: '{{indicator}}'
          type: '{{indicator_type}}'
      - name: create-case
        type: call
        call: servicenow.create-record
        with:
          table: x_threat_case
          indicator: '{{indicator}}'
          type: '{{indicator_type}}'
          sentinel_matches: '{{search-sentinel.match_count}}'
          blocked: '{{block-indicator.status}}'
  consumes:
  - type: http
    namespace: sentinel
    baseUri: https://graph.microsoft.com/v1.0/security
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: indicators
      path: /tiIndicators
      inputParameters:
      - name: value
        in: query
      - name: type
        in: query
      operations:
      - name: search-indicators
        method: GET
  - type: http
    namespace: splunk
    baseUri: https://splunk.boozallen.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search
      path: /search/jobs
      operations:
      - name: search
        method: POST
  - type: http
    namespace: paloalto
    baseUri: https://firewall.boozallen.com/restapi/v10.2
    authentication:
      type: apiKey
      key: $secrets.paloalto_api_key
    resources:
    - name: block-lists
      path: /Objects/CustomURLCategories
      operations:
      - name: add-to-block-list
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://boozallen.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/x_threat_case
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → threat-hunting-pipeline.yml

Creates a Zoom meeting for government client consultations.

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

Retrieves Microsoft Purview data classification scan results for government data governance.

naftiko: '0.5'
info:
  label: Microsoft Purview Data Classification
  description: Retrieves Microsoft Purview data classification scan results for government data governance.
  tags:
  - data-governance
  - microsoft-purview
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: data-governance
    port: 8080
    tools:
    - name: get-classification-results
      description: Look up Purview data classification results.
      inputParameters:
      - name: data_source
        in: body
        type: string
        description: The Purview data source name.
      call: purview.get-classification
      with:
        data_source: '{{data_source}}'
  consumes:
  - type: http
    namespace: purview
    baseUri: https://boozallen.purview.azure.com
    authentication:
      type: bearer
      token: $secrets.purview_token
    resources:
    - name: classifications
      path: /catalog/api/atlas/v2/entity/bulk?typeName={{data_source}}
      inputParameters:
      - name: data_source
        in: query
      operations:
      - name: get-classification
        method: GET
Open in Framework → View in Fleet → microsoft-purview-data-classification.yml

When a critical security incident is detected in Splunk, creates a ServiceNow P1 incident, isolates the affected endpoint in Microsoft Sentinel, and posts to the security war room in Teams.

naftiko: '0.5'
info:
  label: Incident Response Escalation Pipeline
  description: When a critical security incident is detected in Splunk, creates a ServiceNow P1 incident, isolates the affected endpoint in Microsoft Sentinel, and posts to the security war room in Teams.
  tags:
  - security
  - incident-response
  - splunk
  - servicenow
  - microsoft-sentinel
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: incident-escalation
    port: 8080
    tools:
    - name: escalate-incident
      description: Escalate a critical security incident across ServiceNow, Sentinel, and Teams.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: Splunk alert ID.
      - name: affected_host
        in: body
        type: string
        description: Hostname of compromised system.
      steps:
      - name: get-alert
        type: call
        call: splunk.get-alert
        with:
          alert_id: '{{alert_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'CRITICAL: {{get-alert.alert_name}} on {{affected_host}}'
          priority: '1'
          category: security
      - name: isolate-endpoint
        type: call
        call: sentinel.isolate-machine
        with:
          hostname: '{{affected_host}}'
      - name: notify-warroom
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: security-warroom
          text: 'P1 Incident: {{get-alert.alert_name}}. Host: {{affected_host}}. ServiceNow: {{create-incident.number}}. Endpoint isolated: {{isolate-endpoint.status}}.'
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.boozallen.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: alerts
      path: /alerts/fired_alerts/{{alert_id}}
      inputParameters:
      - name: alert_id
        in: path
      operations:
      - name: get-alert
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://boozallen.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: sentinel
    baseUri: https://graph.microsoft.com/v1.0/security
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: machines
      path: /tiIndicators
      operations:
      - name: isolate-machine
        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/security/channels/warroom/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → incident-response-escalation-pipeline.yml

Retrieves ADP payroll data for consultant compensation management.

naftiko: '0.5'
info:
  label: ADP Payroll Lookup
  description: Retrieves ADP payroll data for consultant compensation management.
  tags:
  - hr
  - adp
  - payroll
capability:
  exposes:
  - type: mcp
    namespace: hr-payroll
    port: 8080
    tools:
    - name: get-payroll-data
      description: Look up ADP payroll by employee ID.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The ADP employee ID.
      call: adp.get-payroll
      with:
        employee_id: '{{employee_id}}'
  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-distributions
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-payroll
        method: GET
Open in Framework → View in Fleet → adp-payroll-lookup.yml

When a new position is approved, creates the requisition in Workday, posts the job on Indeed, adds the opportunity to Salesforce for tracking, and notifies the recruiting team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Talent Acquisition Pipeline
  description: When a new position is approved, creates the requisition in Workday, posts the job on Indeed, adds the opportunity to Salesforce for tracking, and notifies the recruiting team via Microsoft Teams.
  tags:
  - hr
  - talent
  - workday
  - indeed
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: talent-acquisition
    port: 8080
    tools:
    - name: open-position
      description: Orchestrate new position opening across Workday, Indeed, Salesforce, and Teams.
      inputParameters:
      - name: position_title
        in: body
        type: string
        description: Job title.
      - name: clearance_level
        in: body
        type: string
        description: Required security clearance.
      - name: location
        in: body
        type: string
        description: Work location.
      steps:
      - name: create-req
        type: call
        call: workday.create-requisition
        with:
          title: '{{position_title}}'
          clearance: '{{clearance_level}}'
          location: '{{location}}'
      - name: post-job
        type: call
        call: indeed.create-posting
        with:
          title: '{{position_title}} ({{clearance_level}})'
          location: '{{location}}'
          description: Booz Allen Hamilton is seeking a {{position_title}} with {{clearance_level}} clearance.
      - name: track-opportunity
        type: call
        call: salesforce.create-record
        with:
          object: Recruiting_Opportunity__c
          title: '{{position_title}}'
          req_id: '{{create-req.id}}'
      - name: notify-recruiters
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: recruiting
          text: 'New position opened: {{position_title}} in {{location}}. Clearance: {{clearance_level}}. Req: {{create-req.id}}. Indeed: {{post-job.url}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: requisitions
      path: /jobRequisitions
      operations:
      - name: create-requisition
        method: POST
  - type: http
    namespace: indeed
    baseUri: https://apis.indeed.com/v2
    authentication:
      type: bearer
      token: $secrets.indeed_token
    resources:
    - name: postings
      path: /postings
      operations:
      - name: create-posting
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://boozallen.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: records
      path: /sobjects/Recruiting_Opportunity__c
      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/recruiting/channels/general/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → talent-acquisition-pipeline.yml

Provisions AWS infrastructure using CloudFormation, registers resources in ServiceNow CMDB, creates a Jira tracking story, and notifies the cloud team via Microsoft Teams.

naftiko: '0.5'
info:
  label: AWS Cloud Infrastructure Provisioning Pipeline
  description: Provisions AWS infrastructure using CloudFormation, registers resources in ServiceNow CMDB, creates a Jira tracking story, and notifies the cloud team via Microsoft Teams.
  tags:
  - cloud
  - provisioning
  - aws
  - cloudformation
  - servicenow
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cloud-provisioning
    port: 8080
    tools:
    - name: provision-aws-infrastructure
      description: Given a CloudFormation template and parameters, provision infrastructure and track across systems.
      inputParameters:
      - name: stack_name
        in: body
        type: string
        description: The CloudFormation stack name.
      - name: template_url
        in: body
        type: string
        description: S3 URL of the CloudFormation template.
      - name: project_key
        in: body
        type: string
        description: Jira project key.
      - name: cloud_channel
        in: body
        type: string
        description: Microsoft Teams channel for cloud team.
      steps:
      - name: create-stack
        type: call
        call: cloudformation.create-stack
        with:
          stack_name: '{{stack_name}}'
          template_url: '{{template_url}}'
      - name: register-cmdb
        type: call
        call: servicenow.create-ci
        with:
          name: '{{stack_name}}'
          category: Cloud Infrastructure
          environment: production
          cloud_provider: AWS
          resource_id: '{{create-stack.stack_id}}'
      - name: create-story
        type: call
        call: jira.create-issue
        with:
          project_key: '{{project_key}}'
          summary: 'AWS Stack: {{stack_name}}'
          issue_type: Story
          description: 'CloudFormation stack deployed. Stack ID: {{create-stack.stack_id}}. CMDB: {{register-cmdb.sys_id}}.'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{cloud_channel}}'
          text: 'AWS infrastructure provisioned: {{stack_name}}. Jira: {{create-story.key}}. CMDB registered.'
  consumes:
  - type: http
    namespace: cloudformation
    baseUri: https://cloudformation.us-east-1.amazonaws.com
    authentication:
      type: aws-sigv4
      accessKeyId: $secrets.aws_access_key
      secretAccessKey: $secrets.aws_secret_key
    resources:
    - name: stacks
      path: /
      operations:
      - name: create-stack
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://boozallen.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cmdb
      path: /table/cmdb_ci
      operations:
      - name: create-ci
        method: POST
  - type: http
    namespace: jira
    baseUri: https://boozallen.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → aws-cloud-infrastructure-provisioning-pipeline.yml

Retrieves VMware vCenter virtual machine status for government on-premises infrastructure.

naftiko: '0.5'
info:
  label: VMware Virtual Infrastructure Status
  description: Retrieves VMware vCenter virtual machine status for government on-premises infrastructure.
  tags:
  - infrastructure
  - vmware
  - virtualization
capability:
  exposes:
  - type: mcp
    namespace: vm-management
    port: 8080
    tools:
    - name: get-vm-status
      description: Look up a VMware VM by ID.
      inputParameters:
      - name: vm_id
        in: body
        type: string
        description: The vCenter VM ID.
      call: vmware.get-vm
      with:
        vm_id: '{{vm_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.name
      - name: power_state
        type: string
        mapping: $.power_state
      - name: cpu_count
        type: integer
        mapping: $.cpu.count
      - name: memory_mb
        type: integer
        mapping: $.memory.size_MiB
  consumes:
  - type: http
    namespace: vmware
    baseUri: https://vcenter.boozallen.com/api/vcenter
    authentication:
      type: bearer
      token: $secrets.vmware_token
    resources:
    - name: vms
      path: /vm/{{vm_id}}
      inputParameters:
      - name: vm_id
        in: path
      operations:
      - name: get-vm
        method: GET
Open in Framework → View in Fleet → vmware-virtual-infrastructure-status.yml

Performs STIG compliance scanning by running OpenSCAP checks via Red Hat Satellite, comparing against baselines in Splunk, filing non-compliance in ServiceNow, and reporting to Confluence.

naftiko: '0.5'
info:
  label: STIG Compliance Scanning Pipeline
  description: Performs STIG compliance scanning by running OpenSCAP checks via Red Hat Satellite, comparing against baselines in Splunk, filing non-compliance in ServiceNow, and reporting to Confluence.
  tags:
  - compliance
  - stig
  - red-hat-satellite
  - splunk
  - servicenow
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: stig-compliance
    port: 8080
    tools:
    - name: run-stig-scan
      description: Execute STIG compliance scan across Red Hat Satellite, Splunk, ServiceNow, and Confluence.
      inputParameters:
      - name: host_group
        in: body
        type: string
        description: Red Hat Satellite host group.
      - name: stig_profile
        in: body
        type: string
        description: STIG profile name.
      steps:
      - name: run-scan
        type: call
        call: satellite.run-openscap
        with:
          host_group: '{{host_group}}'
          profile: '{{stig_profile}}'
      - name: check-baselines
        type: call
        call: splunk.search
        with:
          query: index=compliance host_group={{host_group}} profile={{stig_profile}} | stats count by compliance_status
      - name: file-findings
        type: call
        call: servicenow.create-record
        with:
          table: x_stig_finding
          host_group: '{{host_group}}'
          profile: '{{stig_profile}}'
          fail_count: '{{run-scan.fail_count}}'
      - name: create-report
        type: call
        call: confluence.create-page
        with:
          space_key: COMPLIANCE
          title: 'STIG Scan: {{host_group}} — {{stig_profile}}'
          body: 'Pass: {{run-scan.pass_count}}. Fail: {{run-scan.fail_count}}. Baseline deviation: {{check-baselines.deviation_pct}}%.'
  consumes:
  - type: http
    namespace: satellite
    baseUri: https://satellite.boozallen.com/api/v2
    authentication:
      type: basic
      username: $secrets.satellite_user
      password: $secrets.satellite_password
    resources:
    - name: scap
      path: /hosts/{{host_group}}/openscap/scans
      inputParameters:
      - name: host_group
        in: path
      operations:
      - name: run-openscap
        method: POST
  - type: http
    namespace: splunk
    baseUri: https://splunk.boozallen.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search
      path: /search/jobs
      operations:
      - name: search
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://boozallen.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/x_stig_finding
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://boozallen.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → stig-compliance-scanning-pipeline.yml

When a consultant is assigned to a classified project, verifies their clearance in the HR system, creates a ServiceNow security request, logs in Splunk, and notifies the FSO via Microsoft Teams.

naftiko: '0.5'
info:
  label: Security Clearance Verification Pipeline
  description: When a consultant is assigned to a classified project, verifies their clearance in the HR system, creates a ServiceNow security request, logs in Splunk, and notifies the FSO via Microsoft Teams.
  tags:
  - security
  - clearance
  - workday
  - servicenow
  - splunk
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: security-clearance
    port: 8080
    tools:
    - name: verify-clearance
      description: Given a consultant ID and required clearance level, verify and process across systems.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      - name: required_clearance
        in: body
        type: string
        description: Required clearance level (e.g., Secret, TS/SCI).
      - name: project_name
        in: body
        type: string
        description: The classified project name.
      - name: fso_channel
        in: body
        type: string
        description: Microsoft Teams channel for FSO notifications.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: create-security-request
        type: call
        call: servicenow.create-request
        with:
          short_description: 'Clearance verification: {{get-employee.full_name}} for {{project_name}}'
          category: security_clearance
          description: 'Required: {{required_clearance}}. Employee: {{get-employee.full_name}}. Project: {{project_name}}.'
      - name: log-audit
        type: call
        call: splunk.log-event
        with:
          source: clearance-verification
          event: 'Clearance verification initiated for {{get-employee.full_name}} ({{employee_id}}). Required: {{required_clearance}}. Project: {{project_name}}.'
      - name: notify-fso
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{fso_channel}}'
          text: 'Clearance verification needed: {{get-employee.full_name}} requires {{required_clearance}} for {{project_name}}. ServiceNow: {{create-security-request.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://boozallen.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
  - type: http
    namespace: splunk
    baseUri: https://splunk.boozallen.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: events
      path: /receivers/simple
      operations:
      - name: log-event
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → security-clearance-verification-pipeline.yml

Retrieves container image metadata from the Booz Allen Docker registry for government deployments.

naftiko: '0.5'
info:
  label: Docker Container Registry Lookup
  description: Retrieves container image metadata from the Booz Allen Docker registry for government deployments.
  tags:
  - containers
  - docker
  - registry
capability:
  exposes:
  - type: mcp
    namespace: container-registry
    port: 8080
    tools:
    - name: get-image-tags
      description: Look up Docker image tags in the registry.
      inputParameters:
      - name: repository
        in: body
        type: string
        description: Docker repository name.
      call: docker.list-tags
      with:
        repository: '{{repository}}'
  consumes:
  - type: http
    namespace: docker
    baseUri: https://registry.boozallen.com/v2
    authentication:
      type: bearer
      token: $secrets.docker_registry_token
    resources:
    - name: tags
      path: /{{repository}}/tags/list
      inputParameters:
      - name: repository
        in: path
      operations:
      - name: list-tags
        method: GET
Open in Framework → View in Fleet → docker-container-registry-lookup.yml

Performs a zero trust access review by pulling user access from Azure AD, checking endpoint compliance in Microsoft Intune, reviewing firewall rules in Palo Alto, and logging the review in ServiceNow.

naftiko: '0.5'
info:
  label: Zero Trust Access Review Pipeline
  description: Performs a zero trust access review by pulling user access from Azure AD, checking endpoint compliance in Microsoft Intune, reviewing firewall rules in Palo Alto, and logging the review in ServiceNow.
  tags:
  - security
  - zero-trust
  - azure
  - microsoft-intune
  - palo-alto-networks
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: zero-trust-review
    port: 8080
    tools:
    - name: run-access-review
      description: Execute zero trust access review across identity, endpoint, and network systems.
      inputParameters:
      - name: user_upn
        in: body
        type: string
        description: User principal name.
      - name: device_id
        in: body
        type: string
        description: Intune device ID.
      steps:
      - name: get-access
        type: call
        call: azuread.get-user-roles
        with:
          user_upn: '{{user_upn}}'
      - name: check-compliance
        type: call
        call: intune.get-device-compliance
        with:
          device_id: '{{device_id}}'
      - name: get-firewall-rules
        type: call
        call: paloalto.get-user-rules
        with:
          user: '{{user_upn}}'
      - name: log-review
        type: call
        call: servicenow.create-record
        with:
          table: x_zt_access_review
          user: '{{user_upn}}'
          roles_count: '{{get-access.role_count}}'
          device_compliant: '{{check-compliance.is_compliant}}'
          firewall_rules: '{{get-firewall-rules.rule_count}}'
  consumes:
  - type: http
    namespace: azuread
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users/{{user_upn}}/appRoleAssignments
      inputParameters:
      - name: user_upn
        in: path
      operations:
      - name: get-user-roles
        method: GET
  - 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
  - type: http
    namespace: paloalto
    baseUri: https://firewall.boozallen.com/restapi/v10.2
    authentication:
      type: apiKey
      key: $secrets.paloalto_api_key
    resources:
    - name: policies
      path: /Policies/SecurityRules
      inputParameters:
      - name: user
        in: query
      operations:
      - name: get-user-rules
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://boozallen.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/x_zt_access_review
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → zero-trust-access-review-pipeline.yml

Classifies government data by scanning files in Amazon S3 with Microsoft Purview, applying labels, creating a compliance record in ServiceNow, and alerting data officers via Teams.

naftiko: '0.5'
info:
  label: Government Data Classification Pipeline
  description: Classifies government data by scanning files in Amazon S3 with Microsoft Purview, applying labels, creating a compliance record in ServiceNow, and alerting data officers via Teams.
  tags:
  - data-governance
  - classification
  - amazon-s3
  - microsoft-purview
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: data-classification
    port: 8080
    tools:
    - name: classify-data
      description: Classify government data across S3, Purview, ServiceNow, and Teams.
      inputParameters:
      - name: bucket_name
        in: body
        type: string
        description: S3 bucket name.
      - name: prefix
        in: body
        type: string
        description: S3 object prefix.
      steps:
      - name: scan-bucket
        type: call
        call: purview.scan-source
        with:
          source: s3://{{bucket_name}}/{{prefix}}
      - name: apply-labels
        type: call
        call: purview.apply-classification
        with:
          scan_id: '{{scan-bucket.scan_id}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: x_data_classification
          bucket: '{{bucket_name}}'
          classified_count: '{{apply-labels.classified_count}}'
          sensitivity_level: '{{apply-labels.max_sensitivity}}'
      - name: alert-officers
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: data-governance
          text: 'Data classification complete for s3://{{bucket_name}}/{{prefix}}. Files classified: {{apply-labels.classified_count}}. Max sensitivity: {{apply-labels.max_sensitivity}}.'
  consumes:
  - type: http
    namespace: purview
    baseUri: https://boozallen-gov.purview.azure.com/scan/api
    authentication:
      type: bearer
      token: $secrets.purview_token
    resources:
    - name: scans
      path: /datasources/s3/scans
      operations:
      - name: scan-source
        method: POST
  - type: http
    namespace: purview-catalog
    baseUri: https://boozallen-gov.purview.azure.com/catalog/api
    authentication:
      type: bearer
      token: $secrets.purview_token
    resources:
    - name: classifications
      path: /atlas/v2/entity/bulk/classification
      operations:
      - name: apply-classification
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://boozallen.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/x_data_classification
      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/data-gov/channels/general/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → government-data-classification-pipeline.yml

Retrieves the status of a GitLab CI/CD pipeline for government software projects.

naftiko: '0.5'
info:
  label: GitLab Pipeline Status
  description: Retrieves the status of a GitLab CI/CD pipeline for government software projects.
  tags:
  - cicd
  - gitlab
capability:
  exposes:
  - type: mcp
    namespace: pipeline-management
    port: 8080
    tools:
    - name: get-pipeline-status
      description: Look up a GitLab pipeline by project ID and pipeline ID.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: GitLab project ID.
      - name: pipeline_id
        in: body
        type: string
        description: Pipeline ID.
      call: gitlab.get-pipeline
      with:
        project_id: '{{project_id}}'
        pipeline_id: '{{pipeline_id}}'
  consumes:
  - type: http
    namespace: gitlab
    baseUri: https://gitlab.boozallen.com/api/v4
    authentication:
      type: bearer
      token: $secrets.gitlab_token
    resources:
    - name: pipelines
      path: /projects/{{project_id}}/pipelines/{{pipeline_id}}
      inputParameters:
      - name: project_id
        in: path
      - name: pipeline_id
        in: path
      operations:
      - name: get-pipeline
        method: GET
Open in Framework → View in Fleet → gitlab-pipeline-status.yml

Generates a sprint retrospective report by pulling velocity from Jira, gathering feedback from Microsoft Forms, summarizing in Confluence, and posting highlights to Teams.

naftiko: '0.5'
info:
  label: Sprint Retrospective Report Pipeline
  description: Generates a sprint retrospective report by pulling velocity from Jira, gathering feedback from Microsoft Forms, summarizing in Confluence, and posting highlights to Teams.
  tags:
  - agile
  - retrospective
  - jira
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sprint-retro
    port: 8080
    tools:
    - name: generate-retro-report
      description: Compile sprint retrospective from Jira, Forms, Confluence, and Teams.
      inputParameters:
      - name: board_id
        in: body
        type: string
        description: Jira board ID.
      - name: sprint_id
        in: body
        type: string
        description: Sprint ID.
      - name: form_id
        in: body
        type: string
        description: Microsoft Forms feedback form ID.
      steps:
      - name: get-velocity
        type: call
        call: jira.get-sprint
        with:
          board_id: '{{board_id}}'
          sprint_id: '{{sprint_id}}'
      - name: get-feedback
        type: call
        call: msforms.get-responses
        with:
          form_id: '{{form_id}}'
      - name: create-retro-page
        type: call
        call: confluence.create-page
        with:
          space_key: AGILE
          title: Sprint {{sprint_id}} Retrospective
          body: 'Velocity: {{get-velocity.completed_points}}. Feedback responses: {{get-feedback.response_count}}.'
      - name: post-highlights
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: agile-team
          text: 'Sprint {{sprint_id}} retro published. Velocity: {{get-velocity.completed_points}} pts. Feedback: {{get-feedback.response_count}} responses. Page: {{create-retro-page.url}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://boozallen.atlassian.net/rest/agile/1.0
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: sprints
      path: /board/{{board_id}}/sprint/{{sprint_id}}
      inputParameters:
      - name: board_id
        in: path
      - name: sprint_id
        in: path
      operations:
      - name: get-sprint
        method: GET
  - type: http
    namespace: msforms
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: forms
      path: /drives/forms/items/{{form_id}}/workbook
      inputParameters:
      - name: form_id
        in: path
      operations:
      - name: get-responses
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://boozallen.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: messages
      path: /teams/agile/channels/general/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → sprint-retrospective-report-pipeline.yml

Prepares a client briefing by pulling project metrics from Jira, generating a Power BI dashboard refresh, retrieving financials from SAP Concur, and posting the briefing package link to Microsoft Teams.

naftiko: '0.5'
info:
  label: Agency Client Briefing Pipeline
  description: Prepares a client briefing by pulling project metrics from Jira, generating a Power BI dashboard refresh, retrieving financials from SAP Concur, and posting the briefing package link to Microsoft Teams.
  tags:
  - consulting
  - jira
  - power-bi
  - sap-concur
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: client-briefing
    port: 8080
    tools:
    - name: prepare-briefing
      description: Assemble a client briefing package from project metrics, dashboards, financials, and notify the team.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: Jira project key.
      - name: dashboard_id
        in: body
        type: string
        description: Power BI dashboard ID.
      - name: cost_center
        in: body
        type: string
        description: SAP Concur cost center.
      steps:
      - name: get-metrics
        type: call
        call: jira.get-sprint-report
        with:
          project_key: '{{project_key}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dashboard_id: '{{dashboard_id}}'
      - name: get-financials
        type: call
        call: concur.get-expense-summary
        with:
          cost_center: '{{cost_center}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: client-briefings
          text: 'Briefing ready for {{project_key}}. Sprint velocity: {{get-metrics.velocity}}. Expenses: ${{get-financials.total_amount}}. Dashboard: {{refresh-dashboard.url}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://boozallen.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: boards
      path: /board/{{project_key}}/sprint
      inputParameters:
      - name: project_key
        in: path
      operations:
      - name: get-sprint-report
        method: GET
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dashboard_id}}/refreshes
      inputParameters:
      - name: dashboard_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: concur
    baseUri: https://us.api.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: expenses
      path: /expense/reportdigests
      inputParameters:
      - name: cost_center
        in: query
      operations:
      - name: get-expense-summary
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/consulting/channels/general/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → agency-client-briefing-pipeline.yml

Manages API lifecycle by registering a new API version in Amazon API Gateway, updating documentation in Confluence, running contract tests, and notifying consumers via Teams.

naftiko: '0.5'
info:
  label: API Lifecycle Management Pipeline
  description: Manages API lifecycle by registering a new API version in Amazon API Gateway, updating documentation in Confluence, running contract tests, and notifying consumers via Teams.
  tags:
  - api
  - lifecycle
  - amazon-api-gateway
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: api-lifecycle
    port: 8080
    tools:
    - name: publish-api-version
      description: Manage API version lifecycle across API Gateway, Confluence, Postman, and Teams.
      inputParameters:
      - name: api_name
        in: body
        type: string
        description: API name.
      - name: version
        in: body
        type: string
        description: New API version.
      - name: openapi_spec_url
        in: body
        type: string
        description: URL to OpenAPI spec.
      steps:
      - name: deploy-api
        type: call
        call: apigateway.import-api
        with:
          api_name: '{{api_name}}'
          version: '{{version}}'
          spec_url: '{{openapi_spec_url}}'
      - name: update-docs
        type: call
        call: confluence.create-page
        with:
          space_key: APIDOCS
          title: '{{api_name}} v{{version}}'
          body: 'API deployed. Endpoint: {{deploy-api.endpoint_url}}. Spec: {{openapi_spec_url}}.'
      - name: run-tests
        type: call
        call: postman.run-collection
        with:
          collection: '{{api_name}}-contract-tests'
          environment: production
      - name: notify-consumers
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: api-consumers
          text: 'New API version published: {{api_name}} v{{version}}. Endpoint: {{deploy-api.endpoint_url}}. Tests: {{run-tests.passed_count}}/{{run-tests.total_count}} passed.'
  consumes:
  - type: http
    namespace: apigateway
    baseUri: https://apigateway.us-gov-west-1.amazonaws.com/v2
    authentication:
      type: bearer
      token: $secrets.aws_govcloud_token
    resources:
    - name: apis
      path: /apis
      operations:
      - name: import-api
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://boozallen.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: postman
    baseUri: https://api.getpostman.com
    authentication:
      type: apiKey
      key: $secrets.postman_api_key
    resources:
    - name: collections
      path: /collections/{{collection}}/runs
      inputParameters:
      - name: collection
        in: path
      operations:
      - name: run-collection
        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/api-platform/channels/general/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → api-lifecycle-management-pipeline.yml

Sends an email via Microsoft Outlook for consulting project communications.

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

Triggers an application deployment on Red Hat OpenShift for government container workloads.

naftiko: '0.5'
info:
  label: OpenShift Application Deployment
  description: Triggers an application deployment on Red Hat OpenShift for government container workloads.
  tags:
  - cloud
  - openshift
  - deployment
  - government
capability:
  exposes:
  - type: mcp
    namespace: container-deploy
    port: 8080
    tools:
    - name: deploy-to-openshift
      description: Deploy an application to OpenShift.
      inputParameters:
      - name: namespace
        in: body
        type: string
        description: The OpenShift namespace.
      - name: deployment_name
        in: body
        type: string
        description: The deployment name.
      - name: image
        in: body
        type: string
        description: Container image to deploy.
      call: openshift.update-deployment
      with:
        namespace: '{{namespace}}'
        deployment_name: '{{deployment_name}}'
        image: '{{image}}'
  consumes:
  - type: http
    namespace: openshift
    baseUri: https://openshift.boozallen.com:6443/apis/apps/v1
    authentication:
      type: bearer
      token: $secrets.openshift_token
    resources:
    - name: deployments
      path: /namespaces/{{namespace}}/deployments/{{deployment_name}}
      inputParameters:
      - name: namespace
        in: path
      - name: deployment_name
        in: path
      operations:
      - name: update-deployment
        method: PATCH
Open in Framework → View in Fleet → openshift-application-deployment.yml

Retrieves metadata for an S3 object for government data lake assets.

naftiko: '0.5'
info:
  label: Amazon S3 Data Retrieval
  description: Retrieves metadata for an S3 object for government data lake assets.
  tags:
  - cloud-storage
  - amazon-s3
  - data
capability:
  exposes:
  - type: mcp
    namespace: s3-storage
    port: 8080
    tools:
    - name: get-s3-object-info
      description: Look up an S3 object by bucket and key.
      inputParameters:
      - name: bucket
        in: body
        type: string
        description: The S3 bucket name.
      - name: key
        in: body
        type: string
        description: The object key.
      call: s3.head-object
      with:
        bucket: '{{bucket}}'
        key: '{{key}}'
      outputParameters:
      - name: content_type
        type: string
        mapping: $.ContentType
      - name: content_length
        type: integer
        mapping: $.ContentLength
      - name: last_modified
        type: string
        mapping: $.LastModified
  consumes:
  - type: http
    namespace: s3
    baseUri: https://{{bucket}}.s3.amazonaws.com
    authentication:
      type: aws-sigv4
      accessKeyId: $secrets.aws_access_key
      secretAccessKey: $secrets.aws_secret_key
    resources:
    - name: objects
      path: /{{key}}
      inputParameters:
      - name: bucket
        in: path
      - name: key
        in: path
      operations:
      - name: head-object
        method: HEAD
Open in Framework → View in Fleet → amazon-s3-data-retrieval.yml

Executes a SQL query against the Booz Allen Snowflake data warehouse for consulting analytics and client reporting.

naftiko: '0.5'
info:
  label: Snowflake Analytics Query
  description: Executes a SQL query against the Booz Allen Snowflake data warehouse for consulting analytics and client reporting.
  tags:
  - data
  - analytics
  - snowflake
  - consulting
capability:
  exposes:
  - type: mcp
    namespace: data-analytics
    port: 8080
    tools:
    - name: run-snowflake-query
      description: Execute a SQL query against the Snowflake warehouse.
      inputParameters:
      - name: sql_statement
        in: body
        type: string
        description: The SQL statement.
      - name: warehouse
        in: body
        type: string
        description: The Snowflake warehouse name.
      call: snowflake.execute-statement
      with:
        statement: '{{sql_statement}}'
        warehouse: '{{warehouse}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://boozallen.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
Open in Framework → View in Fleet → snowflake-analytics-query.yml

Retrieves Grafana dashboard for government infrastructure monitoring.

naftiko: '0.5'
info:
  label: Grafana Government Metrics Dashboard
  description: Retrieves Grafana dashboard for government infrastructure monitoring.
  tags:
  - monitoring
  - grafana
  - government
capability:
  exposes:
  - type: mcp
    namespace: metrics-dashboards
    port: 8080
    tools:
    - name: get-grafana-dashboard
      description: Look up a Grafana dashboard by UID.
      inputParameters:
      - name: dashboard_uid
        in: body
        type: string
        description: Grafana dashboard UID.
      call: grafana.get-dashboard
      with:
        dashboard_uid: '{{dashboard_uid}}'
  consumes:
  - type: http
    namespace: grafana
    baseUri: https://grafana.boozallen.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_token
    resources:
    - name: dashboards
      path: /dashboards/uid/{{dashboard_uid}}
      inputParameters:
      - name: dashboard_uid
        in: path
      operations:
      - name: get-dashboard
        method: GET
Open in Framework → View in Fleet → grafana-government-metrics-dashboard.yml

Triggers a Fortify static application security testing scan for government applications.

naftiko: '0.5'
info:
  label: Fortify Security Code Scan
  description: Triggers a Fortify static application security testing scan for government applications.
  tags:
  - security
  - fortify
  - sast
capability:
  exposes:
  - type: mcp
    namespace: code-security
    port: 8080
    tools:
    - name: trigger-fortify-scan
      description: Trigger a Fortify SAST scan.
      inputParameters:
      - name: application_id
        in: body
        type: string
        description: Fortify application ID.
      - name: scan_type
        in: body
        type: string
        description: Scan type (static, dynamic).
      call: fortify.start-scan
      with:
        application_id: '{{application_id}}'
        scan_type: '{{scan_type}}'
  consumes:
  - type: http
    namespace: fortify
    baseUri: https://fortify.boozallen.com/ssc/api/v1
    authentication:
      type: bearer
      token: $secrets.fortify_token
    resources:
    - name: scans
      path: /projectVersions/{{application_id}}/artifacts
      inputParameters:
      - name: application_id
        in: path
      operations:
      - name: start-scan
        method: POST
Open in Framework → View in Fleet → fortify-security-code-scan.yml

Rotates secrets by generating a new credential in Azure Key Vault, updating the application in Kubernetes, validating the deployment via Datadog health checks, and logging the rotation in ServiceNow.

naftiko: '0.5'
info:
  label: Secret Rotation Pipeline
  description: Rotates secrets by generating a new credential in Azure Key Vault, updating the application in Kubernetes, validating the deployment via Datadog health checks, and logging the rotation in ServiceNow.
  tags:
  - security
  - secrets
  - azure
  - kubernetes
  - datadog
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: secret-rotation
    port: 8080
    tools:
    - name: rotate-secret
      description: Rotate secrets across Azure Key Vault, Kubernetes, Datadog, and ServiceNow.
      inputParameters:
      - name: secret_name
        in: body
        type: string
        description: Secret name in Key Vault.
      - name: k8s_namespace
        in: body
        type: string
        description: Kubernetes namespace.
      - name: app_name
        in: body
        type: string
        description: Application name.
      steps:
      - name: generate-secret
        type: call
        call: keyvault.rotate-secret
        with:
          secret_name: '{{secret_name}}'
      - name: update-deployment
        type: call
        call: k8s.update-secret
        with:
          namespace: '{{k8s_namespace}}'
          secret_name: '{{secret_name}}'
          value: '{{generate-secret.new_version}}'
      - name: validate-health
        type: call
        call: datadog.get-synthetics
        with:
          tag: app:{{app_name}}
      - name: log-rotation
        type: call
        call: servicenow.create-record
        with:
          table: x_secret_rotation
          secret: '{{secret_name}}'
          app: '{{app_name}}'
          health_status: '{{validate-health.overall_status}}'
  consumes:
  - type: http
    namespace: keyvault
    baseUri: https://bah-gov.vault.usgovcloudapi.net
    authentication:
      type: bearer
      token: $secrets.azure_gov_token
    resources:
    - name: secrets
      path: /secrets/{{secret_name}}/rotate
      inputParameters:
      - name: secret_name
        in: path
      operations:
      - name: rotate-secret
        method: POST
  - type: http
    namespace: k8s
    baseUri: https://k8s-api.boozallen.com/api/v1
    authentication:
      type: bearer
      token: $secrets.k8s_token
    resources:
    - name: secrets
      path: /namespaces/{{namespace}}/secrets/{{secret_name}}
      inputParameters:
      - name: namespace
        in: path
      - name: secret_name
        in: path
      operations:
      - name: update-secret
        method: PUT
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
    resources:
    - name: synthetics
      path: /synthetics/tests
      inputParameters:
      - name: tag
        in: query
      operations:
      - name: get-synthetics
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://boozallen.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/x_secret_rotation
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → secret-rotation-pipeline.yml

When a contractor's engagement ends, disables their Workday profile, revokes Azure AD access, closes their ServiceNow access request, and notifies the program manager via Outlook.

naftiko: '0.5'
info:
  label: Contractor Offboarding Pipeline
  description: When a contractor's engagement ends, disables their Workday profile, revokes Azure AD access, closes their ServiceNow access request, and notifies the program manager via Outlook.
  tags:
  - hr
  - offboarding
  - workday
  - azure
  - servicenow
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: contractor-offboarding
    port: 8080
    tools:
    - name: offboard-contractor
      description: Execute contractor offboarding across Workday, Azure AD, ServiceNow, and Outlook.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      - name: user_upn
        in: body
        type: string
        description: Azure AD user principal name.
      - name: pm_email
        in: body
        type: string
        description: Program manager email.
      steps:
      - name: disable-worker
        type: call
        call: workday.update-worker
        with:
          employee_id: '{{employee_id}}'
          status: terminated
      - name: revoke-access
        type: call
        call: azuread.disable-user
        with:
          user_upn: '{{user_upn}}'
      - name: close-tickets
        type: call
        call: servicenow.update-record
        with:
          table: sc_request
          query: requested_for={{user_upn}}
          state: closed
      - name: notify-pm
        type: call
        call: outlook.send-email
        with:
          to: '{{pm_email}}'
          subject: 'Contractor Offboarded: {{user_upn}}'
          body: 'Contractor {{employee_id}} has been offboarded. Workday: disabled. Azure AD: revoked. Open tickets: closed.'
  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/{{employee_id}}
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: update-worker
        method: PATCH
  - type: http
    namespace: azuread
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users/{{user_upn}}
      inputParameters:
      - name: user_upn
        in: path
      operations:
      - name: disable-user
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://boozallen.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: requests
      path: /table/sc_request
      operations:
      - name: update-record
        method: PATCH
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → contractor-offboarding-pipeline.yml

Retrieves the latest build status for a given Azure DevOps pipeline.

naftiko: '0.5'
info:
  label: Azure DevOps Build Status
  description: Retrieves the latest build status for a given Azure DevOps pipeline.
  tags:
  - ci
  - devops
  - azure-devops
capability:
  exposes:
  - type: mcp
    namespace: devops-builds
    port: 8080
    tools:
    - name: get-build-status
      description: Look up the latest Azure DevOps build.
      inputParameters:
      - name: pipeline_id
        in: body
        type: string
        description: The Azure DevOps pipeline definition ID.
      call: azuredevops.get-latest-build
      with:
        definition_id: '{{pipeline_id}}'
      outputParameters:
      - name: build_number
        type: string
        mapping: $.value[0].buildNumber
      - name: result
        type: string
        mapping: $.value[0].result
      - name: start_time
        type: string
        mapping: $.value[0].startTime
  consumes:
  - type: http
    namespace: azuredevops
    baseUri: https://dev.azure.com/boozallen/_apis/build
    authentication:
      type: bearer
      token: $secrets.azuredevops_pat
    inputParameters:
    - name: api-version
      in: query
      value: '7.0'
    resources:
    - name: builds
      path: /builds?definitions={{definition_id}}&$top=1&statusFilter=completed
      inputParameters:
      - name: definition_id
        in: query
      operations:
      - name: get-latest-build
        method: GET
Open in Framework → View in Fleet → azure-devops-build-status.yml

Retrieves remaining time-off balances for a consultant from Workday by employee ID.

naftiko: '0.5'
info:
  label: Workday Time Off Balance
  description: Retrieves remaining time-off balances for a consultant from Workday by employee ID.
  tags:
  - hr
  - workday
capability:
  exposes:
  - type: mcp
    namespace: hr-time-off
    port: 8080
    tools:
    - name: get-time-off-balance
      description: Look up a consultant's time-off balance by employee ID.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      call: workday.get-time-off
      with:
        employee_id: '{{employee_id}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/absenceManagement/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: time-off
      path: /workers/{{employee_id}}/timeOffBalances
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-time-off
        method: GET
Open in Framework → View in Fleet → workday-time-off-balance.yml

Assesses cloud migration readiness by scanning on-prem VMware inventory, checking AWS landing zone status, running a Terraform plan preview, and generating a readiness report in Confluence.

naftiko: '0.5'
info:
  label: Cloud Migration Readiness Assessment
  description: Assesses cloud migration readiness by scanning on-prem VMware inventory, checking AWS landing zone status, running a Terraform plan preview, and generating a readiness report in Confluence.
  tags:
  - cloud
  - migration
  - vmware
  - terraform
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: cloud-migration
    port: 8080
    tools:
    - name: assess-readiness
      description: Run a cloud migration readiness assessment across VMware, AWS, Terraform, and Confluence.
      inputParameters:
      - name: vcenter_cluster
        in: body
        type: string
        description: VMware vCenter cluster name.
      - name: landing_zone_id
        in: body
        type: string
        description: AWS landing zone account ID.
      steps:
      - name: scan-inventory
        type: call
        call: vmware.get-cluster-vms
        with:
          cluster: '{{vcenter_cluster}}'
      - name: check-landing-zone
        type: call
        call: aws.describe-account
        with:
          account_id: '{{landing_zone_id}}'
      - name: plan-infra
        type: call
        call: terraform.run-plan
        with:
          workspace: migration-{{landing_zone_id}}
      - name: create-report
        type: call
        call: confluence.create-page
        with:
          space_key: CLOUDMIG
          title: Readiness Assessment — {{vcenter_cluster}}
          body: 'VMs: {{scan-inventory.vm_count}}. Landing zone: {{check-landing-zone.status}}. Terraform resources: {{plan-infra.resource_count}}.'
  consumes:
  - type: http
    namespace: vmware
    baseUri: https://vcenter.boozallen.com/rest
    authentication:
      type: bearer
      token: $secrets.vcenter_token
    resources:
    - name: clusters
      path: /vcenter/vm
      inputParameters:
      - name: cluster
        in: query
      operations:
      - name: get-cluster-vms
        method: GET
  - type: http
    namespace: aws
    baseUri: https://organizations.us-gov-west-1.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_govcloud_token
    resources:
    - name: accounts
      path: /
      inputParameters:
      - name: account_id
        in: query
      operations:
      - name: describe-account
        method: GET
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: runs
      path: /runs
      operations:
      - name: run-plan
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://boozallen.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → cloud-migration-readiness-assessment.yml

Deploys a machine learning model to Amazon SageMaker for government AI/ML projects.

naftiko: '0.5'
info:
  label: Amazon SageMaker Model Deployment
  description: Deploys a machine learning model to Amazon SageMaker for government AI/ML projects.
  tags:
  - machine-learning
  - amazon-sagemaker
  - deployment
  - government
capability:
  exposes:
  - type: mcp
    namespace: ml-deployment
    port: 8080
    tools:
    - name: deploy-sagemaker-model
      description: Deploy a model to SageMaker.
      inputParameters:
      - name: model_name
        in: body
        type: string
        description: The SageMaker model name.
      - name: instance_type
        in: body
        type: string
        description: The endpoint instance type.
      call: sagemaker.create-endpoint
      with:
        model_name: '{{model_name}}'
        instance_type: '{{instance_type}}'
  consumes:
  - type: http
    namespace: sagemaker
    baseUri: https://runtime.sagemaker.us-east-1.amazonaws.com
    authentication:
      type: aws-sigv4
      accessKeyId: $secrets.aws_access_key
      secretAccessKey: $secrets.aws_secret_key
    resources:
    - name: endpoints
      path: /endpoints
      operations:
      - name: create-endpoint
        method: POST
Open in Framework → View in Fleet → amazon-sagemaker-model-deployment.yml

Retrieves a secret value from Azure Key Vault for secure credential management in government environments.

naftiko: '0.5'
info:
  label: Azure Key Vault Secret Retrieval
  description: Retrieves a secret value from Azure Key Vault for secure credential management in government environments.
  tags:
  - security
  - azure
capability:
  exposes:
  - type: mcp
    namespace: secret-management
    port: 8080
    tools:
    - name: get-secret
      description: Retrieve a secret from Azure Key Vault by name.
      inputParameters:
      - name: secret_name
        in: body
        type: string
        description: Name of the secret in Key Vault.
      call: keyvault.get-secret
      with:
        secret_name: '{{secret_name}}'
  consumes:
  - type: http
    namespace: keyvault
    baseUri: https://bah-gov.vault.usgovcloudapi.net
    authentication:
      type: bearer
      token: $secrets.azure_gov_token
    resources:
    - name: secrets
      path: /secrets/{{secret_name}}
      inputParameters:
      - name: secret_name
        in: path
      operations:
      - name: get-secret
        method: GET
Open in Framework → View in Fleet → azure-key-vault-secret-retrieval.yml

Retrieves a Figma file for government application UX design review.

naftiko: '0.5'
info:
  label: Figma Design Review
  description: Retrieves a Figma file for government application UX design review.
  tags:
  - design
  - figma
  - ux
capability:
  exposes:
  - type: mcp
    namespace: design-review
    port: 8080
    tools:
    - name: get-figma-file
      description: Look up a Figma file by key.
      inputParameters:
      - name: file_key
        in: body
        type: string
        description: The Figma file key.
      call: figma.get-file
      with:
        file_key: '{{file_key}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.name
      - name: last_modified
        type: string
        mapping: $.lastModified
  consumes:
  - type: http
    namespace: figma
    baseUri: https://api.figma.com/v1
    authentication:
      type: bearer
      token: $secrets.figma_token
    resources:
    - name: files
      path: /files/{{file_key}}
      inputParameters:
      - name: file_key
        in: path
      operations:
      - name: get-file
        method: GET
Open in Framework → View in Fleet → figma-design-review.yml

Retrieves a Confluence page by ID for consulting methodology and knowledge management.

naftiko: '0.5'
info:
  label: Confluence Knowledge Base Retrieval
  description: Retrieves a Confluence page by ID for consulting methodology and knowledge management.
  tags:
  - documentation
  - confluence
  - knowledge-management
capability:
  exposes:
  - type: mcp
    namespace: knowledge-base
    port: 8080
    tools:
    - name: get-confluence-page
      description: Look up a Confluence page by ID.
      inputParameters:
      - name: page_id
        in: body
        type: string
        description: The Confluence page ID.
      call: confluence.get-page
      with:
        page_id: '{{page_id}}'
      outputParameters:
      - name: title
        type: string
        mapping: $.title
      - name: version
        type: integer
        mapping: $.version.number
      - name: last_updated
        type: string
        mapping: $.version.when
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://boozallen.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: pages
      path: /content/{{page_id}}?expand=version
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: get-page
        method: GET
Open in Framework → View in Fleet → confluence-knowledge-base-retrieval.yml

Collects compliance evidence by querying Splunk audit logs, exporting Azure AD access reviews, gathering Terraform state files, and assembling the package in SharePoint.

naftiko: '0.5'
info:
  label: Compliance Evidence Collection Pipeline
  description: Collects compliance evidence by querying Splunk audit logs, exporting Azure AD access reviews, gathering Terraform state files, and assembling the package in SharePoint.
  tags:
  - compliance
  - evidence
  - splunk
  - azure
  - terraform
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: compliance-evidence
    port: 8080
    tools:
    - name: collect-evidence
      description: Collect compliance evidence across Splunk, Azure AD, Terraform, and SharePoint.
      inputParameters:
      - name: control_id
        in: body
        type: string
        description: Compliance control identifier.
      - name: date_range
        in: body
        type: string
        description: Evidence collection date range.
      steps:
      - name: get-audit-logs
        type: call
        call: splunk.search
        with:
          query: index=audit control_id={{control_id}}
          time_range: '{{date_range}}'
      - name: get-access-reviews
        type: call
        call: azuread.get-access-reviews
        with:
          filter: displayName eq '{{control_id}}'
      - name: get-terraform-state
        type: call
        call: terraform.get-state
        with:
          workspace: production
      - name: upload-evidence
        type: call
        call: sharepoint.upload-file
        with:
          site_id: compliance
          folder: Evidence/{{control_id}}
          content: 'Audit events: {{get-audit-logs.result_count}}. Access review status: {{get-access-reviews.status}}. Infrastructure state: {{get-terraform-state.resource_count}} resources.'
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.boozallen.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search
      path: /search/jobs
      operations:
      - name: search
        method: POST
  - type: http
    namespace: azuread
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: access-reviews
      path: /identityGovernance/accessReviews/definitions
      inputParameters:
      - name: filter
        in: query
      operations:
      - name: get-access-reviews
        method: GET
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: state
      path: /workspaces/production/current-state-version
      operations:
      - name: get-state
        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: /compliance/drive/root:/Evidence/{{control_id}}:/content
      inputParameters:
      - name: control_id
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → compliance-evidence-collection-pipeline.yml

When Splunk detects a security event, creates a P1 ServiceNow incident, logs to the SIEM, creates a Jira security task, and alerts the SOC via Microsoft Teams.

naftiko: '0.5'
info:
  label: Cybersecurity Incident Response Pipeline
  description: When Splunk detects a security event, creates a P1 ServiceNow incident, logs to the SIEM, creates a Jira security task, and alerts the SOC via Microsoft Teams.
  tags:
  - cybersecurity
  - incident-response
  - splunk
  - servicenow
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cyber-incident
    port: 8080
    tools:
    - name: trigger-cyber-incident
      description: Given a Splunk alert, orchestrate cyber incident response.
      inputParameters:
      - name: alert_name
        in: body
        type: string
        description: The Splunk alert name.
      - name: severity
        in: body
        type: string
        description: Alert severity level.
      - name: affected_system
        in: body
        type: string
        description: Affected system name.
      - name: soc_channel
        in: body
        type: string
        description: Microsoft Teams SOC channel.
      steps:
      - name: create-p1-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'CYBER: {{alert_name}} on {{affected_system}}'
          priority: '1'
          category: security
          description: 'Splunk alert: {{alert_name}}. Severity: {{severity}}. Affected: {{affected_system}}.'
      - name: create-security-task
        type: call
        call: jira.create-issue
        with:
          project_key: SEC
          summary: 'Cyber incident: {{alert_name}}'
          issue_type: Bug
          priority: Highest
          description: 'Affected: {{affected_system}}. Severity: {{severity}}. ServiceNow: {{create-p1-incident.number}}.'
      - name: alert-soc
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{soc_channel}}'
          text: 'CYBER ALERT: {{alert_name}} ({{severity}}) on {{affected_system}}. ServiceNow: {{create-p1-incident.number}}. Jira: {{create-security-task.key}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://boozallen.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: jira
    baseUri: https://boozallen.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → cybersecurity-incident-response-pipeline.yml

Orchestrates a release by triggering a GitHub Actions build, scanning with SonarQube, deploying to OpenShift, and creating a Confluence release page.

naftiko: '0.5'
info:
  label: DevOps Release Pipeline
  description: Orchestrates a release by triggering a GitHub Actions build, scanning with SonarQube, deploying to OpenShift, and creating a Confluence release page.
  tags:
  - devops
  - github-actions
  - sonarqube
  - openshift
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: release-management
    port: 8080
    tools:
    - name: execute-release
      description: Orchestrate a full release pipeline across GitHub, SonarQube, OpenShift, and Confluence.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository name.
      - name: version
        in: body
        type: string
        description: Release version tag.
      - name: openshift_project
        in: body
        type: string
        description: OpenShift project name.
      steps:
      - name: trigger-build
        type: call
        call: github.trigger-workflow
        with:
          repo: '{{repo}}'
          workflow: release.yml
          ref: '{{version}}'
      - name: run-scan
        type: call
        call: sonarqube.get-analysis
        with:
          project_key: '{{repo}}'
          branch: '{{version}}'
      - name: deploy-app
        type: call
        call: openshift.create-deployment
        with:
          project: '{{openshift_project}}'
          image: registry.boozallen.com/{{repo}}:{{version}}
      - name: create-release-page
        type: call
        call: confluence.create-page
        with:
          space_key: RELEASES
          title: Release {{repo}} {{version}}
          body: 'Build: {{trigger-build.run_id}}. Quality gate: {{run-scan.quality_gate_status}}. Deployed to: {{openshift_project}}.'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflows
      path: /repos/boozallen/{{repo}}/actions/workflows/release.yml/dispatches
      inputParameters:
      - name: repo
        in: path
      operations:
      - name: trigger-workflow
        method: POST
  - type: http
    namespace: sonarqube
    baseUri: https://sonarqube.boozallen.com/api
    authentication:
      type: bearer
      token: $secrets.sonarqube_token
    resources:
    - name: projects
      path: /qualitygates/project_status
      inputParameters:
      - name: project_key
        in: query
      - name: branch
        in: query
      operations:
      - name: get-analysis
        method: GET
  - type: http
    namespace: openshift
    baseUri: https://api.openshift.boozallen.com:6443/apis/apps/v1
    authentication:
      type: bearer
      token: $secrets.openshift_token
    resources:
    - name: deployments
      path: /namespaces/{{project}}/deployments
      inputParameters:
      - name: project
        in: path
      operations:
      - name: create-deployment
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://boozallen.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → devops-release-pipeline.yml

Triggers a Power BI dataset refresh for consulting project KPI dashboards.

naftiko: '0.5'
info:
  label: Power BI Consulting Dashboard Refresh
  description: Triggers a Power BI dataset refresh for consulting project KPI dashboards.
  tags:
  - analytics
  - power-bi
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: bi-reporting
    port: 8080
    tools:
    - name: refresh-dataset
      description: Trigger a Power BI dataset refresh.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID.
      - name: group_id
        in: body
        type: string
        description: The Power BI workspace ID.
      call: powerbi.refresh-dataset
      with:
        group_id: '{{group_id}}'
        dataset_id: '{{dataset_id}}'
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /groups/{{group_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: group_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → power-bi-consulting-dashboard-refresh.yml

Triggers an Azure DevOps pipeline to run Terraform for government cloud deployments, and notifies the team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Terraform Infrastructure Deployment Pipeline
  description: Triggers an Azure DevOps pipeline to run Terraform for government cloud deployments, and notifies the team via Microsoft Teams.
  tags:
  - infrastructure
  - terraform
  - azure-devops
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: infra-deploy
    port: 8080
    tools:
    - name: trigger-terraform-deploy
      description: Given a pipeline ID and environment, trigger Terraform deployment and notify.
      inputParameters:
      - name: pipeline_id
        in: body
        type: string
        description: The Azure DevOps pipeline definition ID.
      - name: environment
        in: body
        type: string
        description: Target environment.
      - name: notify_email
        in: body
        type: string
        description: Email for notification.
      steps:
      - name: queue-build
        type: call
        call: azuredevops.queue-build
        with:
          definition_id: '{{pipeline_id}}'
          parameters: '{"environment": "{{environment}}"}'
      - name: notify-started
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notify_email}}'
          text: 'Terraform deployment started for {{environment}}. Build: {{queue-build.buildNumber}}.'
  consumes:
  - type: http
    namespace: azuredevops
    baseUri: https://dev.azure.com/boozallen/_apis/build
    authentication:
      type: bearer
      token: $secrets.azuredevops_pat
    resources:
    - name: builds
      path: /builds
      operations:
      - name: queue-build
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → terraform-infrastructure-deployment-pipeline.yml

Searches Confluence for meeting notes matching a keyword, returning page titles and links.

naftiko: '0.5'
info:
  label: Confluence Meeting Notes Search
  description: Searches Confluence for meeting notes matching a keyword, returning page titles and links.
  tags:
  - collaboration
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: knowledge-search
    port: 8080
    tools:
    - name: search-meeting-notes
      description: Search Confluence for meeting notes by keyword.
      inputParameters:
      - name: keyword
        in: body
        type: string
        description: Search keyword for meeting notes.
      call: confluence.search-content
      with:
        cql: label = 'meeting-notes' AND text ~ '{{keyword}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://boozallen.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content/search
      inputParameters:
      - name: cql
        in: query
      operations:
      - name: search-content
        method: GET
Open in Framework → View in Fleet → confluence-meeting-notes-search.yml

Queries SolarWinds Orion for the health status of a government network node by IP address.

naftiko: '0.5'
info:
  label: SolarWinds Network Health
  description: Queries SolarWinds Orion for the health status of a government network node by IP address.
  tags:
  - networking
  - solarwinds
capability:
  exposes:
  - type: mcp
    namespace: network-monitoring
    port: 8080
    tools:
    - name: get-node-health
      description: Look up a SolarWinds node health status by IP address.
      inputParameters:
      - name: ip_address
        in: body
        type: string
        description: Node IP address.
      call: solarwinds.get-node
      with:
        ip_address: '{{ip_address}}'
  consumes:
  - type: http
    namespace: solarwinds
    baseUri: https://solarwinds.boozallen.com:17778/SolarWinds/InformationService/v3/Json
    authentication:
      type: basic
      username: $secrets.solarwinds_user
      password: $secrets.solarwinds_password
    resources:
    - name: nodes
      path: /Query
      inputParameters:
      - name: ip_address
        in: query
      operations:
      - name: get-node
        method: GET
Open in Framework → View in Fleet → solarwinds-network-health.yml

Creates a job posting on Indeed for government consulting positions.

naftiko: '0.5'
info:
  label: Indeed Government Consulting Job Posting
  description: Creates a job posting on Indeed for government consulting positions.
  tags:
  - hr
  - recruitment
  - indeed
  - government
capability:
  exposes:
  - type: mcp
    namespace: hr-recruitment
    port: 8080
    tools:
    - name: create-job-posting
      description: Create an Indeed job posting.
      inputParameters:
      - name: title
        in: body
        type: string
        description: Job title.
      - name: location
        in: body
        type: string
        description: Job location.
      - name: description
        in: body
        type: string
        description: Job description.
      - name: clearance_required
        in: body
        type: string
        description: Security clearance requirement.
      call: indeed.create-posting
      with:
        title: '{{title}}'
        location: '{{location}}'
        description: '{{description}}. Clearance required: {{clearance_required}}.'
  consumes:
  - type: http
    namespace: indeed
    baseUri: https://apis.indeed.com/v2
    authentication:
      type: bearer
      token: $secrets.indeed_token
    resources:
    - name: postings
      path: /jobs
      operations:
      - name: create-posting
        method: POST
Open in Framework → View in Fleet → indeed-government-consulting-job-posting.yml

Returns the lifecycle state and metadata of an Oracle Cloud Infrastructure compute instance.

naftiko: '0.5'
info:
  label: Oracle Cloud Instance Status
  description: Returns the lifecycle state and metadata of an Oracle Cloud Infrastructure compute instance.
  tags:
  - cloud
  - oracle-cloud
capability:
  exposes:
  - type: mcp
    namespace: oci-compute
    port: 8080
    tools:
    - name: get-instance-status
      description: Look up an OCI compute instance status by instance ID.
      inputParameters:
      - name: instance_id
        in: body
        type: string
        description: OCI compute instance OCID.
      call: oci.get-instance
      with:
        instance_id: '{{instance_id}}'
  consumes:
  - type: http
    namespace: oci
    baseUri: https://iaas.us-gov-ashburn-1.oraclecloud.com/20160918
    authentication:
      type: bearer
      token: $secrets.oci_token
    resources:
    - name: instances
      path: /instances/{{instance_id}}
      inputParameters:
      - name: instance_id
        in: path
      operations:
      - name: get-instance
        method: GET
Open in Framework → View in Fleet → oracle-cloud-instance-status.yml

Manages document reviews by pulling drafts from SharePoint, routing for approval via DocuSign, archiving signed copies in Box, and updating the document register in Confluence.

naftiko: '0.5'
info:
  label: Document Review Workflow Pipeline
  description: Manages document reviews by pulling drafts from SharePoint, routing for approval via DocuSign, archiving signed copies in Box, and updating the document register in Confluence.
  tags:
  - document-management
  - sharepoint
  - box
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: document-review
    port: 8080
    tools:
    - name: initiate-review
      description: Route documents for review across SharePoint, DocuSign, Box, and Confluence.
      inputParameters:
      - name: document_id
        in: body
        type: string
        description: SharePoint document ID.
      - name: reviewer_emails
        in: body
        type: string
        description: Comma-separated reviewer email addresses.
      steps:
      - name: get-document
        type: call
        call: sharepoint.get-file
        with:
          item_id: '{{document_id}}'
      - name: send-for-signature
        type: call
        call: docusign.create-envelope
        with:
          document_url: '{{get-document.download_url}}'
          signers: '{{reviewer_emails}}'
      - name: archive-signed
        type: call
        call: box.upload-file
        with:
          folder_id: signed-documents
          name: '{{get-document.name}}_signed'
      - name: update-register
        type: call
        call: confluence.update-page
        with:
          page_id: doc-register
          body: 'Document {{get-document.name}} signed. Envelope: {{send-for-signature.envelope_id}}. Archive: {{archive-signed.file_id}}.'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: items
      path: /boozallen.sharepoint.com/drive/items/{{item_id}}
      inputParameters:
      - name: item_id
        in: path
      operations:
      - name: get-file
        method: GET
  - type: http
    namespace: docusign
    baseUri: https://na4.docusign.net/restapi/v2.1
    authentication:
      type: bearer
      token: $secrets.docusign_token
    resources:
    - name: envelopes
      path: /accounts/bah/envelopes
      operations:
      - name: create-envelope
        method: POST
  - type: http
    namespace: box
    baseUri: https://upload.box.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files/content
      operations:
      - name: upload-file
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://boozallen.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content/doc-register
      operations:
      - name: update-page
        method: PUT
Open in Framework → View in Fleet → document-review-workflow-pipeline.yml

Retrieves vulnerability scan results from Nessus for a given scan ID used in government security assessments.

naftiko: '0.5'
info:
  label: Nessus Scan Results
  description: Retrieves vulnerability scan results from Nessus for a given scan ID used in government security assessments.
  tags:
  - security
  - nessus
capability:
  exposes:
  - type: mcp
    namespace: vulnerability-scanning
    port: 8080
    tools:
    - name: get-scan-results
      description: Retrieve Nessus vulnerability scan results by scan ID.
      inputParameters:
      - name: scan_id
        in: body
        type: string
        description: The Nessus scan ID.
      call: nessus.get-scan
      with:
        scan_id: '{{scan_id}}'
  consumes:
  - type: http
    namespace: nessus
    baseUri: https://nessus.boozallen.com/rest
    authentication:
      type: apiKey
      key: $secrets.nessus_api_key
    resources:
    - name: scans
      path: /scans/{{scan_id}}
      inputParameters:
      - name: scan_id
        in: path
      operations:
      - name: get-scan
        method: GET
Open in Framework → View in Fleet → nessus-scan-results.yml

Runs a digital twin simulation by pulling real-time sensor data from Azure IoT Hub, executing a MATLAB simulation, storing results in Amazon S3, and publishing findings to Confluence.

naftiko: '0.5'
info:
  label: Digital Twin Simulation Pipeline
  description: Runs a digital twin simulation by pulling real-time sensor data from Azure IoT Hub, executing a MATLAB simulation, storing results in Amazon S3, and publishing findings to Confluence.
  tags:
  - simulation
  - digital-twin
  - azure
  - matlab
  - amazon-s3
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: digital-twin
    port: 8080
    tools:
    - name: run-simulation
      description: Execute a digital twin simulation across IoT Hub, MATLAB, S3, and Confluence.
      inputParameters:
      - name: device_id
        in: body
        type: string
        description: IoT Hub device ID.
      - name: simulation_model
        in: body
        type: string
        description: MATLAB simulation model name.
      steps:
      - name: get-sensor-data
        type: call
        call: iothub.get-telemetry
        with:
          device_id: '{{device_id}}'
      - name: run-matlab
        type: call
        call: matlab.execute-script
        with:
          model: '{{simulation_model}}'
          input_data: '{{get-sensor-data.telemetry}}'
      - name: store-results
        type: call
        call: s3.put-object
        with:
          bucket: digital-twin-results
          key: '{{simulation_model}}/{{device_id}}/latest.json'
          body: '{{run-matlab.output}}'
      - name: publish-findings
        type: call
        call: confluence.create-page
        with:
          space_key: SIMULATION
          title: 'Digital Twin: {{simulation_model}} — {{device_id}}'
          body: 'Sensor readings: {{get-sensor-data.reading_count}}. Simulation status: {{run-matlab.status}}. Results stored in S3.'
  consumes:
  - type: http
    namespace: iothub
    baseUri: https://boozallen-gov.azure-devices.net
    authentication:
      type: bearer
      token: $secrets.iothub_token
    resources:
    - name: devices
      path: /twins/{{device_id}}/methods
      inputParameters:
      - name: device_id
        in: path
      operations:
      - name: get-telemetry
        method: POST
  - type: http
    namespace: matlab
    baseUri: https://matlab-server.boozallen.com/api/v1
    authentication:
      type: bearer
      token: $secrets.matlab_token
    resources:
    - name: scripts
      path: /execute
      operations:
      - name: execute-script
        method: POST
  - type: http
    namespace: s3
    baseUri: https://s3.us-gov-west-1.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_govcloud_token
    resources:
    - name: objects
      path: /digital-twin-results
      operations:
      - name: put-object
        method: PUT
  - type: http
    namespace: confluence
    baseUri: https://boozallen.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → digital-twin-simulation-pipeline.yml

Retrieves Cisco network device status for government facility network infrastructure.

naftiko: '0.5'
info:
  label: Cisco Government Network Device Status
  description: Retrieves Cisco network device status for government facility network infrastructure.
  tags:
  - networking
  - cisco
  - government
capability:
  exposes:
  - type: mcp
    namespace: network-ops
    port: 8080
    tools:
    - name: get-device-status
      description: Look up Cisco device status.
      inputParameters:
      - name: device_id
        in: body
        type: string
        description: The Cisco DNA Center device ID.
      call: cisco.get-device
      with:
        device_id: '{{device_id}}'
      outputParameters:
      - name: hostname
        type: string
        mapping: $.response.hostname
      - name: uptime
        type: string
        mapping: $.response.upTime
      - name: reachability
        type: string
        mapping: $.response.reachabilityStatus
  consumes:
  - type: http
    namespace: cisco
    baseUri: https://boozallen-dnac.boozallen.com/dna/intent/api/v1
    authentication:
      type: bearer
      token: $secrets.cisco_dnac_token
    resources:
    - name: devices
      path: /network-device/{{device_id}}
      inputParameters:
      - name: device_id
        in: path
      operations:
      - name: get-device
        method: GET
Open in Framework → View in Fleet → cisco-government-network-device-status.yml

Detects anomalies in log data by querying Azure Log Analytics, running ML detection in Azure Databricks, creating alerts in Datadog, and posting findings to Teams.

naftiko: '0.5'
info:
  label: Log Analytics Anomaly Detection Pipeline
  description: Detects anomalies in log data by querying Azure Log Analytics, running ML detection in Azure Databricks, creating alerts in Datadog, and posting findings to Teams.
  tags:
  - observability
  - anomaly-detection
  - azure-log-analytics
  - azure-databricks
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: log-anomaly-detection
    port: 8080
    tools:
    - name: detect-anomalies
      description: Detect log anomalies across Azure Log Analytics, Databricks, Datadog, and Teams.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: Log Analytics workspace ID.
      - name: time_window
        in: body
        type: string
        description: Analysis time window.
      steps:
      - name: query-logs
        type: call
        call: loganalytics.run-query
        with:
          workspace_id: '{{workspace_id}}'
          query: SecurityEvent | where TimeGenerated > ago({{time_window}})
      - name: run-detection
        type: call
        call: databricks.run-job
        with:
          job_id: anomaly-detection
          event_count: '{{query-logs.row_count}}'
      - name: create-alert
        type: call
        call: datadog.create-monitor
        with:
          name: 'Log Anomaly: {{workspace_id}}'
          query: logs({{run-detection.anomaly_signature}}).last({{time_window}})
      - name: notify-soc
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: soc-alerts
          text: 'Anomaly detected in workspace {{workspace_id}}. Events: {{query-logs.row_count}}. Anomalies: {{run-detection.anomaly_count}}. Monitor: {{create-alert.monitor_id}}.'
  consumes:
  - type: http
    namespace: loganalytics
    baseUri: https://api.loganalytics.azure.us/v1
    authentication:
      type: bearer
      token: $secrets.azure_gov_token
    resources:
    - name: queries
      path: /workspaces/{{workspace_id}}/query
      inputParameters:
      - name: workspace_id
        in: path
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: databricks
    baseUri: https://adb-boozallen.azuredatabricks.net/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
    resources:
    - name: monitors
      path: /monitor
      operations:
      - name: create-monitor
        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/soc/channels/alerts/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → log-analytics-anomaly-detection-pipeline.yml

Searches a Sonatype Nexus repository for a specific build artifact by group and artifact ID.

naftiko: '0.5'
info:
  label: Nexus Artifact Lookup
  description: Searches a Sonatype Nexus repository for a specific build artifact by group and artifact ID.
  tags:
  - cicd
  - nexus
capability:
  exposes:
  - type: mcp
    namespace: artifact-management
    port: 8080
    tools:
    - name: search-artifact
      description: Search Nexus for an artifact by group and artifact ID.
      inputParameters:
      - name: group_id
        in: body
        type: string
        description: Maven group ID.
      - name: artifact_id
        in: body
        type: string
        description: Maven artifact ID.
      call: nexus.search-artifact
      with:
        group: '{{group_id}}'
        name: '{{artifact_id}}'
  consumes:
  - type: http
    namespace: nexus
    baseUri: https://nexus.boozallen.com/service/rest/v1
    authentication:
      type: bearer
      token: $secrets.nexus_token
    resources:
    - name: components
      path: /search
      inputParameters:
      - name: group
        in: query
      - name: name
        in: query
      operations:
      - name: search-artifact
        method: GET
Open in Framework → View in Fleet → nexus-artifact-lookup.yml

Retrieves AWS CloudWatch alarm status for government application monitoring.

naftiko: '0.5'
info:
  label: CloudWatch Alarm Status
  description: Retrieves AWS CloudWatch alarm status for government application monitoring.
  tags:
  - monitoring
  - cloudwatch
  - aws
capability:
  exposes:
  - type: mcp
    namespace: cloud-monitoring
    port: 8080
    tools:
    - name: get-alarm-status
      description: Look up a CloudWatch alarm.
      inputParameters:
      - name: alarm_name
        in: body
        type: string
        description: The CloudWatch alarm name.
      call: cloudwatch.describe-alarm
      with:
        alarm_name: '{{alarm_name}}'
  consumes:
  - type: http
    namespace: cloudwatch
    baseUri: https://monitoring.us-east-1.amazonaws.com
    authentication:
      type: aws-sigv4
      accessKeyId: $secrets.aws_access_key
      secretAccessKey: $secrets.aws_secret_key
    resources:
    - name: alarms
      path: /?Action=DescribeAlarms&AlarmNames.member.1={{alarm_name}}
      inputParameters:
      - name: alarm_name
        in: query
      operations:
      - name: describe-alarm
        method: GET
Open in Framework → View in Fleet → cloudwatch-alarm-status.yml

Creates a LinkedIn company page post for Booz Allen consulting talent acquisition.

naftiko: '0.5'
info:
  label: LinkedIn Talent Post
  description: Creates a LinkedIn company page post for Booz Allen consulting talent acquisition.
  tags:
  - hr
  - recruitment
  - linkedin
capability:
  exposes:
  - type: mcp
    namespace: social-recruitment
    port: 8080
    tools:
    - name: create-linkedin-post
      description: Create a LinkedIn company page post.
      inputParameters:
      - name: text
        in: body
        type: string
        description: The post text.
      call: linkedin.create-post
      with:
        text: '{{text}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: posts
      path: /ugcPosts
      operations:
      - name: create-post
        method: POST
Open in Framework → View in Fleet → linkedin-talent-post.yml

Retrieves Red Hat Satellite patching status for government Linux server compliance.

naftiko: '0.5'
info:
  label: Red Hat Satellite Patch Management
  description: Retrieves Red Hat Satellite patching status for government Linux server compliance.
  tags:
  - infrastructure
  - red-hat-satellite
  - patch-management
capability:
  exposes:
  - type: mcp
    namespace: patch-management
    port: 8080
    tools:
    - name: get-host-errata
      description: Look up available errata for a Red Hat Satellite host.
      inputParameters:
      - name: host_id
        in: body
        type: string
        description: Satellite host ID.
      call: satellite.get-errata
      with:
        host_id: '{{host_id}}'
  consumes:
  - type: http
    namespace: satellite
    baseUri: https://satellite.boozallen.com/api/v2
    authentication:
      type: basic
      username: $secrets.satellite_user
      password: $secrets.satellite_password
    resources:
    - name: errata
      path: /hosts/{{host_id}}/errata
      inputParameters:
      - name: host_id
        in: path
      operations:
      - name: get-errata
        method: GET
Open in Framework → View in Fleet → red-hat-satellite-patch-management.yml

Automates knowledge transfer by exporting Jira project history, pulling key documents from SharePoint, creating a Confluence knowledge base, and scheduling a Teams handoff meeting.

naftiko: '0.5'
info:
  label: Knowledge Transfer Documentation Pipeline
  description: Automates knowledge transfer by exporting Jira project history, pulling key documents from SharePoint, creating a Confluence knowledge base, and scheduling a Teams handoff meeting.
  tags:
  - knowledge-management
  - jira
  - sharepoint
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: knowledge-transfer
    port: 8080
    tools:
    - name: prepare-knowledge-transfer
      description: Prepare knowledge transfer package across Jira, SharePoint, Confluence, and Teams.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: Jira project key.
      - name: sharepoint_site
        in: body
        type: string
        description: SharePoint site ID.
      - name: handoff_date
        in: body
        type: string
        description: Scheduled handoff date.
      steps:
      - name: export-history
        type: call
        call: jira.search-issues
        with:
          jql: project = {{project_key}} ORDER BY updated DESC
          max_results: '100'
      - name: get-documents
        type: call
        call: sharepoint.list-files
        with:
          site_id: '{{sharepoint_site}}'
          folder: Key Documents
      - name: create-kb
        type: call
        call: confluence.create-page
        with:
          space_key: KT
          title: Knowledge Transfer — {{project_key}}
          body: 'Project issues: {{export-history.total}}. Key documents: {{get-documents.file_count}}. Handoff: {{handoff_date}}.'
      - name: schedule-meeting
        type: call
        call: msteams.create-event
        with:
          subject: 'Knowledge Transfer: {{project_key}}'
          date: '{{handoff_date}}'
          body: 'KT page: {{create-kb.url}}. Issues exported: {{export-history.total}}.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://boozallen.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: search
      path: /search
      inputParameters:
      - name: jql
        in: query
      - name: max_results
        in: query
      operations:
      - name: search-issues
        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}}:/children
      inputParameters:
      - name: site_id
        in: path
      - name: folder
        in: path
      operations:
      - name: list-files
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://boozallen.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: events
      path: /me/events
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → knowledge-transfer-documentation-pipeline.yml

Runs a Nessus vulnerability scan, logs findings in Splunk, creates Jira remediation tasks, and alerts the security team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Vulnerability Assessment Pipeline
  description: Runs a Nessus vulnerability scan, logs findings in Splunk, creates Jira remediation tasks, and alerts the security team via Microsoft Teams.
  tags:
  - cybersecurity
  - vulnerability
  - nessus
  - splunk
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: vuln-assessment
    port: 8080
    tools:
    - name: run-vulnerability-scan
      description: Given a scan policy and target, run a vulnerability assessment and track remediation.
      inputParameters:
      - name: scan_name
        in: body
        type: string
        description: The Nessus scan name.
      - name: target_hosts
        in: body
        type: string
        description: Comma-separated target IP addresses.
      - name: jira_project
        in: body
        type: string
        description: Jira project for remediation tasks.
      - name: security_channel
        in: body
        type: string
        description: Microsoft Teams security channel.
      steps:
      - name: launch-scan
        type: call
        call: nessus.launch-scan
        with:
          scan_name: '{{scan_name}}'
          targets: '{{target_hosts}}'
      - name: log-findings
        type: call
        call: splunk.log-event
        with:
          source: vulnerability-scan
          event: 'Scan launched: {{scan_name}}. Targets: {{target_hosts}}. Scan ID: {{launch-scan.scan_id}}.'
      - name: create-remediation
        type: call
        call: jira.create-issue
        with:
          project_key: '{{jira_project}}'
          summary: 'Vulnerability scan: {{scan_name}}'
          issue_type: Task
          description: 'Nessus scan {{launch-scan.scan_id}} launched for targets: {{target_hosts}}.'
      - name: alert-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{security_channel}}'
          text: 'Vulnerability scan started: {{scan_name}}. Targets: {{target_hosts}}. Scan ID: {{launch-scan.scan_id}}. Jira: {{create-remediation.key}}.'
  consumes:
  - type: http
    namespace: nessus
    baseUri: https://nessus.boozallen.com:8834
    authentication:
      type: apiKey
      key: $secrets.nessus_api_key
    resources:
    - name: scans
      path: /scans
      operations:
      - name: launch-scan
        method: POST
  - type: http
    namespace: splunk
    baseUri: https://splunk.boozallen.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: events
      path: /receivers/simple
      operations:
      - name: log-event
        method: POST
  - type: http
    namespace: jira
    baseUri: https://boozallen.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → vulnerability-assessment-pipeline.yml

Retrieves a Power BI report embed URL for government client-facing dashboards.

naftiko: '0.5'
info:
  label: Microsoft Power BI Government Reporting
  description: Retrieves a Power BI report embed URL for government client-facing dashboards.
  tags:
  - analytics
  - power-bi
  - government
capability:
  exposes:
  - type: mcp
    namespace: bi-embed
    port: 8080
    tools:
    - name: get-report-embed
      description: Look up a Power BI report embed configuration.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: Power BI report ID.
      - name: group_id
        in: body
        type: string
        description: Power BI workspace ID.
      call: powerbi.get-report
      with:
        group_id: '{{group_id}}'
        report_id: '{{report_id}}'
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: reports
      path: /groups/{{group_id}}/reports/{{report_id}}
      inputParameters:
      - name: group_id
        in: path
      - name: report_id
        in: path
      operations:
      - name: get-report
        method: GET
Open in Framework → View in Fleet → microsoft-power-bi-government-reporting.yml

Evaluates supply chain risk by pulling vendor data from SAP, scanning software components with Fortify, checking NIST NVD for vulnerabilities, and logging the assessment in ServiceNow.

naftiko: '0.5'
info:
  label: Supply Chain Risk Assessment Pipeline
  description: Evaluates supply chain risk by pulling vendor data from SAP, scanning software components with Fortify, checking NIST NVD for vulnerabilities, and logging the assessment in ServiceNow.
  tags:
  - supply-chain
  - risk
  - sap
  - fortify
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-risk
    port: 8080
    tools:
    - name: assess-vendor-risk
      description: Run a supply chain risk assessment across SAP, Fortify, NVD, and ServiceNow.
      inputParameters:
      - name: vendor_id
        in: body
        type: string
        description: SAP vendor ID.
      - name: software_component
        in: body
        type: string
        description: Software component name.
      steps:
      - name: get-vendor
        type: call
        call: sap.get-vendor
        with:
          vendor_id: '{{vendor_id}}'
      - name: scan-component
        type: call
        call: fortify.scan-application
        with:
          app_name: '{{software_component}}'
      - name: check-nvd
        type: call
        call: nvd.search-cves
        with:
          keyword: '{{software_component}}'
      - name: log-assessment
        type: call
        call: servicenow.create-record
        with:
          table: x_supply_chain_risk
          vendor: '{{get-vendor.name}}'
          fortify_findings: '{{scan-component.critical_count}}'
          cve_count: '{{check-nvd.total_results}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://sap.boozallen.com/sap/opu/odata/sap
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: vendors
      path: /API_BUSINESS_PARTNER/A_Supplier('{{vendor_id}}')
      inputParameters:
      - name: vendor_id
        in: path
      operations:
      - name: get-vendor
        method: GET
  - type: http
    namespace: fortify
    baseUri: https://fortify.boozallen.com/ssc/api/v1
    authentication:
      type: bearer
      token: $secrets.fortify_token
    resources:
    - name: applications
      path: /projectVersions
      operations:
      - name: scan-application
        method: POST
  - type: http
    namespace: nvd
    baseUri: https://services.nvd.nist.gov/rest/json
    authentication:
      type: apiKey
      key: $secrets.nvd_api_key
    resources:
    - name: cves
      path: /cves/2.0
      inputParameters:
      - name: keyword
        in: query
      operations:
      - name: search-cves
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://boozallen.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/x_supply_chain_risk
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → supply-chain-risk-assessment-pipeline.yml

Checks container platform health by querying Kubernetes cluster status, pulling Prometheus metrics, validating container images in Harbor, and posting a health summary to Teams.

naftiko: '0.5'
info:
  label: Container Platform Health Pipeline
  description: Checks container platform health by querying Kubernetes cluster status, pulling Prometheus metrics, validating container images in Harbor, and posting a health summary to Teams.
  tags:
  - platform
  - kubernetes
  - prometheus
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: platform-health
    port: 8080
    tools:
    - name: check-platform-health
      description: Assess container platform health across Kubernetes, Prometheus, Harbor, and Teams.
      inputParameters:
      - name: cluster_name
        in: body
        type: string
        description: Kubernetes cluster name.
      - name: namespace
        in: body
        type: string
        description: Target namespace.
      steps:
      - name: get-cluster-status
        type: call
        call: k8s.get-nodes
        with:
          cluster: '{{cluster_name}}'
      - name: get-metrics
        type: call
        call: prometheus.query-range
        with:
          query: up{namespace='{{namespace}}'}
          range: 1h
      - name: scan-images
        type: call
        call: harbor.scan-project
        with:
          project: '{{namespace}}'
      - name: post-summary
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: platform-ops
          text: 'Platform Health: {{cluster_name}}/{{namespace}}. Nodes: {{get-cluster-status.ready_count}}/{{get-cluster-status.total_count}}. Vulnerable images: {{scan-images.vulnerable_count}}.'
  consumes:
  - type: http
    namespace: k8s
    baseUri: https://k8s-api.boozallen.com/api/v1
    authentication:
      type: bearer
      token: $secrets.k8s_token
    resources:
    - name: nodes
      path: /nodes
      operations:
      - name: get-nodes
        method: GET
  - type: http
    namespace: prometheus
    baseUri: https://prometheus.boozallen.com/api/v1
    authentication:
      type: bearer
      token: $secrets.prometheus_token
    resources:
    - name: queries
      path: /query_range
      inputParameters:
      - name: query
        in: query
      - name: range
        in: query
      operations:
      - name: query-range
        method: GET
  - type: http
    namespace: harbor
    baseUri: https://harbor.boozallen.com/api/v2.0
    authentication:
      type: bearer
      token: $secrets.harbor_token
    resources:
    - name: projects
      path: /projects/{{project}}/scanner/all
      inputParameters:
      - name: project
        in: path
      operations:
      - name: scan-project
        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/platform-ops/channels/general/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → container-platform-health-pipeline.yml

Validates network segmentation by querying Cisco device configs, testing connectivity with Palo Alto, checking compliance in Splunk, and filing a validation report in ServiceNow.

naftiko: '0.5'
info:
  label: Network Segmentation Validation Pipeline
  description: Validates network segmentation by querying Cisco device configs, testing connectivity with Palo Alto, checking compliance in Splunk, and filing a validation report in ServiceNow.
  tags:
  - network
  - segmentation
  - cisco
  - palo-alto-networks
  - splunk
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: network-validation
    port: 8080
    tools:
    - name: validate-segmentation
      description: Validate network segmentation across Cisco, Palo Alto, Splunk, and ServiceNow.
      inputParameters:
      - name: zone_name
        in: body
        type: string
        description: Network zone name.
      - name: vlan_id
        in: body
        type: string
        description: VLAN ID.
      steps:
      - name: get-config
        type: call
        call: cisco.get-device-config
        with:
          zone: '{{zone_name}}'
      - name: test-rules
        type: call
        call: paloalto.test-security-rule
        with:
          zone: '{{zone_name}}'
          vlan: '{{vlan_id}}'
      - name: check-compliance
        type: call
        call: splunk.search
        with:
          query: index=network zone={{zone_name}} vlan={{vlan_id}} violation=true | stats count
      - name: file-report
        type: call
        call: servicenow.create-record
        with:
          table: x_network_validation
          zone: '{{zone_name}}'
          vlan: '{{vlan_id}}'
          config_valid: '{{get-config.is_valid}}'
          violations: '{{check-compliance.result_count}}'
  consumes:
  - type: http
    namespace: cisco
    baseUri: https://dnac.boozallen.com/dna/intent/api/v1
    authentication:
      type: bearer
      token: $secrets.cisco_dnac_token
    resources:
    - name: configs
      path: /network-device/config
      inputParameters:
      - name: zone
        in: query
      operations:
      - name: get-device-config
        method: GET
  - type: http
    namespace: paloalto
    baseUri: https://firewall.boozallen.com/restapi/v10.2
    authentication:
      type: apiKey
      key: $secrets.paloalto_api_key
    resources:
    - name: policies
      path: /Policies/SecurityRules/test
      operations:
      - name: test-security-rule
        method: POST
  - type: http
    namespace: splunk
    baseUri: https://splunk.boozallen.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search
      path: /search/jobs
      operations:
      - name: search
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://boozallen.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/x_network_validation
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → network-segmentation-validation-pipeline.yml

Fetches a Jira issue by key and returns summary, status, assignee, and priority for government consulting project management.

naftiko: '0.5'
info:
  label: Jira Issue Retrieval
  description: Fetches a Jira issue by key and returns summary, status, assignee, and priority for government consulting project management.
  tags:
  - project-management
  - jira
  - consulting
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: The Jira issue key.
      call: jira.get-issue
      with:
        issue_key: '{{issue_key}}'
      outputParameters:
      - name: summary
        type: string
        mapping: $.fields.summary
      - name: status
        type: string
        mapping: $.fields.status.name
      - name: assignee
        type: string
        mapping: $.fields.assignee.displayName
      - name: priority
        type: string
        mapping: $.fields.priority.name
  consumes:
  - type: http
    namespace: jira
    baseUri: https://boozallen.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-issue-retrieval.yml

Triggers an Xray security scan on a container image stored in JFrog Artifactory.

naftiko: '0.5'
info:
  label: JFrog Container Image Scan
  description: Triggers an Xray security scan on a container image stored in JFrog Artifactory.
  tags:
  - security
  - jfrog
capability:
  exposes:
  - type: mcp
    namespace: container-security
    port: 8080
    tools:
    - name: scan-image
      description: Trigger an Xray scan for a container image.
      inputParameters:
      - name: image_name
        in: body
        type: string
        description: Full image name including tag.
      call: jfrog.scan-image
      with:
        image: '{{image_name}}'
  consumes:
  - type: http
    namespace: jfrog
    baseUri: https://boozallen.jfrog.io/xray/api/v2
    authentication:
      type: bearer
      token: $secrets.jfrog_token
    resources:
    - name: scans
      path: /summary/artifact
      operations:
      - name: scan-image
        method: POST
Open in Framework → View in Fleet → jfrog-container-image-scan.yml

Creates a personalized learning path by pulling skills from Workday, assigning Pluralsight courses, scheduling certification prep in Microsoft Teams, and tracking progress in Salesforce.

naftiko: '0.5'
info:
  label: Employee Learning Path Pipeline
  description: Creates a personalized learning path by pulling skills from Workday, assigning Pluralsight courses, scheduling certification prep in Microsoft Teams, and tracking progress in Salesforce.
  tags:
  - learning
  - development
  - workday
  - pluralsight
  - microsoft-teams
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: learning-paths
    port: 8080
    tools:
    - name: create-learning-path
      description: Build personalized learning path across Workday, Pluralsight, Teams, and Salesforce.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      - name: target_certification
        in: body
        type: string
        description: Target certification name.
      steps:
      - name: get-skills
        type: call
        call: workday.get-worker-skills
        with:
          employee_id: '{{employee_id}}'
      - name: assign-courses
        type: call
        call: pluralsight.assign-channel
        with:
          user_id: '{{employee_id}}'
          channel: '{{target_certification}}-prep'
      - name: schedule-prep
        type: call
        call: msteams.create-event
        with:
          subject: 'Cert Prep: {{target_certification}}'
          attendee: '{{employee_id}}'
          body: 'Learning path created. Courses assigned: {{assign-courses.course_count}}.'
      - name: track-progress
        type: call
        call: salesforce.create-record
        with:
          object: Learning_Path__c
          employee_id: '{{employee_id}}'
          certification: '{{target_certification}}'
          courses_assigned: '{{assign-courses.course_count}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{employee_id}}/skills
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-worker-skills
        method: GET
  - type: http
    namespace: pluralsight
    baseUri: https://app.pluralsight.com/api/v1
    authentication:
      type: bearer
      token: $secrets.pluralsight_token
    resources:
    - name: channels
      path: /channels/assignments
      operations:
      - name: assign-channel
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: events
      path: /me/events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://boozallen.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: records
      path: /sobjects/Learning_Path__c
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → employee-learning-path-pipeline.yml

Searches Splunk for security audit logs, returning matching events for compliance and threat analysis.

naftiko: '0.5'
info:
  label: Splunk Security Log Search
  description: Searches Splunk for security audit logs, returning matching events for compliance and threat analysis.
  tags:
  - security
  - splunk
  - logging
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: security-logs
    port: 8080
    tools:
    - name: search-security-logs
      description: Search Splunk security logs.
      inputParameters:
      - name: search_query
        in: body
        type: string
        description: The Splunk search query (SPL).
      - name: earliest
        in: body
        type: string
        description: Earliest time (e.g., -24h).
      call: splunk.create-search
      with:
        search: '{{search_query}}'
        earliest_time: '{{earliest}}'
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.boozallen.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search-jobs
      path: /search/jobs
      operations:
      - name: create-search
        method: POST
Open in Framework → View in Fleet → splunk-security-log-search.yml

Optimizes multi-cloud costs by pulling AWS billing data, analyzing Azure consumption, comparing in Snowflake analytics, and generating a cost report emailed to finance via Outlook.

naftiko: '0.5'
info:
  label: Multi-Cloud Cost Optimization Pipeline
  description: Optimizes multi-cloud costs by pulling AWS billing data, analyzing Azure consumption, comparing in Snowflake analytics, and generating a cost report emailed to finance via Outlook.
  tags:
  - finops
  - cost-optimization
  - aws
  - azure
  - snowflake
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: cloud-finops
    port: 8080
    tools:
    - name: optimize-cloud-costs
      description: Analyze and optimize multi-cloud costs across AWS, Azure, Snowflake, and Outlook.
      inputParameters:
      - name: billing_period
        in: body
        type: string
        description: Billing period (YYYY-MM).
      - name: cost_threshold
        in: body
        type: string
        description: Anomaly threshold in dollars.
      steps:
      - name: get-aws-costs
        type: call
        call: aws.get-cost-explorer
        with:
          period: '{{billing_period}}'
      - name: get-azure-costs
        type: call
        call: azure.get-consumption
        with:
          period: '{{billing_period}}'
      - name: analyze-trends
        type: call
        call: snowflake.run-query
        with:
          query: CALL cloud_cost_analysis('{{billing_period}}', {{cost_threshold}})
      - name: email-report
        type: call
        call: outlook.send-email
        with:
          to: cloud-finance@boozallen.com
          subject: 'Cloud Cost Report: {{billing_period}}'
          body: 'AWS: ${{get-aws-costs.total}}. Azure: ${{get-azure-costs.total}}. Anomalies: {{analyze-trends.anomaly_count}}. Savings opportunity: ${{analyze-trends.savings_potential}}.'
  consumes:
  - type: http
    namespace: aws
    baseUri: https://ce.us-gov-west-1.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_govcloud_token
    resources:
    - name: cost
      path: /
      operations:
      - name: get-cost-explorer
        method: POST
  - type: http
    namespace: azure
    baseUri: https://management.usgovcloudapi.net/subscriptions
    authentication:
      type: bearer
      token: $secrets.azure_gov_token
    resources:
    - name: consumption
      path: /providers/Microsoft.Consumption/usageDetails
      inputParameters:
      - name: period
        in: query
      operations:
      - name: get-consumption
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://boozallen.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: queries
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → multi-cloud-cost-optimization-pipeline.yml

When a new government RFP is identified, creates a Salesforce opportunity, provisions a SharePoint proposal workspace, creates a Jira tracking epic, and notifies the capture team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Government Contract Proposal Pipeline
  description: When a new government RFP is identified, creates a Salesforce opportunity, provisions a SharePoint proposal workspace, creates a Jira tracking epic, and notifies the capture team via Microsoft Teams.
  tags:
  - government
  - proposals
  - salesforce
  - sharepoint
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: contract-proposals
    port: 8080
    tools:
    - name: initiate-proposal
      description: Given RFP details, orchestrate proposal initiation across Salesforce, SharePoint, Jira, and Microsoft Teams.
      inputParameters:
      - name: rfp_number
        in: body
        type: string
        description: The government RFP number.
      - name: agency
        in: body
        type: string
        description: The government agency.
      - name: contract_value
        in: body
        type: string
        description: Estimated contract value.
      - name: due_date
        in: body
        type: string
        description: Proposal due date.
      - name: capture_channel
        in: body
        type: string
        description: Microsoft Teams channel for capture team.
      steps:
      - name: create-opportunity
        type: call
        call: salesforce.create-opportunity
        with:
          name: '{{agency}} - {{rfp_number}}'
          amount: '{{contract_value}}'
          close_date: '{{due_date}}'
          stage: Proposal
      - name: provision-workspace
        type: call
        call: sharepoint.create-folder
        with:
          site_id: proposals_site
          folder_path: Proposals/{{rfp_number}}_{{agency}}
      - name: create-epic
        type: call
        call: jira.create-issue
        with:
          project_key: PROP
          summary: 'Proposal: {{agency}} {{rfp_number}}'
          issue_type: Epic
          description: 'RFP: {{rfp_number}}. Agency: {{agency}}. Value: ${{contract_value}}. Due: {{due_date}}.'
      - name: notify-capture
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{capture_channel}}'
          text: 'New proposal initiated: {{agency}} {{rfp_number}}. Value: ${{contract_value}}. Due: {{due_date}}. SF: {{create-opportunity.id}}. Jira: {{create-epic.key}}. Workspace: {{provision-workspace.url}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://boozallen.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: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: jira
    baseUri: https://boozallen.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → government-contract-proposal-pipeline.yml

Deploys an AI model by pulling the artifact from Amazon SageMaker, creating a Kubernetes deployment via Helm, registering the endpoint in the API gateway, and posting deployment status to Teams.

naftiko: '0.5'
info:
  label: AI Model Deployment Pipeline
  description: Deploys an AI model by pulling the artifact from Amazon SageMaker, creating a Kubernetes deployment via Helm, registering the endpoint in the API gateway, and posting deployment status to Teams.
  tags:
  - ai
  - deployment
  - amazon-sagemaker
  - kubernetes
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ai-deployment
    port: 8080
    tools:
    - name: deploy-model
      description: Orchestrate AI model deployment across SageMaker, Kubernetes, API Gateway, and Teams.
      inputParameters:
      - name: model_name
        in: body
        type: string
        description: SageMaker model name.
      - name: namespace
        in: body
        type: string
        description: Kubernetes namespace.
      - name: api_path
        in: body
        type: string
        description: API gateway route path.
      steps:
      - name: get-model
        type: call
        call: sagemaker.describe-model
        with:
          model_name: '{{model_name}}'
      - name: deploy-helm
        type: call
        call: helm.install-release
        with:
          release: '{{model_name}}'
          namespace: '{{namespace}}'
          image: '{{get-model.primary_container.image}}'
      - name: register-api
        type: call
        call: apigateway.create-route
        with:
          path: '{{api_path}}'
          target: '{{deploy-helm.service_url}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: ml-ops
          text: 'Model {{model_name}} deployed. Endpoint: {{api_path}}. Namespace: {{namespace}}.'
  consumes:
  - type: http
    namespace: sagemaker
    baseUri: https://api.sagemaker.us-gov-west-1.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_govcloud_token
    resources:
    - name: models
      path: /
      inputParameters:
      - name: model_name
        in: query
      operations:
      - name: describe-model
        method: GET
  - type: http
    namespace: helm
    baseUri: https://k8s-api.boozallen.com/apis/helm.toolkit.fluxcd.io/v2beta1
    authentication:
      type: bearer
      token: $secrets.k8s_token
    resources:
    - name: releases
      path: /namespaces/{{namespace}}/helmreleases
      inputParameters:
      - name: namespace
        in: path
      operations:
      - name: install-release
        method: POST
  - type: http
    namespace: apigateway
    baseUri: https://apigateway.us-gov-west-1.amazonaws.com/v2
    authentication:
      type: bearer
      token: $secrets.aws_govcloud_token
    resources:
    - name: routes
      path: /apis/gov-api/routes
      operations:
      - name: create-route
        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/ml-ops/channels/general/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → ai-model-deployment-pipeline.yml

Orchestrates data lake ingestion by triggering an Azure Databricks job, validating output in Snowflake, updating the data catalog in Microsoft Purview, and notifying data stewards via Teams.

naftiko: '0.5'
info:
  label: Data Lake Ingestion Pipeline
  description: Orchestrates data lake ingestion by triggering an Azure Databricks job, validating output in Snowflake, updating the data catalog in Microsoft Purview, and notifying data stewards via Teams.
  tags:
  - data
  - azure-databricks
  - snowflake
  - microsoft-purview
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: data-ingestion
    port: 8080
    tools:
    - name: run-ingestion
      description: Orchestrate a data lake ingestion pipeline across Databricks, Snowflake, Purview, and Teams.
      inputParameters:
      - name: job_id
        in: body
        type: string
        description: Databricks job ID.
      - name: target_table
        in: body
        type: string
        description: Snowflake target table.
      steps:
      - name: run-etl
        type: call
        call: databricks.run-job
        with:
          job_id: '{{job_id}}'
      - name: validate-data
        type: call
        call: snowflake.run-query
        with:
          query: SELECT COUNT(*) as row_count FROM {{target_table}} WHERE ingestion_date = CURRENT_DATE()
      - name: update-catalog
        type: call
        call: purview.update-entity
        with:
          qualified_name: '{{target_table}}'
          last_ingestion: '{{run-etl.end_time}}'
          row_count: '{{validate-data.row_count}}'
      - name: notify-stewards
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: data-ops
          text: 'Ingestion complete for {{target_table}}. Rows: {{validate-data.row_count}}. Databricks run: {{run-etl.run_id}}. Catalog updated.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://adb-boozallen.azuredatabricks.net/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://boozallen.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: queries
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: purview
    baseUri: https://boozallen-gov.purview.azure.com/catalog/api
    authentication:
      type: bearer
      token: $secrets.purview_token
    resources:
    - name: entities
      path: /atlas/v2/entity
      operations:
      - name: update-entity
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/data-ops/channels/general/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → data-lake-ingestion-pipeline.yml

Fetches repository metadata from GitHub for Booz Allen open-source projects.

naftiko: '0.5'
info:
  label: GitHub Repository Insights
  description: Fetches repository metadata from GitHub for Booz Allen open-source projects.
  tags:
  - development
  - github
  - repository
capability:
  exposes:
  - type: mcp
    namespace: dev-insights
    port: 8080
    tools:
    - name: get-repo-info
      description: Look up a GitHub repository.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: The repository name.
      call: github.get-repo
      with:
        repo_name: '{{repo_name}}'
      outputParameters:
      - name: open_issues
        type: integer
        mapping: $.open_issues_count
      - name: stars
        type: integer
        mapping: $.stargazers_count
      - name: default_branch
        type: string
        mapping: $.default_branch
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: repos
      path: /repos/{{repo_name}}
      inputParameters:
      - name: repo_name
        in: path
      operations:
      - name: get-repo
        method: GET
Open in Framework → View in Fleet → github-repository-insights.yml

Retrieves task details from Microsoft Planner for project management tracking on government engagements.

naftiko: '0.5'
info:
  label: Microsoft Planner Task Lookup
  description: Retrieves task details from Microsoft Planner for project management tracking on government engagements.
  tags:
  - project-management
  - microsoft-planner
capability:
  exposes:
  - type: mcp
    namespace: task-management
    port: 8080
    tools:
    - name: get-planner-task
      description: Look up a Microsoft Planner task by task ID.
      inputParameters:
      - name: task_id
        in: body
        type: string
        description: The Planner task ID.
      call: planner.get-task
      with:
        task_id: '{{task_id}}'
  consumes:
  - type: http
    namespace: planner
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: tasks
      path: /planner/tasks/{{task_id}}
      inputParameters:
      - name: task_id
        in: path
      operations:
      - name: get-task
        method: GET
Open in Framework → View in Fleet → microsoft-planner-task-lookup.yml

Manages program risks by pulling risk data from Jira, analyzing impact in Snowflake, updating the Power BI risk dashboard, and alerting program leadership via Microsoft Teams.

naftiko: '0.5'
info:
  label: Program Risk Register Pipeline
  description: Manages program risks by pulling risk data from Jira, analyzing impact in Snowflake, updating the Power BI risk dashboard, and alerting program leadership via Microsoft Teams.
  tags:
  - risk-management
  - jira
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: risk-register
    port: 8080
    tools:
    - name: update-risk-register
      description: Update program risk register across Jira, Snowflake, Power BI, and Teams.
      inputParameters:
      - name: program_key
        in: body
        type: string
        description: Jira program project key.
      - name: risk_threshold
        in: body
        type: string
        description: Risk score threshold for alerts.
      steps:
      - name: get-risks
        type: call
        call: jira.search-issues
        with:
          jql: project = {{program_key}} AND issuetype = Risk AND status != Closed
      - name: analyze-impact
        type: call
        call: snowflake.run-query
        with:
          query: CALL analyze_program_risks('{{program_key}}', {{risk_threshold}})
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: risk-dashboard-ds
      - name: alert-leadership
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: program-leadership
          text: 'Risk Register Update: {{program_key}}. Open risks: {{get-risks.total}}. High-impact: {{analyze-impact.high_impact_count}}. Dashboard refreshed.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://boozallen.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: search
      path: /search
      inputParameters:
      - name: jql
        in: query
      operations:
      - name: search-issues
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://boozallen.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: queries
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/risk-dashboard-ds/refreshes
      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: messages
      path: /teams/program-mgmt/channels/general/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → program-risk-register-pipeline.yml

Retrieves metadata for a SharePoint document for consulting project documentation.

naftiko: '0.5'
info:
  label: SharePoint Document Retrieval
  description: Retrieves metadata for a SharePoint document for consulting project documentation.
  tags:
  - collaboration
  - sharepoint
  - documents
capability:
  exposes:
  - type: mcp
    namespace: doc-management
    port: 8080
    tools:
    - name: get-document
      description: Look up a SharePoint document.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: The SharePoint site ID.
      - name: file_path
        in: body
        type: string
        description: Path to the file.
      call: sharepoint.get-file
      with:
        site_id: '{{site_id}}'
        file_path: '{{file_path}}'
      outputParameters:
      - name: file_name
        type: string
        mapping: $.name
      - name: size
        type: integer
        mapping: $.size
      - name: last_modified
        type: string
        mapping: $.lastModifiedDateTime
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{file_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: get-file
        method: GET
Open in Framework → View in Fleet → sharepoint-document-retrieval.yml

Executes an Ansible playbook against a target government host inventory and returns the run summary.

naftiko: '0.5'
info:
  label: Ansible Playbook Execution
  description: Executes an Ansible playbook against a target government host inventory and returns the run summary.
  tags:
  - infrastructure
  - ansible
capability:
  exposes:
  - type: mcp
    namespace: config-management
    port: 8080
    tools:
    - name: run-playbook
      description: Run an Ansible playbook on a given inventory group.
      inputParameters:
      - name: playbook_name
        in: body
        type: string
        description: Name of the Ansible playbook.
      - name: inventory_group
        in: body
        type: string
        description: Target host inventory group.
      call: ansible.run-playbook
      with:
        playbook: '{{playbook_name}}'
        inventory: '{{inventory_group}}'
  consumes:
  - type: http
    namespace: ansible
    baseUri: https://ansible-tower.boozallen.com/api/v2
    authentication:
      type: bearer
      token: $secrets.ansible_tower_token
    resources:
    - name: job-templates
      path: /job_templates/{{playbook_name}}/launch/
      inputParameters:
      - name: playbook_name
        in: path
      operations:
      - name: run-playbook
        method: POST
Open in Framework → View in Fleet → ansible-playbook-execution.yml

Executes a disaster recovery drill by failing over AWS infrastructure, validating backup integrity in Amazon S3, testing application health via Datadog, and documenting results in Confluence.

naftiko: '0.5'
info:
  label: Disaster Recovery Drill Pipeline
  description: Executes a disaster recovery drill by failing over AWS infrastructure, validating backup integrity in Amazon S3, testing application health via Datadog, and documenting results in Confluence.
  tags:
  - disaster-recovery
  - aws
  - amazon-s3
  - datadog
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: dr-drill
    port: 8080
    tools:
    - name: execute-dr-drill
      description: Run a disaster recovery drill across AWS, S3, Datadog, and Confluence.
      inputParameters:
      - name: dr_plan_id
        in: body
        type: string
        description: Disaster recovery plan ID.
      - name: target_region
        in: body
        type: string
        description: DR target AWS region.
      steps:
      - name: initiate-failover
        type: call
        call: aws.start-failover
        with:
          plan_id: '{{dr_plan_id}}'
          region: '{{target_region}}'
      - name: validate-backups
        type: call
        call: s3.list-objects
        with:
          bucket: dr-backups-{{target_region}}
          prefix: latest/
      - name: check-app-health
        type: call
        call: datadog.get-synthetics
        with:
          tag: dr-drill
      - name: document-results
        type: call
        call: confluence.create-page
        with:
          space_key: DR
          title: 'DR Drill Report: {{dr_plan_id}}'
          body: 'Failover status: {{initiate-failover.status}}. Backup objects: {{validate-backups.object_count}}. Synthetic tests passed: {{check-app-health.passed_count}}/{{check-app-health.total_count}}.'
  consumes:
  - type: http
    namespace: aws
    baseUri: https://drs.us-gov-west-1.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_govcloud_token
    resources:
    - name: recovery
      path: /startFailback
      operations:
      - name: start-failover
        method: POST
  - type: http
    namespace: s3
    baseUri: https://s3.us-gov-west-1.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_govcloud_token
    resources:
    - name: objects
      path: /dr-backups-{{target_region}}
      inputParameters:
      - name: target_region
        in: path
      - name: prefix
        in: query
      operations:
      - name: list-objects
        method: GET
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
    resources:
    - name: synthetics
      path: /synthetics/tests
      inputParameters:
      - name: tag
        in: query
      operations:
      - name: get-synthetics
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://boozallen.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → disaster-recovery-drill-pipeline.yml

Retrieves a SAP Concur expense report by ID for government consulting travel expense management.

naftiko: '0.5'
info:
  label: SAP Concur Travel Expense Report
  description: Retrieves a SAP Concur expense report by ID for government consulting travel expense management.
  tags:
  - finance
  - sap-concur
  - travel
  - expense
capability:
  exposes:
  - type: mcp
    namespace: travel-expense
    port: 8080
    tools:
    - name: get-expense-report
      description: Look up a SAP Concur expense report.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The Concur expense report ID.
      call: concur.get-report
      with:
        report_id: '{{report_id}}'
      outputParameters:
      - name: report_name
        type: string
        mapping: $.Name
      - name: total_amount
        type: string
        mapping: $.Total
      - name: approval_status
        type: string
        mapping: $.ApprovalStatusName
  consumes:
  - type: http
    namespace: concur
    baseUri: https://us.api.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: expense-reports
      path: /expense/reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-report
        method: GET
Open in Framework → View in Fleet → sap-concur-travel-expense-report.yml

Generates budget forecasts by pulling actuals from SAP Concur, projecting spend in Snowflake analytics, refreshing Power BI visuals, and emailing the forecast to finance leadership via Outlook.

naftiko: '0.5'
info:
  label: Budget Forecasting Pipeline
  description: Generates budget forecasts by pulling actuals from SAP Concur, projecting spend in Snowflake analytics, refreshing Power BI visuals, and emailing the forecast to finance leadership via Outlook.
  tags:
  - finance
  - budget
  - sap-concur
  - snowflake
  - power-bi
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: budget-forecasting
    port: 8080
    tools:
    - name: generate-forecast
      description: Build budget forecast from SAP Concur, Snowflake, Power BI, and Outlook.
      inputParameters:
      - name: cost_center
        in: body
        type: string
        description: Cost center code.
      - name: fiscal_quarter
        in: body
        type: string
        description: Fiscal quarter (e.g., Q3FY26).
      steps:
      - name: get-actuals
        type: call
        call: concur.get-expense-summary
        with:
          cost_center: '{{cost_center}}'
          period: '{{fiscal_quarter}}'
      - name: run-projection
        type: call
        call: snowflake.run-query
        with:
          query: CALL budget_forecast_sp('{{cost_center}}', '{{fiscal_quarter}}')
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: budget-forecast-ds
      - name: email-forecast
        type: call
        call: outlook.send-email
        with:
          to: finance-leadership@boozallen.com
          subject: 'Budget Forecast: {{cost_center}} {{fiscal_quarter}}'
          body: 'Actuals: ${{get-actuals.total_amount}}. Projected: ${{run-projection.forecast_amount}}. Dashboard refreshed: {{refresh-dashboard.status}}.'
  consumes:
  - type: http
    namespace: concur
    baseUri: https://us.api.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: expenses
      path: /expense/reportdigests
      inputParameters:
      - name: cost_center
        in: query
      - name: period
        in: query
      operations:
      - name: get-expense-summary
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://boozallen.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: queries
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/budget-forecast-ds/refreshes
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → budget-forecasting-pipeline.yml

Retrieves a Tableau workbook for government consulting analytics and client reporting.

naftiko: '0.5'
info:
  label: Tableau Analytics Dashboard
  description: Retrieves a Tableau workbook for government consulting analytics and client reporting.
  tags:
  - analytics
  - tableau
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: analytics-dashboard
    port: 8080
    tools:
    - name: get-tableau-workbook
      description: Look up a Tableau workbook.
      inputParameters:
      - name: workbook_id
        in: body
        type: string
        description: The Tableau workbook ID.
      call: tableau.get-workbook
      with:
        workbook_id: '{{workbook_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.workbook.name
      - name: updated_at
        type: string
        mapping: $.workbook.updatedAt
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://tableau.boozallen.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/boozallen/workbooks/{{workbook_id}}
      inputParameters:
      - name: workbook_id
        in: path
      operations:
      - name: get-workbook
        method: GET
Open in Framework → View in Fleet → tableau-analytics-dashboard.yml

Generates a weekly project status report by pulling Jira sprint data, refreshing the Power BI dashboard, uploading to SharePoint, and emailing stakeholders via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Project Status Report Pipeline
  description: Generates a weekly project status report by pulling Jira sprint data, refreshing the Power BI dashboard, uploading to SharePoint, and emailing stakeholders via Microsoft Outlook.
  tags:
  - reporting
  - jira
  - power-bi
  - sharepoint
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: project-reporting
    port: 8080
    tools:
    - name: generate-status-report
      description: Given a Jira sprint ID, generate and distribute a project status report.
      inputParameters:
      - name: sprint_id
        in: body
        type: string
        description: The Jira sprint ID.
      - name: board_id
        in: body
        type: string
        description: The Jira board ID.
      - name: bi_dataset_id
        in: body
        type: string
        description: Power BI dataset ID.
      - name: bi_group_id
        in: body
        type: string
        description: Power BI workspace ID.
      - name: stakeholder_emails
        in: body
        type: string
        description: Comma-separated stakeholder emails.
      steps:
      - name: get-sprint-data
        type: call
        call: jira.get-sprint-report
        with:
          board_id: '{{board_id}}'
          sprint_id: '{{sprint_id}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          group_id: '{{bi_group_id}}'
          dataset_id: '{{bi_dataset_id}}'
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: project_reports_site
          folder_path: StatusReports/Sprint_{{sprint_id}}
          file_name: status_report_sprint_{{sprint_id}}.pdf
      - name: email-stakeholders
        type: call
        call: outlook.send-mail
        with:
          to: '{{stakeholder_emails}}'
          subject: Project Status Report - Sprint {{sprint_id}}
          body: 'Sprint {{sprint_id}} report: Completed {{get-sprint-data.completed_issues}} issues, {{get-sprint-data.incomplete_issues}} carried over. Report: {{upload-report.url}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://boozallen.atlassian.net/rest/agile/1.0
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: sprint-reports
      path: /board/{{board_id}}/sprint/{{sprint_id}}/report
      inputParameters:
      - name: board_id
        in: path
      - name: sprint_id
        in: path
      operations:
      - name: get-sprint-report
        method: GET
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /groups/{{group_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: group_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - 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/me
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → project-status-report-pipeline.yml

Generates automated reports by querying Snowflake for data, creating visualizations in Tableau, exporting to PDF via Google Drive, and distributing via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Automated Report Generation Pipeline
  description: Generates automated reports by querying Snowflake for data, creating visualizations in Tableau, exporting to PDF via Google Drive, and distributing via Microsoft Outlook.
  tags:
  - reporting
  - automation
  - snowflake
  - tableau
  - google-drive
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: report-generation
    port: 8080
    tools:
    - name: generate-report
      description: Generate and distribute reports across Snowflake, Tableau, Google Drive, and Outlook.
      inputParameters:
      - name: report_name
        in: body
        type: string
        description: Report template name.
      - name: date_range
        in: body
        type: string
        description: Date range for the report.
      - name: recipients
        in: body
        type: string
        description: Recipient email addresses.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          query: CALL generate_report_data('{{report_name}}', '{{date_range}}')
      - name: refresh-viz
        type: call
        call: tableau.refresh-workbook
        with:
          workbook: '{{report_name}}'
      - name: export-pdf
        type: call
        call: gdrive.export-file
        with:
          file_id: '{{refresh-viz.export_id}}'
          format: pdf
      - name: send-report
        type: call
        call: outlook.send-email
        with:
          to: '{{recipients}}'
          subject: 'Report: {{report_name}} — {{date_range}}'
          body: Report generated with {{query-data.row_count}} data rows. See attached PDF.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://boozallen.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: queries
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://tableau.boozallen.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/default/workbooks/{{workbook}}/refresh
      inputParameters:
      - name: workbook
        in: path
      operations:
      - name: refresh-workbook
        method: POST
  - type: http
    namespace: gdrive
    baseUri: https://www.googleapis.com/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_token
    resources:
    - name: files
      path: /files/{{file_id}}/export
      inputParameters:
      - name: file_id
        in: path
      - name: format
        in: query
      operations:
      - name: export-file
        method: GET
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → automated-report-generation-pipeline.yml

Retrieves a Palo Alto Networks firewall rule for government network security perimeter.

naftiko: '0.5'
info:
  label: Palo Alto Networks Firewall Rule Lookup
  description: Retrieves a Palo Alto Networks firewall rule for government network security perimeter.
  tags:
  - security
  - palo-alto-networks
  - firewall
capability:
  exposes:
  - type: mcp
    namespace: network-security
    port: 8080
    tools:
    - name: get-firewall-rule
      description: Look up a Palo Alto firewall rule.
      inputParameters:
      - name: rule_name
        in: body
        type: string
        description: The firewall rule name.
      call: paloalto.get-security-rule
      with:
        rule_name: '{{rule_name}}'
      outputParameters:
      - name: source_zones
        type: string
        mapping: $.result.entry.from.member
      - name: destination_zones
        type: string
        mapping: $.result.entry.to.member
      - name: action
        type: string
        mapping: $.result.entry.action
  consumes:
  - type: http
    namespace: paloalto
    baseUri: https://boozallen-fw.paloaltonetworks.com/restapi/v10.1
    authentication:
      type: apiKey
      key: $secrets.paloalto_api_key
    resources:
    - name: security-rules
      path: /Policies/SecurityRules?name={{rule_name}}
      inputParameters:
      - name: rule_name
        in: query
      operations:
      - name: get-security-rule
        method: GET
Open in Framework → View in Fleet → palo-alto-networks-firewall-rule-lookup.yml

Retrieves Microsoft Intune device compliance status for government consultant endpoint management.

naftiko: '0.5'
info:
  label: Microsoft Intune Device Compliance
  description: Retrieves Microsoft Intune device compliance status for government consultant endpoint management.
  tags:
  - endpoint-management
  - microsoft-intune
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: endpoint-compliance
    port: 8080
    tools:
    - name: get-device-compliance
      description: Look up Intune device compliance by device ID.
      inputParameters:
      - name: device_id
        in: body
        type: string
        description: Intune managed device ID.
      call: intune.get-device
      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
        method: GET
Open in Framework → View in Fleet → microsoft-intune-device-compliance.yml

Retrieves material master data from SAP S/4HANA by material number, including description, unit of measure, and material group.

naftiko: '0.5'
info:
  label: SAP Material Master Lookup
  description: Retrieves material master data from SAP S/4HANA by material number, including description, unit of measure, and material group.
  tags:
  - procurement
  - erp
  - sap
capability:
  exposes:
  - type: mcp
    namespace: erp-materials
    port: 8080
    tools:
    - name: get-material
      description: Given a SAP material number, return the material description, base unit, and material group.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: SAP material master number.
      call: sap.get-material
      with:
        material: '{{material_number}}'
      outputParameters:
      - name: description
        type: string
        mapping: $.d.MaterialName
      - name: base_unit
        type: string
        mapping: $.d.BaseUnit
      - name: material_group
        type: string
        mapping: $.d.MaterialGroup
  consumes:
  - type: http
    namespace: sap
    baseUri: https://deloitte-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: products
      path: /A_Product('{{material}}')
      inputParameters:
      - name: material
        in: path
      operations:
      - name: get-material
        method: GET
Open in Framework → View in Fleet → sap-material-master-lookup.yml

Retrieves LinkedIn page analytics for Deloitte's employer brand and posts a monthly digest to the talent acquisition Microsoft Teams channel.

naftiko: '0.5'
info:
  label: LinkedIn Talent Brand Performance Digest
  description: Retrieves LinkedIn page analytics for Deloitte's employer brand and posts a monthly digest to the talent acquisition Microsoft Teams channel.
  tags:
  - marketing
  - hr
  - linkedin
  - microsoft-teams
  - employer-brand
capability:
  exposes:
  - type: mcp
    namespace: talent-brand
    port: 8080
    tools:
    - name: digest-linkedin-brand-performance
      description: Given a LinkedIn organization URN and date range, retrieve page engagement and follower metrics, then post a digest to the talent acquisition Microsoft Teams channel.
      inputParameters:
      - name: organization_urn
        in: body
        type: string
        description: LinkedIn organization URN for Deloitte.
      - name: start_date
        in: body
        type: string
        description: ISO 8601 start date for the analytics period.
      - name: end_date
        in: body
        type: string
        description: ISO 8601 end date for the analytics period.
      steps:
      - name: get-org-stats
        type: call
        call: linkedin.get-organization-statistics
        with:
          organization_urn: '{{organization_urn}}'
          start: '{{start_date}}'
          end: '{{end_date}}'
      - name: post-digest
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_hr_team_id
          channel_id: $secrets.teams_ta_channel_id
          text: 'LinkedIn brand digest ({{start_date}} to {{end_date}}): Followers: {{get-org-stats.followersCount}} | Page views: {{get-org-stats.totalPageStatistics.views.allPageViews.pageViews}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: organization-statistics
      path: /organizationalEntityShareStatistics
      inputParameters:
      - name: organization_urn
        in: query
      - name: start
        in: query
      - name: end
        in: query
      operations:
      - name: get-organization-statistics
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → linkedin-talent-brand-performance-digest.yml

Checks the execution status of a Boomi integration process, returning run status, document count, and any error messages.

naftiko: '0.5'
info:
  label: Boomi Integration Monitoring
  description: Checks the execution status of a Boomi integration process, returning run status, document count, and any error messages.
  tags:
  - integration
  - monitoring
  - boomi
capability:
  exposes:
  - type: mcp
    namespace: integration-monitoring
    port: 8080
    tools:
    - name: get-integration-status
      description: Given a Boomi process execution ID, return the execution status, document count, and errors.
      inputParameters:
      - name: execution_id
        in: body
        type: string
        description: Boomi process execution ID.
      call: boomi.get-execution
      with:
        execution_id: '{{execution_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.executionStatus
      - name: document_count
        type: integer
        mapping: $.numberOfDocuments
      - name: error_message
        type: string
        mapping: $.errorMessage
  consumes:
  - type: http
    namespace: boomi
    baseUri: https://api.boomi.com/api/rest/v1
    authentication:
      type: basic
      username: $secrets.boomi_user
      password: $secrets.boomi_token
    resources:
    - name: executions
      path: /ExecutionRecord/{{execution_id}}
      inputParameters:
      - name: execution_id
        in: path
      operations:
      - name: get-execution
        method: GET
Open in Framework → View in Fleet → boomi-integration-monitoring.yml

When Dynatrace detects a performance degradation, fetches problem details, creates a ServiceNow incident, and alerts the SRE team in Teams.

naftiko: '0.5'
info:
  label: Dynatrace Performance Alert Handler
  description: When Dynatrace detects a performance degradation, fetches problem details, creates a ServiceNow incident, and alerts the SRE team in Teams.
  tags:
  - monitoring
  - performance
  - dynatrace
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: performance-alerts
    port: 8080
    tools:
    - name: handle-performance-alert
      description: Given a Dynatrace problem ID, fetch details, create a ServiceNow incident, and notify SRE.
      inputParameters:
      - name: problem_id
        in: body
        type: string
        description: Dynatrace problem ID.
      steps:
      - name: get-problem
        type: call
        call: dynatrace.get-problem
        with:
          problem_id: '{{problem_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Performance degradation: {{get-problem.title}}'
          category: performance
          description: 'Impact: {{get-problem.impactLevel}}, Root cause: {{get-problem.rootCauseEntity.name}}'
      - name: notify-sre
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.sre_team_id
          channel_id: $secrets.sre_alerts_channel_id
          text: 'Performance alert: {{get-problem.title}}. Impact: {{get-problem.impactLevel}}. SNOW: {{create-incident.number}}'
  consumes:
  - type: http
    namespace: dynatrace
    baseUri: https://deloitte.live.dynatrace.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: problems
      path: /problems/{{problem_id}}
      inputParameters:
      - name: problem_id
        in: path
      operations:
      - name: get-problem
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://deloitte.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → dynatrace-performance-alert-handler.yml

When an employee is terminated in Workday, disables their Microsoft 365 account, resolves their open ServiceNow tickets, and notifies the IT security team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Employee Offboarding
  description: When an employee is terminated in Workday, disables their Microsoft 365 account, resolves their open ServiceNow tickets, and notifies the IT security team in Microsoft Teams.
  tags:
  - hr
  - offboarding
  - workday
  - microsoft-365
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: execute-employee-offboarding
      description: Given a Workday employee ID and Microsoft 365 UPN, disable the M365 account, create a ServiceNow offboarding task, and notify IT security in Microsoft Teams.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: Workday worker ID of the terminated employee.
      - name: upn
        in: body
        type: string
        description: Microsoft 365 user principal name of the terminated employee.
      steps:
      - name: disable-m365-account
        type: call
        call: msgraph.disable-user
        with:
          user_id: '{{upn}}'
          accountEnabled: false
      - name: create-offboarding-task
        type: call
        call: servicenow.create-task
        with:
          category: hr_offboarding
          short_description: 'Offboarding: {{upn}}'
          assigned_group: IT_Security
      - name: notify-security
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_security_team_id
          channel_id: $secrets.teams_security_channel_id
          text: 'Employee offboarded: {{upn}} (Workday: {{workday_employee_id}}) | M365 disabled | SNOW: {{create-offboarding-task.number}}'
  consumes:
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users/{{user_id}}
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: disable-user
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://deloitte.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → workday-employee-offboarding.yml

When an invoice is posted in SAP, validates the amount against the purchase order, updates the ServiceNow finance ticket, and notifies the approver via Teams.

naftiko: '0.5'
info:
  label: SAP Invoice Approval to Teams Notification
  description: When an invoice is posted in SAP, validates the amount against the purchase order, updates the ServiceNow finance ticket, and notifies the approver via Teams.
  tags:
  - finance
  - accounts-payable
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finance-invoices
    port: 8080
    tools:
    - name: process-invoice-approval
      description: Given a SAP invoice document number, validate against PO, update finance ticket, and notify the approver.
      inputParameters:
      - name: invoice_number
        in: body
        type: string
        description: SAP invoice document number.
      steps:
      - name: get-invoice
        type: call
        call: sap.get-invoice
        with:
          doc_number: '{{invoice_number}}'
      - name: validate-po
        type: call
        call: sap.get-po
        with:
          po_number: '{{get-invoice.PurchaseOrder}}'
      - name: update-ticket
        type: call
        call: servicenow.update-ticket
        with:
          ticket_id: '{{get-invoice.TicketReference}}'
          state: awaiting_approval
          work_notes: Invoice {{invoice_number}} for {{get-invoice.GrossAmount}} {{get-invoice.Currency}} against PO {{get-invoice.PurchaseOrder}}
      - name: notify-approver
        type: call
        call: msteams.send-chat-message
        with:
          user_id: '{{get-invoice.ApproverEmail}}'
          text: 'Invoice {{invoice_number}} requires approval: {{get-invoice.GrossAmount}} {{get-invoice.Currency}} from {{validate-po.vendor}}. PO: {{get-invoice.PurchaseOrder}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://deloitte-s4.sap.com/sap/opu/odata/sap/API_SUPPLIER_INVOICE_PROCESS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: invoices
      path: /A_SupplierInvoice('{{doc_number}}')
      inputParameters:
      - name: doc_number
        in: path
      operations:
      - name: get-invoice
        method: GET
    - name: purchase-orders
      path: /A_PurchaseOrder('{{po_number}}')
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-po
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://deloitte.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tickets
      path: /table/incident/{{ticket_id}}
      inputParameters:
      - name: ticket_id
        in: path
      operations:
      - name: update-ticket
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /users/{{user_id}}/chats/messages
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: send-chat-message
        method: POST
Open in Framework → View in Fleet → sap-invoice-approval-to-teams-notification.yml

Launches the annual compensation review cycle by pulling market data from Snowflake, initiating Workday compensation events, refreshing the HR Power BI dashboard, and notifying HR leadership.

naftiko: '0.5'
info:
  label: Workday Annual Compensation Cycle Orchestration
  description: Launches the annual compensation review cycle by pulling market data from Snowflake, initiating Workday compensation events, refreshing the HR Power BI dashboard, and notifying HR leadership.
  tags:
  - hr
  - compensation
  - workday
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-comp-cycle
    port: 8080
    tools:
    - name: launch-comp-cycle
      description: Initiate annual compensation review with market data and notify HR leadership.
      inputParameters:
      - name: fiscal_year
        in: body
        type: string
        description: Fiscal year for the compensation cycle.
      steps:
      - name: get-market-data
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT * FROM hr.market_compensation_benchmarks WHERE fiscal_year = '{{fiscal_year}}'
          warehouse: HR_WH
      - name: initiate-cycle
        type: call
        call: workday.create-comp-event
        with:
          fiscal_year: '{{fiscal_year}}'
          type: annual_review
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          group_id: $secrets.hr_workspace_id
          dataset_id: $secrets.comp_review_dataset_id
      - name: notify-hr
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.hr_team_id
          channel_id: $secrets.hr_comp_channel_id
          text: 'Annual compensation cycle for FY{{fiscal_year}} launched. Market benchmarks loaded ({{get-market-data.row_count}} records). Workday event: {{initiate-cycle.event_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://deloitte.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: comp-events
      path: /compensation/events
      operations:
      - name: create-comp-event
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /groups/{{group_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: group_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → workday-annual-compensation-cycle-orchestration.yml

Scans Snowflake metadata to identify tables with PII columns, creates a governance report in Confluence, and alerts the data privacy team in Teams.

naftiko: '0.5'
info:
  label: Snowflake Data Governance Scan
  description: Scans Snowflake metadata to identify tables with PII columns, creates a governance report in Confluence, and alerts the data privacy team in Teams.
  tags:
  - data-governance
  - privacy
  - snowflake
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: data-governance
    port: 8080
    tools:
    - name: run-governance-scan
      description: Scan Snowflake metadata for PII columns, publish findings, and notify the privacy team.
      inputParameters:
      - name: database_name
        in: body
        type: string
        description: Snowflake database to scan.
      steps:
      - name: scan-metadata
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT table_name, column_name, data_type FROM {{database_name}}.information_schema.columns WHERE column_name ILIKE ANY ('%email%','%ssn%','%phone%','%address%','%dob%')
          warehouse: GOVERNANCE_WH
      - name: publish-report
        type: call
        call: confluence.create-page
        with:
          spaceKey: GOVERNANCE
          title: PII Scan Report - {{database_name}}
          body: Found {{scan-metadata.row_count}} potential PII columns in {{database_name}}.
      - name: notify-privacy
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.privacy_team_id
          channel_id: $secrets.privacy_alerts_channel_id
          text: 'Data governance scan complete for {{database_name}}: {{scan-metadata.row_count}} potential PII columns identified. Report: {{publish-report.url}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://deloitte.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://deloitte.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/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → snowflake-data-governance-scan.yml

When an employee transfers to a new practice in Workday, updates Okta group memberships, reassigns Jira issues, and notifies both old and new managers via Teams.

naftiko: '0.5'
info:
  label: Employee Role Transfer Orchestration
  description: When an employee transfers to a new practice in Workday, updates Okta group memberships, reassigns Jira issues, and notifies both old and new managers via Teams.
  tags:
  - hr
  - access-management
  - workday
  - okta
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-transfers
    port: 8080
    tools:
    - name: process-role-transfer
      description: Given a Workday employee ID and new practice, update access groups, reassign work items, and notify managers.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      - name: new_practice
        in: body
        type: string
        description: Name of the new practice or department.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: update-okta-groups
        type: call
        call: okta.update-user-groups
        with:
          user_id: '{{get-employee.work_email}}'
          new_group: '{{new_practice}}'
          old_group: '{{get-employee.department}}'
      - name: reassign-jira-issues
        type: call
        call: jira.bulk-reassign
        with:
          current_assignee: '{{get-employee.work_email}}'
          project: '{{get-employee.department}}'
      - name: notify-managers
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.hr_team_id
          channel_id: $secrets.hr_transfers_channel_id
          text: '{{get-employee.full_name}} transferring from {{get-employee.department}} to {{new_practice}}. Okta groups updated, Jira issues flagged for reassignment.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: okta
    baseUri: https://deloitte.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_api_token
    resources:
    - name: user-groups
      path: /users/{{user_id}}/groups
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: update-user-groups
        method: PUT
  - type: http
    namespace: jira
    baseUri: https://deloitte.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: bulk-operations
      path: /bulk/issues/reassign
      operations:
      - name: bulk-reassign
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → employee-role-transfer-orchestration.yml

Creates a new incident in PagerDuty for a specified service, triggering the on-call rotation.

naftiko: '0.5'
info:
  label: PagerDuty Incident Creation
  description: Creates a new incident in PagerDuty for a specified service, triggering the on-call rotation.
  tags:
  - incident-management
  - on-call
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: incident-paging
    port: 8080
    tools:
    - name: create-incident
      description: Create a PagerDuty incident with a title and urgency level for a given service.
      inputParameters:
      - name: service_id
        in: body
        type: string
        description: PagerDuty service ID.
      - name: title
        in: body
        type: string
        description: Incident title.
      - name: urgency
        in: body
        type: string
        description: Urgency level (high or low).
      call: pagerduty.create-incident
      with:
        service_id: '{{service_id}}'
        title: '{{title}}'
        urgency: '{{urgency}}'
      outputParameters:
      - name: incident_id
        type: string
        mapping: $.incident.id
      - name: status
        type: string
        mapping: $.incident.status
  consumes:
  - 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
Open in Framework → View in Fleet → pagerduty-incident-creation.yml

Retrieves a ranked report from Adobe Analytics for page views and unique visitors for a specified date range and report suite.

naftiko: '0.5'
info:
  label: Adobe Analytics Report Retrieval
  description: Retrieves a ranked report from Adobe Analytics for page views and unique visitors for a specified date range and report suite.
  tags:
  - marketing
  - analytics
  - adobe-analytics
capability:
  exposes:
  - type: mcp
    namespace: marketing-adobe
    port: 8080
    tools:
    - name: get-report
      description: Given a report suite ID and date range, retrieve page view and unique visitor metrics.
      inputParameters:
      - name: report_suite_id
        in: body
        type: string
        description: Adobe Analytics report suite ID.
      - name: start_date
        in: body
        type: string
        description: Report start date.
      - name: end_date
        in: body
        type: string
        description: Report end date.
      call: adobe.get-report
      with:
        rsid: '{{report_suite_id}}'
        start: '{{start_date}}'
        end: '{{end_date}}'
      outputParameters:
      - name: page_views
        type: integer
        mapping: $.totalPages
      - name: unique_visitors
        type: integer
        mapping: $.totalVisitors
  consumes:
  - type: http
    namespace: adobe
    baseUri: https://analytics.adobe.io/api
    authentication:
      type: bearer
      token: $secrets.adobe_analytics_token
    resources:
    - name: reports
      path: /{{rsid}}/reports/ranked
      inputParameters:
      - name: rsid
        in: path
      operations:
      - name: get-report
        method: POST
Open in Framework → View in Fleet → adobe-analytics-report-retrieval.yml

Checks the health status of a deployed MuleSoft API by application name, returning deployment status and worker count.

naftiko: '0.5'
info:
  label: MuleSoft API Health Check
  description: Checks the health status of a deployed MuleSoft API by application name, returning deployment status and worker count.
  tags:
  - integration
  - api-management
  - mulesoft
capability:
  exposes:
  - type: mcp
    namespace: integration-apis
    port: 8080
    tools:
    - name: check-api-health
      description: Given a MuleSoft application name, return its deployment status, worker count, and runtime version.
      inputParameters:
      - name: app_name
        in: body
        type: string
        description: MuleSoft CloudHub application name.
      call: mulesoft.get-app
      with:
        app_name: '{{app_name}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: workers
        type: integer
        mapping: $.workers.amount
      - name: runtime_version
        type: string
        mapping: $.muleVersion.version
  consumes:
  - type: http
    namespace: mulesoft
    baseUri: https://anypoint.mulesoft.com/cloudhub/api
    authentication:
      type: bearer
      token: $secrets.mulesoft_token
    resources:
    - name: applications
      path: /v2/applications/{{app_name}}
      inputParameters:
      - name: app_name
        in: path
      operations:
      - name: get-app
        method: GET
Open in Framework → View in Fleet → mulesoft-api-health-check.yml

Retrieves an employee's current benefits enrollment status from Workday, including health plan, dental, and vision selections.

naftiko: '0.5'
info:
  label: Workday Benefits Enrollment Lookup
  description: Retrieves an employee's current benefits enrollment status from Workday, including health plan, dental, and vision selections.
  tags:
  - hr
  - benefits
  - workday
capability:
  exposes:
  - type: mcp
    namespace: hr-benefits
    port: 8080
    tools:
    - name: get-benefits
      description: Given a Workday employee ID, return their current health, dental, and vision benefit elections.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      call: workday.get-benefits
      with:
        worker_id: '{{employee_id}}'
      outputParameters:
      - name: health_plan
        type: string
        mapping: $.benefits.healthPlan
      - name: dental_plan
        type: string
        mapping: $.benefits.dentalPlan
      - name: vision_plan
        type: string
        mapping: $.benefits.visionPlan
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: benefits
      path: /workers/{{worker_id}}/benefits
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-benefits
        method: GET
Open in Framework → View in Fleet → workday-benefits-enrollment-lookup.yml

When a cloud resource request is approved in ServiceNow, provisions Azure resources via ARM template, updates the CMDB, and notifies the requester via Teams.

naftiko: '0.5'
info:
  label: Cloud Resource Provisioning Workflow
  description: When a cloud resource request is approved in ServiceNow, provisions Azure resources via ARM template, updates the CMDB, and notifies the requester via Teams.
  tags:
  - cloud
  - infrastructure
  - servicenow
  - microsoft-azure
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cloud-provisioning
    port: 8080
    tools:
    - name: provision-cloud-resources
      description: Given a ServiceNow request ID, provision Azure resources, update CMDB, and notify the requester.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: ServiceNow request ID for the approved provisioning.
      steps:
      - name: get-request
        type: call
        call: servicenow.get-request
        with:
          request_id: '{{request_id}}'
      - name: deploy-resources
        type: call
        call: azure.create-deployment
        with:
          subscription_id: '{{get-request.subscription_id}}'
          resource_group: '{{get-request.resource_group}}'
          template: '{{get-request.arm_template}}'
      - name: update-cmdb
        type: call
        call: servicenow.update-ci
        with:
          name: '{{get-request.resource_group}}'
          environment: '{{get-request.environment}}'
          status: provisioned
      - name: notify-requester
        type: call
        call: msteams.send-chat-message
        with:
          user_id: '{{get-request.requested_by}}'
          text: 'Your cloud resources have been provisioned. Resource group: {{get-request.resource_group}}, Status: {{deploy-resources.properties.provisioningState}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://deloitte.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: requests
      path: /table/sc_request/{{request_id}}
      inputParameters:
      - name: request_id
        in: path
      operations:
      - name: get-request
        method: GET
    - name: cmdb
      path: /table/cmdb_ci
      operations:
      - name: update-ci
        method: POST
  - type: http
    namespace: azure
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: deployments
      path: /subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.Resources/deployments/{{resource_group}}-deploy?api-version=2023-07-01
      inputParameters:
      - name: subscription_id
        in: path
      - name: resource_group
        in: path
      operations:
      - name: create-deployment
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /users/{{user_id}}/chats/messages
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: send-chat-message
        method: POST
Open in Framework → View in Fleet → cloud-resource-provisioning-workflow.yml

Queries Jira for unestimated and stale backlog items across technology projects and posts a weekly digest to the engineering Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Jira Project Backlog Health Digest
  description: Queries Jira for unestimated and stale backlog items across technology projects and posts a weekly digest to the engineering Microsoft Teams channel.
  tags:
  - devops
  - engineering
  - jira
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: project-health
    port: 8080
    tools:
    - name: digest-project-backlog-health
      description: Given a Jira project key, retrieve unestimated and stale backlog issues, then post a health digest to the engineering Microsoft Teams channel for grooming prioritisation.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: Jira project key to analyse (e.g. PLAT, DX, SEC).
      - name: teams_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID to post the digest.
      steps:
      - name: search-stale-issues
        type: call
        call: jira.search-issues
        with:
          jql: project = {{project_key}} AND status = Backlog AND (story_points is EMPTY OR updated <= -14d) ORDER BY created ASC
          maxResults: 50
      - name: post-digest
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_engineering_team_id
          channel_id: '{{teams_channel_id}}'
          text: 'Backlog health — {{project_key}}: {{search-stale-issues.total}} issues need grooming (unestimated or stale >14 days).'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://deloitte.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /search
      inputParameters:
      - name: jql
        in: query
      - name: maxResults
        in: query
      operations:
      - name: search-issues
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → jira-project-backlog-health-digest.yml

Compiles sprint metrics from Jira, collects team feedback, generates a retrospective summary in Confluence, and posts highlights to the engineering Teams channel.

naftiko: '0.5'
info:
  label: Sprint Retrospective Digest Orchestration
  description: Compiles sprint metrics from Jira, collects team feedback, generates a retrospective summary in Confluence, and posts highlights to the engineering Teams channel.
  tags:
  - engineering
  - agile
  - jira
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: agile-retro
    port: 8080
    tools:
    - name: generate-retro-digest
      description: Given a Jira sprint ID, compile metrics, create a Confluence retro page, and post highlights.
      inputParameters:
      - name: sprint_id
        in: body
        type: string
        description: Jira sprint ID.
      - name: board_id
        in: body
        type: string
        description: Jira board ID.
      steps:
      - name: get-sprint-report
        type: call
        call: jira.get-sprint-report
        with:
          board_id: '{{board_id}}'
          sprint_id: '{{sprint_id}}'
      - name: create-retro-page
        type: call
        call: confluence.create-page
        with:
          spaceKey: ENG
          title: Sprint {{sprint_id}} Retrospective
          body: 'Completed: {{get-sprint-report.completedIssues.length}}, Incomplete: {{get-sprint-report.incompleteIssues.length}}, Velocity: {{get-sprint-report.velocity}}'
      - name: post-highlights
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.eng_team_id
          channel_id: $secrets.eng_retro_channel_id
          text: 'Sprint {{sprint_id}} retro: {{get-sprint-report.completedIssues.length}} completed, {{get-sprint-report.incompleteIssues.length}} carried over. Full report: {{create-retro-page.url}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://deloitte.atlassian.net/rest/agile/1.0
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: sprint-reports
      path: /board/{{board_id}}/sprint/{{sprint_id}}/report
      inputParameters:
      - name: board_id
        in: path
      - name: sprint_id
        in: path
      operations:
      - name: get-sprint-report
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://deloitte.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/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → sprint-retrospective-digest-orchestration.yml

Executes a read-only SQL query against the Snowflake data warehouse and returns the result set for analytics and reporting.

naftiko: '0.5'
info:
  label: Snowflake Query Execution
  description: Executes a read-only SQL query against the Snowflake data warehouse and returns the result set for analytics and reporting.
  tags:
  - data
  - analytics
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: data-queries
    port: 8080
    tools:
    - name: run-query
      description: Execute a read-only SQL query on Snowflake and return the result set. Only SELECT statements are permitted.
      inputParameters:
      - name: sql_statement
        in: body
        type: string
        description: SQL SELECT statement to execute.
      - name: warehouse
        in: body
        type: string
        description: Snowflake warehouse to use for the query.
      call: snowflake.execute-query
      with:
        statement: '{{sql_statement}}'
        warehouse: '{{warehouse}}'
      outputParameters:
      - name: row_count
        type: integer
        mapping: $.resultSetMetaData.numRows
      - name: data
        type: array
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://deloitte.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → snowflake-query-execution.yml

Retrieves the status of an Appian business process instance, including current step, assignee, and elapsed time.

naftiko: '0.5'
info:
  label: Appian Process Status Lookup
  description: Retrieves the status of an Appian business process instance, including current step, assignee, and elapsed time.
  tags:
  - bpm
  - automation
  - appian
capability:
  exposes:
  - type: mcp
    namespace: bpm-processes
    port: 8080
    tools:
    - name: get-process-status
      description: Given an Appian process instance ID, return the current step, assignee, and elapsed time.
      inputParameters:
      - name: process_id
        in: body
        type: string
        description: Appian process instance ID.
      call: appian.get-process
      with:
        process_id: '{{process_id}}'
      outputParameters:
      - name: current_step
        type: string
        mapping: $.status.currentStep
      - name: assignee
        type: string
        mapping: $.status.assignee
      - name: elapsed_time
        type: string
        mapping: $.status.elapsedTime
  consumes:
  - type: http
    namespace: appian
    baseUri: https://deloitte.appiancloud.com/suite/webapi
    authentication:
      type: bearer
      token: $secrets.appian_token
    resources:
    - name: processes
      path: /process/{{process_id}}
      inputParameters:
      - name: process_id
        in: path
      operations:
      - name: get-process
        method: GET
Open in Framework → View in Fleet → appian-process-status-lookup.yml

Pulls active headcount from Workday by practice and cost center and writes the snapshot to Snowflake for finance planning and payroll reconciliation.

naftiko: '0.5'
info:
  label: Workday Payroll Headcount Snapshot
  description: Pulls active headcount from Workday by practice and cost center and writes the snapshot to Snowflake for finance planning and payroll reconciliation.
  tags:
  - hr
  - finance
  - workday
  - snowflake
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: payroll-reporting
    port: 8080
    tools:
    - name: snapshot-payroll-headcount
      description: Retrieve active employees from Workday segmented by practice and cost center, then write the periodic headcount snapshot to Snowflake for finance planning and payroll reconciliation.
      inputParameters:
      - name: snapshot_date
        in: body
        type: string
        description: ISO 8601 date for the payroll headcount snapshot.
      steps:
      - name: get-workers
        type: call
        call: workday.list-workers
        with:
          effective_date: '{{snapshot_date}}'
          employment_status: active
      - name: store-snapshot
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO headcount_snapshots (snapshot_date, total_headcount) VALUES ('{{snapshot_date}}', {{get-workers.total_results}})
  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
      inputParameters:
      - name: effective_date
        in: query
      - name: employment_status
        in: query
      operations:
      - name: list-workers
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://deloitte.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → workday-payroll-headcount-snapshot.yml

Checks the current health status of a specific service monitored in Datadog, returning overall status and active alert count.

naftiko: '0.5'
info:
  label: Datadog Service Health Lookup
  description: Checks the current health status of a specific service monitored in Datadog, returning overall status and active alert count.
  tags:
  - monitoring
  - observability
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: monitoring-health
    port: 8080
    tools:
    - name: get-service-health
      description: Given a Datadog service name, return the current overall status and number of active alerts.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: Name of the service in Datadog.
      call: datadog.get-service-status
      with:
        service: '{{service_name}}'
      outputParameters:
      - name: overall_status
        type: string
        mapping: $.data.attributes.overall_status
      - name: active_alerts
        type: integer
        mapping: $.data.attributes.active_alert_count
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
      headerName: DD-API-KEY
    resources:
    - name: services
      path: /services/definitions/{{service}}
      inputParameters:
      - name: service
        in: path
      operations:
      - name: get-service-status
        method: GET
Open in Framework → View in Fleet → datadog-service-health-lookup.yml

Creates a new support case in Salesforce with specified subject, priority, and account association.

naftiko: '0.5'
info:
  label: Salesforce Case Creation
  description: Creates a new support case in Salesforce with specified subject, priority, and account association.
  tags:
  - support
  - crm
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: support-cases
    port: 8080
    tools:
    - name: create-case
      description: Create a new Salesforce case with subject, description, priority, and account ID.
      inputParameters:
      - name: subject
        in: body
        type: string
        description: Case subject line.
      - name: description
        in: body
        type: string
        description: Case description.
      - name: priority
        in: body
        type: string
        description: Case priority (High, Medium, Low).
      - name: account_id
        in: body
        type: string
        description: Salesforce account ID.
      call: salesforce.create-case
      with:
        Subject: '{{subject}}'
        Description: '{{description}}'
        Priority: '{{priority}}'
        AccountId: '{{account_id}}'
      outputParameters:
      - name: case_id
        type: string
        mapping: $.id
      - name: case_number
        type: string
        mapping: $.CaseNumber
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://deloitte.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case
      operations:
      - name: create-case
        method: POST
Open in Framework → View in Fleet → salesforce-case-creation.yml

Triggers a Power BI dataset refresh for Deloitte's practice revenue dashboard after Snowflake billing data loads complete, ensuring leadership has current project revenue data.

naftiko: '0.5'
info:
  label: Power BI Practice Revenue Dashboard Refresh
  description: Triggers a Power BI dataset refresh for Deloitte's practice revenue dashboard after Snowflake billing data loads complete, ensuring leadership has current project revenue data.
  tags:
  - analytics
  - finance
  - power-bi
  - snowflake
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: revenue-reporting
    port: 8080
    tools:
    - name: refresh-practice-revenue-dashboard
      description: Given a Power BI dataset ID, verify the latest Snowflake billing pipeline load and trigger a Power BI dataset refresh for the practice revenue leadership dashboard.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset ID for the practice revenue report.
      steps:
      - name: verify-pipeline-load
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT MAX(loaded_at) as last_load FROM pipeline_audit WHERE pipeline = 'billing_revenue' AND status = 'success'
      - name: refresh-pbi-dataset
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: '{{dataset_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://deloitte.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → power-bi-practice-revenue-dashboard-refresh.yml

Retrieves a Salesforce client account record and returns key engagement health indicators including open opportunities, last activity, and current contract status for partner-level reviews.

naftiko: '0.5'
info:
  label: Salesforce Client Account Health Review
  description: Retrieves a Salesforce client account record and returns key engagement health indicators including open opportunities, last activity, and current contract status for partner-level reviews.
  tags:
  - sales
  - crm
  - salesforce
  - account-management
capability:
  exposes:
  - type: mcp
    namespace: client-management
    port: 8080
    tools:
    - name: get-client-account-health
      description: Given a Salesforce account ID, retrieve client health indicators including open opportunities, last contact date, and active contract value. Use for quarterly business reviews and partner planning.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Salesforce account ID for the client.
      call: salesforce.get-account
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: account_name
        type: string
        mapping: $.Name
      - name: owner_name
        type: string
        mapping: $.Owner.Name
      - name: last_activity_date
        type: string
        mapping: $.LastActivityDate
      - name: annual_revenue
        type: number
        mapping: $.AnnualRevenue
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://deloitte.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
Open in Framework → View in Fleet → salesforce-client-account-health-review.yml

Retrieves performance metrics for a Mailchimp email campaign including open rate, click rate, and unsubscribe count.

naftiko: '0.5'
info:
  label: Mailchimp Campaign Performance Lookup
  description: Retrieves performance metrics for a Mailchimp email campaign including open rate, click rate, and unsubscribe count.
  tags:
  - marketing
  - email
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: marketing-email
    port: 8080
    tools:
    - name: get-campaign-performance
      description: Given a Mailchimp campaign ID, return open rate, click rate, and total recipients.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: Mailchimp campaign ID.
      call: mailchimp.get-campaign-report
      with:
        campaign_id: '{{campaign_id}}'
      outputParameters:
      - name: open_rate
        type: number
        mapping: $.opens.open_rate
      - name: click_rate
        type: number
        mapping: $.clicks.click_rate
      - name: total_sent
        type: integer
        mapping: $.emails_sent
  consumes:
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: basic
      username: anystring
      password: $secrets.mailchimp_api_key
    resources:
    - name: reports
      path: /reports/{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-campaign-report
        method: GET
Open in Framework → View in Fleet → mailchimp-campaign-performance-lookup.yml

Retrieves the organizational hierarchy for a specified employee from Workday, including manager, department, and cost center.

naftiko: '0.5'
info:
  label: Workday Org Chart Lookup
  description: Retrieves the organizational hierarchy for a specified employee from Workday, including manager, department, and cost center.
  tags:
  - hr
  - organization
  - workday
capability:
  exposes:
  - type: mcp
    namespace: hr-org
    port: 8080
    tools:
    - name: get-org-hierarchy
      description: Given a Workday employee ID, return their manager, department, and cost center.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      call: workday.get-worker-org
      with:
        worker_id: '{{employee_id}}'
      outputParameters:
      - name: manager
        type: string
        mapping: $.manager.displayName
      - name: department
        type: string
        mapping: $.department
      - name: cost_center
        type: string
        mapping: $.costCenter
  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}}/organizationInfo
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker-org
        method: GET
Open in Framework → View in Fleet → workday-org-chart-lookup.yml

Retrieves Google Cloud Platform billing summary by project for a specified billing period.

naftiko: '0.5'
info:
  label: GCP Billing Export Summary
  description: Retrieves Google Cloud Platform billing summary by project for a specified billing period.
  tags:
  - cloud
  - finops
  - google-cloud-platform
capability:
  exposes:
  - type: mcp
    namespace: cloud-billing
    port: 8080
    tools:
    - name: get-gcp-billing
      description: Given a GCP billing account and month, return project-level cost breakdown.
      inputParameters:
      - name: billing_account
        in: body
        type: string
        description: GCP billing account ID.
      - name: month
        in: body
        type: string
        description: Billing month (YYYY-MM).
      call: gcp.get-billing
      with:
        account: '{{billing_account}}'
        month: '{{month}}'
      outputParameters:
      - name: total_cost
        type: string
        mapping: $.costAmount
      - name: currency
        type: string
        mapping: $.currencyCode
  consumes:
  - type: http
    namespace: gcp
    baseUri: https://cloudbilling.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_token
    resources:
    - name: billing
      path: /billingAccounts/{{account}}/costs?month={{month}}
      inputParameters:
      - name: account
        in: path
      - name: month
        in: query
      operations:
      - name: get-billing
        method: GET
Open in Framework → View in Fleet → gcp-billing-export-summary.yml

Aggregates KPIs from Salesforce pipeline, Workday headcount, Snowflake financial metrics, and Datadog service health into a weekly executive Power BI dashboard refresh.

naftiko: '0.5'
info:
  label: Weekly Executive Dashboard Orchestration
  description: Aggregates KPIs from Salesforce pipeline, Workday headcount, Snowflake financial metrics, and Datadog service health into a weekly executive Power BI dashboard refresh.
  tags:
  - executive
  - reporting
  - salesforce
  - workday
  - snowflake
  - datadog
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: executive-reporting
    port: 8080
    tools:
    - name: refresh-executive-dashboard
      description: Compile weekly KPIs from multiple sources and refresh the executive Power BI dashboard.
      inputParameters:
      - name: report_week
        in: body
        type: string
        description: ISO week for the report.
      steps:
      - name: get-pipeline
        type: call
        call: salesforce.get-pipeline-summary
        with:
          week: '{{report_week}}'
      - name: get-headcount
        type: call
        call: workday.get-org-headcount
        with: {}
      - name: get-financials
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT * FROM executive.weekly_kpis WHERE report_week = '{{report_week}}'
          warehouse: EXECUTIVE_WH
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          group_id: $secrets.executive_workspace_id
          dataset_id: $secrets.executive_dashboard_dataset_id
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://deloitte.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: pipeline
      path: /query?q=SELECT+SUM(Amount),StageName+FROM+Opportunity+GROUP+BY+StageName
      operations:
      - name: get-pipeline-summary
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: headcount
      path: /workers/count
      operations:
      - name: get-org-headcount
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://deloitte.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /groups/{{group_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: group_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → weekly-executive-dashboard-orchestration.yml

Monitors upcoming contract renewals in Salesforce, creates Jira tracking tickets, sends renewal reminders to account managers via Teams, and logs the outreach in Salesforce.

naftiko: '0.5'
info:
  label: Contract Renewal Tracking Orchestration
  description: Monitors upcoming contract renewals in Salesforce, creates Jira tracking tickets, sends renewal reminders to account managers via Teams, and logs the outreach in Salesforce.
  tags:
  - sales
  - contract-management
  - salesforce
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: contract-renewals
    port: 8080
    tools:
    - name: process-upcoming-renewals
      description: Find contracts expiring within 90 days, create tracking tickets, and notify account managers.
      inputParameters:
      - name: days_ahead
        in: body
        type: integer
        description: Number of days ahead to look for renewals.
      steps:
      - name: get-expiring-contracts
        type: call
        call: salesforce.query-contracts
        with:
          days: '{{days_ahead}}'
      - name: create-tracking-tickets
        type: call
        call: jira.create-issue
        with:
          project: RENEWALS
          issuetype: Task
          summary: 'Contract renewals due within {{days_ahead}} days: {{get-expiring-contracts.totalSize}} contracts'
      - name: notify-managers
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.sales_team_id
          channel_id: $secrets.renewals_channel_id
          text: '{{get-expiring-contracts.totalSize}} contracts expiring within {{days_ahead}} days. Tracking ticket: {{create-tracking-tickets.key}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://deloitte.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contracts
      path: /query?q=SELECT+Id,Name,EndDate,Account.Name+FROM+Contract+WHERE+EndDate=NEXT_N_DAYS:{{days}}
      inputParameters:
      - name: days
        in: query
      operations:
      - name: query-contracts
        method: GET
  - type: http
    namespace: jira
    baseUri: https://deloitte.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → contract-renewal-tracking-orchestration.yml

Retrieves the current status of all critical IT infrastructure monitors from Datadog and returns a structured health summary for the IT operations team.

naftiko: '0.5'
info:
  label: Datadog Infrastructure Health Summary
  description: Retrieves the current status of all critical IT infrastructure monitors from Datadog and returns a structured health summary for the IT operations team.
  tags:
  - observability
  - monitoring
  - datadog
  - operations
capability:
  exposes:
  - type: mcp
    namespace: infra-health
    port: 8080
    tools:
    - name: get-infrastructure-health
      description: Given a Datadog environment tag, retrieve all monitor statuses for the matching infrastructure and return a structured health summary. Use at the start of any IT incident investigation.
      inputParameters:
      - name: environment_tag
        in: body
        type: string
        description: Datadog environment tag to filter monitors (e.g. env:production).
      call: datadog.get-monitors
      with:
        monitor_tags: '{{environment_tag}}'
      outputParameters:
      - name: monitors
        type: array
        mapping: $.monitors
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor
      inputParameters:
      - name: monitor_tags
        in: query
      operations:
      - name: get-monitors
        method: GET
Open in Framework → View in Fleet → datadog-infrastructure-health-summary.yml

Retrieves the latest build status for an Azure DevOps pipeline, including result, duration, and triggering branch.

naftiko: '0.5'
info:
  label: Azure DevOps Build Status Lookup
  description: Retrieves the latest build status for an Azure DevOps pipeline, including result, duration, and triggering branch.
  tags:
  - engineering
  - ci-cd
  - azure-devops
capability:
  exposes:
  - type: mcp
    namespace: devops-builds
    port: 8080
    tools:
    - name: get-build-status
      description: Given an Azure DevOps project and pipeline ID, return the latest build result, duration, and source branch.
      inputParameters:
      - name: project
        in: body
        type: string
        description: Azure DevOps project name.
      - name: pipeline_id
        in: body
        type: string
        description: Pipeline definition ID.
      call: azdevops.get-builds
      with:
        project: '{{project}}'
        definition_id: '{{pipeline_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.value[0].result
      - name: status
        type: string
        mapping: $.value[0].status
      - name: source_branch
        type: string
        mapping: $.value[0].sourceBranch
  consumes:
  - type: http
    namespace: azdevops
    baseUri: https://dev.azure.com/deloitte
    authentication:
      type: basic
      username: ''
      password: $secrets.azure_devops_pat
    resources:
    - name: builds
      path: /{{project}}/_apis/build/builds?definitions={{definition_id}}&$top=1&api-version=7.0
      inputParameters:
      - name: project
        in: path
      - name: definition_id
        in: query
      operations:
      - name: get-builds
        method: GET
Open in Framework → View in Fleet → azure-devops-build-status-lookup.yml

Retrieves LinkedIn company page follower and engagement analytics for employer branding reporting.

naftiko: '0.5'
info:
  label: LinkedIn Company Page Analytics
  description: Retrieves LinkedIn company page follower and engagement analytics for employer branding reporting.
  tags:
  - marketing
  - social
  - linkedin
capability:
  exposes:
  - type: mcp
    namespace: social-analytics
    port: 8080
    tools:
    - name: get-page-analytics
      description: Return LinkedIn company page follower count, post impressions, and engagement rate.
      inputParameters:
      - name: organization_id
        in: body
        type: string
        description: LinkedIn organization ID.
      call: linkedin.get-org-stats
      with:
        org_id: '{{organization_id}}'
      outputParameters:
      - name: follower_count
        type: integer
        mapping: $.followerCount
      - name: impressions
        type: integer
        mapping: $.totalImpressions
      - name: engagement_rate
        type: number
        mapping: $.engagementRate
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: org-stats
      path: /organizationalEntityFollowerStatistics?q=organizationalEntity&organizationalEntity=urn:li:organization:{{org_id}}
      inputParameters:
      - name: org_id
        in: query
      operations:
      - name: get-org-stats
        method: GET
Open in Framework → View in Fleet → linkedin-company-page-analytics.yml

When a new hire is created in Workday, provisions Microsoft 365 access via Microsoft Graph, creates a ServiceNow onboarding ticket, and sends a Microsoft Teams welcome message to the practice team.

naftiko: '0.5'
info:
  label: New Hire Onboarding Orchestration
  description: When a new hire is created in Workday, provisions Microsoft 365 access via Microsoft Graph, creates a ServiceNow onboarding ticket, and sends a Microsoft Teams welcome message to the practice team.
  tags:
  - hr
  - onboarding
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-onboarding
    port: 8080
    tools:
    - name: trigger-new-hire-onboarding
      description: Given a Workday employee ID and start date, provision Microsoft 365 access, create a ServiceNow onboarding ticket, and send a Teams welcome message to the new hire's practice team channel.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: Workday worker ID for the new hire.
      - name: start_date
        in: body
        type: string
        description: Employee start date in ISO 8601 format.
      - name: practice_team_id
        in: body
        type: string
        description: Microsoft Teams team ID for the new hire's consulting practice.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: provision-m365
        type: call
        call: msgraph.create-user
        with:
          displayName: '{{get-employee.full_name}}'
          userPrincipalName: '{{get-employee.work_email}}'
          department: '{{get-employee.department}}'
      - name: open-snow-ticket
        type: call
        call: servicenow.create-incident
        with:
          category: hr_onboarding
          short_description: 'New hire onboarding: {{get-employee.full_name}}'
          assigned_group: IT_Onboarding
      - name: welcome-message
        type: call
        call: msteams.send-channel-message
        with:
          team_id: '{{practice_team_id}}'
          channel_id: $secrets.teams_general_channel_id
          text: 'Please welcome {{get-employee.full_name}} joining {{get-employee.department}} on {{start_date}}! IT ticket: {{open-snow-ticket.number}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users
      operations:
      - name: create-user
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://deloitte.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → new-hire-onboarding-orchestration.yml

When Datadog detects API gateway rate limiting, fetches metrics, creates a ServiceNow incident, and notifies the platform team via Teams.

naftiko: '0.5'
info:
  label: API Gateway Rate Limit Alert Handler
  description: When Datadog detects API gateway rate limiting, fetches metrics, creates a ServiceNow incident, and notifies the platform team via Teams.
  tags:
  - api-management
  - monitoring
  - datadog
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: api-alerts
    port: 8080
    tools:
    - name: handle-rate-limit-alert
      description: Given a Datadog monitor ID for rate limiting, fetch metrics, create incident, and alert platform team.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: Datadog monitor ID that triggered the rate limit alert.
      steps:
      - name: get-monitor
        type: call
        call: datadog.get-monitor
        with:
          monitor_id: '{{monitor_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'API rate limiting detected: {{get-monitor.name}}'
          category: api_management
          priority: '2'
      - name: notify-platform
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.platform_team_id
          channel_id: $secrets.platform_alerts_channel_id
          text: 'API rate limit alert: {{get-monitor.name}}. Status: {{get-monitor.overall_state}}. SNOW: {{create-incident.number}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
      headerName: DD-API-KEY
    resources:
    - name: monitors
      path: /monitor/{{monitor_id}}
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: get-monitor
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://deloitte.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → api-gateway-rate-limit-alert-handler.yml

Retrieves the current compensation details for a given employee from Workday, including base salary, bonus target, and pay grade.

naftiko: '0.5'
info:
  label: Workday Compensation Review Lookup
  description: Retrieves the current compensation details for a given employee from Workday, including base salary, bonus target, and pay grade.
  tags:
  - hr
  - compensation
  - workday
capability:
  exposes:
  - type: mcp
    namespace: hr-compensation
    port: 8080
    tools:
    - name: get-compensation-details
      description: Given a Workday employee ID, return their current base salary, bonus target percentage, and pay grade from Workday.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      call: workday.get-compensation
      with:
        worker_id: '{{employee_id}}'
      outputParameters:
      - name: base_salary
        type: string
        mapping: $.compensation.baseSalary
      - name: bonus_target
        type: string
        mapping: $.compensation.bonusTarget
      - name: pay_grade
        type: string
        mapping: $.compensation.payGrade
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: compensation
      path: /workers/{{worker_id}}/compensation
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-compensation
        method: GET
Open in Framework → View in Fleet → workday-compensation-review-lookup.yml

When Datadog detects a P1 infrastructure alert, creates a ServiceNow critical incident, pages the on-call SRE via PagerDuty, and posts to the IT operations Microsoft Teams channel.

naftiko: '0.5'
info:
  label: IT Infrastructure Incident Response
  description: When Datadog detects a P1 infrastructure alert, creates a ServiceNow critical incident, pages the on-call SRE via PagerDuty, and posts to the IT operations Microsoft Teams channel.
  tags:
  - itsm
  - incident-response
  - datadog
  - servicenow
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: it-ops
    port: 8080
    tools:
    - name: handle-p1-incident
      description: Given a Datadog P1 alert, create a ServiceNow critical incident, page the on-call SRE via PagerDuty, and notify the IT operations Microsoft Teams channel.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: Datadog monitor ID that triggered the P1 alert.
      - name: service_affected
        in: body
        type: string
        description: Name of the affected service or system.
      - name: alert_message
        in: body
        type: string
        description: Full alert description from Datadog.
      steps:
      - name: create-snow-incident
        type: call
        call: servicenow.create-incident
        with:
          category: infrastructure
          impact: 1
          urgency: 1
          short_description: 'P1: {{service_affected}} — {{alert_message}}'
          assigned_group: SRE_OnCall
      - name: page-oncall
        type: call
        call: pagerduty.create-incident
        with:
          title: 'P1: {{service_affected}}'
          urgency: high
          service_id: $secrets.pagerduty_infra_service_id
      - name: notify-it-ops
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_it_ops_team_id
          channel_id: $secrets.teams_it_ops_channel_id
          text: 'P1 INCIDENT: {{service_affected}} | SNOW: {{create-snow-incident.number}} | PD: {{page-oncall.html_url}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://deloitte.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_api_key
      placement: header
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → it-infrastructure-incident-response.yml

Aggregates staff utilization data from Workday, project hours from Jira, and revenue data from Salesforce to produce a weekly practice utilization report refreshed in Power BI.

naftiko: '0.5'
info:
  label: Practice Utilization Report Orchestration
  description: Aggregates staff utilization data from Workday, project hours from Jira, and revenue data from Salesforce to produce a weekly practice utilization report refreshed in Power BI.
  tags:
  - operations
  - reporting
  - workday
  - jira
  - salesforce
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: ops-utilization
    port: 8080
    tools:
    - name: generate-utilization-report
      description: Compile utilization data from Workday, Jira, and Salesforce and refresh the Power BI report.
      inputParameters:
      - name: practice_code
        in: body
        type: string
        description: Practice code to generate report for.
      - name: report_week
        in: body
        type: string
        description: ISO week to report on (e.g., 2026-W13).
      steps:
      - name: get-headcount
        type: call
        call: workday.get-practice-headcount
        with:
          practice: '{{practice_code}}'
      - name: get-project-hours
        type: call
        call: jira.get-worklogs
        with:
          project: '{{practice_code}}'
          week: '{{report_week}}'
      - name: get-revenue
        type: call
        call: salesforce.get-practice-revenue
        with:
          practice_code: '{{practice_code}}'
      - name: refresh-report
        type: call
        call: powerbi.refresh-dataset
        with:
          group_id: $secrets.ops_workspace_id
          dataset_id: $secrets.utilization_dataset_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: headcount
      path: /workers?practice={{practice}}
      inputParameters:
      - name: practice
        in: query
      operations:
      - name: get-practice-headcount
        method: GET
  - type: http
    namespace: jira
    baseUri: https://deloitte.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: worklogs
      path: /worklog/list?project={{project}}&week={{week}}
      inputParameters:
      - name: project
        in: query
      - name: week
        in: query
      operations:
      - name: get-worklogs
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://deloitte.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: revenue
      path: /query?q=SELECT+SUM(Amount)+FROM+Opportunity+WHERE+Practice_Code__c='{{practice_code}}'
      inputParameters:
      - name: practice_code
        in: query
      operations:
      - name: get-practice-revenue
        method: GET
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /groups/{{group_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: group_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → practice-utilization-report-orchestration.yml

Retrieves the latest commit status and open pull request count for a given GitHub repository.

naftiko: '0.5'
info:
  label: GitHub Repository Status Lookup
  description: Retrieves the latest commit status and open pull request count for a given GitHub repository.
  tags:
  - engineering
  - devops
  - github
capability:
  exposes:
  - type: mcp
    namespace: dev-repos
    port: 8080
    tools:
    - name: get-repo-status
      description: Given a GitHub repository name, return the latest commit SHA, status, and count of open pull requests.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: Repository name in org/repo format.
      call: github.get-repo
      with:
        repo: '{{repo_name}}'
      outputParameters:
      - name: default_branch
        type: string
        mapping: $.default_branch
      - name: open_issues_count
        type: integer
        mapping: $.open_issues_count
      - name: updated_at
        type: string
        mapping: $.updated_at
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: repos
      path: /repos/{{repo}}
      inputParameters:
      - name: repo
        in: path
      operations:
      - name: get-repo
        method: GET
Open in Framework → View in Fleet → github-repository-status-lookup.yml

Triggers a data extract refresh for a specified Tableau workbook to ensure dashboards display current data.

naftiko: '0.5'
info:
  label: Tableau Dashboard Refresh Trigger
  description: Triggers a data extract refresh for a specified Tableau workbook to ensure dashboards display current data.
  tags:
  - analytics
  - reporting
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: analytics-dashboards
    port: 8080
    tools:
    - name: refresh-workbook
      description: Trigger a data extract refresh for a Tableau workbook by ID.
      inputParameters:
      - name: workbook_id
        in: body
        type: string
        description: Tableau workbook ID to refresh.
      call: tableau.refresh-workbook
      with:
        workbook_id: '{{workbook_id}}'
      outputParameters:
      - name: job_id
        type: string
        mapping: $.job.id
      - name: status
        type: string
        mapping: $.job.status
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://tableau.deloitte.com/api/3.21
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/$secrets.tableau_site_id/workbooks/{{workbook_id}}/refresh
      inputParameters:
      - name: workbook_id
        in: path
      operations:
      - name: refresh-workbook
        method: POST
Open in Framework → View in Fleet → tableau-dashboard-refresh-trigger.yml

When a deliverable is uploaded to SharePoint, creates a Jira review task, sends approval request to the engagement manager via Teams, and updates Salesforce engagement status.

naftiko: '0.5'
info:
  label: Client Deliverable Approval Workflow
  description: When a deliverable is uploaded to SharePoint, creates a Jira review task, sends approval request to the engagement manager via Teams, and updates Salesforce engagement status.
  tags:
  - consulting
  - delivery
  - sharepoint
  - jira
  - microsoft-teams
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: delivery-approval
    port: 8080
    tools:
    - name: submit-deliverable-for-approval
      description: Given a SharePoint document URL and engagement ID, create a review task and request approval.
      inputParameters:
      - name: document_url
        in: body
        type: string
        description: SharePoint URL of the deliverable.
      - name: engagement_id
        in: body
        type: string
        description: Salesforce engagement opportunity ID.
      - name: approver_email
        in: body
        type: string
        description: Email of the engagement manager.
      steps:
      - name: get-engagement
        type: call
        call: salesforce.get-opportunity
        with:
          opp_id: '{{engagement_id}}'
      - name: create-review-task
        type: call
        call: jira.create-issue
        with:
          project: DELIVERY
          issuetype: Task
          summary: Review deliverable for {{get-engagement.Name}}
          description: 'Document: {{document_url}}'
      - name: request-approval
        type: call
        call: msteams.send-chat-message
        with:
          user_id: '{{approver_email}}'
          text: 'Deliverable ready for review: {{get-engagement.Name}}. Document: {{document_url}}. Jira: {{create-review-task.key}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://deloitte.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opp_id}}
      inputParameters:
      - name: opp_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
  - type: http
    namespace: jira
    baseUri: https://deloitte.atlassian.net/rest/api/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: chats
      path: /users/{{user_id}}/chats/messages
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: send-chat-message
        method: POST
Open in Framework → View in Fleet → client-deliverable-approval-workflow.yml

When a GitHub Actions pipeline fails on a core platform repository, creates a Datadog event and opens a Jira bug for the engineering team to investigate and remediate.

naftiko: '0.5'
info:
  label: GitHub CI/CD Pipeline Failure Handler
  description: When a GitHub Actions pipeline fails on a core platform repository, creates a Datadog event and opens a Jira bug for the engineering team to investigate and remediate.
  tags:
  - devops
  - cicd
  - github
  - datadog
  - jira
capability:
  exposes:
  - type: mcp
    namespace: devops
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a GitHub Actions workflow failure, create a Datadog deployment event and open a Jira bug with full failure context for the platform engineering team.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: GitHub repository name where the failure occurred.
      - name: workflow_name
        in: body
        type: string
        description: Name of the failed workflow.
      - name: run_id
        in: body
        type: string
        description: GitHub Actions workflow run ID.
      - name: commit_sha
        in: body
        type: string
        description: Git commit SHA that triggered the failure.
      - name: branch
        in: body
        type: string
        description: Git branch where the failure occurred.
      steps:
      - name: create-dd-event
        type: call
        call: datadog.create-event
        with:
          title: 'CI failure: {{workflow_name}} on {{branch}}'
          text: Run {{run_id}} failed at {{commit_sha}} in {{repo_name}}
          alert_type: error
          tags: env:ci,repo:{{repo_name}}
      - name: create-jira-bug
        type: call
        call: jira.create-issue
        with:
          project_key: PLAT
          issuetype: Bug
          summary: '[CI Failure] {{repo_name}} / {{workflow_name}} on {{branch}}'
          description: 'Run: {{run_id}}

            Branch: {{branch}}

            Commit: {{commit_sha}}

            Datadog: {{create-dd-event.url}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: jira
    baseUri: https://deloitte.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → github-ci-cd-pipeline-failure-handler.yml

Retrieves the current month-to-date cost for a specified Azure resource group from Azure Cost Management.

naftiko: '0.5'
info:
  label: Azure Resource Group Cost Lookup
  description: Retrieves the current month-to-date cost for a specified Azure resource group from Azure Cost Management.
  tags:
  - cloud
  - finops
  - microsoft-azure
capability:
  exposes:
  - type: mcp
    namespace: cloud-costs
    port: 8080
    tools:
    - name: get-resource-group-cost
      description: Given an Azure resource group name, return the month-to-date spend and currency from Azure Cost Management.
      inputParameters:
      - name: resource_group
        in: body
        type: string
        description: Azure resource group name.
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID.
      call: azure.get-cost
      with:
        subscription: '{{subscription_id}}'
        rg: '{{resource_group}}'
      outputParameters:
      - name: total_cost
        type: string
        mapping: $.properties.rows[0][0]
      - name: currency
        type: string
        mapping: $.properties.rows[0][1]
  consumes:
  - type: http
    namespace: azure
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: cost-management
      path: /subscriptions/{{subscription}}/resourceGroups/{{rg}}/providers/Microsoft.CostManagement/query?api-version=2023-03-01
      inputParameters:
      - name: subscription
        in: path
      - name: rg
        in: path
      operations:
      - name: get-cost
        method: POST
Open in Framework → View in Fleet → azure-resource-group-cost-lookup.yml

When a SAP Concur expense report exceeds the auto-approval threshold, creates a ServiceNow approval task and notifies the employee's practice leader in Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Concur Expense Approval Escalation
  description: When a SAP Concur expense report exceeds the auto-approval threshold, creates a ServiceNow approval task and notifies the employee's practice leader in Microsoft Teams.
  tags:
  - finance
  - expenses
  - sap-concur
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: expense-approval
    port: 8080
    tools:
    - name: escalate-expense-for-approval
      description: Given a SAP Concur expense report ID and total exceeding the auto-approval threshold, create a ServiceNow approval task and notify the practice leader in Microsoft Teams.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: SAP Concur expense report ID requiring approval.
      - name: total_amount_usd
        in: body
        type: number
        description: Total expense report amount in USD.
      - name: employee_name
        in: body
        type: string
        description: Name of the employee who submitted the expense report.
      - name: approver_upn
        in: body
        type: string
        description: Microsoft 365 UPN of the approving practice leader.
      steps:
      - name: create-approval-task
        type: call
        call: servicenow.create-task
        with:
          category: expense_approval
          short_description: 'Expense approval: {{employee_name}} — ${{total_amount_usd}}'
          assigned_to: '{{approver_upn}}'
      - name: notify-approver
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{approver_upn}}'
          text: 'Expense approval needed: {{employee_name}} submitted ${{total_amount_usd}} (Concur report: {{report_id}}) | Approve in SNOW: {{create-approval-task.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://deloitte.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-concur-expense-approval-escalation.yml

When SAP Concur flags an expense policy violation, fetches details, creates a ServiceNow compliance ticket, and notifies the employee's manager via Teams.

naftiko: '0.5'
info:
  label: Expense Policy Violation Handler
  description: When SAP Concur flags an expense policy violation, fetches details, creates a ServiceNow compliance ticket, and notifies the employee's manager via Teams.
  tags:
  - finance
  - compliance
  - sap-concur
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: expense-compliance
    port: 8080
    tools:
    - name: handle-expense-violation
      description: Given a Concur expense report ID with a violation, create a compliance ticket and notify the manager.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: SAP Concur expense report ID.
      steps:
      - name: get-report
        type: call
        call: concur.get-expense-report
        with:
          report_id: '{{report_id}}'
      - name: create-compliance-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Expense policy violation: Report {{report_id}}'
          category: compliance
          description: 'Employee: {{get-report.OwnerName}}, Amount: {{get-report.Total}} {{get-report.CurrencyCode}}, Violation: {{get-report.PolicyViolation}}'
      - name: notify-manager
        type: call
        call: msteams.send-chat-message
        with:
          user_id: '{{get-report.ApproverEmail}}'
          text: 'Expense policy violation on report {{report_id}} by {{get-report.OwnerName}}: {{get-report.PolicyViolation}}. Amount: {{get-report.Total}} {{get-report.CurrencyCode}}. Compliance ticket: {{create-compliance-ticket.number}}'
  consumes:
  - type: http
    namespace: concur
    baseUri: https://us.api.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: expense-reports
      path: /expense/reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-expense-report
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://deloitte.service-now.com/api/now
    authentication:
      type: 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: chats
      path: /users/{{user_id}}/chats/messages
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: send-chat-message
        method: POST
Open in Framework → View in Fleet → expense-policy-violation-handler.yml

Retrieves deal details from HubSpot by deal ID, returning the deal name, stage, amount, and close date.

naftiko: '0.5'
info:
  label: HubSpot Deal Lookup
  description: Retrieves deal details from HubSpot by deal ID, returning the deal name, stage, amount, and close date.
  tags:
  - sales
  - crm
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: crm-deals
    port: 8080
    tools:
    - name: get-deal
      description: Given a HubSpot deal ID, return the deal name, pipeline stage, amount, and expected close date.
      inputParameters:
      - name: deal_id
        in: body
        type: string
        description: HubSpot deal ID.
      call: hubspot.get-deal
      with:
        deal_id: '{{deal_id}}'
      outputParameters:
      - name: deal_name
        type: string
        mapping: $.properties.dealname
      - name: stage
        type: string
        mapping: $.properties.dealstage
      - name: amount
        type: string
        mapping: $.properties.amount
      - name: close_date
        type: string
        mapping: $.properties.closedate
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: deals
      path: /objects/deals/{{deal_id}}
      inputParameters:
      - name: deal_id
        in: path
      operations:
      - name: get-deal
        method: GET
Open in Framework → View in Fleet → hubspot-deal-lookup.yml

Checks the ServiceNow change calendar for a specified date range to identify scheduled changes and potential conflicts.

naftiko: '0.5'
info:
  label: ServiceNow Change Calendar Check
  description: Checks the ServiceNow change calendar for a specified date range to identify scheduled changes and potential conflicts.
  tags:
  - it
  - change-management
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: change-calendar
    port: 8080
    tools:
    - name: check-change-calendar
      description: Given a date range, return all scheduled changes from ServiceNow to identify conflicts.
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: Start date (ISO 8601).
      - name: end_date
        in: body
        type: string
        description: End date (ISO 8601).
      call: servicenow.get-changes
      with:
        start: '{{start_date}}'
        end: '{{end_date}}'
      outputParameters:
      - name: changes
        type: array
        mapping: $.result
      - name: count
        type: integer
        mapping: $.result.length
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://deloitte.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request?sysparm_query=start_dateBETWEEN{{start}}@{{end}}
      inputParameters:
      - name: start
        in: query
      - name: end
        in: query
      operations:
      - name: get-changes
        method: GET
Open in Framework → View in Fleet → servicenow-change-calendar-check.yml

Retrieves the current time off balance for an employee from Workday, including vacation, sick, and personal days remaining.

naftiko: '0.5'
info:
  label: Workday Time Off Balance Lookup
  description: Retrieves the current time off balance for an employee from Workday, including vacation, sick, and personal days remaining.
  tags:
  - hr
  - time-off
  - workday
capability:
  exposes:
  - type: mcp
    namespace: hr-timeoff
    port: 8080
    tools:
    - name: get-time-off-balance
      description: Given a Workday employee ID, return their remaining vacation, sick, and personal time off balances.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      call: workday.get-timeoff-balance
      with:
        worker_id: '{{employee_id}}'
      outputParameters:
      - name: vacation_balance
        type: number
        mapping: $.timeOffBalances[0].balance
      - name: sick_balance
        type: number
        mapping: $.timeOffBalances[1].balance
      - name: personal_balance
        type: number
        mapping: $.timeOffBalances[2].balance
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: timeoff
      path: /workers/{{worker_id}}/timeOffBalances
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-timeoff-balance
        method: GET
Open in Framework → View in Fleet → workday-time-off-balance-lookup.yml

When a new vendor is approved, creates the vendor master in SAP, sets up a Salesforce partner account, creates a ServiceNow request, and notifies procurement via Teams.

naftiko: '0.5'
info:
  label: Vendor Onboarding Orchestration
  description: When a new vendor is approved, creates the vendor master in SAP, sets up a Salesforce partner account, creates a ServiceNow request, and notifies procurement via Teams.
  tags:
  - procurement
  - vendor-management
  - sap
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: procurement-onboarding
    port: 8080
    tools:
    - name: onboard-vendor
      description: Given vendor details, create vendor master records across SAP and Salesforce, open a ServiceNow ticket, and notify procurement.
      inputParameters:
      - name: vendor_name
        in: body
        type: string
        description: Vendor company name.
      - name: vendor_tax_id
        in: body
        type: string
        description: Vendor tax identification number.
      - name: payment_terms
        in: body
        type: string
        description: Payment terms code.
      steps:
      - name: create-sap-vendor
        type: call
        call: sap.create-supplier
        with:
          SupplierName: '{{vendor_name}}'
          TaxNumber1: '{{vendor_tax_id}}'
          PaymentTerms: '{{payment_terms}}'
      - name: create-sf-partner
        type: call
        call: salesforce.create-account
        with:
          Name: '{{vendor_name}}'
          Type: Partner
          TaxId__c: '{{vendor_tax_id}}'
      - name: create-snow-request
        type: call
        call: servicenow.create-request
        with:
          short_description: 'Vendor onboarding: {{vendor_name}}'
          category: procurement
          assigned_group: Vendor_Management
      - name: notify-procurement
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.procurement_team_id
          channel_id: $secrets.procurement_channel_id
          text: 'New vendor onboarded: {{vendor_name}}. SAP: {{create-sap-vendor.SupplierNumber}}, Salesforce: {{create-sf-partner.id}}, SNOW: {{create-snow-request.number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://deloitte-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: suppliers
      path: /A_Supplier
      operations:
      - name: create-supplier
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://deloitte.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account
      operations:
      - name: create-account
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://deloitte.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → vendor-onboarding-orchestration.yml

Lists objects in an S3 bucket with a given prefix, returning object keys, sizes, and last modified dates for data governance reviews.

naftiko: '0.5'
info:
  label: Amazon S3 Bucket Inventory
  description: Lists objects in an S3 bucket with a given prefix, returning object keys, sizes, and last modified dates for data governance reviews.
  tags:
  - cloud
  - storage
  - amazon-s3
capability:
  exposes:
  - type: mcp
    namespace: cloud-storage
    port: 8080
    tools:
    - name: list-bucket-objects
      description: Given an S3 bucket name and prefix, return the list of objects with size and modification date.
      inputParameters:
      - name: bucket_name
        in: body
        type: string
        description: S3 bucket name.
      - name: prefix
        in: body
        type: string
        description: Object key prefix to filter.
      call: s3.list-objects
      with:
        bucket: '{{bucket_name}}'
        prefix: '{{prefix}}'
      outputParameters:
      - name: objects
        type: array
        mapping: $.Contents
      - name: count
        type: integer
        mapping: $.KeyCount
  consumes:
  - type: http
    namespace: s3
    baseUri: https://{{bucket}}.s3.amazonaws.com
    authentication:
      type: aws-sigv4
      accessKeyId: $secrets.aws_access_key
      secretAccessKey: $secrets.aws_secret_key
    resources:
    - name: objects
      path: /?list-type=2&prefix={{prefix}}
      inputParameters:
      - name: bucket
        in: host
      - name: prefix
        in: query
      operations:
      - name: list-objects
        method: GET
Open in Framework → View in Fleet → amazon-s3-bucket-inventory.yml

Monitors ServiceNow tickets for SLA breaches and escalates overdue tickets by updating priority and notifying the IT service delivery manager in Microsoft Teams.

naftiko: '0.5'
info:
  label: ServiceNow SLA Breach Escalation
  description: Monitors ServiceNow tickets for SLA breaches and escalates overdue tickets by updating priority and notifying the IT service delivery manager in Microsoft Teams.
  tags:
  - itsm
  - sla
  - servicenow
  - microsoft-teams
  - escalation
capability:
  exposes:
  - type: mcp
    namespace: sla-management
    port: 8080
    tools:
    - name: escalate-sla-breach
      description: Given a ServiceNow incident number that has breached its SLA and breach duration, update the ticket priority and notify the IT service delivery manager in Microsoft Teams.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number that has breached its SLA.
      - name: breach_minutes
        in: body
        type: integer
        description: Number of minutes the SLA has been exceeded.
      - name: it_manager_upn
        in: body
        type: string
        description: Microsoft 365 UPN of the IT service delivery manager.
      steps:
      - name: escalate-ticket
        type: call
        call: servicenow.update-incident
        with:
          number: '{{incident_number}}'
          priority: 1
          assigned_group: IT_Service_Delivery
          work_notes: SLA breached by {{breach_minutes}} minutes. Escalated to service delivery.
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{it_manager_upn}}'
          text: 'SLA breach: {{incident_number}} is {{breach_minutes}}min overdue. Priority escalated and reassigned.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://deloitte.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident/{{number}}
      inputParameters:
      - name: number
        in: path
      operations:
      - name: update-incident
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → servicenow-sla-breach-escalation.yml

Triggers a refresh of a specified Power BI dataset to update reports with the latest data from source systems.

naftiko: '0.5'
info:
  label: Power BI Dataset Refresh Trigger
  description: Triggers a refresh of a specified Power BI dataset to update reports with the latest data from source systems.
  tags:
  - analytics
  - reporting
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: analytics-powerbi
    port: 8080
    tools:
    - name: refresh-dataset
      description: Trigger a refresh for a Power BI dataset by dataset ID.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset ID to refresh.
      - name: group_id
        in: body
        type: string
        description: Power BI workspace (group) ID.
      call: powerbi.refresh-dataset
      with:
        group_id: '{{group_id}}'
        dataset_id: '{{dataset_id}}'
      outputParameters:
      - name: request_id
        type: string
        mapping: $.requestId
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /groups/{{group_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: group_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → power-bi-dataset-refresh-trigger.yml

Retrieves contact details from Salesforce by email address, returning the contact name, account, title, and phone number.

naftiko: '0.5'
info:
  label: Salesforce Contact Lookup
  description: Retrieves contact details from Salesforce by email address, returning the contact name, account, title, and phone number.
  tags:
  - sales
  - crm
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: crm-contacts
    port: 8080
    tools:
    - name: get-contact-by-email
      description: Given an email address, look up the Salesforce contact and return name, account, title, and phone.
      inputParameters:
      - name: email
        in: body
        type: string
        description: Email address of the contact to look up.
      call: salesforce.query-contact
      with:
        email: '{{email}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.records[0].Name
      - name: account
        type: string
        mapping: $.records[0].Account.Name
      - name: title
        type: string
        mapping: $.records[0].Title
      - name: phone
        type: string
        mapping: $.records[0].Phone
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://deloitte.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /query?q=SELECT+Name,Account.Name,Title,Phone+FROM+Contact+WHERE+Email='{{email}}'
      inputParameters:
      - name: email
        in: query
      operations:
      - name: query-contact
        method: GET
Open in Framework → View in Fleet → salesforce-contact-lookup.yml

When GitHub code scanning detects a critical vulnerability, creates a ServiceNow security incident and notifies the cybersecurity team in Microsoft Teams.

naftiko: '0.5'
info:
  label: GitHub Security Vulnerability Triage
  description: When GitHub code scanning detects a critical vulnerability, creates a ServiceNow security incident and notifies the cybersecurity team in Microsoft Teams.
  tags:
  - security
  - devops
  - github
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: security-triage
    port: 8080
    tools:
    - name: triage-security-vulnerability
      description: Given a GitHub repository, CVE ID, and severity, create a ServiceNow security incident and alert the cybersecurity Microsoft Teams channel for immediate triage and remediation.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: GitHub repository containing the vulnerable dependency.
      - name: vulnerability_id
        in: body
        type: string
        description: CVE or GitHub advisory ID for the vulnerability.
      - name: severity
        in: body
        type: string
        description: 'Severity level: critical, high, medium, or low.'
      - name: package_name
        in: body
        type: string
        description: Affected dependency package name.
      steps:
      - name: create-security-incident
        type: call
        call: servicenow.create-incident
        with:
          category: security_vulnerability
          impact: 1
          urgency: 1
          short_description: '{{severity}} vulnerability {{vulnerability_id}} in {{repo_name}}: {{package_name}}'
          assigned_group: Cybersecurity
      - name: alert-security-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_security_team_id
          channel_id: $secrets.teams_security_channel_id
          text: '{{severity}} vulnerability: {{vulnerability_id}} in {{repo_name}} ({{package_name}}) | SNOW: {{create-security-incident.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://deloitte.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → github-security-vulnerability-triage.yml

When a critical security alert fires in Splunk, creates a ServiceNow incident, pages the on-call engineer via PagerDuty, and posts to the security Teams channel.

naftiko: '0.5'
info:
  label: Security Incident Escalation Workflow
  description: When a critical security alert fires in Splunk, creates a ServiceNow incident, pages the on-call engineer via PagerDuty, and posts to the security Teams channel.
  tags:
  - security
  - incident-response
  - splunk
  - servicenow
  - pagerduty
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: security-escalation
    port: 8080
    tools:
    - name: escalate-security-incident
      description: Given a Splunk alert ID, create a ServiceNow incident, page on-call, and notify the security team in Teams.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: Splunk alert ID triggering the escalation.
      - name: severity
        in: body
        type: string
        description: Incident severity (P1, P2, P3).
      steps:
      - name: get-alert
        type: call
        call: splunk.get-alert
        with:
          alert_id: '{{alert_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Security Alert: {{get-alert.title}}'
          category: security_incident
          priority: '{{severity}}'
          description: '{{get-alert.description}}'
      - name: page-oncall
        type: call
        call: pagerduty.create-incident
        with:
          service_id: $secrets.pagerduty_security_service_id
          title: 'Security Alert: {{get-alert.title}}'
          urgency: high
      - name: notify-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.security_team_id
          channel_id: $secrets.security_incidents_channel_id
          text: 'SECURITY ALERT [{{severity}}]: {{get-alert.title}}. SNOW: {{create-incident.number}}, PagerDuty: {{page-oncall.incident.id}}'
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.deloitte.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: alerts
      path: /alerts/fired_alerts/{{alert_id}}
      inputParameters:
      - name: alert_id
        in: path
      operations:
      - name: get-alert
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://deloitte.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → security-incident-escalation-workflow.yml

Compares actual IT spend from Azure Cost Management and SAP against planned budget in Snowflake, generates a variance report in Confluence, and alerts finance leadership.

naftiko: '0.5'
info:
  label: IT Budget Variance Analysis Orchestration
  description: Compares actual IT spend from Azure Cost Management and SAP against planned budget in Snowflake, generates a variance report in Confluence, and alerts finance leadership.
  tags:
  - finance
  - it
  - microsoft-azure
  - sap
  - snowflake
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: it-budgets
    port: 8080
    tools:
    - name: analyze-budget-variance
      description: Compare actual IT cloud and ERP spend against budget and publish variance analysis.
      inputParameters:
      - name: fiscal_month
        in: body
        type: string
        description: Fiscal month to analyze.
      steps:
      - name: get-cloud-spend
        type: call
        call: azure.get-cost
        with:
          subscription: $secrets.azure_subscription_id
          rg: all
      - name: get-budget
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT * FROM finance.it_budget WHERE fiscal_month = '{{fiscal_month}}'
          warehouse: FINANCE_WH
      - name: publish-report
        type: call
        call: confluence.create-page
        with:
          spaceKey: FINANCE
          title: IT Budget Variance - {{fiscal_month}}
          body: 'Cloud spend: {{get-cloud-spend.total_cost}}, Budget: {{get-budget.data[0][1]}}'
      - name: alert-leadership
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.finance_team_id
          channel_id: $secrets.it_finance_channel_id
          text: 'IT budget variance analysis for {{fiscal_month}} published. Report: {{publish-report.url}}'
  consumes:
  - type: http
    namespace: azure
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: cost-management
      path: /subscriptions/{{subscription}}/providers/Microsoft.CostManagement/query?api-version=2023-03-01
      inputParameters:
      - name: subscription
        in: path
      operations:
      - name: get-cost
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://deloitte.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://deloitte.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/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → it-budget-variance-analysis-orchestration.yml

When an employee's role changes in Workday, updates their Microsoft 365 security group memberships and creates a ServiceNow access review task for IT security to validate the changes.

naftiko: '0.5'
info:
  label: Microsoft 365 User Role Change Provisioning
  description: When an employee's role changes in Workday, updates their Microsoft 365 security group memberships and creates a ServiceNow access review task for IT security to validate the changes.
  tags:
  - hr
  - access-management
  - workday
  - microsoft-365
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: access-provisioning
    port: 8080
    tools:
    - name: reprovision-role-access
      description: Given a Workday employee ID, old and new Microsoft 365 group IDs, update the user's group memberships and create a ServiceNow access review task for IT security validation.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: Workday worker ID of the employee changing roles.
      - name: upn
        in: body
        type: string
        description: Microsoft 365 UPN of the employee.
      - name: old_group_id
        in: body
        type: string
        description: Microsoft 365 group ID to remove the user from.
      - name: new_group_id
        in: body
        type: string
        description: Microsoft 365 group ID to add the user to.
      - name: new_role_title
        in: body
        type: string
        description: New job title for context in the access review task.
      steps:
      - name: remove-old-group
        type: call
        call: msgraph.remove-group-member
        with:
          group_id: '{{old_group_id}}'
          user_id: '{{upn}}'
      - name: add-new-group
        type: call
        call: msgraph-new.add-group-member
        with:
          group_id: '{{new_group_id}}'
          user_id: '{{upn}}'
      - name: create-access-review
        type: call
        call: servicenow.create-task
        with:
          category: access_review
          short_description: 'Access review: {{upn}} role change to {{new_role_title}}'
          assigned_group: IT_Security
  consumes:
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: group-members
      path: /groups/{{group_id}}/members/{{user_id}}/$ref
      inputParameters:
      - name: group_id
        in: path
      - name: user_id
        in: path
      operations:
      - name: remove-group-member
        method: DELETE
  - type: http
    namespace: msgraph-new
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: group-members
      path: /groups/{{group_id}}/members/$ref
      inputParameters:
      - name: group_id
        in: path
      operations:
      - name: add-group-member
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://deloitte.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → microsoft-365-user-role-change-provisioning.yml

Orchestrates the quarterly financial close by verifying SAP period status, triggering Snowflake reconciliation queries, refreshing Power BI dashboards, and posting the summary to Teams.

naftiko: '0.5'
info:
  label: Quarterly Financial Close Checklist
  description: Orchestrates the quarterly financial close by verifying SAP period status, triggering Snowflake reconciliation queries, refreshing Power BI dashboards, and posting the summary to Teams.
  tags:
  - finance
  - accounting
  - sap
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finance-close
    port: 8080
    tools:
    - name: run-quarterly-close
      description: Execute the quarterly financial close checklist including SAP period check, data reconciliation, and dashboard refresh.
      inputParameters:
      - name: fiscal_period
        in: body
        type: string
        description: Fiscal period to close (e.g., 2026-Q1).
      - name: company_code
        in: body
        type: string
        description: SAP company code.
      steps:
      - name: check-sap-period
        type: call
        call: sap.get-period-status
        with:
          company_code: '{{company_code}}'
          period: '{{fiscal_period}}'
      - name: run-reconciliation
        type: call
        call: snowflake.execute-query
        with:
          statement: CALL finance.reconciliation_check('{{fiscal_period}}', '{{company_code}}')
          warehouse: FINANCE_WH
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          group_id: $secrets.finance_workspace_id
          dataset_id: $secrets.finance_close_dataset_id
      - name: post-summary
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.finance_team_id
          channel_id: $secrets.finance_close_channel_id
          text: 'Q close checklist for {{fiscal_period}}: SAP period {{check-sap-period.status}}, Reconciliation rows: {{run-reconciliation.row_count}}, Dashboard refresh triggered.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://deloitte-s4.sap.com/sap/opu/odata/sap/API_FINANCIALPERIOD
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: periods
      path: /A_FinancialPeriod(CompanyCode='{{company_code}}',FiscalPeriod='{{period}}')
      inputParameters:
      - name: company_code
        in: path
      - name: period
        in: path
      operations:
      - name: get-period-status
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://deloitte.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /groups/{{group_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: group_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → quarterly-financial-close-checklist.yml

Analyzes client engagement data in Salesforce, enriches with ZoomInfo firmographics, identifies cross-sell opportunities in Snowflake, and creates Salesforce opportunities for the account team.

naftiko: '0.5'
info:
  label: Cross-sell Opportunity Detection Workflow
  description: Analyzes client engagement data in Salesforce, enriches with ZoomInfo firmographics, identifies cross-sell opportunities in Snowflake, and creates Salesforce opportunities for the account team.
  tags:
  - sales
  - analytics
  - salesforce
  - zoominfo
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: sales-crosssell
    port: 8080
    tools:
    - name: detect-cross-sell
      description: Given a Salesforce account ID, analyze data to identify cross-sell opportunities.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Salesforce account ID.
      steps:
      - name: get-account
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{account_id}}'
      - name: enrich-firmographics
        type: call
        call: zoominfo.enrich-company
        with:
          domain: '{{get-account.Website}}'
      - name: analyze-opportunities
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT * FROM sales.cross_sell_model WHERE industry = '{{enrich-firmographics.industry}}' AND employee_range = '{{enrich-firmographics.employee_count}}'
          warehouse: SALES_WH
      - name: create-opportunities
        type: call
        call: salesforce.create-opportunity
        with:
          AccountId: '{{account_id}}'
          Name: 'Cross-sell: {{get-account.Name}}'
          StageName: Prospecting
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://deloitte.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
    - name: opportunities
      path: /sobjects/Opportunity
      operations:
      - name: create-opportunity
        method: POST
  - type: http
    namespace: zoominfo
    baseUri: https://api.zoominfo.com
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: companies
      path: /enrich/company
      operations:
      - name: enrich-company
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://deloitte.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → cross-sell-opportunity-detection-workflow.yml

When Azure Cost Management detects a spending anomaly, annotates Datadog, creates a ServiceNow review incident, and alerts the FinOps Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Azure Cloud Cost Anomaly Response
  description: When Azure Cost Management detects a spending anomaly, annotates Datadog, creates a ServiceNow review incident, and alerts the FinOps Microsoft Teams channel.
  tags:
  - finops
  - cloud
  - azure
  - datadog
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: cloud-finops
    port: 8080
    tools:
    - name: handle-azure-cost-anomaly
      description: Given an Azure cost anomaly alert with service and overage amount, annotate Datadog, open a ServiceNow review incident, and notify the FinOps Microsoft Teams channel.
      inputParameters:
      - name: anomaly_id
        in: body
        type: string
        description: Azure cost anomaly ID.
      - name: azure_service
        in: body
        type: string
        description: Azure service with the anomalous spend.
      - name: estimated_overage_usd
        in: body
        type: number
        description: Estimated overage in USD.
      steps:
      - name: annotate-dd
        type: call
        call: datadog.create-event
        with:
          title: 'Azure Cost Anomaly: {{azure_service}}'
          text: 'Anomaly {{anomaly_id}} — overage: ${{estimated_overage_usd}}'
          alert_type: warning
      - name: open-snow-incident
        type: call
        call: servicenow.create-incident
        with:
          category: cloud_cost
          short_description: 'Azure cost anomaly: {{azure_service}} — ${{estimated_overage_usd}}'
          assigned_group: FinOps
      - name: notify-finops
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_finops_team_id
          channel_id: $secrets.teams_finops_channel_id
          text: 'Azure cost anomaly: {{azure_service}} | ${{estimated_overage_usd}} overage | SNOW: {{open-snow-incident.number}} | Datadog: {{annotate-dd.url}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://deloitte.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → azure-cloud-cost-anomaly-response.yml

Pulls engagement data from Salesforce, financial metrics from Workday, and project health from Jira to generate a risk assessment summary posted to the leadership Teams channel.

naftiko: '0.5'
info:
  label: Engagement Risk Assessment Workflow
  description: Pulls engagement data from Salesforce, financial metrics from Workday, and project health from Jira to generate a risk assessment summary posted to the leadership Teams channel.
  tags:
  - risk-management
  - consulting
  - salesforce
  - workday
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: risk-assessment
    port: 8080
    tools:
    - name: assess-engagement-risk
      description: Given a Salesforce opportunity ID, compile risk indicators from financial and project data and post an assessment.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID for the engagement.
      steps:
      - name: get-engagement
        type: call
        call: salesforce.get-opportunity
        with:
          opp_id: '{{opportunity_id}}'
      - name: get-financials
        type: call
        call: workday.get-project-financials
        with:
          project_id: '{{get-engagement.Project_Code__c}}'
      - name: get-project-health
        type: call
        call: jira.get-board-metrics
        with:
          board_id: '{{get-engagement.Jira_Board_Id__c}}'
      - name: post-assessment
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.leadership_team_id
          channel_id: $secrets.risk_channel_id
          text: 'Risk Assessment - {{get-engagement.Name}}: Revenue at {{get-financials.revenue_utilization}}%, Sprint velocity {{get-project-health.velocity}}, Budget variance {{get-financials.budget_variance}}%'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://deloitte.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opp_id}}
      inputParameters:
      - name: opp_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: project-financials
      path: /projects/{{project_id}}/financials
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-project-financials
        method: GET
  - type: http
    namespace: jira
    baseUri: https://deloitte.atlassian.net/rest/agile/1.0
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: boards
      path: /board/{{board_id}}/velocity
      inputParameters:
      - name: board_id
        in: path
      operations:
      - name: get-board-metrics
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → engagement-risk-assessment-workflow.yml

Submits a ServiceNow change request for a planned IT system change, assigns it to the CAB, and posts the request details to the IT governance Microsoft Teams channel.

naftiko: '0.5'
info:
  label: ServiceNow IT Change Request Workflow
  description: Submits a ServiceNow change request for a planned IT system change, assigns it to the CAB, and posts the request details to the IT governance Microsoft Teams channel.
  tags:
  - itsm
  - change-management
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: change-management
    port: 8080
    tools:
    - name: submit-change-request
      description: Given a change description, risk level, and planned maintenance window, create a ServiceNow change request for CAB approval and notify the IT governance Microsoft Teams channel.
      inputParameters:
      - name: short_description
        in: body
        type: string
        description: Brief description of the planned IT change.
      - name: change_type
        in: body
        type: string
        description: 'Type of change: standard, normal, or emergency.'
      - name: risk_level
        in: body
        type: string
        description: 'Risk level: low, medium, or high.'
      - name: planned_start
        in: body
        type: string
        description: Planned change start time in ISO 8601 format.
      - name: planned_end
        in: body
        type: string
        description: Planned change end time in ISO 8601 format.
      steps:
      - name: create-cr
        type: call
        call: servicenow.create-change-request
        with:
          type: '{{change_type}}'
          risk: '{{risk_level}}'
          short_description: '{{short_description}}'
          start_date: '{{planned_start}}'
          end_date: '{{planned_end}}'
      - name: notify-it-governance
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_it_governance_team_id
          channel_id: $secrets.teams_cab_channel_id
          text: 'Change request submitted: {{short_description}} | Type: {{change_type}} | Risk: {{risk_level}} | Window: {{planned_start}} to {{planned_end}} | SNOW: {{create-cr.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://deloitte.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-requests
      path: /table/change_request
      operations:
      - name: create-change-request
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → servicenow-it-change-request-workflow.yml

When a pull request is opened in GitHub, assigns reviewers based on code ownership, creates a Jira sub-task for review tracking, and posts to the engineering Teams channel.

naftiko: '0.5'
info:
  label: GitHub PR Review Assignment Workflow
  description: When a pull request is opened in GitHub, assigns reviewers based on code ownership, creates a Jira sub-task for review tracking, and posts to the engineering Teams channel.
  tags:
  - engineering
  - code-review
  - github
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: code-review
    port: 8080
    tools:
    - name: assign-pr-reviewers
      description: Given a GitHub PR number and repo, assign appropriate reviewers, create a Jira task, and notify the team.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository in org/repo format.
      - name: pr_number
        in: body
        type: integer
        description: Pull request number.
      steps:
      - name: get-pr
        type: call
        call: github.get-pull-request
        with:
          repo: '{{repo}}'
          pr_number: '{{pr_number}}'
      - name: request-review
        type: call
        call: github.request-reviewers
        with:
          repo: '{{repo}}'
          pr_number: '{{pr_number}}'
          reviewers: '{{get-pr.suggested_reviewers}}'
      - name: create-review-task
        type: call
        call: jira.create-issue
        with:
          project: ENG
          issuetype: Sub-task
          summary: 'Code review: PR #{{pr_number}} - {{get-pr.title}}'
      - name: notify-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.eng_team_id
          channel_id: $secrets.eng_pr_channel_id
          text: 'PR #{{pr_number}} in {{repo}}: {{get-pr.title}} by {{get-pr.user.login}}. Reviewers assigned. Jira: {{create-review-task.key}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: pulls
      path: /repos/{{repo}}/pulls/{{pr_number}}
      inputParameters:
      - name: repo
        in: path
      - name: pr_number
        in: path
      operations:
      - name: get-pull-request
        method: GET
    - name: reviewers
      path: /repos/{{repo}}/pulls/{{pr_number}}/requested_reviewers
      inputParameters:
      - name: repo
        in: path
      - name: pr_number
        in: path
      operations:
      - name: request-reviewers
        method: POST
  - type: http
    namespace: jira
    baseUri: https://deloitte.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → github-pr-review-assignment-workflow.yml

Reconciles client billing by comparing Workday project costs against Salesforce contract amounts, identifying variances in Snowflake, and alerting finance via Teams.

naftiko: '0.5'
info:
  label: Client Billing Reconciliation Workflow
  description: Reconciles client billing by comparing Workday project costs against Salesforce contract amounts, identifying variances in Snowflake, and alerting finance via Teams.
  tags:
  - finance
  - billing
  - workday
  - salesforce
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finance-billing
    port: 8080
    tools:
    - name: reconcile-billing
      description: Compare project costs and contract amounts to identify billing variances.
      inputParameters:
      - name: project_code
        in: body
        type: string
        description: Project code to reconcile.
      steps:
      - name: get-project-costs
        type: call
        call: workday.get-project-financials
        with:
          project_id: '{{project_code}}'
      - name: get-contract
        type: call
        call: salesforce.get-contract
        with:
          project_code: '{{project_code}}'
      - name: run-variance
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT calculate_billing_variance('{{project_code}}', {{get-project-costs.total_cost}}, {{get-contract.Amount}})
          warehouse: FINANCE_WH
      - name: alert-finance
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.finance_team_id
          channel_id: $secrets.billing_channel_id
          text: 'Billing reconciliation for {{project_code}}: Costs={{get-project-costs.total_cost}}, Contract={{get-contract.Amount}}, Variance analysis complete.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: project-financials
      path: /projects/{{project_id}}/financials
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-project-financials
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://deloitte.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contracts
      path: /query?q=SELECT+Id,Amount+FROM+Contract+WHERE+Project_Code__c='{{project_code}}'
      inputParameters:
      - name: project_code
        in: query
      operations:
      - name: get-contract
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://deloitte.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → client-billing-reconciliation-workflow.yml

Checks the SAP HANA system replication status and alerts operations if replication lag exceeds threshold, creating a ServiceNow incident.

naftiko: '0.5'
info:
  label: SAP HANA Data Replication Monitor
  description: Checks the SAP HANA system replication status and alerts operations if replication lag exceeds threshold, creating a ServiceNow incident.
  tags:
  - data
  - database
  - sap-hana
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: data-replication
    port: 8080
    tools:
    - name: check-replication-status
      description: Check SAP HANA replication status and escalate if lagging.
      inputParameters:
      - name: hana_host
        in: body
        type: string
        description: SAP HANA host identifier.
      steps:
      - name: get-replication
        type: call
        call: saphana.get-replication-status
        with:
          host: '{{hana_host}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'HANA replication check: {{hana_host}}'
          category: database
          description: 'Replication status: {{get-replication.status}}, Lag: {{get-replication.lag_seconds}}s'
      - name: notify-ops
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.dba_team_id
          channel_id: $secrets.dba_alerts_channel_id
          text: 'HANA replication on {{hana_host}}: Status={{get-replication.status}}, Lag={{get-replication.lag_seconds}}s. SNOW: {{create-incident.number}}'
  consumes:
  - type: http
    namespace: saphana
    baseUri: https://deloitte-hana.sap.com/api/v1
    authentication:
      type: basic
      username: $secrets.sap_hana_user
      password: $secrets.sap_hana_password
    resources:
    - name: replication
      path: /system/replication/{{host}}
      inputParameters:
      - name: host
        in: path
      operations:
      - name: get-replication-status
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://deloitte.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → sap-hana-data-replication-monitor.yml

Retrieves website traffic summary from Google Analytics for a given date range, including sessions, page views, and bounce rate.

naftiko: '0.5'
info:
  label: Google Analytics Traffic Summary
  description: Retrieves website traffic summary from Google Analytics for a given date range, including sessions, page views, and bounce rate.
  tags:
  - marketing
  - analytics
  - google-analytics
capability:
  exposes:
  - type: mcp
    namespace: marketing-analytics
    port: 8080
    tools:
    - name: get-traffic-summary
      description: Given a GA property ID and date range, return sessions, page views, and bounce rate.
      inputParameters:
      - name: property_id
        in: body
        type: string
        description: Google Analytics 4 property ID.
      - name: start_date
        in: body
        type: string
        description: Report start date (YYYY-MM-DD).
      - name: end_date
        in: body
        type: string
        description: Report end date (YYYY-MM-DD).
      call: ga.run-report
      with:
        property_id: '{{property_id}}'
        startDate: '{{start_date}}'
        endDate: '{{end_date}}'
      outputParameters:
      - name: sessions
        type: string
        mapping: $.rows[0].metricValues[0].value
      - name: page_views
        type: string
        mapping: $.rows[0].metricValues[1].value
      - name: bounce_rate
        type: string
        mapping: $.rows[0].metricValues[2].value
  consumes:
  - type: http
    namespace: ga
    baseUri: https://analyticsdata.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: reports
      path: /properties/{{property_id}}:runReport
      inputParameters:
      - name: property_id
        in: path
      operations:
      - name: run-report
        method: POST
Open in Framework → View in Fleet → google-analytics-traffic-summary.yml

When a Salesforce client engagement opportunity reaches the Proposal stage, syncs the opportunity data to SAP for project code generation and notifies the engagement manager in Microsoft Teams.

naftiko: '0.5'
info:
  label: Client Engagement Opportunity Sync
  description: When a Salesforce client engagement opportunity reaches the Proposal stage, syncs the opportunity data to SAP for project code generation and notifies the engagement manager in Microsoft Teams.
  tags:
  - sales
  - crm
  - salesforce
  - sap
  - engagement-management
capability:
  exposes:
  - type: mcp
    namespace: engagement-ops
    port: 8080
    tools:
    - name: sync-engagement-to-sap
      description: Given a Salesforce opportunity ID that has reached the Proposal stage, create a SAP project code and update the Salesforce opportunity with the project reference, then notify the engagement manager in Teams.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID at Proposal stage.
      - name: engagement_manager_upn
        in: body
        type: string
        description: Microsoft 365 UPN of the engagement manager.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: create-project-code
        type: call
        call: sap.create-project
        with:
          description: '{{get-opportunity.name}}'
          client: '{{get-opportunity.account_name}}'
          planned_start: '{{get-opportunity.close_date}}'
      - name: update-opportunity
        type: call
        call: salesforce-update.update-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
          sap_project_code: '{{create-project-code.project_id}}'
      - name: notify-em
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{engagement_manager_upn}}'
          text: 'SAP project code created for {{get-opportunity.name}}: {{create-project-code.project_id}}. Opportunity updated in Salesforce.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://deloitte.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
  - type: http
    namespace: sap
    baseUri: https://deloitte-s4.sap.com/sap/opu/odata/sap/PS_PROJECT_MANAGEMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: projects
      path: /A_Project
      operations:
      - name: create-project
        method: POST
  - type: http
    namespace: salesforce-update
    baseUri: https://deloitte.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → client-engagement-opportunity-sync.yml

Triggers a SailPoint access certification campaign, pulls non-compliant users, creates ServiceNow remediation tickets, and notifies managers via Teams.

naftiko: '0.5'
info:
  label: SailPoint Access Certification Workflow
  description: Triggers a SailPoint access certification campaign, pulls non-compliant users, creates ServiceNow remediation tickets, and notifies managers via Teams.
  tags:
  - security
  - identity-governance
  - sailpoint
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: access-certification
    port: 8080
    tools:
    - name: run-access-certification
      description: Trigger an access certification campaign and handle non-compliant accounts.
      inputParameters:
      - name: campaign_name
        in: body
        type: string
        description: Name for the certification campaign.
      steps:
      - name: launch-campaign
        type: call
        call: sailpoint.create-campaign
        with:
          name: '{{campaign_name}}'
          type: MANAGER
      - name: get-violations
        type: call
        call: sailpoint.get-violations
        with:
          campaign_id: '{{launch-campaign.id}}'
      - name: create-remediation
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Access certification violations: {{campaign_name}}'
          category: security
          description: '{{get-violations.count}} non-compliant access entries found.'
      - name: notify-managers
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.security_team_id
          channel_id: $secrets.access_review_channel_id
          text: 'Access certification ''{{campaign_name}}'' complete. {{get-violations.count}} violations found. Remediation ticket: {{create-remediation.number}}'
  consumes:
  - type: http
    namespace: sailpoint
    baseUri: https://deloitte.api.identitynow.com/v3
    authentication:
      type: bearer
      token: $secrets.sailpoint_token
    resources:
    - name: campaigns
      path: /campaigns
      operations:
      - name: create-campaign
        method: POST
    - name: violations
      path: /campaigns/{{campaign_id}}/violations
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-violations
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://deloitte.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → sailpoint-access-certification-workflow.yml

Generates a weekly digest of open sales pipeline opportunities from Salesforce by stage and practice area, and posts the summary to the business development Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Salesforce Pipeline Opportunity Digest
  description: Generates a weekly digest of open sales pipeline opportunities from Salesforce by stage and practice area, and posts the summary to the business development Microsoft Teams channel.
  tags:
  - sales
  - crm
  - salesforce
  - reporting
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: bd-reporting
    port: 8080
    tools:
    - name: digest-pipeline-opportunities
      description: Given a Salesforce owner team ID and reporting period, query the open opportunity pipeline by stage and post a digest summary to the business development Microsoft Teams channel.
      inputParameters:
      - name: practice_area
        in: body
        type: string
        description: Practice area to filter opportunities (e.g. Consulting, Advisory, Audit).
      - name: report_date
        in: body
        type: string
        description: ISO 8601 date for the pipeline snapshot.
      steps:
      - name: query-pipeline
        type: call
        call: salesforce.query-opportunities
        with:
          q: SELECT StageName, COUNT(Id) as count, SUM(Amount) as total_value FROM Opportunity WHERE IsClosed = false AND Practice_Area__c = '{{practice_area}}' GROUP BY StageName
      - name: post-digest
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_bd_team_id
          channel_id: $secrets.teams_bd_channel_id
          text: 'Pipeline digest — {{practice_area}} as of {{report_date}}: {{query-pipeline.total}} open opportunities. Review in Salesforce for details.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://deloitte.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query
      inputParameters:
      - name: q
        in: query
      operations:
      - name: query-opportunities
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → salesforce-pipeline-opportunity-digest.yml

Retrieves vendor master data from SAP S/4HANA by vendor number, including company name, payment terms, and tax ID.

naftiko: '0.5'
info:
  label: SAP Vendor Master Lookup
  description: Retrieves vendor master data from SAP S/4HANA by vendor number, including company name, payment terms, and tax ID.
  tags:
  - procurement
  - finance
  - sap
capability:
  exposes:
  - type: mcp
    namespace: procurement-vendors
    port: 8080
    tools:
    - name: get-vendor
      description: Given a SAP vendor number, return the vendor company name, payment terms, and tax identification number.
      inputParameters:
      - name: vendor_number
        in: body
        type: string
        description: SAP vendor master number.
      call: sap.get-vendor
      with:
        vendor_id: '{{vendor_number}}'
      outputParameters:
      - name: company_name
        type: string
        mapping: $.d.SupplierName
      - name: payment_terms
        type: string
        mapping: $.d.PaymentTerms
      - name: tax_id
        type: string
        mapping: $.d.TaxNumber1
  consumes:
  - type: http
    namespace: sap
    baseUri: https://deloitte-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: suppliers
      path: /A_Supplier('{{vendor_id}}')
      inputParameters:
      - name: vendor_id
        in: path
      operations:
      - name: get-vendor
        method: GET
Open in Framework → View in Fleet → sap-vendor-master-lookup.yml

Takes a draft from Confluence, publishes it as a ServiceNow knowledge article, updates the Confluence page status, and announces it in the practice Teams channel.

naftiko: '0.5'
info:
  label: Knowledge Article Publishing Workflow
  description: Takes a draft from Confluence, publishes it as a ServiceNow knowledge article, updates the Confluence page status, and announces it in the practice Teams channel.
  tags:
  - knowledge-management
  - publishing
  - confluence
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: knowledge-publishing
    port: 8080
    tools:
    - name: publish-knowledge-article
      description: Given a Confluence page ID, publish its content as a ServiceNow knowledge article and notify the team.
      inputParameters:
      - name: confluence_page_id
        in: body
        type: string
        description: Confluence page ID containing the draft article.
      - name: knowledge_base
        in: body
        type: string
        description: ServiceNow knowledge base to publish to.
      steps:
      - name: get-draft
        type: call
        call: confluence.get-page
        with:
          page_id: '{{confluence_page_id}}'
      - name: publish-to-snow
        type: call
        call: servicenow.create-kb-article
        with:
          short_description: '{{get-draft.title}}'
          text: '{{get-draft.body.storage.value}}'
          kb_knowledge_base: '{{knowledge_base}}'
      - name: update-confluence
        type: call
        call: confluence.update-page-label
        with:
          page_id: '{{confluence_page_id}}'
          label: published-to-snow
      - name: announce
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.knowledge_team_id
          channel_id: $secrets.knowledge_channel_id
          text: 'New knowledge article published: {{get-draft.title}}. ServiceNow: {{publish-to-snow.number}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://deloitte.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content/{{page_id}}?expand=body.storage
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: get-page
        method: GET
    - name: labels
      path: /content/{{page_id}}/label
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: update-page-label
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://deloitte.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: kb-articles
      path: /table/kb_knowledge
      operations:
      - name: create-kb-article
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → knowledge-article-publishing-workflow.yml

Retrieves general ledger account balances from Oracle Cloud for a given period and company code.

naftiko: '0.5'
info:
  label: Oracle GL Balance Lookup
  description: Retrieves general ledger account balances from Oracle Cloud for a given period and company code.
  tags:
  - finance
  - accounting
  - oracle
capability:
  exposes:
  - type: mcp
    namespace: finance-gl
    port: 8080
    tools:
    - name: get-gl-balance
      description: Given an Oracle ledger ID and accounting period, return the GL account balance.
      inputParameters:
      - name: ledger_id
        in: body
        type: string
        description: Oracle general ledger ID.
      - name: period_name
        in: body
        type: string
        description: Accounting period name.
      call: oracle.get-balance
      with:
        ledger_id: '{{ledger_id}}'
        period: '{{period_name}}'
      outputParameters:
      - name: balance
        type: string
        mapping: $.items[0].balance
      - name: currency
        type: string
        mapping: $.items[0].currencyCode
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://deloitte.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: gl-balances
      path: /glBalances?q=LedgerId={{ledger_id}};AccountingPeriod={{period}}
      inputParameters:
      - name: ledger_id
        in: query
      - name: period
        in: query
      operations:
      - name: get-balance
        method: GET
Open in Framework → View in Fleet → oracle-gl-balance-lookup.yml

Syncs talent pipeline data from LinkedIn Recruiter to Workday Recruiting, creates a Jira intake ticket, and posts a weekly digest to the HR Teams channel.

naftiko: '0.5'
info:
  label: Talent Acquisition Pipeline Sync
  description: Syncs talent pipeline data from LinkedIn Recruiter to Workday Recruiting, creates a Jira intake ticket, and posts a weekly digest to the HR Teams channel.
  tags:
  - hr
  - recruiting
  - linkedin
  - workday
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: talent-pipeline
    port: 8080
    tools:
    - name: sync-talent-pipeline
      description: Pull candidate data from LinkedIn, sync to Workday Recruiting, create intake tickets, and post digest.
      inputParameters:
      - name: job_posting_id
        in: body
        type: string
        description: LinkedIn job posting ID.
      - name: workday_requisition_id
        in: body
        type: string
        description: Workday job requisition ID.
      steps:
      - name: get-linkedin-candidates
        type: call
        call: linkedin.get-applicants
        with:
          job_id: '{{job_posting_id}}'
      - name: sync-to-workday
        type: call
        call: workday.create-candidates
        with:
          requisition_id: '{{workday_requisition_id}}'
          candidates: '{{get-linkedin-candidates.elements}}'
      - name: create-intake-ticket
        type: call
        call: jira.create-issue
        with:
          project: TALENT
          issuetype: Task
          summary: Review {{get-linkedin-candidates.total}} new candidates for req {{workday_requisition_id}}
      - name: post-digest
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.hr_team_id
          channel_id: $secrets.recruiting_channel_id
          text: 'Talent pipeline sync: {{get-linkedin-candidates.total}} candidates from LinkedIn synced to Workday req {{workday_requisition_id}}. Intake: {{create-intake-ticket.key}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: applicants
      path: /jobPostings/{{job_id}}/applicants
      inputParameters:
      - name: job_id
        in: path
      operations:
      - name: get-applicants
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: candidates
      path: /recruiting/candidates/bulk
      operations:
      - name: create-candidates
        method: POST
  - type: http
    namespace: jira
    baseUri: https://deloitte.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → talent-acquisition-pipeline-sync.yml

Retrieves the currently on-call engineer for a Deloitte IT service from PagerDuty for use at the start of incident response workflows.

naftiko: '0.5'
info:
  label: PagerDuty On-Call Roster Lookup
  description: Retrieves the currently on-call engineer for a Deloitte IT service from PagerDuty for use at the start of incident response workflows.
  tags:
  - incident-response
  - operations
  - pagerduty
  - on-call
capability:
  exposes:
  - type: mcp
    namespace: oncall-lookup
    port: 8080
    tools:
    - name: get-current-oncall
      description: Given a PagerDuty schedule ID, return the name and email of the current on-call engineer. Use at the beginning of incident response workflows to identify the right engineer to engage.
      inputParameters:
      - name: schedule_id
        in: body
        type: string
        description: PagerDuty schedule ID for the service's on-call rotation.
      call: pagerduty.get-oncall
      with:
        schedule_id: '{{schedule_id}}'
      outputParameters:
      - name: user_name
        type: string
        mapping: $.oncalls[0].user.name
      - name: user_email
        type: string
        mapping: $.oncalls[0].user.email
  consumes:
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_api_key
      placement: header
    resources:
    - name: oncalls
      path: /oncalls
      inputParameters:
      - name: schedule_id
        in: query
      operations:
      - name: get-oncall
        method: GET
Open in Framework → View in Fleet → pagerduty-on-call-roster-lookup.yml

When a new case is created in Salesforce Service Cloud, enriches it with account data, assigns to the appropriate queue, creates a ServiceNow shadow ticket, and notifies the support team.

naftiko: '0.5'
info:
  label: Salesforce Service Cloud Case Routing
  description: When a new case is created in Salesforce Service Cloud, enriches it with account data, assigns to the appropriate queue, creates a ServiceNow shadow ticket, and notifies the support team.
  tags:
  - support
  - case-management
  - salesforce-service-cloud
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: support-routing
    port: 8080
    tools:
    - name: route-service-case
      description: Given a Salesforce case ID, enrich with account data, route to queue, create shadow ticket, and notify.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: Salesforce case ID.
      steps:
      - name: get-case
        type: call
        call: salesforce.get-case
        with:
          case_id: '{{case_id}}'
      - name: create-shadow-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'SF Case: {{get-case.Subject}}'
          category: '{{get-case.Type}}'
          description: 'Account: {{get-case.Account.Name}}, Priority: {{get-case.Priority}}'
      - name: notify-support
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.support_team_id
          channel_id: $secrets.support_cases_channel_id
          text: 'New case: {{get-case.Subject}} from {{get-case.Account.Name}}. Priority: {{get-case.Priority}}. SNOW shadow: {{create-shadow-ticket.number}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://deloitte.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case/{{case_id}}
      inputParameters:
      - name: case_id
        in: path
      operations:
      - name: get-case
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://deloitte.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → salesforce-service-cloud-case-routing.yml

Checks the status of a Databricks job run by run ID, returning the current state, start time, and duration.

naftiko: '0.5'
info:
  label: Databricks Job Run Status
  description: Checks the status of a Databricks job run by run ID, returning the current state, start time, and duration.
  tags:
  - data-engineering
  - analytics
  - databricks
capability:
  exposes:
  - type: mcp
    namespace: data-jobs
    port: 8080
    tools:
    - name: get-run-status
      description: Given a Databricks run ID, return the run state, start time, and execution duration.
      inputParameters:
      - name: run_id
        in: body
        type: string
        description: Databricks job run ID.
      call: databricks.get-run
      with:
        run_id: '{{run_id}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.state.life_cycle_state
      - name: result_state
        type: string
        mapping: $.state.result_state
      - name: start_time
        type: string
        mapping: $.start_time
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://deloitte.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: runs
      path: /jobs/runs/get?run_id={{run_id}}
      inputParameters:
      - name: run_id
        in: query
      operations:
      - name: get-run
        method: GET
Open in Framework → View in Fleet → databricks-job-run-status.yml

When a new headcount requisition is approved in Workday, creates a Jira recruiting task and notifies the talent acquisition team in Microsoft Teams to start the hiring process.

naftiko: '0.5'
info:
  label: Workday Position Approval for Recruiting
  description: When a new headcount requisition is approved in Workday, creates a Jira recruiting task and notifies the talent acquisition team in Microsoft Teams to start the hiring process.
  tags:
  - hr
  - recruiting
  - workday
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: recruiting
    port: 8080
    tools:
    - name: activate-recruiting-position
      description: Given a Workday position requisition ID, job title, and practice area, create a Jira recruiting task and notify the talent acquisition Microsoft Teams channel to begin sourcing.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: Workday position requisition ID.
      - name: job_title
        in: body
        type: string
        description: Job title for the open position.
      - name: practice_area
        in: body
        type: string
        description: Deloitte practice area requesting the headcount.
      steps:
      - name: create-recruiting-task
        type: call
        call: jira.create-issue
        with:
          project_key: HR
          issuetype: Task
          summary: 'Recruiting: {{job_title}} — {{practice_area}}'
          description: Position requisition {{requisition_id}} approved. Begin sourcing for {{job_title}} in {{practice_area}}.
      - name: notify-ta-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_hr_team_id
          channel_id: $secrets.teams_ta_channel_id
          text: 'New position to fill: {{job_title}} in {{practice_area}} | Jira: {{create-recruiting-task.key}} | Workday req: {{requisition_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://deloitte.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → workday-position-approval-for-recruiting.yml

Runs row count and null rate data quality checks on core Snowflake reporting tables and creates a Jira data quality bug when tables fail validation thresholds.

naftiko: '0.5'
info:
  label: Snowflake Data Quality Check
  description: Runs row count and null rate data quality checks on core Snowflake reporting tables and creates a Jira data quality bug when tables fail validation thresholds.
  tags:
  - data
  - analytics
  - snowflake
  - jira
  - data-quality
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: run-data-quality-check
      description: Given a Snowflake table name, expected minimum row count, and check date, run the validation and open a Jira bug if the table fails the quality threshold.
      inputParameters:
      - name: table_name
        in: body
        type: string
        description: Fully qualified Snowflake table name (e.g. PROD.BILLING.ENGAGEMENT_REVENUE).
      - name: expected_min_rows
        in: body
        type: integer
        description: Minimum expected row count for the quality check to pass.
      - name: check_date
        in: body
        type: string
        description: ISO 8601 date for the data partition being checked.
      steps:
      - name: check-row-count
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT COUNT(*) as row_count FROM {{table_name}} WHERE DATE(created_at) = '{{check_date}}'
      - name: raise-quality-bug
        type: call
        call: jira.create-issue
        with:
          project_key: DATA
          issuetype: Bug
          summary: 'Data quality failure: {{table_name}} on {{check_date}}'
          description: 'Row count: {{check-row-count.row_count}}, below minimum {{expected_min_rows}} for date {{check_date}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://deloitte.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://deloitte.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → snowflake-data-quality-check.yml

When Okta detects a suspicious login event, fetches user details, suspends the account, creates a security incident in ServiceNow, and alerts the security team.

naftiko: '0.5'
info:
  label: Okta Suspicious Login Response
  description: When Okta detects a suspicious login event, fetches user details, suspends the account, creates a security incident in ServiceNow, and alerts the security team.
  tags:
  - security
  - identity
  - okta
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: security-identity
    port: 8080
    tools:
    - name: respond-to-suspicious-login
      description: Given an Okta event ID for a suspicious login, suspend the user, create an incident, and notify security.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: Okta system log event ID.
      - name: user_id
        in: body
        type: string
        description: Okta user ID of the affected account.
      steps:
      - name: get-user
        type: call
        call: okta.get-user
        with:
          email: '{{user_id}}'
      - name: suspend-user
        type: call
        call: okta.suspend-user
        with:
          user_id: '{{user_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Suspicious login: {{get-user.display_name}}'
          category: security_incident
          priority: '1'
          description: 'User {{get-user.display_name}} account suspended due to suspicious login. Event: {{event_id}}'
      - name: alert-security
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.security_team_id
          channel_id: $secrets.security_incidents_channel_id
          text: 'Suspicious login for {{get-user.display_name}} - account suspended. SNOW: {{create-incident.number}}. Event: {{event_id}}'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://deloitte.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
    - name: user-lifecycle
      path: /users/{{user_id}}/lifecycle/suspend
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: suspend-user
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://deloitte.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → okta-suspicious-login-response.yml

Executes a Splunk search query and returns matching log events for incident investigation and troubleshooting.

naftiko: '0.5'
info:
  label: Splunk Log Search
  description: Executes a Splunk search query and returns matching log events for incident investigation and troubleshooting.
  tags:
  - security
  - observability
  - splunk
capability:
  exposes:
  - type: mcp
    namespace: security-logs
    port: 8080
    tools:
    - name: search-logs
      description: Execute a Splunk search query over a specified time range and return matching events.
      inputParameters:
      - name: search_query
        in: body
        type: string
        description: Splunk search query string.
      - name: earliest_time
        in: body
        type: string
        description: Earliest time for search range (e.g., -24h).
      call: splunk.create-search
      with:
        search: '{{search_query}}'
        earliest_time: '{{earliest_time}}'
      outputParameters:
      - name: sid
        type: string
        mapping: $.sid
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.deloitte.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search-jobs
      path: /search/jobs
      operations:
      - name: create-search
        method: POST
Open in Framework → View in Fleet → splunk-log-search.yml

When a new engagement is won in Salesforce, creates a Jira project, provisions a SharePoint site, creates a Teams channel, and notifies the engagement lead.

naftiko: '0.5'
info:
  label: Client Project Kickoff Orchestration
  description: When a new engagement is won in Salesforce, creates a Jira project, provisions a SharePoint site, creates a Teams channel, and notifies the engagement lead.
  tags:
  - project-management
  - onboarding
  - salesforce
  - jira
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: project-kickoff
    port: 8080
    tools:
    - name: kickoff-client-project
      description: Given a Salesforce opportunity ID, create all project infrastructure including Jira project, SharePoint site, and Teams channel.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID for the won engagement.
      - name: project_lead_email
        in: body
        type: string
        description: Email of the engagement lead.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opp_id: '{{opportunity_id}}'
      - name: create-jira-project
        type: call
        call: jira.create-project
        with:
          name: '{{get-opportunity.Name}}'
          key: '{{get-opportunity.Project_Code__c}}'
          lead: '{{project_lead_email}}'
      - name: create-sharepoint-site
        type: call
        call: sharepoint.create-site
        with:
          displayName: '{{get-opportunity.Name}}'
          description: Project site for {{get-opportunity.Account.Name}}
      - name: create-teams-channel
        type: call
        call: msteams.create-channel
        with:
          team_id: $secrets.consulting_team_id
          displayName: '{{get-opportunity.Name}}'
          description: Channel for {{get-opportunity.Account.Name}} engagement
      - name: notify-lead
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.consulting_team_id
          channel_id: '{{create-teams-channel.id}}'
          text: 'Project infrastructure ready for {{get-opportunity.Name}}. Jira: {{create-jira-project.key}}, SharePoint: {{create-sharepoint-site.webUrl}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://deloitte.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opp_id}}
      inputParameters:
      - name: opp_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
  - type: http
    namespace: jira
    baseUri: https://deloitte.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: projects
      path: /project
      operations:
      - name: create-project
        method: POST
  - type: http
    namespace: 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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels
      inputParameters:
      - name: team_id
        in: path
      operations:
      - name: create-channel
        method: POST
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → client-project-kickoff-orchestration.yml

Collects audit evidence by pulling access logs from Okta, change records from ServiceNow, and data lineage from Snowflake, then compiles a summary in Confluence.

naftiko: '0.5'
info:
  label: Compliance Audit Evidence Collection
  description: Collects audit evidence by pulling access logs from Okta, change records from ServiceNow, and data lineage from Snowflake, then compiles a summary in Confluence.
  tags:
  - compliance
  - audit
  - okta
  - servicenow
  - snowflake
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: compliance-audit
    port: 8080
    tools:
    - name: collect-audit-evidence
      description: Given an audit period and control ID, gather access logs, change records, and data lineage, then publish to Confluence.
      inputParameters:
      - name: control_id
        in: body
        type: string
        description: Compliance control identifier.
      - name: start_date
        in: body
        type: string
        description: Audit period start date.
      - name: end_date
        in: body
        type: string
        description: Audit period end date.
      steps:
      - name: get-access-logs
        type: call
        call: okta.get-system-logs
        with:
          since: '{{start_date}}'
          until: '{{end_date}}'
          filter: eventType eq "user.session.start"
      - name: get-change-records
        type: call
        call: servicenow.query-changes
        with:
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: get-data-lineage
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT * FROM audit.data_lineage WHERE control_id = '{{control_id}}' AND event_date BETWEEN '{{start_date}}' AND '{{end_date}}'
          warehouse: AUDIT_WH
      - name: publish-evidence
        type: call
        call: confluence.create-page
        with:
          spaceKey: AUDIT
          title: Evidence - {{control_id}} - {{start_date}} to {{end_date}}
          body: 'Access log entries: {{get-access-logs.length}}, Change records: {{get-change-records.count}}, Data lineage records: {{get-data-lineage.row_count}}'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://deloitte.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_api_token
    resources:
    - name: logs
      path: /logs?since={{since}}&until={{until}}&filter={{filter}}
      inputParameters:
      - name: since
        in: query
      - name: until
        in: query
      - name: filter
        in: query
      operations:
      - name: get-system-logs
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://deloitte.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request?sysparm_query=sys_created_onBETWEEN{{start_date}}@{{end_date}}
      inputParameters:
      - name: start_date
        in: query
      - name: end_date
        in: query
      operations:
      - name: query-changes
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://deloitte.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://deloitte.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → compliance-audit-evidence-collection.yml

Sends a notification message to a specified Microsoft Teams channel using the Graph API.

naftiko: '0.5'
info:
  label: Microsoft Teams Channel Notification
  description: Sends a notification message to a specified Microsoft Teams channel using the Graph API.
  tags:
  - communications
  - notifications
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: comms-teams
    port: 8080
    tools:
    - name: send-channel-message
      description: Send a text message to a specified Microsoft Teams channel.
      inputParameters:
      - name: team_id
        in: body
        type: string
        description: Microsoft Teams team ID.
      - name: channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID.
      - name: message
        in: body
        type: string
        description: Message text to send.
      call: msteams.post-message
      with:
        team_id: '{{team_id}}'
        channel_id: '{{channel_id}}'
        text: '{{message}}'
      outputParameters:
      - name: message_id
        type: string
        mapping: $.id
  consumes:
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → microsoft-teams-channel-notification.yml

Closes out a consulting engagement by archiving the SharePoint site, closing Jira project, updating Salesforce opportunity stage, and notifying stakeholders via Teams.

naftiko: '0.5'
info:
  label: Engagement Closeout Orchestration
  description: Closes out a consulting engagement by archiving the SharePoint site, closing Jira project, updating Salesforce opportunity stage, and notifying stakeholders via Teams.
  tags:
  - consulting
  - project-management
  - sharepoint
  - jira
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: engagement-closeout
    port: 8080
    tools:
    - name: close-engagement
      description: Given a Salesforce opportunity ID, perform all closeout activities across systems.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID.
      steps:
      - name: get-engagement
        type: call
        call: salesforce.get-opportunity
        with:
          opp_id: '{{opportunity_id}}'
      - name: update-salesforce
        type: call
        call: salesforce.update-opportunity
        with:
          opp_id: '{{opportunity_id}}'
          StageName: Closed Won
      - name: close-jira
        type: call
        call: jira.archive-project
        with:
          project_key: '{{get-engagement.Project_Code__c}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.consulting_team_id
          channel_id: $secrets.engagement_mgmt_channel_id
          text: Engagement {{get-engagement.Name}} closed out. Salesforce updated, Jira project archived.
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://deloitte.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opp_id}}
      inputParameters:
      - name: opp_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
      - name: update-opportunity
        method: PATCH
  - type: http
    namespace: jira
    baseUri: https://deloitte.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: projects
      path: /project/{{project_key}}/archive
      inputParameters:
      - name: project_key
        in: path
      operations:
      - name: archive-project
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → engagement-closeout-orchestration.yml

Retrieves customer account details from Microsoft Dynamics 365, including account name, primary contact, and annual revenue.

naftiko: '0.5'
info:
  label: Dynamics 365 Customer Lookup
  description: Retrieves customer account details from Microsoft Dynamics 365, including account name, primary contact, and annual revenue.
  tags:
  - crm
  - sales
  - microsoft-dynamics-365
capability:
  exposes:
  - type: mcp
    namespace: crm-dynamics
    port: 8080
    tools:
    - name: get-customer
      description: Given a Dynamics 365 account ID, return the account name, primary contact, and revenue.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Dynamics 365 account ID.
      call: dynamics.get-account
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.name
      - name: primary_contact
        type: string
        mapping: $.primarycontactid.fullname
      - name: revenue
        type: string
        mapping: $.revenue
  consumes:
  - type: http
    namespace: dynamics
    baseUri: https://deloitte.crm.dynamics.com/api/data/v9.2
    authentication:
      type: bearer
      token: $secrets.dynamics_token
    resources:
    - name: accounts
      path: /accounts({{account_id}})
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
Open in Framework → View in Fleet → dynamics-365-customer-lookup.yml

Pulls active engagements from Salesforce, sends satisfaction surveys via email, records responses in Snowflake, and posts a summary digest to the leadership Teams channel.

naftiko: '0.5'
info:
  label: Client Satisfaction Survey Orchestration
  description: Pulls active engagements from Salesforce, sends satisfaction surveys via email, records responses in Snowflake, and posts a summary digest to the leadership Teams channel.
  tags:
  - client-relations
  - feedback
  - salesforce
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: client-satisfaction
    port: 8080
    tools:
    - name: run-satisfaction-survey
      description: Initiate client satisfaction surveys for active engagements and compile results.
      inputParameters:
      - name: survey_period
        in: body
        type: string
        description: Survey period identifier (e.g., 2026-Q1).
      steps:
      - name: get-active-engagements
        type: call
        call: salesforce.query-engagements
        with:
          period: '{{survey_period}}'
      - name: store-survey-batch
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO surveys.batches (period, engagement_count) VALUES ('{{survey_period}}', {{get-active-engagements.totalSize}})
          warehouse: ANALYTICS_WH
      - name: post-summary
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.leadership_team_id
          channel_id: $secrets.client_experience_channel_id
          text: 'Client satisfaction survey launched for {{survey_period}}: {{get-active-engagements.totalSize}} engagements surveyed.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://deloitte.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: engagements
      path: /query?q=SELECT+Id,Name,Account.Name+FROM+Opportunity+WHERE+StageName='Active'+AND+Survey_Period__c='{{period}}'
      inputParameters:
      - name: period
        in: query
      operations:
      - name: query-engagements
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://deloitte.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → client-satisfaction-survey-orchestration.yml

Monitors Informatica Cloud data integration pipeline runs, returning job status, row counts, and error details for failed or long-running tasks.

naftiko: '0.5'
info:
  label: Informatica Data Pipeline Monitoring
  description: Monitors Informatica Cloud data integration pipeline runs, returning job status, row counts, and error details for failed or long-running tasks.
  tags:
  - data-integration
  - informatica
  - monitoring
  - etl
capability:
  exposes:
  - type: mcp
    namespace: informatica-pipeline
    port: 8080
    tools:
    - name: get-pipeline-run-status
      description: Retrieve the latest run status for an Informatica Cloud data pipeline by task name.
      inputParameters:
      - name: task_name
        in: body
        type: string
        description: Name of the Informatica Cloud task.
      call: informatica.get-activity-log
      with:
        task_name: '{{task_name}}'
      outputParameters:
      - name: run_status
        type: string
        mapping: $.objects[0].state
      - name: rows_processed
        type: number
        mapping: $.objects[0].successRowsCount
      - name: error_message
        type: string
        mapping: $.objects[0].errorMsg
  consumes:
  - type: http
    namespace: informatica
    baseUri: https://dm-us.informaticacloud.com/saas/api/v2
    authentication:
      type: bearer
      token: $secrets.informatica_token
    resources:
    - name: activity-log
      path: /activity/activityLog?taskName={{task_name}}&rowLimit=1
      inputParameters:
      - name: task_name
        in: query
      operations:
      - name: get-activity-log
        method: GET
Open in Framework → View in Fleet → informatica-data-pipeline-monitoring.yml

Retrieves a configuration item from the ServiceNow CMDB by name, returning its class, status, owner, and environment.

naftiko: '0.5'
info:
  label: ServiceNow CMDB Asset Lookup
  description: Retrieves a configuration item from the ServiceNow CMDB by name, returning its class, status, owner, and environment.
  tags:
  - it
  - asset-management
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: it-cmdb
    port: 8080
    tools:
    - name: get-ci
      description: Given a CI name, return its class, operational status, assigned owner, and environment from the ServiceNow CMDB.
      inputParameters:
      - name: ci_name
        in: body
        type: string
        description: Configuration item name.
      call: servicenow.get-ci
      with:
        name: '{{ci_name}}'
      outputParameters:
      - name: sys_class_name
        type: string
        mapping: $.result[0].sys_class_name
      - name: operational_status
        type: string
        mapping: $.result[0].operational_status
      - name: assigned_to
        type: string
        mapping: $.result[0].assigned_to.display_value
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://deloitte.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cmdb
      path: /table/cmdb_ci?sysparm_query=name={{name}}
      inputParameters:
      - name: name
        in: query
      operations:
      - name: get-ci
        method: GET
Open in Framework → View in Fleet → servicenow-cmdb-asset-lookup.yml

Enriches a Salesforce client lead with LinkedIn company and executive profile data to give the business development team richer context before an initial client meeting.

naftiko: '0.5'
info:
  label: Salesforce Lead to Engagement Enrichment
  description: Enriches a Salesforce client lead with LinkedIn company and executive profile data to give the business development team richer context before an initial client meeting.
  tags:
  - sales
  - crm
  - salesforce
  - linkedin
  - enrichment
capability:
  exposes:
  - type: mcp
    namespace: bd-intelligence
    port: 8080
    tools:
    - name: enrich-client-lead
      description: Given a Salesforce lead ID and LinkedIn member URN for the prospect, retrieve LinkedIn profile data and update the Salesforce lead with current title and industry for pre-meeting research.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: Salesforce lead ID to enrich.
      - name: linkedin_member_urn
        in: body
        type: string
        description: LinkedIn member URN for the prospect.
      steps:
      - name: get-linkedin-profile
        type: call
        call: linkedin.get-profile
        with:
          member_urn: '{{linkedin_member_urn}}'
      - name: update-lead
        type: call
        call: salesforce.update-lead
        with:
          lead_id: '{{lead_id}}'
          title: '{{get-linkedin-profile.headline}}'
          linkedin_url: https://www.linkedin.com/in/{{get-linkedin-profile.vanityName}}
          industry: '{{get-linkedin-profile.industry}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: profiles
      path: /people/{{member_urn}}
      inputParameters:
      - name: member_urn
        in: path
      operations:
      - name: get-profile
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://deloitte.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: update-lead
        method: PATCH
Open in Framework → View in Fleet → salesforce-lead-to-engagement-enrichment.yml

Deploys a registered MLflow model from Databricks to a serving endpoint, updates the model registry, creates a Jira deployment ticket, and notifies the ML team.

naftiko: '0.5'
info:
  label: Databricks Model Deployment Orchestration
  description: Deploys a registered MLflow model from Databricks to a serving endpoint, updates the model registry, creates a Jira deployment ticket, and notifies the ML team.
  tags:
  - data-science
  - ml-ops
  - databricks
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ml-deployment
    port: 8080
    tools:
    - name: deploy-model
      description: Given a Databricks model name and version, deploy to serving endpoint and track the deployment.
      inputParameters:
      - name: model_name
        in: body
        type: string
        description: MLflow registered model name.
      - name: model_version
        in: body
        type: string
        description: Model version to deploy.
      steps:
      - name: create-endpoint
        type: call
        call: databricks.create-serving-endpoint
        with:
          name: '{{model_name}}-serving'
          model_name: '{{model_name}}'
          model_version: '{{model_version}}'
      - name: create-deployment-ticket
        type: call
        call: jira.create-issue
        with:
          project: MLOPS
          issuetype: Task
          summary: 'Model deployment: {{model_name}} v{{model_version}}'
          description: 'Endpoint: {{create-endpoint.name}}, Status: {{create-endpoint.state}}'
      - name: notify-ml-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.data_science_team_id
          channel_id: $secrets.mlops_channel_id
          text: 'Model {{model_name}} v{{model_version}} deployed. Endpoint: {{create-endpoint.name}}. Jira: {{create-deployment-ticket.key}}'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://deloitte.cloud.databricks.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: serving-endpoints
      path: /serving-endpoints
      operations:
      - name: create-serving-endpoint
        method: POST
  - type: http
    namespace: jira
    baseUri: https://deloitte.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → databricks-model-deployment-orchestration.yml

Compares Azure resource configurations against Terraform state in GitHub, creates a Jira remediation ticket for any drift, and notifies the platform team in Teams.

naftiko: '0.5'
info:
  label: Infrastructure Drift Detection Workflow
  description: Compares Azure resource configurations against Terraform state in GitHub, creates a Jira remediation ticket for any drift, and notifies the platform team in Teams.
  tags:
  - infrastructure
  - devops
  - microsoft-azure
  - github
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: infra-drift
    port: 8080
    tools:
    - name: detect-infrastructure-drift
      description: Compare Azure resource state with Terraform and handle any drift detected.
      inputParameters:
      - name: resource_group
        in: body
        type: string
        description: Azure resource group to check.
      - name: terraform_repo
        in: body
        type: string
        description: GitHub repo containing Terraform state.
      steps:
      - name: get-azure-resources
        type: call
        call: azure.list-resources
        with:
          resource_group: '{{resource_group}}'
      - name: get-terraform-state
        type: call
        call: github.get-file
        with:
          repo: '{{terraform_repo}}'
          path: terraform.tfstate
      - name: create-remediation
        type: call
        call: jira.create-issue
        with:
          project: PLATFORM
          issuetype: Bug
          summary: Infrastructure drift detected in {{resource_group}}
          description: 'Azure resources: {{get-azure-resources.count}}, Terraform state resources compared.'
      - name: notify-platform
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.platform_team_id
          channel_id: $secrets.platform_alerts_channel_id
          text: 'Drift detected in {{resource_group}}. Remediation ticket: {{create-remediation.key}}'
  consumes:
  - type: http
    namespace: azure
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: resources
      path: /subscriptions/$secrets.azure_subscription_id/resourceGroups/{{resource_group}}/resources?api-version=2023-07-01
      inputParameters:
      - name: resource_group
        in: path
      operations:
      - name: list-resources
        method: GET
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: contents
      path: /repos/{{repo}}/contents/{{path}}
      inputParameters:
      - name: repo
        in: path
      - name: path
        in: path
      operations:
      - name: get-file
        method: GET
  - type: http
    namespace: jira
    baseUri: https://deloitte.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → infrastructure-drift-detection-workflow.yml

When a Databricks job fails, retrieves error details, creates a Jira bug ticket, notifies the data engineering team in Teams, and triggers a pipeline retry.

naftiko: '0.5'
info:
  label: Data Pipeline Failure Recovery
  description: When a Databricks job fails, retrieves error details, creates a Jira bug ticket, notifies the data engineering team in Teams, and triggers a pipeline retry.
  tags:
  - data-engineering
  - incident-response
  - databricks
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: data-recovery
    port: 8080
    tools:
    - name: recover-failed-pipeline
      description: Given a failed Databricks run ID, capture error details, create a Jira ticket, notify the team, and retry the job.
      inputParameters:
      - name: run_id
        in: body
        type: string
        description: Failed Databricks job run ID.
      steps:
      - name: get-run-details
        type: call
        call: databricks.get-run
        with:
          run_id: '{{run_id}}'
      - name: create-bug
        type: call
        call: jira.create-issue
        with:
          project: DATA
          issuetype: Bug
          summary: 'Pipeline failure: {{get-run-details.run_name}}'
          description: 'Run {{run_id}} failed with state: {{get-run-details.state.result_state}}. Error: {{get-run-details.state.state_message}}'
      - name: notify-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.data_eng_team_id
          channel_id: $secrets.data_eng_alerts_channel_id
          text: 'Pipeline {{get-run-details.run_name}} failed. Jira: {{create-bug.key}}. Attempting retry...'
      - name: retry-run
        type: call
        call: databricks.rerun-job
        with:
          run_id: '{{run_id}}'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://deloitte.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: runs
      path: /jobs/runs/get?run_id={{run_id}}
      inputParameters:
      - name: run_id
        in: query
      operations:
      - name: get-run
        method: GET
    - name: rerun
      path: /jobs/runs/repair
      operations:
      - name: rerun-job
        method: POST
  - type: http
    namespace: jira
    baseUri: https://deloitte.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → data-pipeline-failure-recovery.yml

When a new role assignment is made in Workday, assigns the corresponding Pluralsight learning path, creates a Jira training tracking ticket, and notifies the employee via Teams.

naftiko: '0.5'
info:
  label: Learning Path Assignment Orchestration
  description: When a new role assignment is made in Workday, assigns the corresponding Pluralsight learning path, creates a Jira training tracking ticket, and notifies the employee via Teams.
  tags:
  - hr
  - learning
  - workday
  - pluralsight
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: learning-paths
    port: 8080
    tools:
    - name: assign-learning-path
      description: Given a Workday employee ID and new role, assign relevant training and create tracking.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      - name: new_role
        in: body
        type: string
        description: New role or position title.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: assign-training
        type: call
        call: pluralsight.assign-channel
        with:
          email: '{{get-employee.work_email}}'
          channel_name: '{{new_role}}'
      - name: create-tracking
        type: call
        call: jira.create-issue
        with:
          project: TRAINING
          issuetype: Task
          summary: 'Training: {{get-employee.full_name}} - {{new_role}} learning path'
          assignee: '{{get-employee.work_email}}'
      - name: notify-employee
        type: call
        call: msteams.send-chat-message
        with:
          user_id: '{{get-employee.work_email}}'
          text: 'Your learning path for {{new_role}} has been assigned in Pluralsight. Tracking ticket: {{create-tracking.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: pluralsight
    baseUri: https://api.pluralsight.com/api/v1
    authentication:
      type: bearer
      token: $secrets.pluralsight_token
    resources:
    - name: channels
      path: /channels/assign
      operations:
      - name: assign-channel
        method: POST
  - type: http
    namespace: jira
    baseUri: https://deloitte.atlassian.net/rest/api/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: chats
      path: /users/{{user_id}}/chats/messages
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: send-chat-message
        method: POST
Open in Framework → View in Fleet → learning-path-assignment-orchestration.yml

Searches for a Confluence page by title and returns the page ID, space, last updated date, and URL.

naftiko: '0.5'
info:
  label: Confluence Page Lookup
  description: Searches for a Confluence page by title and returns the page ID, space, last updated date, and URL.
  tags:
  - knowledge-management
  - documentation
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: knowledge-pages
    port: 8080
    tools:
    - name: search-page-by-title
      description: Given a Confluence page title, return the page ID, space key, last modified date, and direct URL.
      inputParameters:
      - name: page_title
        in: body
        type: string
        description: Title of the Confluence page to find.
      call: confluence.search-page
      with:
        title: '{{page_title}}'
      outputParameters:
      - name: page_id
        type: string
        mapping: $.results[0].id
      - name: space_key
        type: string
        mapping: $.results[0].space.key
      - name: last_modified
        type: string
        mapping: $.results[0].version.when
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://deloitte.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content?title={{title}}&expand=space,version
      inputParameters:
      - name: title
        in: query
      operations:
      - name: search-page
        method: GET
Open in Framework → View in Fleet → confluence-page-lookup.yml

Queries Snowflake for workforce utilisation and billing metrics and writes a weekly analytics snapshot for Deloitte's resource planning and finance leadership.

naftiko: '0.5'
info:
  label: Snowflake Workforce Analytics Snapshot
  description: Queries Snowflake for workforce utilisation and billing metrics and writes a weekly analytics snapshot for Deloitte's resource planning and finance leadership.
  tags:
  - analytics
  - hr
  - snowflake
  - reporting
  - resource-planning
capability:
  exposes:
  - type: mcp
    namespace: workforce-analytics
    port: 8080
    tools:
    - name: snapshot-workforce-utilisation
      description: Given a week ending date, query Snowflake for billable utilisation rates and project staffing across practices, then store the analytics snapshot for resource planning dashboards.
      inputParameters:
      - name: week_ending_date
        in: body
        type: string
        description: ISO 8601 date for the workforce analytics snapshot.
      call: snowflake.execute-query
      with:
        statement: INSERT INTO workforce_utilisation_snapshots SELECT '{{week_ending_date}}' as week_ending, practice, COUNT(DISTINCT employee_id) as headcount, AVG(billable_hours / total_hours) as utilisation_rate FROM staffing_data WHERE week_ending = '{{week_ending_date}}' GROUP BY practice
      outputParameters:
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://deloitte.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → snowflake-workforce-analytics-snapshot.yml

Enriches a company record with firmographic data from ZoomInfo, including employee count, revenue, and industry classification.

naftiko: '0.5'
info:
  label: ZoomInfo Company Enrichment
  description: Enriches a company record with firmographic data from ZoomInfo, including employee count, revenue, and industry classification.
  tags:
  - sales
  - data-enrichment
  - zoominfo
capability:
  exposes:
  - type: mcp
    namespace: sales-enrichment
    port: 8080
    tools:
    - name: enrich-company
      description: Given a company name or domain, return ZoomInfo firmographic data including revenue, employee count, and industry.
      inputParameters:
      - name: company_domain
        in: body
        type: string
        description: Company website domain to look up.
      call: zoominfo.enrich-company
      with:
        domain: '{{company_domain}}'
      outputParameters:
      - name: company_name
        type: string
        mapping: $.data[0].name
      - name: employee_count
        type: integer
        mapping: $.data[0].employeeCount
      - name: revenue
        type: string
        mapping: $.data[0].revenue
      - name: industry
        type: string
        mapping: $.data[0].industry
  consumes:
  - type: http
    namespace: zoominfo
    baseUri: https://api.zoominfo.com
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: companies
      path: /enrich/company
      operations:
      - name: enrich-company
        method: POST
Open in Framework → View in Fleet → zoominfo-company-enrichment.yml

Retrieves Microsoft 365 license assignment and usage data from Microsoft Graph for IT asset management.

naftiko: '0.5'
info:
  label: Microsoft 365 License Usage Report
  description: Retrieves Microsoft 365 license assignment and usage data from Microsoft Graph for IT asset management.
  tags:
  - it
  - license-management
  - microsoft-365
capability:
  exposes:
  - type: mcp
    namespace: it-licensing
    port: 8080
    tools:
    - name: get-license-usage
      description: Retrieve Microsoft 365 license SKUs with assigned and consumed unit counts.
      inputParameters: []
      call: msgraph.get-subscribed-skus
      with: {}
      outputParameters:
      - name: skus
        type: array
        mapping: $.value
  consumes:
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: subscribed-skus
      path: /subscribedSkus
      operations:
      - name: get-subscribed-skus
        method: GET
Open in Framework → View in Fleet → microsoft-365-license-usage-report.yml

Looks up a user in Okta by email and returns their account status, last login time, and assigned groups.

naftiko: '0.5'
info:
  label: Okta User Status Lookup
  description: Looks up a user in Okta by email and returns their account status, last login time, and assigned groups.
  tags:
  - security
  - identity
  - okta
capability:
  exposes:
  - type: mcp
    namespace: identity-users
    port: 8080
    tools:
    - name: get-user-status
      description: Given a user email, look up their Okta account status, last login, and group memberships.
      inputParameters:
      - name: user_email
        in: body
        type: string
        description: User email address to look up in Okta.
      call: okta.get-user
      with:
        email: '{{user_email}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: last_login
        type: string
        mapping: $.lastLogin
      - name: display_name
        type: string
        mapping: $.profile.displayName
  consumes:
  - type: http
    namespace: okta
    baseUri: https://deloitte.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_api_token
    resources:
    - name: users
      path: /users/{{email}}
      inputParameters:
      - name: email
        in: path
      operations:
      - name: get-user
        method: GET
Open in Framework → View in Fleet → okta-user-status-lookup.yml

Retrieves open opportunities from Salesforce for a given account and posts a pipeline summary to the business development Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Pipeline Lookup
  description: Retrieves open opportunities from Salesforce for a given account and posts a pipeline summary to the business development Microsoft Teams channel.
  tags:
  - sales
  - business-development
  - salesforce
  - pipeline
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: bd-pipeline
    port: 8080
    tools:
    - name: get-opportunity-pipeline
      description: Retrieve open Salesforce opportunities and post a summary to the BD Teams channel.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID.
      - name: teams_channel_webhook
        in: body
        type: string
        description: The Microsoft Teams webhook for BD notifications.
      steps:
      - name: fetch-opportunities
        type: call
        call: salesforce.query-opportunities
        with:
          account_id: '{{account_id}}'
      - name: post-summary
        type: call
        call: msteams.send-webhook
        with:
          webhook_url: '{{teams_channel_webhook}}'
          text: 'Pipeline for account {{account_id}}: {{fetch-opportunities.total_size}} open opportunities. Total value: {{fetch-opportunities.total_value}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://ey.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query?q=SELECT+Name,StageName,Amount,CloseDate+FROM+Opportunity+WHERE+AccountId='{{account_id}}'+AND+IsClosed=false
      inputParameters:
      - name: account_id
        in: query
      operations:
      - name: query-opportunities
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: webhooks
      path: /{{webhook_url}}
      inputParameters:
      - name: webhook_url
        in: path
      operations:
      - name: send-webhook
        method: POST
Open in Framework → View in Fleet → salesforce-opportunity-pipeline-lookup.yml

Retrieves call analytics from Gong for a specific engagement opportunity. Used by EY business development teams to review client interaction insights and improve win rates.

naftiko: '0.5'
info:
  label: Gong Sales Call Intelligence Lookup
  description: Retrieves call analytics from Gong for a specific engagement opportunity. Used by EY business development teams to review client interaction insights and improve win rates.
  tags:
  - business-development
  - gong
  - sales
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: call-intelligence
    port: 8080
    tools:
    - name: get-call-analytics
      description: Retrieve Gong call analytics for a specific call ID.
      inputParameters:
      - name: call_id
        in: body
        type: string
        description: The Gong call ID.
      call: gong.get-call
      with:
        call_id: '{{call_id}}'
      outputParameters:
      - name: duration
        type: string
        mapping: $.call.duration
      - name: talk_ratio
        type: string
        mapping: $.call.talkRatio
      - name: topics
        type: string
        mapping: $.call.topics
      - name: action_items
        type: string
        mapping: $.call.actionItems
  consumes:
  - type: http
    namespace: gong
    baseUri: https://api.gong.io/v2
    authentication:
      type: bearer
      token: $secrets.gong_token
    resources:
    - name: calls
      path: /calls/{{call_id}}/transcript
      inputParameters:
      - name: call_id
        in: path
      operations:
      - name: get-call
        method: GET
Open in Framework → View in Fleet → gong-sales-call-intelligence-lookup.yml

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

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

Checks Okta user at EY.

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

Routes changes at EY through ServiceNow and CAB approval.

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

Retrieves SharePoint metadata at EY.

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

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

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

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

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

Downloads a specific audit evidence file from Box and logs the retrieval in the engagement Confluence space for chain of custody documentation.

naftiko: '0.5'
info:
  label: Box Audit Evidence Retrieval
  description: Downloads a specific audit evidence file from Box and logs the retrieval in the engagement Confluence space for chain of custody documentation.
  tags:
  - audit
  - document-management
  - box
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: evidence-retrieval
    port: 8080
    tools:
    - name: get-box-file
      description: Retrieve an audit evidence file from Box and log the access in Confluence.
      inputParameters:
      - name: file_id
        in: body
        type: string
        description: The Box file ID.
      - name: confluence_page_id
        in: body
        type: string
        description: The Confluence page ID for evidence tracking.
      steps:
      - name: fetch-file
        type: call
        call: box.get-file
        with:
          file_id: '{{file_id}}'
      - name: log-retrieval
        type: call
        call: confluence.add-comment
        with:
          page_id: '{{confluence_page_id}}'
          body: 'Evidence retrieved: {{fetch-file.file_name}} (Box ID: {{file_id}}). Last modified: {{fetch-file.modified_date}}. Download: {{fetch-file.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
  - type: http
    namespace: confluence
    baseUri: https://ey-collab.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: comments
      path: /content/{{page_id}}/child/comment
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: add-comment
        method: POST
Open in Framework → View in Fleet → box-audit-evidence-retrieval.yml

Retrieves the current compliance score from Microsoft Purview for an EY client tenant. Used during regulatory advisory engagements to benchmark compliance posture.

naftiko: '0.5'
info:
  label: Microsoft Purview Compliance Score Check
  description: Retrieves the current compliance score from Microsoft Purview for an EY client tenant. Used during regulatory advisory engagements to benchmark compliance posture.
  tags:
  - advisory
  - compliance
  - microsoft-purview
  - governance
capability:
  exposes:
  - type: mcp
    namespace: compliance-scoring
    port: 8080
    tools:
    - name: get-compliance-score
      description: Retrieve the Microsoft Purview compliance score for a tenant.
      inputParameters:
      - name: tenant_id
        in: body
        type: string
        description: The Azure AD tenant ID.
      call: purview.get-compliance-score
      with:
        tenant_id: '{{tenant_id}}'
      outputParameters:
      - name: score
        type: string
        mapping: $.complianceScore
      - name: max_score
        type: string
        mapping: $.maxScore
      - name: assessment_count
        type: string
        mapping: $.assessmentCount
  consumes:
  - type: http
    namespace: purview
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: compliance
      path: /security/secureScores?$top=1
      operations:
      - name: get-compliance-score
        method: GET
Open in Framework → View in Fleet → microsoft-purview-compliance-score-check.yml

Checks whether a user is a member of a specified Azure Active Directory security group. Used for access control validation during IT audit engagements.

naftiko: '0.5'
info:
  label: Azure Active Directory Group Membership Check
  description: Checks whether a user is a member of a specified Azure Active Directory security group. Used for access control validation during IT audit engagements.
  tags:
  - audit
  - security
  - azure-active-directory
  - identity
capability:
  exposes:
  - type: mcp
    namespace: identity-audit
    port: 8080
    tools:
    - name: check-group-membership
      description: Check if a user is a member of an Azure AD security group.
      inputParameters:
      - name: user_upn
        in: body
        type: string
        description: The user principal name (email).
      - name: group_id
        in: body
        type: string
        description: The Azure AD group object ID.
      call: azuread.check-member
      with:
        user_upn: '{{user_upn}}'
        group_id: '{{group_id}}'
      outputParameters:
      - name: is_member
        type: string
        mapping: $.value
  consumes:
  - type: http
    namespace: azuread
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: group-members
      path: /groups/{{group_id}}/members?$filter=userPrincipalName eq '{{user_upn}}'
      inputParameters:
      - name: group_id
        in: path
      - name: user_upn
        in: query
      operations:
      - name: check-member
        method: GET
Open in Framework → View in Fleet → azure-active-directory-group-membership-check.yml

Checks SAP PO at EY.

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

Checks Power BI refresh at EY.

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

Checks release readiness at EY.

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

Retrieves pending access certification campaigns from SailPoint for IT audit review. Used by EY teams to validate client identity governance controls.

naftiko: '0.5'
info:
  label: SailPoint Access Certification Review
  description: Retrieves pending access certification campaigns from SailPoint for IT audit review. Used by EY teams to validate client identity governance controls.
  tags:
  - audit
  - identity
  - sailpoint
  - governance
capability:
  exposes:
  - type: mcp
    namespace: identity-governance
    port: 8080
    tools:
    - name: get-certification-campaigns
      description: Retrieve active access certification campaigns from SailPoint.
      inputParameters:
      - name: campaign_status
        in: body
        type: string
        description: Campaign status filter (e.g., ACTIVE, COMPLETED).
      call: sailpoint.list-campaigns
      with:
        status: '{{campaign_status}}'
      outputParameters:
      - name: campaigns
        type: string
        mapping: $.value
      - name: total_count
        type: string
        mapping: $.count
  consumes:
  - type: http
    namespace: sailpoint
    baseUri: https://ey-client.api.identitynow.com/v3
    authentication:
      type: bearer
      token: $secrets.sailpoint_token
    resources:
    - name: campaigns
      path: /campaigns?filters=status eq "{{status}}"
      inputParameters:
      - name: status
        in: query
      operations:
      - name: list-campaigns
        method: GET
Open in Framework → View in Fleet → sailpoint-access-certification-review.yml

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

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

Checks GitHub repo at EY.

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

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

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

Monitors SLAs at EY via Datadog and Slack.

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

Reviews vendors at EY.

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

Retrieves website traffic metrics from Google Analytics for a client property. Used by EY digital consulting teams to benchmark client web performance.

naftiko: '0.5'
info:
  label: Google Analytics Client Website Metrics
  description: Retrieves website traffic metrics from Google Analytics for a client property. Used by EY digital consulting teams to benchmark client web performance.
  tags:
  - consulting
  - analytics
  - google-analytics
  - digital
capability:
  exposes:
  - type: mcp
    namespace: web-analytics
    port: 8080
    tools:
    - name: get-website-metrics
      description: Retrieve Google Analytics metrics for a client property by date range.
      inputParameters:
      - name: property_id
        in: body
        type: string
        description: The Google Analytics property ID.
      - name: start_date
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: End date in YYYY-MM-DD format.
      call: ga.run-report
      with:
        property_id: '{{property_id}}'
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
      outputParameters:
      - name: sessions
        type: string
        mapping: $.rows[0].metricValues[0].value
      - name: users
        type: string
        mapping: $.rows[0].metricValues[1].value
      - name: bounce_rate
        type: string
        mapping: $.rows[0].metricValues[2].value
  consumes:
  - type: http
    namespace: ga
    baseUri: https://analyticsdata.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: reports
      path: /properties/{{property_id}}:runReport
      inputParameters:
      - name: property_id
        in: path
      operations:
      - name: run-report
        method: POST
Open in Framework → View in Fleet → google-analytics-client-website-metrics.yml

Retrieves a Zoom webinar attendance report and exports the participant list to Google Sheets for CPE credit tracking by EY learning and development teams.

naftiko: '0.5'
info:
  label: Zoom Webinar Attendance Report
  description: Retrieves a Zoom webinar attendance report and exports the participant list to Google Sheets for CPE credit tracking by EY learning and development teams.
  tags:
  - learning
  - zoom
  - reporting
  - cpe
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: webinar-attendance
    port: 8080
    tools:
    - name: get-webinar-attendance
      description: Retrieve Zoom webinar attendance and export participants to Google Sheets.
      inputParameters:
      - name: webinar_id
        in: body
        type: string
        description: The Zoom webinar ID.
      - name: spreadsheet_id
        in: body
        type: string
        description: The Google Sheets spreadsheet ID for attendance export.
      steps:
      - name: fetch-attendance
        type: call
        call: zoom.get-webinar-report
        with:
          webinar_id: '{{webinar_id}}'
      - name: export-to-sheets
        type: call
        call: googlesheets.update-values
        with:
          spreadsheet_id: '{{spreadsheet_id}}'
          range: Attendance!A1
          values: '{{fetch-attendance.participants}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_token
    resources:
    - name: webinar-reports
      path: /report/webinars/{{webinar_id}}/participants
      inputParameters:
      - name: webinar_id
        in: path
      operations:
      - name: get-webinar-report
        method: GET
  - type: http
    namespace: googlesheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: values
      path: /spreadsheets/{{spreadsheet_id}}/values/{{range}}
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: update-values
        method: PUT
Open in Framework → View in Fleet → zoom-webinar-attendance-report.yml

Checks K8s pod health at EY.

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

Retrieves financial fundamentals from FactSet for a client entity. Used by EY valuation and advisory teams for comparable company analysis.

naftiko: '0.5'
info:
  label: FactSet Financial Data Retrieval
  description: Retrieves financial fundamentals from FactSet for a client entity. Used by EY valuation and advisory teams for comparable company analysis.
  tags:
  - advisory
  - valuation
  - factset
  - financial-analysis
capability:
  exposes:
  - type: mcp
    namespace: financial-data
    port: 8080
    tools:
    - name: get-factset-financials
      description: Retrieve financial fundamentals from FactSet by entity identifier.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The FactSet entity identifier.
      - name: metrics
        in: body
        type: string
        description: Comma-separated list of financial metrics (e.g., revenue,ebitda,net_income).
      call: factset.get-fundamentals
      with:
        ids: '{{entity_id}}'
        metrics: '{{metrics}}'
      outputParameters:
      - name: data
        type: string
        mapping: $.data
  consumes:
  - type: http
    namespace: factset
    baseUri: https://api.factset.com/content/factset-fundamentals/v2
    authentication:
      type: basic
      username: $secrets.factset_user
      password: $secrets.factset_api_key
    resources:
    - name: fundamentals
      path: /fundamentals?ids={{ids}}&metrics={{metrics}}
      inputParameters:
      - name: ids
        in: query
      - name: metrics
        in: query
      operations:
      - name: get-fundamentals
        method: GET
Open in Framework → View in Fleet → factset-financial-data-retrieval.yml

Searches Confluence at EY.

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

Sends an engagement letter via DocuSign for client signature and logs the envelope status in ServiceNow.

naftiko: '0.5'
info:
  label: DocuSign Engagement Letter Sender
  description: Sends an engagement letter via DocuSign for client signature and logs the envelope status in ServiceNow.
  tags:
  - client-engagement
  - docusign
  - servicenow
  - legal
capability:
  exposes:
  - type: mcp
    namespace: engagement-letters
    port: 8080
    tools:
    - name: send-engagement-letter
      description: Send an engagement letter for electronic signature via DocuSign and log to ServiceNow.
      inputParameters:
      - name: template_id
        in: body
        type: string
        description: The DocuSign template ID for the engagement letter.
      - name: signer_email
        in: body
        type: string
        description: The client signer email address.
      - name: signer_name
        in: body
        type: string
        description: The client signer full name.
      - name: engagement_id
        in: body
        type: string
        description: The ServiceNow engagement record ID.
      steps:
      - name: send-envelope
        type: call
        call: docusign.create-envelope
        with:
          template_id: '{{template_id}}'
          signer_email: '{{signer_email}}'
          signer_name: '{{signer_name}}'
      - name: log-to-servicenow
        type: call
        call: servicenow.update-engagement
        with:
          engagement_id: '{{engagement_id}}'
          docusign_envelope_id: '{{send-envelope.envelope_id}}'
          letter_status: sent
  consumes:
  - type: http
    namespace: docusign
    baseUri: https://na4.docusign.net/restapi/v2.1
    authentication:
      type: bearer
      token: $secrets.docusign_token
    resources:
    - name: envelopes
      path: /accounts/$secrets.docusign_account_id/envelopes
      operations:
      - name: create-envelope
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://ey.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: engagements
      path: /table/x_ey_engagement/{{engagement_id}}
      inputParameters:
      - name: engagement_id
        in: path
      operations:
      - name: update-engagement
        method: PATCH
Open in Framework → View in Fleet → docusign-engagement-letter-sender.yml

Checks New Relic APM at EY.

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

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

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

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

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

Queries Oracle Financials for a client's tax return filing status and posts an update to the engagement Slack channel. Enables tax professionals to monitor deadlines without logging into Oracle.

naftiko: '0.5'
info:
  label: Tax Filing Status Tracker
  description: Queries Oracle Financials for a client's tax return filing status and posts an update to the engagement Slack channel. Enables tax professionals to monitor deadlines without logging into Oracle.
  tags:
  - tax
  - oracle
  - oracle-financials
  - slack
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: tax-filing
    port: 8080
    tools:
    - name: check-tax-filing-status
      description: Given a client entity ID and tax period, retrieve filing status from Oracle Financials and post an update to the engagement Slack channel.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The Oracle Financials entity identifier.
      - name: tax_period
        in: body
        type: string
        description: The tax period in YYYY-MM format.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel ID for the engagement team.
      steps:
      - name: get-filing-status
        type: call
        call: oracle.get-tax-filing
        with:
          entity_id: '{{entity_id}}'
          tax_period: '{{tax_period}}'
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Tax filing for entity {{entity_id}} (period {{tax_period}}): Status is {{get-filing-status.status}}. Due date: {{get-filing-status.due_date}}.'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://ey-oracle.fa.us2.oraclecloud.com/fscmRestApi/resources
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: tax-filings
      path: /taxReturns?q=EntityId={{entity_id}};TaxPeriod={{tax_period}}
      inputParameters:
      - name: entity_id
        in: query
      - name: tax_period
        in: query
      operations:
      - name: get-tax-filing
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → tax-filing-status-tracker.yml

Retrieves transfer pricing data from SAP S/4HANA, generates a summary in Microsoft Excel via Graph API, and stores the workbook in SharePoint for the tax team to review.

naftiko: '0.5'
info:
  label: Transfer Pricing Document Workflow
  description: Retrieves transfer pricing data from SAP S/4HANA, generates a summary in Microsoft Excel via Graph API, and stores the workbook in SharePoint for the tax team to review.
  tags:
  - tax
  - transfer-pricing
  - sap-s4hana
  - microsoft-excel
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: transfer-pricing
    port: 8080
    tools:
    - name: generate-tp-workbook
      description: Extract transfer pricing data from SAP, create an Excel workbook, and store in SharePoint.
      inputParameters:
      - name: company_code
        in: body
        type: string
        description: The SAP company code.
      - name: fiscal_year
        in: body
        type: string
        description: The fiscal year.
      - name: sharepoint_site
        in: body
        type: string
        description: The SharePoint site ID for the tax engagement.
      steps:
      - name: get-tp-data
        type: call
        call: sap.get-intercompany-transactions
        with:
          company_code: '{{company_code}}'
          fiscal_year: '{{fiscal_year}}'
      - name: create-workbook
        type: call
        call: msgraph.create-excel-workbook
        with:
          site_id: '{{sharepoint_site}}'
          file_name: TP_Analysis_{{company_code}}_{{fiscal_year}}.xlsx
      - name: populate-data
        type: call
        call: msgraph.update-excel-range
        with:
          item_id: '{{create-workbook.id}}'
          sheet_name: IntercoTransactions
          range: A1
          values: '{{get-tp-data.transactions}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://ey-s4.sap.com/sap/opu/odata/sap/API_JOURNALENTRYITEMBASIC_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    - name: sap-client
      in: header
      value: '100'
    resources:
    - name: journal-entries
      path: /A_JournalEntryItemBasic?$filter=CompanyCode eq '{{company_code}}' and FiscalYear eq '{{fiscal_year}}' and IsIntercompanyTransaction eq true
      inputParameters:
      - name: company_code
        in: query
      - name: fiscal_year
        in: query
      operations:
      - name: get-intercompany-transactions
        method: GET
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /sites/{{site_id}}/drive/root:/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_name
        in: path
      operations:
      - name: create-excel-workbook
        method: PUT
    - name: excel-ranges
      path: /drives/items/{{item_id}}/workbook/worksheets/{{sheet_name}}/range(address='{{range}}')
      inputParameters:
      - name: item_id
        in: path
      - name: sheet_name
        in: path
      - name: range
        in: path
      operations:
      - name: update-excel-range
        method: PATCH
Open in Framework → View in Fleet → transfer-pricing-document-workflow.yml

Monitors cert expiry at EY.

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

Executes a SQL query against Snowflake to retrieve client analytics data and uploads the results as a Google Sheet for sharing with the engagement team.

naftiko: '0.5'
info:
  label: Snowflake Client Data Query
  description: Executes a SQL query against Snowflake to retrieve client analytics data and uploads the results as a Google Sheet for sharing with the engagement team.
  tags:
  - analytics
  - data
  - snowflake
  - google-sheets
  - consulting
capability:
  exposes:
  - type: mcp
    namespace: data-analytics
    port: 8080
    tools:
    - name: query-snowflake
      description: Execute a SQL statement against Snowflake and export results to Google Sheets.
      inputParameters:
      - name: warehouse
        in: body
        type: string
        description: The Snowflake warehouse name.
      - name: database
        in: body
        type: string
        description: The Snowflake database name.
      - name: sql_statement
        in: body
        type: string
        description: The SQL query to execute.
      - name: spreadsheet_id
        in: body
        type: string
        description: The Google Sheets spreadsheet ID for results export.
      steps:
      - name: run-query
        type: call
        call: snowflake.execute-sql
        with:
          warehouse: '{{warehouse}}'
          database: '{{database}}'
          statement: '{{sql_statement}}'
      - name: export-to-sheets
        type: call
        call: googlesheets.update-values
        with:
          spreadsheet_id: '{{spreadsheet_id}}'
          range: QueryResults!A1
          values: '{{run-query.data}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://ey-partner.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-sql
        method: POST
  - type: http
    namespace: googlesheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: values
      path: /spreadsheets/{{spreadsheet_id}}/values/{{range}}
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: update-values
        method: PUT
Open in Framework → View in Fleet → snowflake-client-data-query.yml

Creates a new expense report in SAP Concur for an EY professional, attaches receipt details, and notifies the approving manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Concur Expense Report Submission
  description: Creates a new expense report in SAP Concur for an EY professional, attaches receipt details, and notifies the approving manager via Microsoft Teams.
  tags:
  - finance
  - expense-management
  - sap-concur
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: expense-management
    port: 8080
    tools:
    - name: submit-expense-report
      description: Create an expense report in SAP Concur with line items and notify the approver via Teams.
      inputParameters:
      - name: employee_email
        in: body
        type: string
        description: The EY employee email address.
      - name: report_name
        in: body
        type: string
        description: Name for the expense report.
      - name: total_amount
        in: body
        type: string
        description: Total expense amount.
      - name: currency
        in: body
        type: string
        description: Currency code (e.g., USD).
      - name: approver_email
        in: body
        type: string
        description: Email of the approving manager.
      steps:
      - name: create-report
        type: call
        call: concur.create-expense-report
        with:
          employee_email: '{{employee_email}}'
          report_name: '{{report_name}}'
          total: '{{total_amount}}'
          currency: '{{currency}}'
      - name: notify-approver
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{approver_email}}'
          text: 'New expense report ''{{report_name}}'' submitted by {{employee_email}} for {{total_amount}} {{currency}}. Report ID: {{create-report.report_id}}.'
  consumes:
  - type: http
    namespace: concur
    baseUri: https://us2.api.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: expense-reports
      path: /expense/reports
      operations:
      - name: create-expense-report
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-concur-expense-report-submission.yml

Exports a Tableau workbook view as a PDF and stores it in Google Drive. Used by EY consulting teams to share client-facing analytics deliverables.

naftiko: '0.5'
info:
  label: Tableau Dashboard Export
  description: Exports a Tableau workbook view as a PDF and stores it in Google Drive. Used by EY consulting teams to share client-facing analytics deliverables.
  tags:
  - consulting
  - analytics
  - tableau
  - google-drive
capability:
  exposes:
  - type: mcp
    namespace: analytics-export
    port: 8080
    tools:
    - name: export-tableau-to-drive
      description: Export a Tableau view as PDF and upload it to a Google Drive folder.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: The Tableau site ID.
      - name: view_id
        in: body
        type: string
        description: The Tableau view ID to export.
      - name: drive_folder_id
        in: body
        type: string
        description: The Google Drive folder ID for upload.
      steps:
      - name: export-pdf
        type: call
        call: tableau.export-view-pdf
        with:
          site_id: '{{site_id}}'
          view_id: '{{view_id}}'
      - name: upload-to-drive
        type: call
        call: googledrive.upload-file
        with:
          folder_id: '{{drive_folder_id}}'
          file_name: tableau_export_{{view_id}}.pdf
          content: '{{export-pdf.content}}'
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://ey-tableau.online.tableau.com/api/3.21
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: views
      path: /sites/{{site_id}}/views/{{view_id}}/pdf
      inputParameters:
      - name: site_id
        in: path
      - name: view_id
        in: path
      operations:
      - name: export-view-pdf
        method: GET
  - type: http
    namespace: googledrive
    baseUri: https://www.googleapis.com/upload/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_drive_token
    resources:
    - name: files
      path: /files?uploadType=multipart
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → tableau-dashboard-export.yml

Triggers an Alteryx Server workflow for client data transformation and notifies the advisory team via Slack with the job ID and status.

naftiko: '0.5'
info:
  label: Alteryx Workflow Execution
  description: Triggers an Alteryx Server workflow for client data transformation and notifies the advisory team via Slack with the job ID and status.
  tags:
  - advisory
  - data
  - alteryx
  - automation
  - slack
capability:
  exposes:
  - type: mcp
    namespace: data-workflows
    port: 8080
    tools:
    - name: run-alteryx-workflow
      description: Execute an Alteryx Server workflow and notify the team via Slack.
      inputParameters:
      - name: workflow_id
        in: body
        type: string
        description: The Alteryx Server workflow ID.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for job notifications.
      steps:
      - name: execute-workflow
        type: call
        call: alteryx.run-workflow
        with:
          workflow_id: '{{workflow_id}}'
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Alteryx workflow {{workflow_id}} submitted. Job ID: {{execute-workflow.job_id}}. Status: {{execute-workflow.status}}.'
  consumes:
  - type: http
    namespace: alteryx
    baseUri: https://ey-alteryx.gallery.alteryx.com/api/v3
    authentication:
      type: bearer
      token: $secrets.alteryx_token
    resources:
    - name: workflows
      path: /workflows/{{workflow_id}}/jobs
      inputParameters:
      - name: workflow_id
        in: path
      operations:
      - name: run-workflow
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → alteryx-workflow-execution.yml

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

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

Retrieves employee profile from Workday for EY.

naftiko: '0.5'
info:
  label: Workday Employee Profile Lookup
  description: Retrieves employee profile from Workday for EY.
  tags:
  - hr
  - workday
  - employee-directory
capability:
  exposes:
  - type: mcp
    namespace: workday-profile
    port: 8080
    tools:
    - name: get-employee-profile
      description: Look up EY employee in Workday.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Employee ID.
      call: workday.get-worker
      with:
        employee_id: '{{employee_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.worker.name
      - name: title
        type: string
        mapping: $.worker.title
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5.ey.com/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{employee_id}}
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-worker
        method: GET
Open in Framework → View in Fleet → workday-employee-profile-lookup.yml

Extracts a financial consolidation report from Oracle Hyperion by entity and period, then uploads the report data to a SharePoint audit workpaper library for engagement documentation.

naftiko: '0.5'
info:
  label: Oracle Hyperion Financial Report Extract
  description: Extracts a financial consolidation report from Oracle Hyperion by entity and period, then uploads the report data to a SharePoint audit workpaper library for engagement documentation.
  tags:
  - audit
  - finance
  - oracle-hyperion
  - consolidation
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: hyperion-reports
    port: 8080
    tools:
    - name: get-hyperion-report
      description: Extract an Oracle Hyperion consolidation report and upload to SharePoint.
      inputParameters:
      - name: entity
        in: body
        type: string
        description: The Hyperion entity name.
      - name: period
        in: body
        type: string
        description: The reporting period (e.g., FY2025).
      - name: scenario
        in: body
        type: string
        description: The scenario (e.g., Actual, Budget).
      - name: sharepoint_site
        in: body
        type: string
        description: The SharePoint site ID for workpaper storage.
      steps:
      - name: fetch-report
        type: call
        call: hyperion.get-report
        with:
          entity: '{{entity}}'
          period: '{{period}}'
          scenario: '{{scenario}}'
      - name: upload-to-sharepoint
        type: call
        call: sharepoint.upload-file
        with:
          site_id: '{{sharepoint_site}}'
          folder_path: Workpapers/Hyperion
          file_name: Hyperion_{{entity}}_{{period}}_{{scenario}}.json
          content: '{{fetch-report.report_data}}'
  consumes:
  - type: http
    namespace: hyperion
    baseUri: https://ey-hyperion.oraclecloud.com/HyperionPlanning/rest/v3
    authentication:
      type: basic
      username: $secrets.hyperion_user
      password: $secrets.hyperion_password
    resources:
    - name: reports
      path: /applications/HFM/reports?entity={{entity}}&period={{period}}&scenario={{scenario}}
      inputParameters:
      - name: entity
        in: query
      - name: period
        in: query
      - name: scenario
        in: query
      operations:
      - name: get-report
        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
Open in Framework → View in Fleet → oracle-hyperion-financial-report-extract.yml

Retrieves vendor details from Oracle E-Business Suite by vendor ID. Used by EY audit teams to validate accounts payable vendor master data.

naftiko: '0.5'
info:
  label: Oracle E-Business Suite Vendor Lookup
  description: Retrieves vendor details from Oracle E-Business Suite by vendor ID. Used by EY audit teams to validate accounts payable vendor master data.
  tags:
  - audit
  - erp
  - oracle-e-business-suite
  - accounts-payable
capability:
  exposes:
  - type: mcp
    namespace: ebs-vendors
    port: 8080
    tools:
    - name: get-vendor
      description: Look up a vendor in Oracle E-Business Suite by vendor ID.
      inputParameters:
      - name: vendor_id
        in: body
        type: string
        description: The Oracle EBS vendor ID.
      call: ebs.get-vendor
      with:
        vendor_id: '{{vendor_id}}'
      outputParameters:
      - name: vendor_name
        type: string
        mapping: $.VendorName
      - name: vendor_type
        type: string
        mapping: $.VendorType
      - name: payment_terms
        type: string
        mapping: $.PaymentTerms
      - name: active_flag
        type: string
        mapping: $.EnabledFlag
  consumes:
  - type: http
    namespace: ebs
    baseUri: https://ey-ebs.oraclecloud.com/webservices/rest
    authentication:
      type: basic
      username: $secrets.ebs_user
      password: $secrets.ebs_password
    resources:
    - name: vendors
      path: /suppliers/{{vendor_id}}
      inputParameters:
      - name: vendor_id
        in: path
      operations:
      - name: get-vendor
        method: GET
Open in Framework → View in Fleet → oracle-e-business-suite-vendor-lookup.yml

Creates a Google Forms survey for post-engagement client feedback and sends the form link to the client contact via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Client Feedback Survey via Google Forms
  description: Creates a Google Forms survey for post-engagement client feedback and sends the form link to the client contact via Microsoft Outlook.
  tags:
  - client-engagement
  - google-forms
  - microsoft-outlook
  - feedback
capability:
  exposes:
  - type: mcp
    namespace: client-feedback
    port: 8080
    tools:
    - name: send-feedback-survey
      description: Create a Google Forms feedback survey and send the link to the client contact.
      inputParameters:
      - name: form_template_id
        in: body
        type: string
        description: The Google Forms template ID.
      - name: client_email
        in: body
        type: string
        description: The client contact email.
      - name: engagement_name
        in: body
        type: string
        description: The engagement name for context.
      steps:
      - name: create-form
        type: call
        call: googleforms.create-form
        with:
          template_id: '{{form_template_id}}'
          title: EY Engagement Feedback - {{engagement_name}}
      - name: send-email
        type: call
        call: outlook.send-mail
        with:
          to: '{{client_email}}'
          subject: We value your feedback - {{engagement_name}}
          body: 'Thank you for working with EY. Please share your feedback: {{create-form.responder_uri}}'
  consumes:
  - type: http
    namespace: googleforms
    baseUri: https://forms.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_forms_token
    resources:
    - name: forms
      path: /forms
      operations:
      - name: create-form
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → client-feedback-survey-via-google-forms.yml

Checks ES index at EY.

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

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

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

Retrieves employee compensation data from Workday, compares against market benchmarks in a Snowflake analytics warehouse, and generates a summary report posted to the HR Confluence space.

naftiko: '0.5'
info:
  label: Workday Compensation Review Pipeline
  description: Retrieves employee compensation data from Workday, compares against market benchmarks in a Snowflake analytics warehouse, and generates a summary report posted to the HR Confluence space.
  tags:
  - hr
  - compensation
  - workday
  - snowflake
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: compensation-review
    port: 8080
    tools:
    - name: run-compensation-review
      description: Compare employee compensation against market benchmarks and publish a summary to Confluence.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: The Workday worker ID.
      - name: job_profile
        in: body
        type: string
        description: The job profile code for benchmark comparison.
      - name: confluence_space
        in: body
        type: string
        description: The Confluence space key for the HR team.
      steps:
      - name: get-compensation
        type: call
        call: workday.get-compensation
        with:
          worker_id: '{{worker_id}}'
      - name: get-benchmark
        type: call
        call: snowflake.execute-sql
        with:
          warehouse: EY_HR_WH
          database: COMPENSATION_DB
          statement: SELECT median_salary, p75_salary FROM market_benchmarks WHERE job_profile = '{{job_profile}}'
      - name: publish-review
        type: call
        call: confluence.create-page
        with:
          space_key: '{{confluence_space}}'
          title: Compensation Review - {{get-compensation.employee_name}}
          body: 'Current base: {{get-compensation.base_salary}}. Market median: {{get-benchmark.data[0][0]}}. Market P75: {{get-benchmark.data[0][1]}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: compensation
      path: /workers/{{worker_id}}/compensation
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-compensation
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://ey-partner.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-sql
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://ey-collab.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → workday-compensation-review-pipeline.yml

Retrieves a general ledger account balance from SAP S/4HANA by company code and fiscal year, then posts the balance summary to the audit engagement Slack channel for team visibility.

naftiko: '0.5'
info:
  label: SAP S/4HANA General Ledger Lookup
  description: Retrieves a general ledger account balance from SAP S/4HANA by company code and fiscal year, then posts the balance summary to the audit engagement Slack channel for team visibility.
  tags:
  - audit
  - finance
  - sap
  - sap-s4hana
  - general-ledger
  - slack
capability:
  exposes:
  - type: mcp
    namespace: audit-gl
    port: 8080
    tools:
    - name: get-gl-balance
      description: Look up a SAP S/4HANA general ledger account balance and notify the audit team via Slack.
      inputParameters:
      - name: company_code
        in: body
        type: string
        description: The SAP company code (4-digit).
      - name: gl_account
        in: body
        type: string
        description: The general ledger account number.
      - name: fiscal_year
        in: body
        type: string
        description: The fiscal year (YYYY).
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel for audit notifications.
      steps:
      - name: fetch-balance
        type: call
        call: sap.get-gl-balance
        with:
          company_code: '{{company_code}}'
          gl_account: '{{gl_account}}'
          fiscal_year: '{{fiscal_year}}'
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'GL {{gl_account}} ({{company_code}}, FY{{fiscal_year}}): Balance {{fetch-balance.balance}} {{fetch-balance.currency}}. Debits: {{fetch-balance.debit_total}}, Credits: {{fetch-balance.credit_total}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://ey-s4.sap.com/sap/opu/odata/sap/API_GLACCOUNTBALANCE
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    - name: sap-client
      in: header
      value: '100'
    resources:
    - name: gl-balances
      path: /GLAccountBalanceSet(CompanyCode='{{company_code}}',GLAccount='{{gl_account}}',FiscalYear='{{fiscal_year}}')
      inputParameters:
      - name: company_code
        in: path
      - name: gl_account
        in: path
      - name: fiscal_year
        in: path
      operations:
      - name: get-gl-balance
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → sap-s-4hana-general-ledger-lookup.yml

Retrieves high-severity security alerts from Microsoft Sentinel and creates corresponding ServiceNow incidents for the EY cybersecurity advisory team to investigate.

naftiko: '0.5'
info:
  label: Microsoft Sentinel Security Alert Triage
  description: Retrieves high-severity security alerts from Microsoft Sentinel and creates corresponding ServiceNow incidents for the EY cybersecurity advisory team to investigate.
  tags:
  - advisory
  - security
  - microsoft-sentinel
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: security-triage
    port: 8080
    tools:
    - name: triage-sentinel-alerts
      description: Pull high-severity Sentinel alerts and create ServiceNow incidents for investigation.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: The Log Analytics workspace ID for Sentinel.
      - name: severity
        in: body
        type: string
        description: Alert severity filter (e.g., High, Critical).
      steps:
      - name: get-alerts
        type: call
        call: sentinel.get-alerts
        with:
          workspace_id: '{{workspace_id}}'
          severity: '{{severity}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Sentinel Alert: {{get-alerts.alerts[0].title}}'
          category: security_incident
          priority: '1'
          description: 'Severity: {{severity}}. Alert count: {{get-alerts.alert_count}}. First alert: {{get-alerts.alerts[0].description}}.'
  consumes:
  - type: http
    namespace: sentinel
    baseUri: https://management.azure.com/subscriptions/$secrets.azure_subscription_id/resourceGroups/$secrets.azure_resource_group/providers/Microsoft.OperationalInsights/workspaces
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: alerts
      path: /{{workspace_id}}/providers/Microsoft.SecurityInsights/incidents?api-version=2023-11-01&$filter=properties/severity eq '{{severity}}'
      inputParameters:
      - name: workspace_id
        in: path
      - name: severity
        in: query
      operations:
      - name: get-alerts
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://ey.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → microsoft-sentinel-security-alert-triage.yml

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

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

Checks Terraform workspace at EY.

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

Checks Datadog monitor at EY.

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

Checks on-call at EY.

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

Creates a ServiceNow change request for a client IT environment change, routes it for CAB approval, and notifies the implementation team in Microsoft Teams once approved.

naftiko: '0.5'
info:
  label: ServiceNow Change Request Approval Pipeline
  description: Creates a ServiceNow change request for a client IT environment change, routes it for CAB approval, and notifies the implementation team in Microsoft Teams once approved.
  tags:
  - consulting
  - it-service-management
  - servicenow
  - microsoft-teams
  - change-management
capability:
  exposes:
  - type: mcp
    namespace: change-management
    port: 8080
    tools:
    - name: submit-change-request
      description: Create a ServiceNow change request and notify the implementation team in Teams.
      inputParameters:
      - name: short_description
        in: body
        type: string
        description: Short description of the change.
      - name: change_type
        in: body
        type: string
        description: Type of change (Normal, Standard, Emergency).
      - name: assigned_group
        in: body
        type: string
        description: The group responsible for implementation.
      - name: teams_channel_webhook
        in: body
        type: string
        description: The Microsoft Teams webhook URL for notifications.
      steps:
      - name: create-change
        type: call
        call: servicenow.create-change
        with:
          short_description: '{{short_description}}'
          type: '{{change_type}}'
          assignment_group: '{{assigned_group}}'
      - name: notify-team
        type: call
        call: msteams.send-webhook
        with:
          webhook_url: '{{teams_channel_webhook}}'
          text: 'Change request {{create-change.number}} created: {{short_description}}. Type: {{change_type}}. Assigned to: {{assigned_group}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://ey.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: webhooks
      path: /{{webhook_url}}
      inputParameters:
      - name: webhook_url
        in: path
      operations:
      - name: send-webhook
        method: POST
Open in Framework → View in Fleet → servicenow-change-request-approval-pipeline.yml

Checks Redis at EY.

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

Checks IT incident in ServiceNow for EY.

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

Pulls client financial data from Bloomberg, retrieves engagement history from Salesforce, generates a risk score summary, and posts findings to the engagement Confluence space.

naftiko: '0.5'
info:
  label: Client Risk Assessment Pipeline
  description: Pulls client financial data from Bloomberg, retrieves engagement history from Salesforce, generates a risk score summary, and posts findings to the engagement Confluence space.
  tags:
  - advisory
  - risk-management
  - bloomberg
  - salesforce
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: risk-assessment
    port: 8080
    tools:
    - name: assess-client-risk
      description: Given a Bloomberg ticker and Salesforce account ID, compile client financial indicators and engagement history into a risk summary posted to Confluence.
      inputParameters:
      - name: ticker
        in: body
        type: string
        description: Bloomberg ticker symbol for the client entity.
      - name: account_id
        in: body
        type: string
        description: Salesforce account ID for the client.
      - name: confluence_space
        in: body
        type: string
        description: Confluence space key for the engagement.
      steps:
      - name: get-financials
        type: call
        call: bloomberg.get-company-data
        with:
          ticker: '{{ticker}}'
      - name: get-engagement-history
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{account_id}}'
      - name: publish-assessment
        type: call
        call: confluence.create-page
        with:
          space_key: '{{confluence_space}}'
          title: Risk Assessment - {{get-financials.company_name}}
          body: 'Revenue: {{get-financials.revenue}}. Debt-to-equity: {{get-financials.debt_equity_ratio}}. Last engagement: {{get-engagement-history.last_engagement_date}}. Engagement count: {{get-engagement-history.opportunity_count}}.'
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: company-data
      path: /catalogs/bbg/fields?identifier={{ticker}}
      inputParameters:
      - name: ticker
        in: query
      operations:
      - name: get-company-data
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://ey.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://ey-collab.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → client-risk-assessment-pipeline.yml

Retrieves supplier risk data from SAP Ariba for a specified vendor, pulls additional financial data from Bloomberg, and posts a consolidated risk summary to the advisory Confluence space.

naftiko: '0.5'
info:
  label: SAP Ariba Supplier Risk Review
  description: Retrieves supplier risk data from SAP Ariba for a specified vendor, pulls additional financial data from Bloomberg, and posts a consolidated risk summary to the advisory Confluence space.
  tags:
  - advisory
  - procurement
  - sap-ariba
  - bloomberg
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: supplier-risk
    port: 8080
    tools:
    - name: review-supplier-risk
      description: Compile supplier risk data from SAP Ariba and Bloomberg financial indicators into a Confluence summary.
      inputParameters:
      - name: supplier_id
        in: body
        type: string
        description: The SAP Ariba supplier ID.
      - name: ticker
        in: body
        type: string
        description: Bloomberg ticker for the supplier entity.
      - name: confluence_space
        in: body
        type: string
        description: Confluence space key for the advisory engagement.
      steps:
      - name: get-supplier-data
        type: call
        call: ariba.get-supplier
        with:
          supplier_id: '{{supplier_id}}'
      - name: get-financial-data
        type: call
        call: bloomberg.get-company-data
        with:
          ticker: '{{ticker}}'
      - name: publish-summary
        type: call
        call: confluence.create-page
        with:
          space_key: '{{confluence_space}}'
          title: Supplier Risk Review - {{get-supplier-data.supplier_name}}
          body: 'Supplier: {{get-supplier-data.supplier_name}}. Risk score: {{get-supplier-data.risk_score}}. Revenue: {{get-financial-data.revenue}}. Credit rating: {{get-financial-data.credit_rating}}.'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/supplier-management/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    inputParameters:
    - name: apiKey
      in: header
      value: $secrets.ariba_api_key
    resources:
    - name: suppliers
      path: /suppliers/{{supplier_id}}
      inputParameters:
      - name: supplier_id
        in: path
      operations:
      - name: get-supplier
        method: GET
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: company-data
      path: /catalogs/bbg/fields?identifier={{ticker}}
      inputParameters:
      - name: ticker
        in: query
      operations:
      - name: get-company-data
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://ey-collab.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → sap-ariba-supplier-risk-review.yml

Extracts data from a SAP HANA view for EY advisory analytics. Returns a result set used for client data modeling and transformation projects.

naftiko: '0.5'
info:
  label: SAP HANA Data Extraction for Analytics
  description: Extracts data from a SAP HANA view for EY advisory analytics. Returns a result set used for client data modeling and transformation projects.
  tags:
  - advisory
  - data
  - sap-hana
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: hana-analytics
    port: 8080
    tools:
    - name: query-hana-view
      description: Execute a query against a SAP HANA calculation view and return the result set.
      inputParameters:
      - name: schema
        in: body
        type: string
        description: The HANA schema name.
      - name: view_name
        in: body
        type: string
        description: The calculation view name.
      - name: top_rows
        in: body
        type: string
        description: Number of rows to return.
      call: hana.query-view
      with:
        schema: '{{schema}}'
        view_name: '{{view_name}}'
        top: '{{top_rows}}'
      outputParameters:
      - name: row_count
        type: string
        mapping: $.d.__count
      - name: results
        type: string
        mapping: $.d.results
  consumes:
  - type: http
    namespace: hana
    baseUri: https://ey-hana.sap.com/sap/hana/xs/odata
    authentication:
      type: basic
      username: $secrets.hana_user
      password: $secrets.hana_password
    resources:
    - name: views
      path: /{{schema}}/{{view_name}}.xsodata/Query?$top={{top}}&$format=json
      inputParameters:
      - name: schema
        in: path
      - name: view_name
        in: path
      - name: top
        in: query
      operations:
      - name: query-view
        method: GET
Open in Framework → View in Fleet → sap-hana-data-extraction-for-analytics.yml

Triggers an Azure DevOps build pipeline for EY internal tools and posts the build result to the development Slack channel.

naftiko: '0.5'
info:
  label: Azure DevOps Build Pipeline Trigger
  description: Triggers an Azure DevOps build pipeline for EY internal tools and posts the build result to the development Slack channel.
  tags:
  - development
  - ci-cd
  - azure-devops
  - slack
capability:
  exposes:
  - type: mcp
    namespace: devops-builds
    port: 8080
    tools:
    - name: trigger-build-pipeline
      description: Trigger an Azure DevOps build pipeline and notify Slack with the result.
      inputParameters:
      - name: organization
        in: body
        type: string
        description: The Azure DevOps organization name.
      - name: project
        in: body
        type: string
        description: The Azure DevOps project name.
      - name: pipeline_id
        in: body
        type: string
        description: The pipeline definition ID.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for build notifications.
      steps:
      - name: queue-build
        type: call
        call: azuredevops.queue-build
        with:
          organization: '{{organization}}'
          project: '{{project}}'
          definition_id: '{{pipeline_id}}'
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Build #{{queue-build.build_number}} queued for pipeline {{pipeline_id}} in {{project}}. Status: {{queue-build.status}}.'
  consumes:
  - type: http
    namespace: azuredevops
    baseUri: https://dev.azure.com
    authentication:
      type: basic
      username: $secrets.azuredevops_user
      password: $secrets.azuredevops_pat
    resources:
    - name: builds
      path: /{{organization}}/{{project}}/_apis/build/builds?api-version=7.0
      inputParameters:
      - name: organization
        in: path
      - name: project
        in: path
      operations:
      - name: queue-build
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → azure-devops-build-pipeline-trigger.yml

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

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

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

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

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

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

Retrieves a pending invoice from Coupa, validates against the SAP purchase order, and routes for approval via Microsoft Power Automate.

naftiko: '0.5'
info:
  label: Coupa Invoice Processing Workflow
  description: Retrieves a pending invoice from Coupa, validates against the SAP purchase order, and routes for approval via Microsoft Power Automate.
  tags:
  - finance
  - procurement
  - coupa
  - sap
  - microsoft-power-automate
capability:
  exposes:
  - type: mcp
    namespace: invoice-processing
    port: 8080
    tools:
    - name: process-invoice
      description: Validate a Coupa invoice against SAP PO data and trigger approval workflow.
      inputParameters:
      - name: invoice_id
        in: body
        type: string
        description: The Coupa invoice ID.
      - name: po_number
        in: body
        type: string
        description: The SAP purchase order number.
      - name: flow_url
        in: body
        type: string
        description: The Power Automate flow trigger URL.
      steps:
      - name: get-invoice
        type: call
        call: coupa.get-invoice
        with:
          invoice_id: '{{invoice_id}}'
      - name: get-po
        type: call
        call: sap.get-po
        with:
          po_number: '{{po_number}}'
      - name: trigger-approval
        type: call
        call: powerautomate.trigger-flow
        with:
          flow_url: '{{flow_url}}'
          invoice_amount: '{{get-invoice.total}}'
          po_amount: '{{get-po.total_value}}'
          vendor: '{{get-invoice.supplier_name}}'
  consumes:
  - type: http
    namespace: coupa
    baseUri: https://ey-client.coupahost.com/api
    authentication:
      type: bearer
      token: $secrets.coupa_token
    resources:
    - name: invoices
      path: /invoices/{{invoice_id}}
      inputParameters:
      - name: invoice_id
        in: path
      operations:
      - name: get-invoice
        method: GET
  - type: http
    namespace: sap
    baseUri: https://ey-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    - name: sap-client
      in: header
      value: '100'
    resources:
    - name: purchase-orders
      path: /A_PurchaseOrder('{{po_number}}')
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-po
        method: GET
  - type: http
    namespace: powerautomate
    baseUri: https://prod-00.westus.logic.azure.com
    authentication:
      type: none
    resources:
    - name: flows
      path: /{{flow_url}}
      inputParameters:
      - name: flow_url
        in: path
      operations:
      - name: trigger-flow
        method: POST
Open in Framework → View in Fleet → coupa-invoice-processing-workflow.yml

Verifies backups at EY.

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

Reallocates costs at EY.

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

Uploads finalized audit workpapers to an Amazon S3 bucket for long-term archival, following EY document retention policies.

naftiko: '0.5'
info:
  label: Amazon S3 Audit Archive Upload
  description: Uploads finalized audit workpapers to an Amazon S3 bucket for long-term archival, following EY document retention policies.
  tags:
  - audit
  - archive
  - amazon-s3
  - document-management
capability:
  exposes:
  - type: mcp
    namespace: audit-archive
    port: 8080
    tools:
    - name: archive-to-s3
      description: Upload a finalized audit document to an S3 archive bucket.
      inputParameters:
      - name: bucket_name
        in: body
        type: string
        description: The S3 bucket name.
      - name: object_key
        in: body
        type: string
        description: The S3 object key (file path).
      - name: file_content
        in: body
        type: string
        description: Base64-encoded file content.
      call: s3.put-object
      with:
        bucket: '{{bucket_name}}'
        key: '{{object_key}}'
        body: '{{file_content}}'
      outputParameters:
      - name: etag
        type: string
        mapping: $.ETag
      - name: version_id
        type: string
        mapping: $.VersionId
  consumes:
  - type: http
    namespace: s3
    baseUri: https://{{bucket}}.s3.amazonaws.com
    authentication:
      type: awsSigV4
      accessKeyId: $secrets.aws_access_key_id
      secretAccessKey: $secrets.aws_secret_access_key
      region: us-east-1
    resources:
    - name: objects
      path: /{{key}}
      inputParameters:
      - name: key
        in: path
      operations:
      - name: put-object
        method: PUT
Open in Framework → View in Fleet → amazon-s3-audit-archive-upload.yml

Retrieves the current health status of monitored infrastructure from Datadog and posts an alert to Slack if the host is down. Used by EY technology consulting teams.

naftiko: '0.5'
info:
  label: Datadog Infrastructure Monitoring Check
  description: Retrieves the current health status of monitored infrastructure from Datadog and posts an alert to Slack if the host is down. Used by EY technology consulting teams.
  tags:
  - consulting
  - monitoring
  - datadog
  - infrastructure
  - slack
capability:
  exposes:
  - type: mcp
    namespace: infra-monitoring
    port: 8080
    tools:
    - name: get-host-status
      description: Check a Datadog host status and alert the Slack channel if the host is unhealthy.
      inputParameters:
      - name: hostname
        in: body
        type: string
        description: The hostname to check in Datadog.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for infrastructure alerts.
      steps:
      - name: check-host
        type: call
        call: datadog.get-host
        with:
          hostname: '{{hostname}}'
      - name: alert-slack
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Host {{hostname}} status: {{check-host.status}}. Apps: {{check-host.apps}}. Last reported: {{check-host.last_reported}}.'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    inputParameters:
    - name: DD-APPLICATION-KEY
      in: header
      value: $secrets.datadog_app_key
    resources:
    - name: hosts
      path: /hosts?filter={{hostname}}
      inputParameters:
      - name: hostname
        in: query
      operations:
      - name: get-host
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → datadog-infrastructure-monitoring-check.yml

Retrieves sprint progress at EY.

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

Retrieves the applicable tax rate from Avalara for a given jurisdiction and transaction type. Used by EY indirect tax teams to validate client tax calculations.

naftiko: '0.5'
info:
  label: Avalara Tax Rate Lookup
  description: Retrieves the applicable tax rate from Avalara for a given jurisdiction and transaction type. Used by EY indirect tax teams to validate client tax calculations.
  tags:
  - tax
  - indirect-tax
  - avalara
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: tax-rates
    port: 8080
    tools:
    - name: get-tax-rate
      description: Look up the Avalara tax rate by jurisdiction and tax type.
      inputParameters:
      - name: jurisdiction
        in: body
        type: string
        description: The tax jurisdiction (e.g., US-CA).
      - name: tax_type
        in: body
        type: string
        description: The tax type (e.g., SalesTax, UseTax).
      call: avalara.get-rate
      with:
        jurisdiction: '{{jurisdiction}}'
        tax_type: '{{tax_type}}'
      outputParameters:
      - name: rate
        type: string
        mapping: $.totalRate
      - name: effective_date
        type: string
        mapping: $.effectiveDate
  consumes:
  - type: http
    namespace: avalara
    baseUri: https://rest.avatax.com/api/v2
    authentication:
      type: basic
      username: $secrets.avalara_user
      password: $secrets.avalara_password
    resources:
    - name: tax-rates
      path: /taxrates/byaddress?country=US&region={{jurisdiction}}&taxType={{tax_type}}
      inputParameters:
      - name: jurisdiction
        in: query
      - name: tax_type
        in: query
      operations:
      - name: get-rate
        method: GET
Open in Framework → View in Fleet → avalara-tax-rate-lookup.yml

Retrieves a ServiceNow incident by number and posts the status summary to the specified Microsoft Teams channel. Used by EY IT support and engagement teams to share ticket updates.

naftiko: '0.5'
info:
  label: ServiceNow Incident Lookup and Teams Alert
  description: Retrieves a ServiceNow incident by number and posts the status summary to the specified Microsoft Teams channel. Used by EY IT support and engagement teams to share ticket updates.
  tags:
  - it-service-management
  - servicenow
  - incident
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: itsm-incidents
    port: 8080
    tools:
    - name: get-incident
      description: Look up a ServiceNow incident and post status to a Teams channel.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number (e.g., INC0012345).
      - name: teams_channel_webhook
        in: body
        type: string
        description: The Microsoft Teams incoming webhook URL.
      steps:
      - name: fetch-incident
        type: call
        call: servicenow.get-incident
        with:
          incident_number: '{{incident_number}}'
      - name: post-to-teams
        type: call
        call: msteams.send-webhook
        with:
          webhook_url: '{{teams_channel_webhook}}'
          text: 'Incident {{incident_number}}: {{fetch-incident.short_description}}. Priority: {{fetch-incident.priority}}. State: {{fetch-incident.state}}. Assigned to: {{fetch-incident.assigned_group}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://ey.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident?sysparm_query=number={{incident_number}}
      inputParameters:
      - name: incident_number
        in: query
      operations:
      - name: get-incident
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: webhooks
      path: /{{webhook_url}}
      inputParameters:
      - name: webhook_url
        in: path
      operations:
      - name: send-webhook
        method: POST
Open in Framework → View in Fleet → servicenow-incident-lookup-and-teams-alert.yml

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

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

Executes a Splunk search query against security event logs and creates a ServiceNow incident if anomalies are detected. Used by EY cybersecurity teams during IT audit engagements.

naftiko: '0.5'
info:
  label: Splunk Security Log Query
  description: Executes a Splunk search query against security event logs and creates a ServiceNow incident if anomalies are detected. Used by EY cybersecurity teams during IT audit engagements.
  tags:
  - audit
  - security
  - splunk
  - log-analysis
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: security-logs
    port: 8080
    tools:
    - name: search-splunk-logs
      description: Execute a Splunk search and create a ServiceNow incident with findings.
      inputParameters:
      - name: search_query
        in: body
        type: string
        description: The Splunk SPL search query.
      - name: earliest_time
        in: body
        type: string
        description: Earliest time for the search (e.g., -24h).
      - name: latest_time
        in: body
        type: string
        description: Latest time for the search (e.g., now).
      steps:
      - name: run-search
        type: call
        call: splunk.create-search
        with:
          search: '{{search_query}}'
          earliest_time: '{{earliest_time}}'
          latest_time: '{{latest_time}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: Splunk security log findings - Search {{run-search.search_id}}
          category: security_review
          description: 'Splunk search completed. Search ID: {{run-search.search_id}}. Query: {{search_query}}. Time range: {{earliest_time}} to {{latest_time}}.'
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://ey-splunk.splunkcloud.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search-jobs
      path: /search/jobs
      operations:
      - name: create-search
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://ey.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → splunk-security-log-query.yml

Checks Vault secret at EY.

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

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

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

Submits time entries for EY professionals against engagement codes in Workday and sends a confirmation message via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Time Entry Submission
  description: Submits time entries for EY professionals against engagement codes in Workday and sends a confirmation message via Microsoft Teams.
  tags:
  - hr
  - time-tracking
  - workday
  - engagement
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: time-entry
    port: 8080
    tools:
    - name: submit-time-entry
      description: Submit a time entry in Workday and send a Teams confirmation.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: The Workday worker ID.
      - name: engagement_code
        in: body
        type: string
        description: The engagement billing code.
      - name: hours
        in: body
        type: string
        description: Number of hours to log.
      - name: work_date
        in: body
        type: string
        description: The date worked in YYYY-MM-DD format.
      - name: worker_email
        in: body
        type: string
        description: The employee email for Teams confirmation.
      steps:
      - name: log-time
        type: call
        call: workday.submit-time
        with:
          worker_id: '{{worker_id}}'
          engagement_code: '{{engagement_code}}'
          hours: '{{hours}}'
          work_date: '{{work_date}}'
      - name: confirm-entry
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{worker_email}}'
          text: 'Time entry confirmed: {{hours}} hours logged to {{engagement_code}} for {{work_date}}. Entry ID: {{log-time.time_entry_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: time-entries
      path: /workers/{{worker_id}}/timeEntries
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: submit-time
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-time-entry-submission.yml

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

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

Retrieves real-time market data from Refinitiv Eikon for a given instrument. Used by EY transaction advisory teams for deal valuation and market analysis.

naftiko: '0.5'
info:
  label: Refinitiv Eikon Market Data Lookup
  description: Retrieves real-time market data from Refinitiv Eikon for a given instrument. Used by EY transaction advisory teams for deal valuation and market analysis.
  tags:
  - advisory
  - transactions
  - refinitiv
  - market-data
capability:
  exposes:
  - type: mcp
    namespace: market-data
    port: 8080
    tools:
    - name: get-market-data
      description: Retrieve market data from Refinitiv Eikon by instrument RIC.
      inputParameters:
      - name: ric
        in: body
        type: string
        description: The Reuters Instrument Code (RIC).
      call: refinitiv.get-instrument
      with:
        ric: '{{ric}}'
      outputParameters:
      - name: last_price
        type: string
        mapping: $.data[0].fields.TRDPRC_1
      - name: market_cap
        type: string
        mapping: $.data[0].fields.MKT_CAP
      - name: pe_ratio
        type: string
        mapping: $.data[0].fields.PE_RATIO
  consumes:
  - type: http
    namespace: refinitiv
    baseUri: https://api.refinitiv.com/data/pricing/v1
    authentication:
      type: bearer
      token: $secrets.refinitiv_token
    resources:
    - name: instruments
      path: /views/summary/{{ric}}
      inputParameters:
      - name: ric
        in: path
      operations:
      - name: get-instrument
        method: GET
Open in Framework → View in Fleet → refinitiv-eikon-market-data-lookup.yml

On new audit engagement creation in ServiceNow, provisions a SharePoint document library, creates a Microsoft Teams channel for the engagement team, and sends calendar invites via Outlook for the planning meeting.

naftiko: '0.5'
info:
  label: Audit Engagement Kickoff Orchestrator
  description: On new audit engagement creation in ServiceNow, provisions a SharePoint document library, creates a Microsoft Teams channel for the engagement team, and sends calendar invites via Outlook for the planning meeting.
  tags:
  - audit
  - engagement
  - servicenow
  - sharepoint
  - microsoft-teams
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: audit-engagement
    port: 8080
    tools:
    - name: kickoff-audit-engagement
      description: Given an engagement ID and client name, orchestrate the full audit kickoff sequence across ServiceNow, SharePoint, Microsoft Teams, and Outlook.
      inputParameters:
      - name: engagement_id
        in: body
        type: string
        description: The ServiceNow engagement record ID.
      - name: client_name
        in: body
        type: string
        description: The client entity name for the audit engagement.
      - name: engagement_partner
        in: body
        type: string
        description: Email of the engagement partner leading the audit.
      - name: planning_date
        in: body
        type: string
        description: The planning meeting date in YYYY-MM-DD format.
      steps:
      - name: get-engagement
        type: call
        call: servicenow.get-engagement
        with:
          engagement_id: '{{engagement_id}}'
      - name: create-doc-library
        type: call
        call: sharepoint.create-folder
        with:
          site_id: ey_audit_engagements
          folder_path: Engagements/{{client_name}}_{{engagement_id}}
      - name: create-team-channel
        type: call
        call: msteams.create-channel
        with:
          team_id: ey-audit-team
          display_name: '{{client_name}} - {{engagement_id}}'
          description: Audit engagement channel for {{client_name}}
      - name: send-planning-invite
        type: call
        call: outlook.create-event
        with:
          organizer: '{{engagement_partner}}'
          subject: Audit Planning Meeting - {{client_name}}
          start_date: '{{planning_date}}'
          body: 'Kickoff planning for engagement {{engagement_id}}. Documents: {{create-doc-library.url}}. Channel: {{create-team-channel.url}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://ey.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: engagements
      path: /table/x_ey_engagement/{{engagement_id}}
      inputParameters:
      - name: engagement_id
        in: path
      operations:
      - name: get-engagement
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels
      inputParameters:
      - name: team_id
        in: path
      operations:
      - name: create-channel
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: events
      path: /users/{{organizer}}/events
      inputParameters:
      - name: organizer
        in: path
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → audit-engagement-kickoff-orchestrator.yml

Checks Grafana dashboard at EY.

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

Triggers an Informatica Cloud data quality job for client data validation during audit engagements and posts the run status to the audit Slack channel.

naftiko: '0.5'
info:
  label: Informatica Data Quality Job Runner
  description: Triggers an Informatica Cloud data quality job for client data validation during audit engagements and posts the run status to the audit Slack channel.
  tags:
  - audit
  - data-quality
  - informatica
  - automation
  - slack
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: run-data-quality-job
      description: Execute an Informatica Cloud data quality task and notify the team via Slack.
      inputParameters:
      - name: task_id
        in: body
        type: string
        description: The Informatica Cloud task ID.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for job status notifications.
      steps:
      - name: start-job
        type: call
        call: informatica.start-job
        with:
          task_id: '{{task_id}}'
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Informatica data quality job started. Task: {{task_id}}. Run ID: {{start-job.run_id}}. Status: {{start-job.status}}.'
  consumes:
  - type: http
    namespace: informatica
    baseUri: https://na1.dm-us.informaticacloud.com/saas/api/v2
    authentication:
      type: bearer
      token: $secrets.informatica_token
    resources:
    - name: jobs
      path: /job
      operations:
      - name: start-job
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → informatica-data-quality-job-runner.yml

When a new lead is captured in HubSpot, syncs the contact to Salesforce as a lead record and notifies the business development team via Microsoft Teams.

naftiko: '0.5'
info:
  label: HubSpot Lead Capture to Salesforce Sync
  description: When a new lead is captured in HubSpot, syncs the contact to Salesforce as a lead record and notifies the business development team via Microsoft Teams.
  tags:
  - business-development
  - hubspot
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: lead-sync
    port: 8080
    tools:
    - name: sync-lead-to-salesforce
      description: Sync a HubSpot contact to Salesforce as a lead and notify the BD team.
      inputParameters:
      - name: hubspot_contact_id
        in: body
        type: string
        description: The HubSpot contact ID.
      - name: teams_channel_id
        in: body
        type: string
        description: The Microsoft Teams channel ID for notifications.
      steps:
      - name: get-hubspot-contact
        type: call
        call: hubspot.get-contact
        with:
          contact_id: '{{hubspot_contact_id}}'
      - name: create-sf-lead
        type: call
        call: salesforce.create-lead
        with:
          first_name: '{{get-hubspot-contact.firstname}}'
          last_name: '{{get-hubspot-contact.lastname}}'
          email: '{{get-hubspot-contact.email}}'
          company: '{{get-hubspot-contact.company}}'
      - name: notify-bd-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: ey-business-development
          channel_id: '{{teams_channel_id}}'
          text: 'New lead synced: {{get-hubspot-contact.firstname}} {{get-hubspot-contact.lastname}} from {{get-hubspot-contact.company}}. Salesforce Lead ID: {{create-sf-lead.id}}.'
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /objects/contacts/{{contact_id}}
      inputParameters:
      - name: contact_id
        in: path
      operations:
      - name: get-contact
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://ey.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead
      operations:
      - name: create-lead
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → hubspot-lead-capture-to-salesforce-sync.yml

Creates a new knowledge article in Confluence from audit methodology updates, then notifies the relevant Microsoft Teams channel with a link to the published page.

naftiko: '0.5'
info:
  label: Confluence Knowledge Article Publisher
  description: Creates a new knowledge article in Confluence from audit methodology updates, then notifies the relevant Microsoft Teams channel with a link to the published page.
  tags:
  - knowledge-management
  - confluence
  - microsoft-teams
  - audit
capability:
  exposes:
  - type: mcp
    namespace: km-publish
    port: 8080
    tools:
    - name: publish-knowledge-article
      description: Create a Confluence page with the given title and body content, then notify the specified Teams channel.
      inputParameters:
      - name: space_key
        in: body
        type: string
        description: The Confluence space key.
      - name: title
        in: body
        type: string
        description: The page title.
      - name: body_content
        in: body
        type: string
        description: The page body in Confluence storage format.
      - name: teams_channel_webhook
        in: body
        type: string
        description: The Microsoft Teams incoming webhook URL.
      steps:
      - name: create-page
        type: call
        call: confluence.create-page
        with:
          space_key: '{{space_key}}'
          title: '{{title}}'
          body: '{{body_content}}'
      - name: notify-teams
        type: call
        call: msteams.send-webhook
        with:
          webhook_url: '{{teams_channel_webhook}}'
          text: 'New knowledge article published: [{{title}}]({{create-page.url}})'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://ey-collab.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: webhooks
      path: /{{webhook_url}}
      inputParameters:
      - name: webhook_url
        in: path
      operations:
      - name: send-webhook
        method: POST
Open in Framework → View in Fleet → confluence-knowledge-article-publisher.yml

Creates a case in Appian for tracking a regulatory inquiry, links it to the client's Salesforce account, and notifies the case owner via Slack.

naftiko: '0.5'
info:
  label: Appian Case Management Workflow
  description: Creates a case in Appian for tracking a regulatory inquiry, links it to the client's Salesforce account, and notifies the case owner via Slack.
  tags:
  - advisory
  - compliance
  - appian
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: case-management
    port: 8080
    tools:
    - name: create-regulatory-case
      description: Create an Appian case for a regulatory inquiry, link to Salesforce, and notify via Slack.
      inputParameters:
      - name: case_title
        in: body
        type: string
        description: Title for the regulatory case.
      - name: client_account_id
        in: body
        type: string
        description: The Salesforce account ID for the client.
      - name: case_owner_email
        in: body
        type: string
        description: Email of the case owner.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for case notifications.
      steps:
      - name: get-client
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{client_account_id}}'
      - name: create-case
        type: call
        call: appian.create-record
        with:
          record_type: regulatory_case
          title: '{{case_title}}'
          client_name: '{{get-client.Name}}'
          owner: '{{case_owner_email}}'
      - name: notify-owner
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'New regulatory case created: {{case_title}} for {{get-client.Name}}. Case ID: {{create-case.record_id}}. Owner: {{case_owner_email}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://ey.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: appian
    baseUri: https://ey-appian.appiancloud.com/suite/webapi
    authentication:
      type: bearer
      token: $secrets.appian_token
    resources:
    - name: records
      path: /records
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → appian-case-management-workflow.yml

Generates monthly security reports at EY from Splunk and Qualys.

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

Retrieves Teams activity at EY.

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

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

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

Checks build at EY.

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

Extracts payroll summary data from ADP for a specified pay period and employer. Used by EY tax teams to reconcile payroll tax liabilities.

naftiko: '0.5'
info:
  label: ADP Payroll Data Extraction for Tax
  description: Extracts payroll summary data from ADP for a specified pay period and employer. Used by EY tax teams to reconcile payroll tax liabilities.
  tags:
  - tax
  - payroll
  - adp
  - reconciliation
capability:
  exposes:
  - type: mcp
    namespace: payroll-tax
    port: 8080
    tools:
    - name: get-payroll-summary
      description: Retrieve ADP payroll summary by employer and pay period.
      inputParameters:
      - name: employer_id
        in: body
        type: string
        description: The ADP employer ID.
      - name: pay_period
        in: body
        type: string
        description: The pay period end date in YYYY-MM-DD format.
      call: adp.get-payroll-summary
      with:
        employer_id: '{{employer_id}}'
        pay_period: '{{pay_period}}'
      outputParameters:
      - name: gross_pay
        type: string
        mapping: $.payrollSummary.grossPay.amount
      - name: total_taxes
        type: string
        mapping: $.payrollSummary.totalTaxes.amount
      - name: net_pay
        type: string
        mapping: $.payrollSummary.netPay.amount
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/payroll/v1
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: payroll-summaries
      path: /employers/{{employer_id}}/pay-statements?payPeriodEndDate={{pay_period}}
      inputParameters:
      - name: employer_id
        in: path
      - name: pay_period
        in: query
      operations:
      - name: get-payroll-summary
        method: GET
Open in Framework → View in Fleet → adp-payroll-data-extraction-for-tax.yml

Runs a Databricks notebook to perform audit analytics on client data and posts the run URL to the engagement Slack channel.

naftiko: '0.5'
info:
  label: Databricks Notebook Execution for Audit Analytics
  description: Runs a Databricks notebook to perform audit analytics on client data and posts the run URL to the engagement Slack channel.
  tags:
  - audit
  - analytics
  - databricks
  - slack
capability:
  exposes:
  - type: mcp
    namespace: audit-analytics
    port: 8080
    tools:
    - name: run-audit-notebook
      description: Execute a Databricks notebook for audit analytics and notify the team via Slack.
      inputParameters:
      - name: notebook_path
        in: body
        type: string
        description: The Databricks notebook path.
      - name: cluster_id
        in: body
        type: string
        description: The Databricks cluster ID.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for notification.
      steps:
      - name: submit-run
        type: call
        call: databricks.submit-run
        with:
          notebook_path: '{{notebook_path}}'
          cluster_id: '{{cluster_id}}'
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Audit analytics notebook submitted. Run ID: {{submit-run.run_id}}. Track at: {{submit-run.run_page_url}}'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://ey-workspace.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs-runs
      path: /jobs/runs/submit
      operations:
      - name: submit-run
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → databricks-notebook-execution-for-audit-analytics.yml

Creates a Jira issue for a new audit or advisory task, assigns it to the specified team member, and links the issue to the engagement Confluence page.

naftiko: '0.5'
info:
  label: Jira Engagement Task Creator
  description: Creates a Jira issue for a new audit or advisory task, assigns it to the specified team member, and links the issue to the engagement Confluence page.
  tags:
  - project-management
  - jira
  - confluence
  - engagement
capability:
  exposes:
  - type: mcp
    namespace: task-management
    port: 8080
    tools:
    - name: create-engagement-task
      description: Create a Jira issue for an engagement task, assign it, and link to the Confluence engagement page.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The Jira project key.
      - name: summary
        in: body
        type: string
        description: The task summary.
      - name: assignee_email
        in: body
        type: string
        description: Email of the assignee.
      - name: confluence_page_id
        in: body
        type: string
        description: The Confluence page ID to link.
      steps:
      - name: create-issue
        type: call
        call: jira.create-issue
        with:
          project_key: '{{project_key}}'
          summary: '{{summary}}'
          assignee: '{{assignee_email}}'
          issue_type: Task
      - name: add-confluence-link
        type: call
        call: jira.add-remote-link
        with:
          issue_key: '{{create-issue.key}}'
          url: https://ey-collab.atlassian.net/wiki/pages/viewpage.action?pageId={{confluence_page_id}}
          title: Engagement Documentation
  consumes:
  - type: http
    namespace: jira
    baseUri: https://ey-collab.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
    - name: remote-links
      path: /issue/{{issue_key}}/remotelink
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: add-remote-link
        method: POST
Open in Framework → View in Fleet → jira-engagement-task-creator.yml

Creates postmortems at EY.

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

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

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

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

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

Uploads an audit workpaper document to a SharePoint engagement site and notifies the engagement manager via Outlook email.

naftiko: '0.5'
info:
  label: SharePoint Audit Workpaper Upload
  description: Uploads an audit workpaper document to a SharePoint engagement site and notifies the engagement manager via Outlook email.
  tags:
  - audit
  - document-management
  - sharepoint
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: workpaper-mgmt
    port: 8080
    tools:
    - name: upload-workpaper
      description: Upload a workpaper to SharePoint and notify the engagement manager.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: The SharePoint site ID.
      - name: folder_path
        in: body
        type: string
        description: The folder path within the document library.
      - name: file_name
        in: body
        type: string
        description: Name of the file to upload.
      - name: file_content
        in: body
        type: string
        description: Base64-encoded file content.
      - name: manager_email
        in: body
        type: string
        description: Email of the engagement manager.
      steps:
      - name: upload-file
        type: call
        call: sharepoint.upload-file
        with:
          site_id: '{{site_id}}'
          folder_path: '{{folder_path}}'
          file_name: '{{file_name}}'
          content: '{{file_content}}'
      - name: send-notification
        type: call
        call: outlook.send-mail
        with:
          to: '{{manager_email}}'
          subject: 'Workpaper uploaded: {{file_name}}'
          body: 'A new workpaper has been uploaded to {{folder_path}}/{{file_name}}. View at: {{upload-file.webUrl}}'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → sharepoint-audit-workpaper-upload.yml

Retrieves vulnerability assessment scan results from Nessus for infrastructure security engagements.

naftiko: '0.5'
info:
  label: Nessus Vulnerability Report Lookup
  description: Retrieves vulnerability assessment scan results from Nessus for infrastructure security engagements.
  tags:
  - cybersecurity
  - nessus
capability:
  exposes:
  - type: mcp
    namespace: vuln-assessment
    port: 8080
    tools:
    - name: get-nessus-report
      description: Retrieve Nessus vulnerability scan report by scan ID.
      inputParameters:
      - name: scan_id
        in: body
        type: string
        description: The Nessus scan identifier.
      call: nessus.get-report
      with:
        scan_id: '{{scan_id}}'
      outputParameters:
      - name: critical
        type: integer
        mapping: $.hosts[0].critical
      - name: high
        type: integer
        mapping: $.hosts[0].high
      - name: total_hosts
        type: integer
        mapping: $.hostcount
  consumes:
  - type: http
    namespace: nessus
    baseUri: https://kpmg-nessus.kpmg.com:8834
    authentication:
      type: apiKey
      header: X-ApiKeys
      key: $secrets.nessus_api_keys
    resources:
    - name: scans
      path: /scans/{{scan_id}}
      inputParameters:
      - name: scan_id
        in: path
      operations:
      - name: get-report
        method: GET
Open in Framework → View in Fleet → nessus-vulnerability-report-lookup.yml

On vendor onboarding, screens the vendor in Dow Jones, retrieves their SOC 2 report from Box, creates a risk assessment in ServiceNow GRC, assigns a review task in Jira, and notifies the procurement team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Third-Party Risk Management Orchestrator
  description: On vendor onboarding, screens the vendor in Dow Jones, retrieves their SOC 2 report from Box, creates a risk assessment in ServiceNow GRC, assigns a review task in Jira, and notifies the procurement team via Microsoft Teams.
  tags:
  - risk
  - vendor-management
  - third-party-risk
  - dow-jones
  - box
  - servicenow
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: tprm
    port: 8080
    tools:
    - name: onboard-vendor-risk
      description: Given a vendor name and procurement contact, screen in DJ, retrieve SOC 2 from Box, create ServiceNow risk assessment, Jira review task, and notify procurement.
      inputParameters:
      - name: vendor_name
        in: body
        type: string
        description: Legal name of the vendor.
      - name: vendor_country
        in: body
        type: string
        description: Vendor country of incorporation.
      - name: soc2_folder_id
        in: body
        type: string
        description: Box folder ID containing vendor SOC 2 reports.
      - name: procurement_contact_email
        in: body
        type: string
        description: Email of the procurement contact.
      steps:
      - name: screen-vendor
        type: call
        call: dowjones.screen-entity
        with:
          entity_name: '{{vendor_name}}'
          country: '{{vendor_country}}'
      - name: get-soc2-report
        type: call
        call: box.get-folder-items
        with:
          folder_id: '{{soc2_folder_id}}'
      - name: create-risk-assessment
        type: call
        call: servicenow.create-vendor-risk
        with:
          short_description: 'TPRM Assessment: {{vendor_name}}'
          description: 'DJ risk score: {{screen-vendor.risk_score}}. DJ hits: {{screen-vendor.total_hits}}. SOC 2 files: {{get-soc2-report.file_count}}. Country: {{vendor_country}}.'
          assigned_group: Third_Party_Risk
      - name: create-review-task
        type: call
        call: jira.create-issue
        with:
          project_key: TPRM
          issue_type: Task
          summary: 'Review: {{vendor_name}} TPRM Assessment'
          description: 'ServiceNow: {{create-risk-assessment.number}}. DJ score: {{screen-vendor.risk_score}}. SOC 2 available: {{get-soc2-report.file_count}} files.'
      - name: notify-procurement
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{procurement_contact_email}}'
          text: 'TPRM initiated for {{vendor_name}} ({{vendor_country}}). DJ risk: {{screen-vendor.risk_score}}. SOC 2 reports: {{get-soc2-report.file_count}}. ServiceNow: {{create-risk-assessment.number}}. Jira: {{create-review-task.key}}.'
  consumes:
  - type: http
    namespace: dowjones
    baseUri: https://api.dowjones.com/riskandcompliance/v1
    authentication:
      type: bearer
      token: $secrets.dowjones_token
    resources:
    - name: screening
      path: /screenings
      operations:
      - name: screen-entity
        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/{{folder_id}}/items
      inputParameters:
      - name: folder_id
        in: path
      operations:
      - name: get-folder-items
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kpmg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: vendor-risk
      path: /table/sn_risk_risk
      operations:
      - name: create-vendor-risk
        method: POST
  - type: http
    namespace: jira
    baseUri: https://kpmg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → third-party-risk-management-orchestrator.yml

Monitors SLA compliance for managed services engagements by pulling metrics from Datadog, comparing against SLA thresholds in Salesforce, and alerting service managers via Teams.

naftiko: '0.5'
info:
  label: Managed Services SLA Monitoring Pipeline
  description: Monitors SLA compliance for managed services engagements by pulling metrics from Datadog, comparing against SLA thresholds in Salesforce, and alerting service managers via Teams.
  tags:
  - managed-services
  - sla
  - datadog
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sla-monitoring
    port: 8080
    tools:
    - name: monitor-sla-compliance
      description: Monitor SLA compliance for a managed services engagement.
      inputParameters:
      - name: engagement_id
        in: body
        type: string
        description: The engagement identifier.
      - name: service_manager_email
        in: body
        type: string
        description: Service manager email.
      steps:
      - name: get-metrics
        type: call
        call: datadog.get-sla-metrics
        with:
          engagement_id: '{{engagement_id}}'
      - name: check-thresholds
        type: call
        call: salesforce.get-sla-thresholds
        with:
          engagement_id: '{{engagement_id}}'
      - name: alert-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{service_manager_email}}'
          text: 'SLA report for {{engagement_id}}: Uptime {{get-metrics.uptime}}%. Breaches: {{get-metrics.breach_count}}.'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      header: DD-API-KEY
      key: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /query
      operations:
      - name: get-sla-metrics
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://kpmg.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: sla
      path: /sobjects/SLAThreshold__c
      operations:
      - name: get-sla-thresholds
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → managed-services-sla-monitoring-pipeline.yml

Retrieves a Salesforce opportunity by ID, returning stage, amount, close date, and account name. Used by advisory partners to check pipeline status.

naftiko: '0.5'
info:
  label: Salesforce Client Opportunity Lookup
  description: Retrieves a Salesforce opportunity by ID, returning stage, amount, close date, and account name. Used by advisory partners to check pipeline status.
  tags:
  - sales
  - advisory
  - salesforce
  - pipeline
capability:
  exposes:
  - type: mcp
    namespace: advisory-pipeline
    port: 8080
    tools:
    - name: get-opportunity
      description: Look up a Salesforce opportunity by ID and return its current stage and deal details.
      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://kpmg.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
Open in Framework → View in Fleet → salesforce-client-opportunity-lookup.yml

Exports data from Qlik Sense analytical dashboards used for audit analytics and financial statement analysis.

naftiko: '0.5'
info:
  label: Qlik Sense Dashboard Data Export
  description: Exports data from Qlik Sense analytical dashboards used for audit analytics and financial statement analysis.
  tags:
  - analytics
  - qlik-sense
capability:
  exposes:
  - type: mcp
    namespace: qlik-analytics
    port: 8080
    tools:
    - name: export-dashboard-data
      description: Export data from a Qlik Sense dashboard by app ID.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: The Qlik Sense app identifier.
      - name: object_id
        in: body
        type: string
        description: The visualization object ID.
      call: qlik.export-data
      with:
        app_id: '{{app_id}}'
        object_id: '{{object_id}}'
      outputParameters:
      - name: data
        type: array
        mapping: $.qDataPages[0].qMatrix
  consumes:
  - type: http
    namespace: qlik
    baseUri: https://kpmg-qlik.qlikcloud.com/api/v1
    authentication:
      type: bearer
      token: $secrets.qlik_token
    resources:
    - name: apps
      path: /apps/{{app_id}}/objects/{{object_id}}/data
      inputParameters:
      - name: app_id
        in: path
      - name: object_id
        in: path
      operations:
      - name: export-data
        method: GET
Open in Framework → View in Fleet → qlik-sense-dashboard-data-export.yml

When an employee separation is triggered in Workday, disables their Azure AD account, revokes ServiceNow access, archives their SharePoint personal drive, and logs the offboarding in Jira.

naftiko: '0.5'
info:
  label: Employee Offboarding Orchestrator
  description: When an employee separation is triggered in Workday, disables their Azure AD account, revokes ServiceNow access, archives their SharePoint personal drive, and logs the offboarding in Jira.
  tags:
  - hr
  - offboarding
  - workday
  - azure-active-directory
  - servicenow
  - sharepoint
  - jira
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: process-offboarding
      description: Given a Workday employee ID and separation date, disable Azure AD, revoke ServiceNow, archive SharePoint drive, and log in Jira.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: The Workday worker ID.
      - name: separation_date
        in: body
        type: string
        description: Employee separation date in YYYY-MM-DD format.
      - name: hr_contact_email
        in: body
        type: string
        description: Email of the HR contact managing the offboarding.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: disable-ad-account
        type: call
        call: azuread.disable-user
        with:
          user_principal_name: '{{get-employee.work_email}}'
      - name: revoke-snow-access
        type: call
        call: servicenow.deactivate-user
        with:
          user_name: '{{get-employee.work_email}}'
      - name: archive-drive
        type: call
        call: sharepoint.move-folder
        with:
          site_id: personal_drives_site
          source_path: Users/{{get-employee.work_email}}
          dest_path: Archived/{{get-employee.work_email}}_{{separation_date}}
      - name: log-offboarding
        type: call
        call: jira.create-issue
        with:
          project_key: HRIT
          issue_type: Task
          summary: 'Offboarding: {{get-employee.full_name}} — {{separation_date}}'
          description: 'AD disabled. ServiceNow revoked. SharePoint archived. HR contact: {{hr_contact_email}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: azuread
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users/{{user_principal_name}}
      inputParameters:
      - name: user_principal_name
        in: path
      operations:
      - name: disable-user
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://kpmg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: users
      path: /table/sys_user?sysparm_query=user_name={{user_name}}
      inputParameters:
      - name: user_name
        in: query
      operations:
      - name: deactivate-user
        method: PATCH
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{source_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: source_path
        in: path
      operations:
      - name: move-folder
        method: PATCH
  - type: http
    namespace: jira
    baseUri: https://kpmg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → employee-offboarding-orchestrator.yml

Assesses client digital transformation maturity by collecting data from surveys, analyzing capabilities in Databricks, generating maturity scorecards in SharePoint, and presenting to stakeholders.

naftiko: '0.5'
info:
  label: Digital Transformation Maturity Assessment Pipeline
  description: Assesses client digital transformation maturity by collecting data from surveys, analyzing capabilities in Databricks, generating maturity scorecards in SharePoint, and presenting to stakeholders.
  tags:
  - advisory
  - digital-transformation
  - azure-databricks
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: digital-maturity
    port: 8080
    tools:
    - name: assess-digital-maturity
      description: Assess a client's digital transformation maturity level.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The client identifier.
      - name: assessment_date
        in: body
        type: string
        description: Assessment date.
      - name: stakeholder_email
        in: body
        type: string
        description: Client stakeholder email.
      steps:
      - name: analyze-maturity
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM digital_maturity_scores WHERE client_id = '{{client_id}}'
      - name: generate-scorecard
        type: call
        call: sharepoint.create-document
        with:
          site_id: advisory-engagements
          folder_path: '{{client_id}}/DigitalMaturity/{{assessment_date}}'
          template: maturity_scorecard
      - name: notify-stakeholder
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{stakeholder_email}}'
          text: 'Digital maturity assessment complete for {{client_id}}. Overall score: {{analyze-maturity.overall_score}}/5. Scorecard: {{generate-scorecard.url}}.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://kpmg-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → digital-transformation-maturity-assessment-pipeline.yml

Queries SAP HANA system overview for a given SID, returning memory utilization, disk usage, and active connections. Used by technology advisory teams for infrastructure assessments.

naftiko: '0.5'
info:
  label: SAP HANA Database Health Check
  description: Queries SAP HANA system overview for a given SID, returning memory utilization, disk usage, and active connections. Used by technology advisory teams for infrastructure assessments.
  tags:
  - infrastructure
  - sap-hana
  - database
  - health-check
capability:
  exposes:
  - type: mcp
    namespace: sap-hana-ops
    port: 8080
    tools:
    - name: get-hana-health
      description: Look up SAP HANA system health by SID and return key metrics.
      inputParameters:
      - name: hana_host
        in: body
        type: string
        description: The SAP HANA host address.
      - name: sid
        in: body
        type: string
        description: The SAP HANA system ID.
      call: hana.get-system-overview
      with:
        hana_host: '{{hana_host}}'
        sid: '{{sid}}'
      outputParameters:
      - name: memory_used_pct
        type: string
        mapping: $.memoryUsedPercent
      - name: disk_used_pct
        type: string
        mapping: $.diskUsedPercent
      - name: active_connections
        type: string
        mapping: $.activeConnections
      - name: version
        type: string
        mapping: $.version
  consumes:
  - type: http
    namespace: hana
    baseUri: https://{{hana_host}}:8443/api/v1
    authentication:
      type: basic
      username: $secrets.hana_user
      password: $secrets.hana_password
    resources:
    - name: system-overview
      path: /systems/{{sid}}/overview
      inputParameters:
      - name: hana_host
        in: path
      - name: sid
        in: path
      operations:
      - name: get-system-overview
        method: GET
Open in Framework → View in Fleet → sap-hana-database-health-check.yml

Supports deal advisory valuations by extracting financial data from SAP, running DCF models in Databricks, generating valuation reports in SharePoint, and notifying the deal team.

naftiko: '0.5'
info:
  label: Deal Advisory Valuation Pipeline
  description: Supports deal advisory valuations by extracting financial data from SAP, running DCF models in Databricks, generating valuation reports in SharePoint, and notifying the deal team.
  tags:
  - deal-advisory
  - valuation
  - sap
  - azure-databricks
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: deal-valuation
    port: 8080
    tools:
    - name: run-valuation
      description: Run a DCF valuation model for a deal advisory engagement.
      inputParameters:
      - name: target_company_id
        in: body
        type: string
        description: The target company identifier.
      - name: engagement_id
        in: body
        type: string
        description: The engagement identifier.
      - name: deal_team_email
        in: body
        type: string
        description: Deal team email.
      steps:
      - name: extract-financials
        type: call
        call: sap.get-financial-statements
        with:
          company_id: '{{target_company_id}}'
      - name: run-dcf-model
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM dcf_valuation WHERE company_id = '{{target_company_id}}' AND engagement_id = '{{engagement_id}}'
      - name: generate-report
        type: call
        call: sharepoint.create-document
        with:
          site_id: deal-advisory
          folder_path: '{{engagement_id}}/Valuation/{{target_company_id}}'
          template: valuation_report
      - name: notify-deal-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{deal_team_email}}'
          text: 'Valuation complete for {{target_company_id}}. Enterprise value range: {{run-dcf-model.ev_low}} - {{run-dcf-model.ev_high}}. Report: {{generate-report.url}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kpmg-sap.kpmg.com/sap/opu/odata/sap
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: financials
      path: /FI_SRV/FinancialStatements
      operations:
      - name: get-financial-statements
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://kpmg-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → deal-advisory-valuation-pipeline.yml

Supports IFRS conversion by extracting GAAP financial data from SAP, running conversion calculations in Databricks, and generating conversion workpapers in SharePoint.

naftiko: '0.5'
info:
  label: IFRS Conversion Advisory Pipeline
  description: Supports IFRS conversion by extracting GAAP financial data from SAP, running conversion calculations in Databricks, and generating conversion workpapers in SharePoint.
  tags:
  - advisory
  - ifrs
  - sap
  - azure-databricks
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: ifrs-conversion
    port: 8080
    tools:
    - name: run-ifrs-conversion
      description: Run IFRS conversion analysis for a client.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The client identifier.
      - name: fiscal_year
        in: body
        type: string
        description: The fiscal year.
      steps:
      - name: extract-gaap-data
        type: call
        call: sap.get-financials
        with:
          client_id: '{{client_id}}'
          standard: US-GAAP
      - name: convert-to-ifrs
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM ifrs_conversion WHERE client_id = '{{client_id}}'
      - name: create-workpaper
        type: call
        call: sharepoint.create-document
        with:
          site_id: advisory
          folder_path: '{{client_id}}/IFRS/{{fiscal_year}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kpmg-sap.kpmg.com/sap/opu/odata/sap
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: financials
      path: /FI_SRV/FinancialStatements
      operations:
      - name: get-financials
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://kpmg-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
Open in Framework → View in Fleet → ifrs-conversion-advisory-pipeline.yml

Generates an engagement letter by pulling client data from Salesforce, retrieving the letter template from SharePoint, populating it via Microsoft Power Automate, storing the final version in SharePoint, and sending it for e-signature notification via Microsoft Teams.

naftiko: '0.5'
info:
  label: Engagement Letter Generation Pipeline
  description: Generates an engagement letter by pulling client data from Salesforce, retrieving the letter template from SharePoint, populating it via Microsoft Power Automate, storing the final version in SharePoint, and sending it for e-signature notification via Microsoft Teams.
  tags:
  - advisory
  - engagement-management
  - salesforce
  - sharepoint
  - microsoft-power-automate
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: engagement-letters
    port: 8080
    tools:
    - name: generate-engagement-letter
      description: Given a Salesforce opportunity ID, generate an engagement letter from template, store in SharePoint, and notify the partner for signature.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID.
      - name: template_name
        in: body
        type: string
        description: Engagement letter template name (e.g., audit_standard, tax_advisory, consulting).
      - name: partner_email
        in: body
        type: string
        description: Email of the signing partner.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: get-template
        type: call
        call: sharepoint.get-file
        with:
          site_id: engagement_templates_site
          file_path: Templates/{{template_name}}.docx
      - name: generate-document
        type: call
        call: power-automate.trigger-flow
        with:
          flow_id: engagement_letter_generator
          client_name: '{{get-opportunity.Account.Name}}'
          engagement_amount: '{{get-opportunity.Amount}}'
          engagement_scope: '{{get-opportunity.Description}}'
          template_url: '{{get-template.download_url}}'
      - name: notify-partner
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{partner_email}}'
          text: 'Engagement letter ready for {{get-opportunity.Account.Name}}. Amount: {{get-opportunity.Amount}}. Document: {{generate-document.output_url}}. Please review and sign.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://kpmg.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: 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: power-automate
    baseUri: https://prod-00.westus.logic.azure.com/workflows
    authentication:
      type: bearer
      token: $secrets.power_automate_token
    resources:
    - name: flows
      path: /{{flow_id}}/triggers/manual/paths/invoke
      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: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → engagement-letter-generation-pipeline.yml

Executes IT general controls testing by pulling access logs from Azure Active Directory, comparing against authorized user lists in ServiceNow, documenting exceptions in SharePoint, and notifying the IT audit lead via Microsoft Teams.

naftiko: '0.5'
info:
  label: IT General Controls Testing Orchestrator
  description: Executes IT general controls testing by pulling access logs from Azure Active Directory, comparing against authorized user lists in ServiceNow, documenting exceptions in SharePoint, and notifying the IT audit lead via Microsoft Teams.
  tags:
  - audit
  - itgc
  - azure-active-directory
  - servicenow
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: itgc-testing
    port: 8080
    tools:
    - name: test-access-controls
      description: Given an application name and testing period, pull Azure AD sign-in logs, compare against ServiceNow authorized users, document exceptions, and notify the IT audit lead.
      inputParameters:
      - name: application_name
        in: body
        type: string
        description: Name of the application under ITGC testing.
      - name: application_id
        in: body
        type: string
        description: Azure AD application ID.
      - name: testing_period_start
        in: body
        type: string
        description: Testing period start (YYYY-MM-DD).
      - name: testing_period_end
        in: body
        type: string
        description: Testing period end (YYYY-MM-DD).
      - name: it_audit_lead_email
        in: body
        type: string
        description: Email of the IT audit lead.
      steps:
      - name: get-sign-in-logs
        type: call
        call: azuread.get-sign-in-logs
        with:
          application_id: '{{application_id}}'
          date_from: '{{testing_period_start}}'
          date_to: '{{testing_period_end}}'
      - name: get-authorized-users
        type: call
        call: servicenow.get-authorized-users
        with:
          application_name: '{{application_name}}'
      - name: document-exceptions
        type: call
        call: sharepoint.create-file
        with:
          site_id: itgc_testing_site
          file_path: ITGC/{{application_name}}_access_{{testing_period_start}}_to_{{testing_period_end}}.xlsx
          content: 'Application: {{application_name}}. Period: {{testing_period_start}} to {{testing_period_end}}. Sign-ins: {{get-sign-in-logs.total_count}}. Authorized users: {{get-authorized-users.user_count}}. Unauthorized access attempts: {{get-sign-in-logs.unauthorized_count}}.'
      - name: notify-audit-lead
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{it_audit_lead_email}}'
          text: 'ITGC access test for {{application_name}} ({{testing_period_start}} to {{testing_period_end}}). Sign-ins: {{get-sign-in-logs.total_count}}. Unauthorized: {{get-sign-in-logs.unauthorized_count}}. Report: {{document-exceptions.url}}.'
  consumes:
  - type: http
    namespace: azuread
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: sign-in-logs
      path: /auditLogs/signIns?$filter=appId eq '{{application_id}}' and createdDateTime ge {{date_from}} and createdDateTime le {{date_to}}
      inputParameters:
      - name: application_id
        in: query
      - name: date_from
        in: query
      - name: date_to
        in: query
      operations:
      - name: get-sign-in-logs
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kpmg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: authorized-users
      path: /table/sys_user_has_role?sysparm_query=role.application={{application_name}}
      inputParameters:
      - name: application_name
        in: query
      operations:
      - name: get-authorized-users
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: create-file
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → it-general-controls-testing-orchestrator.yml

Performs fraud risk assessments by analyzing transaction patterns in Databricks, cross-referencing with known fraud indicators, generating risk reports in SharePoint, and alerting the forensics team.

naftiko: '0.5'
info:
  label: Fraud Risk Assessment Pipeline
  description: Performs fraud risk assessments by analyzing transaction patterns in Databricks, cross-referencing with known fraud indicators, generating risk reports in SharePoint, and alerting the forensics team.
  tags:
  - forensics
  - fraud
  - azure-databricks
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: fraud-assessment
    port: 8080
    tools:
    - name: assess-fraud-risk
      description: Perform a fraud risk assessment on client transaction data.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The client identifier.
      - name: analysis_period
        in: body
        type: string
        description: Analysis period (e.g., 2025-Q4).
      - name: forensics_email
        in: body
        type: string
        description: Forensics team email.
      steps:
      - name: analyze-transactions
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM transaction_fraud_indicators WHERE client_id = '{{client_id}}' AND period = '{{analysis_period}}' AND risk_score > 0.8
      - name: generate-risk-report
        type: call
        call: sharepoint.create-document
        with:
          site_id: forensics
          folder_path: '{{client_id}}/FraudAssessment/{{analysis_period}}'
          template: fraud_risk_report
      - name: alert-forensics
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{forensics_email}}'
          text: 'Fraud risk assessment for {{client_id}} ({{analysis_period}}): {{analyze-transactions.high_risk_count}} high-risk transactions identified. Report: {{generate-risk-report.url}}.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://kpmg-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → fraud-risk-assessment-pipeline.yml

Supports business continuity advisory by assessing client BCP documentation in Confluence, analyzing recovery capabilities in Databricks, and generating gap analysis reports in SharePoint.

naftiko: '0.5'
info:
  label: Business Continuity Advisory Orchestrator
  description: Supports business continuity advisory by assessing client BCP documentation in Confluence, analyzing recovery capabilities in Databricks, and generating gap analysis reports in SharePoint.
  tags:
  - advisory
  - business-continuity
  - confluence
  - azure-databricks
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: bcp-advisory
    port: 8080
    tools:
    - name: assess-business-continuity
      description: Assess a client's business continuity posture.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The client identifier.
      - name: advisory_email
        in: body
        type: string
        description: Advisory team email.
      steps:
      - name: review-bcp-docs
        type: call
        call: confluence.search
        with:
          cql: label = 'bcp' AND label = '{{client_id}}'
      - name: analyze-recovery
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM bcp_assessment WHERE client_id = '{{client_id}}'
      - name: generate-gap-analysis
        type: call
        call: sharepoint.create-document
        with:
          site_id: advisory-engagements
          folder_path: '{{client_id}}/BCP'
          template: bcp_gap_analysis
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{advisory_email}}'
          text: 'BCP assessment for {{client_id}}: {{analyze-recovery.gap_count}} gaps identified. RTO compliance: {{analyze-recovery.rto_compliance}}%. Report: {{generate-gap-analysis.url}}.'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://kpmg.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: search
      path: /content/search
      operations:
      - name: search
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://kpmg-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → business-continuity-advisory-orchestrator.yml

Retrieves fixed asset depreciation schedules from SAP for a given company code and fiscal year, returning asset descriptions, acquisition values, accumulated depreciation, and net book values.

naftiko: '0.5'
info:
  label: SAP Fixed Asset Depreciation Lookup
  description: Retrieves fixed asset depreciation schedules from SAP for a given company code and fiscal year, returning asset descriptions, acquisition values, accumulated depreciation, and net book values.
  tags:
  - audit
  - finance
  - sap
  - fixed-assets
capability:
  exposes:
  - type: mcp
    namespace: audit-assets
    port: 8080
    tools:
    - name: get-asset-depreciation
      description: Look up fixed asset depreciation data from SAP by company code and fiscal year. Returns asset details, acquisition cost, and net book value.
      inputParameters:
      - name: company_code
        in: body
        type: string
        description: The SAP company code for the client entity.
      - name: fiscal_year
        in: body
        type: string
        description: The fiscal year in YYYY format.
      call: sap.get-fixed-assets
      with:
        company_code: '{{company_code}}'
        fiscal_year: '{{fiscal_year}}'
      outputParameters:
      - name: assets
        type: array
        mapping: $.data
        items:
        - name: asset_number
          type: string
          mapping: $.assetNumber
        - name: description
          type: string
          mapping: $.description
        - name: acquisition_value
          type: number
          mapping: $.acquisitionValue
        - name: accumulated_depreciation
          type: number
          mapping: $.accumulatedDepreciation
        - name: net_book_value
          type: number
          mapping: $.netBookValue
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kpmg-sap.s4hana.cloud/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: fixed-assets
      path: /fixed-assets
      inputParameters:
      - name: company_code
        in: query
      - name: fiscal_year
        in: query
      operations:
      - name: get-fixed-assets
        method: GET
Open in Framework → View in Fleet → sap-fixed-asset-depreciation-lookup.yml

On receipt of a DSAR, looks up the data subject in Workday, searches for their data across Salesforce and ServiceNow, compiles a report in SharePoint, and notifies the DPO via Microsoft Teams.

naftiko: '0.5'
info:
  label: GDPR Data Subject Access Request Pipeline
  description: On receipt of a DSAR, looks up the data subject in Workday, searches for their data across Salesforce and ServiceNow, compiles a report in SharePoint, and notifies the DPO via Microsoft Teams.
  tags:
  - compliance
  - gdpr
  - privacy
  - workday
  - salesforce
  - servicenow
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: gdpr-dsar
    port: 8080
    tools:
    - name: process-dsar
      description: Given a data subject email and request ID, search across Workday, Salesforce, and ServiceNow, compile a report in SharePoint, and notify the DPO.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The DSAR request identifier.
      - name: data_subject_email
        in: body
        type: string
        description: Email of the data subject.
      - name: dpo_email
        in: body
        type: string
        description: Email of the Data Protection Officer.
      steps:
      - name: search-workday
        type: call
        call: workday.search-worker
        with:
          email: '{{data_subject_email}}'
      - name: search-salesforce
        type: call
        call: salesforce.search-contact
        with:
          email: '{{data_subject_email}}'
      - name: search-servicenow
        type: call
        call: servicenow.search-user
        with:
          email: '{{data_subject_email}}'
      - name: compile-report
        type: call
        call: sharepoint.create-file
        with:
          site_id: gdpr_dsar_site
          file_path: Reports/DSAR_{{request_id}}_{{data_subject_email}}.docx
          content: 'DSAR Report {{request_id}}. Subject: {{data_subject_email}}. Workday records: {{search-workday.record_count}}. Salesforce records: {{search-salesforce.record_count}}. ServiceNow records: {{search-servicenow.record_count}}.'
      - name: notify-dpo
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{dpo_email}}'
          text: 'DSAR {{request_id}} processed for {{data_subject_email}}. Records found — Workday: {{search-workday.record_count}}, Salesforce: {{search-salesforce.record_count}}, ServiceNow: {{search-servicenow.record_count}}. Report: {{compile-report.url}}.'
  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?email={{email}}
      inputParameters:
      - name: email
        in: query
      operations:
      - name: search-worker
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://kpmg.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /parameterizedSearch/?q={{email}}&sobject=Contact
      inputParameters:
      - name: email
        in: query
      operations:
      - name: search-contact
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kpmg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: users
      path: /table/sys_user?sysparm_query=email={{email}}
      inputParameters:
      - name: email
        in: query
      operations:
      - name: search-user
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: create-file
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → gdpr-data-subject-access-request-pipeline.yml

Automates audit sampling by extracting population data from SAP, applying statistical sampling in Databricks, creating sample workpapers in SharePoint, and assigning review tasks in Jira.

naftiko: '0.5'
info:
  label: Audit Sampling Automation Pipeline
  description: Automates audit sampling by extracting population data from SAP, applying statistical sampling in Databricks, creating sample workpapers in SharePoint, and assigning review tasks in Jira.
  tags:
  - audit
  - sampling
  - sap
  - azure-databricks
  - sharepoint
  - jira
capability:
  exposes:
  - type: mcp
    namespace: audit-sampling
    port: 8080
    tools:
    - name: generate-audit-sample
      description: Generate a statistical audit sample from the client population.
      inputParameters:
      - name: engagement_id
        in: body
        type: string
        description: The audit engagement identifier.
      - name: population_query
        in: body
        type: string
        description: SQL query to extract the population.
      - name: confidence_level
        in: body
        type: number
        description: Statistical confidence level (e.g., 95).
      steps:
      - name: extract-population
        type: call
        call: sap.run-query
        with:
          query: '{{population_query}}'
      - name: generate-sample
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM population_{{engagement_id}} ORDER BY RAND() LIMIT {{extract-population.sample_size}}
      - name: create-workpaper
        type: call
        call: sharepoint.create-document
        with:
          site_id: audit-engagements
          folder_path: '{{engagement_id}}/Sampling'
          template: audit_sample_workpaper
      - name: assign-testing
        type: call
        call: jira.create-issue
        with:
          project: AUDIT
          summary: 'Sample testing: {{engagement_id}} - {{extract-population.sample_size}} items'
          description: 'Sample workpaper: {{create-workpaper.url}}. Population: {{extract-population.total_count}}. Sample: {{generate-sample.count}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kpmg-sap.kpmg.com/sap/opu/odata/sap
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: queries
      path: /GL_SRV/JournalEntries
      operations:
      - name: run-query
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://kpmg-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: jira
    baseUri: https://kpmg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → audit-sampling-automation-pipeline.yml

Manages audit confirmation workflows by generating confirmation letters in SharePoint, tracking responses in Salesforce, creating follow-up tasks in Jira, and alerting the audit team on non-responses.

naftiko: '0.5'
info:
  label: Audit Confirmation Workflow Orchestrator
  description: Manages audit confirmation workflows by generating confirmation letters in SharePoint, tracking responses in Salesforce, creating follow-up tasks in Jira, and alerting the audit team on non-responses.
  tags:
  - audit
  - confirmations
  - sharepoint
  - salesforce
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: confirmations
    port: 8080
    tools:
    - name: manage-confirmations
      description: Manage audit confirmation letter workflow.
      inputParameters:
      - name: engagement_id
        in: body
        type: string
        description: The engagement identifier.
      - name: confirmation_type
        in: body
        type: string
        description: Confirmation type (bank, AR, AP, legal).
      - name: audit_team_email
        in: body
        type: string
        description: Audit team email.
      steps:
      - name: generate-letters
        type: call
        call: sharepoint.create-document
        with:
          site_id: audit-engagements
          folder_path: '{{engagement_id}}/Confirmations/{{confirmation_type}}'
          template: confirmation_letter_{{confirmation_type}}
      - name: track-responses
        type: call
        call: salesforce.get-confirmation-status
        with:
          engagement_id: '{{engagement_id}}'
          type: '{{confirmation_type}}'
      - name: create-followups
        type: call
        call: jira.create-issue
        with:
          project: AUDIT
          summary: 'Confirmation follow-up: {{engagement_id}} - {{confirmation_type}}'
          description: 'Sent: {{track-responses.sent_count}}. Received: {{track-responses.received_count}}. Outstanding: {{track-responses.outstanding_count}}.'
      - name: alert-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{audit_team_email}}'
          text: 'Confirmation status for {{engagement_id}} ({{confirmation_type}}): {{track-responses.received_count}}/{{track-responses.sent_count}} received. {{track-responses.outstanding_count}} outstanding.'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://kpmg.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: confirmations
      path: /sobjects/AuditConfirmation__c
      operations:
      - name: get-confirmation-status
        method: GET
  - type: http
    namespace: jira
    baseUri: https://kpmg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → audit-confirmation-workflow-orchestrator.yml

Conducts internal controls walkthroughs by extracting process documentation from Confluence, creating testing workpapers in SharePoint, assigning tasks in Jira, and notifying the audit team.

naftiko: '0.5'
info:
  label: Internal Controls Walkthrough Orchestrator
  description: Conducts internal controls walkthroughs by extracting process documentation from Confluence, creating testing workpapers in SharePoint, assigning tasks in Jira, and notifying the audit team.
  tags:
  - audit
  - internal-controls
  - confluence
  - sharepoint
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: controls-walkthrough
    port: 8080
    tools:
    - name: conduct-walkthrough
      description: Conduct an internal controls walkthrough for a client process.
      inputParameters:
      - name: engagement_id
        in: body
        type: string
        description: The audit engagement ID.
      - name: process_name
        in: body
        type: string
        description: The business process name.
      - name: team_email
        in: body
        type: string
        description: Audit team email.
      steps:
      - name: get-process-docs
        type: call
        call: confluence.search
        with:
          cql: label = '{{process_name}}' AND space = 'CONTROLS'
      - name: create-testing-workpaper
        type: call
        call: sharepoint.create-document
        with:
          site_id: audit-engagements
          folder_path: '{{engagement_id}}/Controls/{{process_name}}'
          template: controls_walkthrough
      - name: assign-testing-tasks
        type: call
        call: jira.create-issue
        with:
          project: AUDIT
          summary: 'Controls walkthrough: {{process_name}} - {{engagement_id}}'
          description: 'Process documentation: {{get-process-docs.url}}. Workpaper: {{create-testing-workpaper.url}}.'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{team_email}}'
          text: 'Controls walkthrough initiated for {{process_name}} on engagement {{engagement_id}}. Workpaper: {{create-testing-workpaper.url}}. Jira: {{assign-testing-tasks.key}}.'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://kpmg.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: search
      path: /content/search
      operations:
      - name: search
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: jira
    baseUri: https://kpmg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → internal-controls-walkthrough-orchestrator.yml

On new client acceptance request, screens the entity in Dow Jones for adverse media, retrieves credit data from Bloomberg, creates the acceptance record in Salesforce, logs a compliance review in ServiceNow, and notifies the risk partner via Microsoft Teams.

naftiko: '0.5'
info:
  label: Client Acceptance and Continuance Workflow
  description: On new client acceptance request, screens the entity in Dow Jones for adverse media, retrieves credit data from Bloomberg, creates the acceptance record in Salesforce, logs a compliance review in ServiceNow, and notifies the risk partner via Microsoft Teams.
  tags:
  - risk
  - compliance
  - client-acceptance
  - dow-jones
  - bloomberg
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: client-acceptance
    port: 8080
    tools:
    - name: process-client-acceptance
      description: Given a prospective client name and requesting partner email, run DJ screening, pull Bloomberg credit data, create Salesforce account, log in ServiceNow, and notify risk partner.
      inputParameters:
      - name: client_name
        in: body
        type: string
        description: Legal name of the prospective client.
      - name: country
        in: body
        type: string
        description: Country of incorporation.
      - name: requesting_partner_email
        in: body
        type: string
        description: Email of the partner requesting client acceptance.
      - name: bloomberg_ticker
        in: body
        type: string
        description: Bloomberg ticker if publicly listed, or empty string.
      steps:
      - name: screen-entity
        type: call
        call: dowjones.screen-entity
        with:
          entity_name: '{{client_name}}'
          country: '{{country}}'
      - name: get-credit-data
        type: call
        call: bloomberg.get-credit-risk
        with:
          ticker: '{{bloomberg_ticker}}'
      - name: create-account
        type: call
        call: salesforce.create-account
        with:
          name: '{{client_name}}'
          billing_country: '{{country}}'
          description: 'DJ risk score: {{screen-entity.risk_score}}. DJ hits: {{screen-entity.total_hits}}. Credit rating: {{get-credit-data.credit_rating}}.'
          type: Prospect
      - name: log-compliance-review
        type: call
        call: servicenow.create-compliance-task
        with:
          short_description: 'Client Acceptance Review: {{client_name}}'
          description: 'DJ screening: {{screen-entity.total_hits}} hits, score {{screen-entity.risk_score}}. Credit rating: {{get-credit-data.credit_rating}}. Salesforce: {{create-account.id}}.'
          assigned_group: Risk_Compliance
      - name: notify-risk-partner
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{requesting_partner_email}}'
          text: 'Client acceptance for {{client_name}} ({{country}}). DJ risk: {{screen-entity.risk_score}} ({{screen-entity.total_hits}} hits). Credit: {{get-credit-data.credit_rating}}. ServiceNow: {{log-compliance-review.number}}. Salesforce: {{create-account.id}}.'
  consumes:
  - type: http
    namespace: dowjones
    baseUri: https://api.dowjones.com/riskandcompliance/v1
    authentication:
      type: bearer
      token: $secrets.dowjones_token
    resources:
    - name: screening
      path: /screenings
      operations:
      - name: screen-entity
        method: POST
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: credit-data
      path: /data/{{ticker}}/creditRisk
      inputParameters:
      - name: ticker
        in: path
      operations:
      - name: get-credit-risk
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://kpmg.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account
      operations:
      - name: create-account
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://kpmg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: compliance-tasks
      path: /table/sn_compliance_task
      operations:
      - name: create-compliance-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → client-acceptance-and-continuance-workflow.yml

When a new compliance training requirement is identified, creates the course assignment in Pluralsight, logs the requirement in ServiceNow, sends the enrollment link via Microsoft Teams, and tracks completion in Workday learning.

naftiko: '0.5'
info:
  label: Compliance Training Assignment Orchestrator
  description: When a new compliance training requirement is identified, creates the course assignment in Pluralsight, logs the requirement in ServiceNow, sends the enrollment link via Microsoft Teams, and tracks completion in Workday learning.
  tags:
  - compliance
  - training
  - pluralsight
  - servicenow
  - microsoft-teams
  - workday
capability:
  exposes:
  - type: mcp
    namespace: compliance-training
    port: 8080
    tools:
    - name: assign-compliance-training
      description: Given a course ID, employee ID, and compliance requirement, assign training in Pluralsight, log in ServiceNow, notify via Teams, and register in Workday learning.
      inputParameters:
      - name: course_id
        in: body
        type: string
        description: The Pluralsight course identifier.
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      - name: compliance_requirement
        in: body
        type: string
        description: The compliance requirement name (e.g., AML Awareness, GDPR, SOX).
      - name: due_date
        in: body
        type: string
        description: Training completion due date (YYYY-MM-DD).
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: assign-course
        type: call
        call: pluralsight.assign-course
        with:
          course_id: '{{course_id}}'
          user_email: '{{get-employee.work_email}}'
      - name: log-requirement
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Compliance training: {{compliance_requirement}} — {{get-employee.full_name}}'
          description: 'Course: {{course_id}}. Due: {{due_date}}. Enrollment: {{assign-course.enrollment_url}}.'
          assigned_to: '{{get-employee.work_email}}'
          due_date: '{{due_date}}'
      - name: notify-employee
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.work_email}}'
          text: 'Required compliance training: {{compliance_requirement}}. Complete by {{due_date}}. Enroll here: {{assign-course.enrollment_url}}.'
  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: pluralsight
    baseUri: https://api.pluralsight.com/v1
    authentication:
      type: bearer
      token: $secrets.pluralsight_token
    resources:
    - name: assignments
      path: /courses/{{course_id}}/assignments
      inputParameters:
      - name: course_id
        in: path
      operations:
      - name: assign-course
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://kpmg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → compliance-training-assignment-orchestrator.yml

Optimizes engagement staffing by pulling availability from Workday, matching skills from Salesforce CRM, creating assignments, and notifying resource managers via Teams.

naftiko: '0.5'
info:
  label: Engagement Staffing Optimizer Pipeline
  description: Optimizes engagement staffing by pulling availability from Workday, matching skills from Salesforce CRM, creating assignments, and notifying resource managers via Teams.
  tags:
  - resource-management
  - staffing
  - workday
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: staffing-optimizer
    port: 8080
    tools:
    - name: optimize-staffing
      description: Optimize engagement staffing based on availability and skills.
      inputParameters:
      - name: engagement_id
        in: body
        type: string
        description: The engagement identifier.
      - name: required_skills
        in: body
        type: string
        description: Required skill set.
      - name: resource_manager_email
        in: body
        type: string
        description: Resource manager email.
      steps:
      - name: check-availability
        type: call
        call: workday.get-available-staff
        with:
          skills: '{{required_skills}}'
      - name: match-skills
        type: call
        call: salesforce.search-professionals
        with:
          skills: '{{required_skills}}'
          available_ids: '{{check-availability.available_ids}}'
      - name: create-assignments
        type: call
        call: workday.create-assignments
        with:
          engagement_id: '{{engagement_id}}'
          staff_ids: '{{match-skills.recommended_staff}}'
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{resource_manager_email}}'
          text: 'Staffing recommendation for {{engagement_id}}: {{match-skills.match_count}} professionals matched. Assignments created: {{create-assignments.count}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl.workday.com/ccx/api/v1/kpmg
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: staff
      path: /workers/available
      operations:
      - name: get-available-staff
        method: GET
    - name: assignments
      path: /engagementAssignments
      operations:
      - name: create-assignments
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://kpmg.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: professionals
      path: /sobjects/Professional__c
      operations:
      - name: search-professionals
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → engagement-staffing-optimizer-pipeline.yml

Conducts IT audit access reviews by extracting user access lists from Azure AD, comparing against authorized roles in ServiceNow, documenting exceptions in SharePoint, and notifying the IT audit team.

naftiko: '0.5'
info:
  label: IT Audit Access Review Orchestrator
  description: Conducts IT audit access reviews by extracting user access lists from Azure AD, comparing against authorized roles in ServiceNow, documenting exceptions in SharePoint, and notifying the IT audit team.
  tags:
  - it-audit
  - access-review
  - azure-ad
  - servicenow
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: it-access-review
    port: 8080
    tools:
    - name: conduct-access-review
      description: Conduct an IT audit user access review.
      inputParameters:
      - name: engagement_id
        in: body
        type: string
        description: The engagement ID.
      - name: application_name
        in: body
        type: string
        description: The application under review.
      - name: it_audit_email
        in: body
        type: string
        description: IT audit team email.
      steps:
      - name: extract-access-list
        type: call
        call: azuread.get-app-users
        with:
          application_name: '{{application_name}}'
      - name: compare-authorized-roles
        type: call
        call: servicenow.get-authorized-access
        with:
          application: '{{application_name}}'
      - name: document-exceptions
        type: call
        call: sharepoint.create-document
        with:
          site_id: audit-engagements
          folder_path: '{{engagement_id}}/ITControls/AccessReview/{{application_name}}'
          template: access_review_workpaper
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{it_audit_email}}'
          text: 'Access review for {{application_name}} ({{engagement_id}}): {{extract-access-list.user_count}} users. Exceptions: {{compare-authorized-roles.exception_count}}. Workpaper: {{document-exceptions.url}}.'
  consumes:
  - type: http
    namespace: azuread
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: app-users
      path: /applications/{{application_name}}/appRoleAssignedTo
      inputParameters:
      - name: application_name
        in: path
      operations:
      - name: get-app-users
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kpmg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: access
      path: /table/sys_user_role
      operations:
      - name: get-authorized-access
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → it-audit-access-review-orchestrator.yml

Triggers a Power BI dataset refresh for the specified audit analytics dashboard and returns the refresh status.

naftiko: '0.5'
info:
  label: Power BI Audit Dashboard Refresh
  description: Triggers a Power BI dataset refresh for the specified audit analytics dashboard and returns the refresh status.
  tags:
  - audit
  - analytics
  - power-bi
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: audit-analytics
    port: 8080
    tools:
    - name: refresh-audit-dashboard
      description: Trigger a Power BI dataset refresh for an audit analytics workspace and notify the audit team via Microsoft Teams when initiated.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: The Power BI workspace GUID.
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset GUID.
      - name: audit_team_email
        in: body
        type: string
        description: Email of the audit team lead.
      steps:
      - name: trigger-refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          workspace_id: '{{workspace_id}}'
          dataset_id: '{{dataset_id}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{audit_team_email}}'
          text: 'Power BI audit dashboard refresh initiated. Dataset: {{dataset_id}}. Status: {{trigger-refresh.status}}.'
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: workspace_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → power-bi-audit-dashboard-refresh.yml

Monitors engagement budget variances by pulling time entries from Workday, comparing against budgets in Salesforce, generating variance reports, and alerting engagement managers.

naftiko: '0.5'
info:
  label: Engagement Budget Variance Pipeline
  description: Monitors engagement budget variances by pulling time entries from Workday, comparing against budgets in Salesforce, generating variance reports, and alerting engagement managers.
  tags:
  - engagement-management
  - budget
  - workday
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: budget-variance
    port: 8080
    tools:
    - name: check-budget-variance
      description: Check engagement budget variance and alert on overruns.
      inputParameters:
      - name: engagement_id
        in: body
        type: string
        description: The engagement identifier.
      - name: manager_email
        in: body
        type: string
        description: Engagement manager email.
      steps:
      - name: get-time-entries
        type: call
        call: workday.get-engagement-hours
        with:
          engagement_id: '{{engagement_id}}'
      - name: get-budget
        type: call
        call: salesforce.get-engagement-budget
        with:
          engagement_id: '{{engagement_id}}'
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{manager_email}}'
          text: 'Budget variance for {{engagement_id}}: Budget {{get-budget.total_budget}}. Actual: {{get-time-entries.total_cost}}. Variance: {{get-time-entries.variance_percentage}}%. Remaining: {{get-budget.remaining}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl.workday.com/ccx/api/v1/kpmg
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: hours
      path: /engagementHours/{{engagement_id}}
      inputParameters:
      - name: engagement_id
        in: path
      operations:
      - name: get-engagement-hours
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://kpmg.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: budgets
      path: /sobjects/EngagementBudget__c/{{engagement_id}}
      inputParameters:
      - name: engagement_id
        in: path
      operations:
      - name: get-engagement-budget
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → engagement-budget-variance-pipeline.yml

Retrieves employee training and CPE completion records from Workday Learning for compliance tracking.

naftiko: '0.5'
info:
  label: Workday Learning Completion Lookup
  description: Retrieves employee training and CPE completion records from Workday Learning for compliance tracking.
  tags:
  - training
  - workday
capability:
  exposes:
  - type: mcp
    namespace: learning
    port: 8080
    tools:
    - name: get-learning-completions
      description: Look up training completions for an employee by ID.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      call: workday.get-completions
      with:
        employee_id: '{{employee_id}}'
      outputParameters:
      - name: completions
        type: array
        mapping: $.learningCompletions
      - name: total_cpe_hours
        type: number
        mapping: $.totalCPEHours
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl.workday.com/ccx/api/v1/kpmg
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: learning
      path: /workers/{{employee_id}}/learningCompletions
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-completions
        method: GET
Open in Framework → View in Fleet → workday-learning-completion-lookup.yml

Tracks regulatory filing deadlines by pulling client engagements from Salesforce, checking deadlines in Jira, and sending upcoming deadline alerts via Teams and email.

naftiko: '0.5'
info:
  label: Regulatory Filing Deadline Tracker Pipeline
  description: Tracks regulatory filing deadlines by pulling client engagements from Salesforce, checking deadlines in Jira, and sending upcoming deadline alerts via Teams and email.
  tags:
  - compliance
  - regulatory
  - salesforce
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: filing-deadlines
    port: 8080
    tools:
    - name: check-filing-deadlines
      description: Check upcoming regulatory filing deadlines for a client.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The client identifier.
      - name: days_ahead
        in: body
        type: integer
        description: Number of days to look ahead.
      - name: engagement_team_email
        in: body
        type: string
        description: Engagement team email.
      steps:
      - name: get-client-filings
        type: call
        call: salesforce.get-filing-schedule
        with:
          client_id: '{{client_id}}'
      - name: check-task-status
        type: call
        call: jira.search-issues
        with:
          jql: project = TAX AND client = '{{client_id}}' AND dueDate <= '{{days_ahead}}d'
      - name: send-deadline-alert
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{engagement_team_email}}'
          text: 'Filing deadline alert for {{client_id}}: {{check-task-status.total}} filings due within {{days_ahead}} days. {{check-task-status.overdue_count}} are overdue.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://kpmg.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: filings
      path: /sobjects/FilingSchedule__c
      operations:
      - name: get-filing-schedule
        method: GET
  - type: http
    namespace: jira
    baseUri: https://kpmg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: search
      path: /search
      operations:
      - name: search-issues
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → regulatory-filing-deadline-tracker-pipeline.yml

Manages cybersecurity incident response by creating cases in ServiceNow, deploying investigation runbooks from Confluence, collecting evidence in SharePoint, and coordinating the response team via Teams.

naftiko: '0.5'
info:
  label: Incident Response Retainer Orchestrator
  description: Manages cybersecurity incident response by creating cases in ServiceNow, deploying investigation runbooks from Confluence, collecting evidence in SharePoint, and coordinating the response team via Teams.
  tags:
  - cybersecurity
  - incident-response
  - servicenow
  - confluence
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: incident-response
    port: 8080
    tools:
    - name: activate-ir
      description: Activate cybersecurity incident response for a retainer client.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The client identifier.
      - name: incident_severity
        in: body
        type: string
        description: Incident severity (P1, P2, P3).
      - name: ir_lead_email
        in: body
        type: string
        description: IR lead email.
      steps:
      - name: create-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Cyber IR: {{client_id}} - {{incident_severity}}'
          urgency: '1'
      - name: get-runbook
        type: call
        call: confluence.search
        with:
          cql: label = 'ir-runbook' AND label = '{{incident_severity}}'
      - name: create-evidence-folder
        type: call
        call: sharepoint.create-document
        with:
          site_id: cyber-ir
          folder_path: '{{client_id}}/{{create-case.number}}'
      - name: mobilize-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{ir_lead_email}}'
          text: 'IR ACTIVATED: {{client_id}} ({{incident_severity}}). Case: {{create-case.number}}. Runbook: {{get-runbook.url}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://kpmg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://kpmg.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: search
      path: /content/search
      operations:
      - name: search
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → incident-response-retainer-orchestrator.yml

Queries SAP for intercompany receivables and payables, matches offsetting entries in Snowflake, flags unreconciled balances, and posts elimination journal entries for consolidated financial statements.

naftiko: '0.5'
info:
  label: Intercompany Transaction Elimination Pipeline
  description: Queries SAP for intercompany receivables and payables, matches offsetting entries in Snowflake, flags unreconciled balances, and posts elimination journal entries for consolidated financial statements.
  tags:
  - audit
  - finance
  - sap
  - snowflake
  - consolidation
capability:
  exposes:
  - type: mcp
    namespace: audit-consolidation
    port: 8080
    tools:
    - name: eliminate-intercompany-transactions
      description: Given a reporting period and entity list, retrieve intercompany balances from SAP, match in Snowflake, flag exceptions, and post elimination entries.
      inputParameters:
      - name: reporting_period
        in: body
        type: string
        description: Reporting period in YYYY-MM format.
      - name: entity_ids
        in: body
        type: array
        description: List of legal entity IDs to consolidate.
      steps:
      - name: get-intercompany-balances
        type: call
        call: sap.get-intercompany-balances
        with:
          period: '{{reporting_period}}'
          entities: '{{entity_ids}}'
      - name: match-offsetting-entries
        type: call
        call: snowflake.run-intercompany-match
        with:
          balances: '{{get-intercompany-balances.data}}'
          period: '{{reporting_period}}'
      - name: flag-exceptions
        type: call
        call: servicenow.create-incident
        with:
          short_description: Intercompany reconciliation exceptions for {{reporting_period}}
          description: 'Unmatched items: {{match-offsetting-entries.unmatched_count}}'
          category: audit_finding
      - name: post-elimination-entries
        type: call
        call: sap.post-journal-entry
        with:
          period: '{{reporting_period}}'
          entries: '{{match-offsetting-entries.elimination_entries}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kpmg-sap.s4hana.cloud/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: intercompany
      path: /intercompany/balances
      operations:
      - name: get-intercompany-balances
        method: GET
    - name: journal-entries
      path: /journal-entries
      operations:
      - name: post-journal-entry
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://kpmg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: queries
      path: /statements
      operations:
      - name: run-intercompany-match
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://kpmg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → intercompany-transaction-elimination-pipeline.yml

Conducts transfer pricing benchmarking by extracting intercompany transactions from SAP, running comparability analysis in Databricks, and generating documentation in SharePoint.

naftiko: '0.5'
info:
  label: Transfer Pricing Benchmarking Pipeline
  description: Conducts transfer pricing benchmarking by extracting intercompany transactions from SAP, running comparability analysis in Databricks, and generating documentation in SharePoint.
  tags:
  - tax
  - transfer-pricing
  - sap
  - azure-databricks
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: transfer-pricing
    port: 8080
    tools:
    - name: run-benchmarking
      description: Run transfer pricing benchmarking analysis.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The client identifier.
      - name: fiscal_year
        in: body
        type: string
        description: The fiscal year.
      steps:
      - name: extract-intercompany
        type: call
        call: sap.get-intercompany-transactions
        with:
          client_id: '{{client_id}}'
          fiscal_year: '{{fiscal_year}}'
      - name: run-comparability
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM tp_benchmarking WHERE client_id = '{{client_id}}' AND fiscal_year = '{{fiscal_year}}'
      - name: generate-documentation
        type: call
        call: sharepoint.create-document
        with:
          site_id: tax-engagements
          folder_path: '{{client_id}}/TransferPricing/{{fiscal_year}}'
          template: tp_benchmarking_report
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kpmg-sap.kpmg.com/sap/opu/odata/sap
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: intercompany
      path: /FI_SRV/IntercompanyTransactions
      operations:
      - name: get-intercompany-transactions
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://kpmg-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
Open in Framework → View in Fleet → transfer-pricing-benchmarking-pipeline.yml

Retrieves an Oracle Cloud Financials journal entry by batch name and ledger, returning status, total debits, total credits, and posting date.

naftiko: '0.5'
info:
  label: Oracle Cloud Financials Journal Entry Lookup
  description: Retrieves an Oracle Cloud Financials journal entry by batch name and ledger, returning status, total debits, total credits, and posting date.
  tags:
  - finance
  - oracle-cloud
  - general-ledger
  - journal-entry
capability:
  exposes:
  - type: mcp
    namespace: oracle-finance
    port: 8080
    tools:
    - name: get-journal-entry
      description: Look up an Oracle Cloud Financials journal entry by batch name and ledger ID, then store the result in SharePoint for audit evidence.
      inputParameters:
      - name: batch_name
        in: body
        type: string
        description: The journal batch name.
      - name: ledger_id
        in: body
        type: string
        description: The Oracle ledger identifier.
      - name: engagement_id
        in: body
        type: string
        description: The audit engagement ID for filing.
      steps:
      - name: fetch-journal
        type: call
        call: oracle.get-journal
        with:
          batch_name: '{{batch_name}}'
          ledger_id: '{{ledger_id}}'
      - name: store-evidence
        type: call
        call: sharepoint.create-file
        with:
          site_id: audit_engagements_site
          file_path: Evidence/{{engagement_id}}/JE_{{batch_name}}.json
          content: 'Batch: {{batch_name}}. Status: {{fetch-journal.Status}}. Debits: {{fetch-journal.TotalEnteredDebitAmount}}. Credits: {{fetch-journal.TotalEnteredCreditAmount}}. Posted: {{fetch-journal.PostingDate}}.'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://kpmg.oraclecloud.com/fscmRestApi/resources/v2
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: journals
      path: /journalBatches?q=BatchName='{{batch_name}}';LedgerId={{ledger_id}}
      inputParameters:
      - name: batch_name
        in: query
      - name: ledger_id
        in: query
      operations:
      - name: get-journal
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: create-file
        method: PUT
Open in Framework → View in Fleet → oracle-cloud-financials-journal-entry-lookup.yml

Conducts ESG materiality assessments by collecting stakeholder survey data from Microsoft Forms, analyzing materiality in Databricks, generating assessment reports in SharePoint, and presenting findings via Teams.

naftiko: '0.5'
info:
  label: ESG Materiality Assessment Orchestrator
  description: Conducts ESG materiality assessments by collecting stakeholder survey data from Microsoft Forms, analyzing materiality in Databricks, generating assessment reports in SharePoint, and presenting findings via Teams.
  tags:
  - esg
  - materiality
  - azure-databricks
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: esg-materiality
    port: 8080
    tools:
    - name: conduct-materiality-assessment
      description: Conduct an ESG materiality assessment for a client.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The client identifier.
      - name: assessment_year
        in: body
        type: string
        description: The assessment year.
      - name: engagement_team_email
        in: body
        type: string
        description: Engagement team email.
      steps:
      - name: analyze-materiality
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM esg_materiality_scores WHERE client_id = '{{client_id}}' AND year = '{{assessment_year}}' ORDER BY materiality_score DESC
      - name: generate-report
        type: call
        call: sharepoint.create-document
        with:
          site_id: esg-advisory
          folder_path: '{{client_id}}/Materiality/{{assessment_year}}'
          template: materiality_assessment
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{engagement_team_email}}'
          text: 'ESG materiality assessment complete for {{client_id}} ({{assessment_year}}). Top material topics: {{analyze-materiality.top_topics}}. Report: {{generate-report.url}}.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://kpmg-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → esg-materiality-assessment-orchestrator.yml

Retrieves a payroll summary from ADP Workforce Now by company code and pay period, returning gross pay, net pay, tax withholdings, and employee count. Used by audit and HR advisory teams.

naftiko: '0.5'
info:
  label: ADP Payroll Summary Lookup
  description: Retrieves a payroll summary from ADP Workforce Now by company code and pay period, returning gross pay, net pay, tax withholdings, and employee count. Used by audit and HR advisory teams.
  tags:
  - hr
  - payroll
  - adp
  - audit
capability:
  exposes:
  - type: mcp
    namespace: payroll-audit
    port: 8080
    tools:
    - name: get-payroll-summary
      description: Look up an ADP payroll summary by company code and pay period.
      inputParameters:
      - name: company_code
        in: body
        type: string
        description: The ADP company code.
      - name: pay_period
        in: body
        type: string
        description: The pay period identifier (e.g., 2026-03-15).
      call: adp.get-payroll
      with:
        company_code: '{{company_code}}'
        pay_period: '{{pay_period}}'
      outputParameters:
      - name: gross_pay
        type: string
        mapping: $.payrollSummary.grossPay.amount
      - name: net_pay
        type: string
        mapping: $.payrollSummary.netPay.amount
      - name: tax_withholdings
        type: string
        mapping: $.payrollSummary.taxWithholdings.amount
      - name: employee_count
        type: string
        mapping: $.payrollSummary.employeeCount
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: payroll
      path: /companies/{{company_code}}/payroll-summaries/{{pay_period}}
      inputParameters:
      - name: company_code
        in: path
      - name: pay_period
        in: path
      operations:
      - name: get-payroll
        method: GET
Open in Framework → View in Fleet → adp-payroll-summary-lookup.yml

On deal initiation, creates a SharePoint deal room, provisions Jira tracking board, pulls target company financials from Bloomberg, logs the engagement in Salesforce, and notifies the deal team in Microsoft Teams.

naftiko: '0.5'
info:
  label: M&A Due Diligence Pipeline
  description: On deal initiation, creates a SharePoint deal room, provisions Jira tracking board, pulls target company financials from Bloomberg, logs the engagement in Salesforce, and notifies the deal team in Microsoft Teams.
  tags:
  - advisory
  - mergers-and-acquisitions
  - due-diligence
  - sharepoint
  - jira
  - bloomberg
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ma-advisory
    port: 8080
    tools:
    - name: initiate-due-diligence
      description: Given a target company name and deal lead email, provision deal room, Jira board, pull Bloomberg data, log in Salesforce, and notify team.
      inputParameters:
      - name: target_company
        in: body
        type: string
        description: Legal name of the target company.
      - name: deal_code
        in: body
        type: string
        description: Internal deal/project code.
      - name: deal_lead_email
        in: body
        type: string
        description: Email of the deal lead partner.
      - name: bloomberg_ticker
        in: body
        type: string
        description: Bloomberg ticker for the target company.
      steps:
      - name: create-deal-room
        type: call
        call: sharepoint.create-folder
        with:
          site_id: ma_deal_rooms_site
          folder_path: Deals/{{deal_code}}_{{target_company}}
      - name: create-deal-board
        type: call
        call: jira.create-issue
        with:
          project_key: MADEAL
          issue_type: Epic
          summary: 'Due Diligence: {{target_company}} — {{deal_code}}'
          description: 'Deal room: {{create-deal-room.url}}. Lead: {{deal_lead_email}}.'
      - name: get-financials
        type: call
        call: bloomberg.get-company-financials
        with:
          ticker: '{{bloomberg_ticker}}'
      - name: log-opportunity
        type: call
        call: salesforce.create-opportunity
        with:
          name: 'M&A Advisory: {{target_company}}'
          stage: Due Diligence
          deal_code: '{{deal_code}}'
          description: 'Revenue: {{get-financials.revenue}}. EBITDA: {{get-financials.ebitda}}. Deal room: {{create-deal-room.url}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{deal_lead_email}}'
          text: 'Due diligence initiated for {{target_company}} ({{deal_code}}). Revenue: {{get-financials.revenue}}. EBITDA: {{get-financials.ebitda}}. Deal room: {{create-deal-room.url}}. Jira: {{create-deal-board.key}}.'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: jira
    baseUri: https://kpmg.atlassian.net/rest/api/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: bloomberg
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: company-data
      path: /data/{{ticker}}/financials
      inputParameters:
      - name: ticker
        in: path
      operations:
      - name: get-company-financials
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://kpmg.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: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → m-a-due-diligence-pipeline.yml

Triggers a data extract refresh for a specified Tableau workbook on Tableau Server. Used by analytics teams to ensure audit and advisory dashboards have current data.

naftiko: '0.5'
info:
  label: Tableau Workbook Data Extract Refresh
  description: Triggers a data extract refresh for a specified Tableau workbook on Tableau Server. Used by analytics teams to ensure audit and advisory dashboards have current data.
  tags:
  - analytics
  - tableau
  - reporting
  - data-refresh
capability:
  exposes:
  - type: mcp
    namespace: analytics-refresh
    port: 8080
    tools:
    - name: refresh-tableau-extract
      description: Trigger a Tableau Server data extract refresh for a given site and workbook.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: The Tableau Server site ID.
      - name: workbook_id
        in: body
        type: string
        description: The Tableau workbook LUID.
      call: tableau.refresh-workbook
      with:
        site_id: '{{site_id}}'
        workbook_id: '{{workbook_id}}'
      outputParameters:
      - name: job_id
        type: string
        mapping: $.job.id
      - name: status
        type: string
        mapping: $.job.status
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://tableau.kpmg.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbook-refresh
      path: /sites/{{site_id}}/workbooks/{{workbook_id}}/refresh
      inputParameters:
      - name: site_id
        in: path
      - name: workbook_id
        in: path
      operations:
      - name: refresh-workbook
        method: POST
Open in Framework → View in Fleet → tableau-workbook-data-extract-refresh.yml

Triggers an Alteryx data quality profiling workflow for a client dataset, returning completeness, uniqueness, and validity metrics for audit evidence.

naftiko: '0.5'
info:
  label: Alteryx Data Quality Profiling Lookup
  description: Triggers an Alteryx data quality profiling workflow for a client dataset, returning completeness, uniqueness, and validity metrics for audit evidence.
  tags:
  - data-analytics
  - audit
  - alteryx
  - data-quality
capability:
  exposes:
  - type: mcp
    namespace: data-analytics
    port: 8080
    tools:
    - name: get-data-quality-profile
      description: Trigger an Alteryx data quality profiling job for a specified dataset. Returns completeness, uniqueness, and validity scores.
      inputParameters:
      - name: workflow_id
        in: body
        type: string
        description: The Alteryx workflow identifier for data profiling.
      - name: dataset_name
        in: body
        type: string
        description: Name of the client dataset to profile.
      call: alteryx.trigger-workflow
      with:
        workflow_id: '{{workflow_id}}'
        parameters:
          dataset: '{{dataset_name}}'
      outputParameters:
      - name: completeness_score
        type: number
        mapping: $.results.completeness
      - name: uniqueness_score
        type: number
        mapping: $.results.uniqueness
      - name: validity_score
        type: number
        mapping: $.results.validity
      - name: record_count
        type: number
        mapping: $.results.totalRecords
  consumes:
  - type: http
    namespace: alteryx
    baseUri: https://kpmg.alteryxcloud.com/api/v3
    authentication:
      type: bearer
      token: $secrets.alteryx_token
    resources:
    - name: workflows
      path: /workflows/{{workflow_id}}/jobs
      inputParameters:
      - name: workflow_id
        in: path
      operations:
      - name: trigger-workflow
        method: POST
Open in Framework → View in Fleet → alteryx-data-quality-profiling-lookup.yml

On creation of a new audit engagement in ServiceNow, provisions a SharePoint document library for workpapers, creates a Jira epic for tracking milestones, and notifies the engagement team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Audit Engagement Orchestrator
  description: On creation of a new audit engagement in ServiceNow, provisions a SharePoint document library for workpapers, creates a Jira epic for tracking milestones, and notifies the engagement team in Microsoft Teams.
  tags:
  - audit
  - engagement-management
  - servicenow
  - sharepoint
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: audit-engagement
    port: 8080
    tools:
    - name: provision-audit-engagement
      description: Given an engagement ID, client name, and lead partner email, provision all supporting infrastructure for a new audit engagement across ServiceNow, SharePoint, Jira, and Microsoft Teams.
      inputParameters:
      - name: engagement_id
        in: body
        type: string
        description: The unique engagement identifier.
      - name: client_name
        in: body
        type: string
        description: The audit client legal entity name.
      - name: lead_partner_email
        in: body
        type: string
        description: Email of the lead audit partner.
      - name: fiscal_year_end
        in: body
        type: string
        description: Client fiscal year end date in YYYY-MM-DD format.
      steps:
      - name: create-engagement-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Audit engagement initiated: {{client_name}} FY {{fiscal_year_end}}'
          category: audit_engagement
          assigned_group: Audit_Operations
          description: 'Engagement {{engagement_id}} for {{client_name}}. Lead partner: {{lead_partner_email}}.'
      - name: provision-workpaper-library
        type: call
        call: sharepoint.create-folder
        with:
          site_id: audit_engagements_site
          folder_path: Workpapers/{{engagement_id}}_{{client_name}}
      - name: create-audit-epic
        type: call
        call: jira.create-issue
        with:
          project_key: AUDIT
          issue_type: Epic
          summary: 'Audit Engagement: {{client_name}} — {{engagement_id}}'
          description: 'FY End: {{fiscal_year_end}}. Workpapers: {{provision-workpaper-library.url}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{lead_partner_email}}'
          text: 'Audit engagement {{engagement_id}} for {{client_name}} is provisioned. Jira epic: {{create-audit-epic.key}}. Workpapers: {{provision-workpaper-library.url}}. ServiceNow: {{create-engagement-ticket.number}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://kpmg.service-now.com/api/now
    authentication:
      type: 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: jira
    baseUri: https://kpmg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → audit-engagement-orchestrator.yml

Executes analytical queries against Azure Synapse Analytics data warehouse for financial and audit data analysis.

naftiko: '0.5'
info:
  label: Azure Synapse Query Runner
  description: Executes analytical queries against Azure Synapse Analytics data warehouse for financial and audit data analysis.
  tags:
  - analytics
  - azure-synapse
capability:
  exposes:
  - type: mcp
    namespace: synapse-analytics
    port: 8080
    tools:
    - name: run-synapse-query
      description: Run an analytical query against Azure Synapse.
      inputParameters:
      - name: query
        in: body
        type: string
        description: The SQL query to execute.
      - name: database
        in: body
        type: string
        description: The Synapse database name.
      call: synapse.execute-query
      with:
        query: '{{query}}'
        database: '{{database}}'
      outputParameters:
      - name: results
        type: array
        mapping: $.results
      - name: row_count
        type: integer
        mapping: $.rowCount
  consumes:
  - type: http
    namespace: synapse
    baseUri: https://kpmg-analytics.sql.azuresynapse.net
    authentication:
      type: bearer
      token: $secrets.synapse_token
    resources:
    - name: queries
      path: /sql/query
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → azure-synapse-query-runner.yml

Queries Palo Alto Networks threat intelligence feeds for indicators of compromise during cybersecurity assessments.

naftiko: '0.5'
info:
  label: Palo Alto Network Threat Feed
  description: Queries Palo Alto Networks threat intelligence feeds for indicators of compromise during cybersecurity assessments.
  tags:
  - cybersecurity
  - palo-alto-networks
capability:
  exposes:
  - type: mcp
    namespace: threat-intel
    port: 8080
    tools:
    - name: query-threat-feed
      description: Query threat intelligence for an indicator of compromise.
      inputParameters:
      - name: indicator
        in: body
        type: string
        description: The IOC to query (IP, domain, hash).
      - name: indicator_type
        in: body
        type: string
        description: Type of indicator (ip, domain, filehash).
      call: paloalto.get-threat-intel
      with:
        indicator: '{{indicator}}'
        type: '{{indicator_type}}'
      outputParameters:
      - name: threat_score
        type: integer
        mapping: $.verdict.score
      - name: classification
        type: string
        mapping: $.verdict.classification
  consumes:
  - type: http
    namespace: paloalto
    baseUri: https://autofocus.paloaltonetworks.com/api/v1.0
    authentication:
      type: apiKey
      header: apiKey
      key: $secrets.paloalto_api_key
    resources:
    - name: indicators
      path: /samples/search
      operations:
      - name: get-threat-intel
        method: POST
Open in Framework → View in Fleet → palo-alto-network-threat-feed.yml

Retrieves a customer account record from Microsoft Dynamics 365 by account ID, returning name, revenue, industry, and primary contact. Used by advisory teams for client intelligence.

naftiko: '0.5'
info:
  label: Microsoft Dynamics 365 Customer Lookup
  description: Retrieves a customer account record from Microsoft Dynamics 365 by account ID, returning name, revenue, industry, and primary contact. Used by advisory teams for client intelligence.
  tags:
  - advisory
  - crm
  - microsoft-dynamics
  - client-intelligence
capability:
  exposes:
  - type: mcp
    namespace: crm-dynamics
    port: 8080
    tools:
    - name: get-dynamics-account
      description: Look up a Microsoft Dynamics 365 customer account by ID.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Dynamics 365 account GUID.
      call: dynamics.get-account
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.name
      - name: revenue
        type: string
        mapping: $.revenue
      - name: industry
        type: string
        mapping: $.industrycode@OData.Community.Display.V1.FormattedValue
      - name: primary_contact
        type: string
        mapping: $.primarycontactid.fullname
  consumes:
  - type: http
    namespace: dynamics
    baseUri: https://kpmg.crm.dynamics.com/api/data/v9.2
    authentication:
      type: bearer
      token: $secrets.dynamics_token
    resources:
    - name: accounts
      path: /accounts({{account_id}})
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
Open in Framework → View in Fleet → microsoft-dynamics-365-customer-lookup.yml

Supports lease accounting under ASC 842 by extracting lease data from SAP, calculating right-of-use assets in Databricks, and generating disclosure workpapers in SharePoint.

naftiko: '0.5'
info:
  label: Lease Accounting ASC 842 Pipeline
  description: Supports lease accounting under ASC 842 by extracting lease data from SAP, calculating right-of-use assets in Databricks, and generating disclosure workpapers in SharePoint.
  tags:
  - audit
  - lease-accounting
  - sap
  - azure-databricks
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: lease-accounting
    port: 8080
    tools:
    - name: analyze-leases
      description: Analyze client leases for ASC 842 compliance.
      inputParameters:
      - name: engagement_id
        in: body
        type: string
        description: The engagement ID.
      - name: client_id
        in: body
        type: string
        description: The client ID.
      steps:
      - name: extract-leases
        type: call
        call: sap.get-lease-data
        with:
          client_id: '{{client_id}}'
      - name: calculate-rou-assets
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM lease_calculations WHERE client_id = '{{client_id}}' AND standard = 'ASC842'
      - name: create-workpaper
        type: call
        call: sharepoint.create-document
        with:
          site_id: audit-engagements
          folder_path: '{{engagement_id}}/LeaseAccounting'
          template: asc842_workpaper
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kpmg-sap.kpmg.com/sap/opu/odata/sap
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: leases
      path: /RE_SRV/Leases
      operations:
      - name: get-lease-data
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://kpmg-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
Open in Framework → View in Fleet → lease-accounting-asc-842-pipeline.yml

Identifies customs duty recovery opportunities by analyzing import data in Databricks, cross-referencing tariff schedules, generating recovery claims in SharePoint, and notifying the trade advisory team.

naftiko: '0.5'
info:
  label: Customs Duty Recovery Pipeline
  description: Identifies customs duty recovery opportunities by analyzing import data in Databricks, cross-referencing tariff schedules, generating recovery claims in SharePoint, and notifying the trade advisory team.
  tags:
  - tax
  - customs
  - azure-databricks
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: customs-recovery
    port: 8080
    tools:
    - name: identify-recovery-opportunities
      description: Identify customs duty recovery opportunities for a client.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The client identifier.
      - name: trade_advisory_email
        in: body
        type: string
        description: Trade advisory team email.
      steps:
      - name: analyze-imports
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM import_duty_analysis WHERE client_id = '{{client_id}}' AND recovery_potential > 0
      - name: generate-claims
        type: call
        call: sharepoint.create-document
        with:
          site_id: tax-engagements
          folder_path: '{{client_id}}/CustomsRecovery'
          template: duty_recovery_claim
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{trade_advisory_email}}'
          text: 'Customs duty recovery for {{client_id}}: {{analyze-imports.recovery_count}} opportunities totaling {{analyze-imports.total_recovery}}. Claims: {{generate-claims.url}}.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://kpmg-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → customs-duty-recovery-pipeline.yml

Extracts financial statement data from SAP, runs analytical procedures through Azure Databricks, generates variance analysis in Power BI, stores the working paper in SharePoint, and alerts the audit senior via Microsoft Teams.

naftiko: '0.5'
info:
  label: Financial Statement Analytics Pipeline
  description: Extracts financial statement data from SAP, runs analytical procedures through Azure Databricks, generates variance analysis in Power BI, stores the working paper in SharePoint, and alerts the audit senior via Microsoft Teams.
  tags:
  - audit
  - analytics
  - sap
  - azure-databricks
  - power-bi
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: audit-fs-analytics
    port: 8080
    tools:
    - name: run-fs-analytics
      description: Given a company code and fiscal year, extract SAP data, run Databricks analytics, refresh Power BI, save workpaper, and notify the audit senior.
      inputParameters:
      - name: company_code
        in: body
        type: string
        description: SAP company code.
      - name: fiscal_year
        in: body
        type: string
        description: Fiscal year (YYYY).
      - name: audit_senior_email
        in: body
        type: string
        description: Email of the audit senior.
      - name: databricks_job_id
        in: body
        type: string
        description: Databricks analytics job ID.
      - name: powerbi_dataset_id
        in: body
        type: string
        description: Power BI dataset GUID for the audit dashboard.
      steps:
      - name: extract-financials
        type: call
        call: sap.get-financial-statements
        with:
          company_code: '{{company_code}}'
          fiscal_year: '{{fiscal_year}}'
      - name: run-analytics
        type: call
        call: databricks.run-job
        with:
          job_id: '{{databricks_job_id}}'
          parameters: '{"company_code":"{{company_code}}","fiscal_year":"{{fiscal_year}}"}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          workspace_id: audit_workspace
          dataset_id: '{{powerbi_dataset_id}}'
      - name: save-workpaper
        type: call
        call: sharepoint.create-file
        with:
          site_id: audit_engagements_site
          file_path: Analytics/{{company_code}}_FY{{fiscal_year}}_fs_analytics.xlsx
      - name: notify-senior
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{audit_senior_email}}'
          text: 'FS analytics complete for {{company_code}} FY{{fiscal_year}}. Databricks job: {{run-analytics.run_id}}. Power BI refreshed. Workpaper: {{save-workpaper.url}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kpmg-s4.sap.com/sap/opu/odata/sap/API_FINANCIALSTATEMENT
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: financial-statements
      path: /FinancialStatementSet?$filter=CompanyCode eq '{{company_code}}' and FiscalYear eq '{{fiscal_year}}'
      inputParameters:
      - name: company_code
        in: query
      - name: fiscal_year
        in: query
      operations:
      - name: get-financial-statements
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://adb-kpmg.azuredatabricks.net/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: workspace_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: create-file
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → financial-statement-analytics-pipeline.yml

Manages engagement quality reviews by pulling engagement metrics from Salesforce, collecting review documentation from SharePoint, creating review tasks in Jira, and routing for partner sign-off.

naftiko: '0.5'
info:
  label: Engagement Quality Review Orchestrator
  description: Manages engagement quality reviews by pulling engagement metrics from Salesforce, collecting review documentation from SharePoint, creating review tasks in Jira, and routing for partner sign-off.
  tags:
  - quality
  - engagement-review
  - salesforce
  - sharepoint
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: quality-review
    port: 8080
    tools:
    - name: initiate-quality-review
      description: Initiate an engagement quality review process.
      inputParameters:
      - name: engagement_id
        in: body
        type: string
        description: The engagement identifier.
      - name: eqr_partner_email
        in: body
        type: string
        description: EQR partner email.
      steps:
      - name: get-engagement-data
        type: call
        call: salesforce.get-engagement
        with:
          engagement_id: '{{engagement_id}}'
      - name: collect-workpapers
        type: call
        call: sharepoint.get-folder-contents
        with:
          site_id: audit-engagements
          folder_path: '{{engagement_id}}'
      - name: create-review-task
        type: call
        call: jira.create-issue
        with:
          project: QR
          summary: 'EQR: {{get-engagement-data.client_name}} - {{engagement_id}}'
          assignee: '{{eqr_partner_email}}'
          description: 'Engagement files: {{collect-workpapers.file_count}} documents.'
      - name: notify-partner
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{eqr_partner_email}}'
          text: 'EQR assigned: {{get-engagement-data.client_name}} ({{engagement_id}}). {{collect-workpapers.file_count}} workpapers to review. Jira: {{create-review-task.key}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://kpmg.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: engagements
      path: /sobjects/Engagement__c/{{engagement_id}}
      inputParameters:
      - name: engagement_id
        in: path
      operations:
      - name: get-engagement
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      path: /{{site_id}}/drive/root:/{{folder_path}}:/children
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: get-folder-contents
        method: GET
  - type: http
    namespace: jira
    baseUri: https://kpmg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → engagement-quality-review-orchestrator.yml

Tests financial close processes by extracting journal entries from SAP, performing analytics in Databricks, documenting findings in SharePoint, and notifying the audit team.

naftiko: '0.5'
info:
  label: Financial Close Testing Pipeline
  description: Tests financial close processes by extracting journal entries from SAP, performing analytics in Databricks, documenting findings in SharePoint, and notifying the audit team.
  tags:
  - audit
  - financial-close
  - sap
  - azure-databricks
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: close-testing
    port: 8080
    tools:
    - name: test-financial-close
      description: Perform financial close testing procedures.
      inputParameters:
      - name: engagement_id
        in: body
        type: string
        description: The audit engagement ID.
      - name: period_end
        in: body
        type: string
        description: Period end date in YYYY-MM-DD format.
      steps:
      - name: extract-journal-entries
        type: call
        call: sap.get-journal-entries
        with:
          period_end: '{{period_end}}'
      - name: analyze-entries
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM journal_entry_analytics WHERE period_end = '{{period_end}}' AND risk_flag = true
      - name: document-findings
        type: call
        call: sharepoint.create-document
        with:
          site_id: audit-engagements
          folder_path: '{{engagement_id}}/CloseTestingResults'
          template: close_testing_workpaper
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kpmg-sap.kpmg.com/sap/opu/odata/sap
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: journal-entries
      path: /GL_SRV/JournalEntries
      operations:
      - name: get-journal-entries
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://kpmg-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
Open in Framework → View in Fleet → financial-close-testing-pipeline.yml

Retrieves a SAP Ariba procurement requisition by ID, returning status, requestor, total amount, and approval chain. Used by procurement advisory teams.

naftiko: '0.5'
info:
  label: SAP Ariba Procurement Requisition Lookup
  description: Retrieves a SAP Ariba procurement requisition by ID, returning status, requestor, total amount, and approval chain. Used by procurement advisory teams.
  tags:
  - procurement
  - sap-ariba
  - spend-management
capability:
  exposes:
  - type: mcp
    namespace: procurement-ariba
    port: 8080
    tools:
    - name: get-ariba-requisition
      description: Look up a SAP Ariba requisition by ID and return its status and details.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The SAP Ariba requisition identifier.
      call: ariba.get-requisition
      with:
        requisition_id: '{{requisition_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.StatusString
      - name: requestor
        type: string
        mapping: $.Requester.Name
      - name: total_amount
        type: string
        mapping: $.TotalCost.Amount
      - name: currency
        type: string
        mapping: $.TotalCost.Currency
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/purchase-req/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: requisitions
      path: /requisitions/{{requisition_id}}
      inputParameters:
      - name: requisition_id
        in: path
      operations:
      - name: get-requisition
        method: GET
Open in Framework → View in Fleet → sap-ariba-procurement-requisition-lookup.yml

On initiation of a new client risk assessment, creates a ServiceNow risk record, pulls entity data from Salesforce, runs a Dow Jones adverse media screening, and posts summary findings to the engagement team channel in Microsoft Teams.

naftiko: '0.5'
info:
  label: Risk Assessment Orchestrator
  description: On initiation of a new client risk assessment, creates a ServiceNow risk record, pulls entity data from Salesforce, runs a Dow Jones adverse media screening, and posts summary findings to the engagement team channel in Microsoft Teams.
  tags:
  - risk
  - compliance
  - aml
  - servicenow
  - salesforce
  - microsoft-teams
  - dow-jones
capability:
  exposes:
  - type: mcp
    namespace: risk-assessment
    port: 8080
    tools:
    - name: initiate-risk-assessment
      description: Given a client Salesforce account ID and engagement lead email, pull client data, screen against Dow Jones, create a ServiceNow risk record, and alert the engagement team.
      inputParameters:
      - name: salesforce_account_id
        in: body
        type: string
        description: The Salesforce account ID for the client entity.
      - name: engagement_lead_email
        in: body
        type: string
        description: UPN of the engagement lead.
      - name: risk_category
        in: body
        type: string
        description: Risk category (e.g., financial_crime, sanctions, pep).
      steps:
      - name: get-client
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{salesforce_account_id}}'
      - name: screen-entity
        type: call
        call: dowjones.screen-entity
        with:
          entity_name: '{{get-client.Name}}'
          country: '{{get-client.BillingCountry}}'
      - name: create-risk-record
        type: call
        call: servicenow.create-risk
        with:
          short_description: 'Risk Assessment: {{get-client.Name}} — {{risk_category}}'
          description: 'DJ screening hits: {{screen-entity.total_hits}}. Category: {{risk_category}}. Country: {{get-client.BillingCountry}}.'
          risk_score: '{{screen-entity.risk_score}}'
          assigned_group: Risk_Advisory
      - name: notify-lead
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{engagement_lead_email}}'
          text: 'Risk Assessment initiated for {{get-client.Name}}. DJ hits: {{screen-entity.total_hits}}. Risk score: {{screen-entity.risk_score}}. ServiceNow: {{create-risk-record.number}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://kpmg.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: dowjones
    baseUri: https://api.dowjones.com/riskandcompliance/v1
    authentication:
      type: bearer
      token: $secrets.dowjones_token
    resources:
    - name: screening
      path: /screenings
      operations:
      - name: screen-entity
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://kpmg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: risk-records
      path: /table/sn_risk_risk
      operations:
      - name: create-risk
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → risk-assessment-orchestrator.yml

Retrieves the latest run status for a Terraform Cloud workspace, returning plan status, resource changes, and run ID. Used by cloud advisory teams for infrastructure-as-code governance.

naftiko: '0.5'
info:
  label: Terraform Cloud Workspace Status
  description: Retrieves the latest run status for a Terraform Cloud workspace, returning plan status, resource changes, and run ID. Used by cloud advisory teams for infrastructure-as-code governance.
  tags:
  - cloud
  - terraform
  - infrastructure-as-code
  - governance
capability:
  exposes:
  - type: mcp
    namespace: iac-governance
    port: 8080
    tools:
    - name: get-terraform-run
      description: Look up the latest Terraform Cloud run for a workspace and log any resource destructions in ServiceNow for governance review.
      inputParameters:
      - name: organization
        in: body
        type: string
        description: Terraform Cloud organization name.
      - name: workspace_name
        in: body
        type: string
        description: Terraform Cloud workspace name.
      - name: cloud_ops_email
        in: body
        type: string
        description: Email of the cloud operations lead.
      steps:
      - name: fetch-run
        type: call
        call: terraform.get-latest-run
        with:
          organization: '{{organization}}'
          workspace_name: '{{workspace_name}}'
      - name: log-governance
        type: call
        call: servicenow.create-change-request
        with:
          short_description: 'IaC run: {{workspace_name}} — {{fetch-run.status}}'
          description: 'Run: {{fetch-run.id}}. Additions: {{fetch-run.resource-additions}}. Destructions: {{fetch-run.resource-destructions}}.'
          assigned_group: Cloud_Governance
      - name: notify-ops
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{cloud_ops_email}}'
          text: 'Terraform run {{fetch-run.id}} ({{workspace_name}}): {{fetch-run.status}}. Adds: {{fetch-run.resource-additions}}. Destroys: {{fetch-run.resource-destructions}}. ServiceNow: {{log-governance.number}}.'
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: workspaces
      path: /organizations/{{organization}}/workspaces/{{workspace_name}}/runs?page[size]=1
      inputParameters:
      - name: organization
        in: path
      - name: workspace_name
        in: path
      operations:
      - name: get-latest-run
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kpmg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-requests
      path: /table/change_request
      operations:
      - name: create-change-request
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → terraform-cloud-workspace-status.yml

Retrieves audit workpapers and supporting documentation from SharePoint document libraries organized by engagement.

naftiko: '0.5'
info:
  label: SharePoint Audit Workpaper Retrieval
  description: Retrieves audit workpapers and supporting documentation from SharePoint document libraries organized by engagement.
  tags:
  - audit
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: audit-workpapers
    port: 8080
    tools:
    - name: get-workpaper
      description: Retrieve an audit workpaper from SharePoint by engagement and document ID.
      inputParameters:
      - name: engagement_id
        in: body
        type: string
        description: The audit engagement identifier.
      - name: document_name
        in: body
        type: string
        description: The workpaper document name.
      call: sharepoint.get-document
      with:
        site_id: audit-engagements
        folder_path: '{{engagement_id}}/Workpapers/{{document_name}}'
      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: documents
      path: /audit-engagements/drive/root:/{{folder_path}}
      inputParameters:
      - name: folder_path
        in: path
      operations:
      - name: get-document
        method: GET
Open in Framework → View in Fleet → sharepoint-audit-workpaper-retrieval.yml

Screens a batch of financial transactions against Dow Jones watchlists, logs flagged transactions in ServiceNow for investigation, creates Jira case tasks for compliance analysts, and notifies the AML officer via Microsoft Teams.

naftiko: '0.5'
info:
  label: Anti-Money Laundering Transaction Screening
  description: Screens a batch of financial transactions against Dow Jones watchlists, logs flagged transactions in ServiceNow for investigation, creates Jira case tasks for compliance analysts, and notifies the AML officer via Microsoft Teams.
  tags:
  - compliance
  - aml
  - financial-crime
  - dow-jones
  - servicenow
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: aml-screening
    port: 8080
    tools:
    - name: screen-transactions
      description: Given a transaction batch ID and AML officer email, screen transactions against Dow Jones, log flagged items in ServiceNow, create Jira investigation tasks, and notify the officer.
      inputParameters:
      - name: batch_id
        in: body
        type: string
        description: The transaction batch identifier.
      - name: client_entity_id
        in: body
        type: string
        description: The client entity under screening.
      - name: aml_officer_email
        in: body
        type: string
        description: Email of the AML compliance officer.
      steps:
      - name: screen-batch
        type: call
        call: dowjones.screen-transactions
        with:
          batch_id: '{{batch_id}}'
          entity_id: '{{client_entity_id}}'
      - name: log-flagged-transactions
        type: call
        call: servicenow.create-aml-case
        with:
          short_description: 'AML flags: Batch {{batch_id}} — {{screen-batch.flagged_count}} transactions'
          description: 'Entity: {{client_entity_id}}. Flagged: {{screen-batch.flagged_count}}. Highest risk: {{screen-batch.max_risk_score}}. Categories: {{screen-batch.categories}}.'
          assigned_group: AML_Investigations
      - name: create-investigation-task
        type: call
        call: jira.create-issue
        with:
          project_key: AMLOPS
          issue_type: Task
          summary: 'Investigate: AML flags batch {{batch_id}} — {{screen-batch.flagged_count}} hits'
          description: 'ServiceNow case: {{log-flagged-transactions.number}}. Entity: {{client_entity_id}}. Max risk: {{screen-batch.max_risk_score}}.'
      - name: notify-officer
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{aml_officer_email}}'
          text: 'AML Alert: Batch {{batch_id}} flagged {{screen-batch.flagged_count}} transactions. Max risk: {{screen-batch.max_risk_score}}. ServiceNow: {{log-flagged-transactions.number}}. Jira: {{create-investigation-task.key}}.'
  consumes:
  - type: http
    namespace: dowjones
    baseUri: https://api.dowjones.com/riskandcompliance/v1
    authentication:
      type: bearer
      token: $secrets.dowjones_token
    resources:
    - name: transaction-screening
      path: /transactions/screen
      operations:
      - name: screen-transactions
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://kpmg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: aml-cases
      path: /table/sn_grc_case
      operations:
      - name: create-aml-case
        method: POST
  - type: http
    namespace: jira
    baseUri: https://kpmg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → anti-money-laundering-transaction-screening.yml

Assesses client workforce transformation by analyzing HR data in Databricks, generating assessment reports in SharePoint, and presenting to stakeholders via Teams.

naftiko: '0.5'
info:
  label: Workforce Transformation Assessment Pipeline
  description: Assesses client workforce transformation by analyzing HR data in Databricks, generating assessment reports in SharePoint, and presenting to stakeholders via Teams.
  tags:
  - advisory
  - workforce
  - azure-databricks
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: workforce-transformation
    port: 8080
    tools:
    - name: assess-workforce
      description: Assess workforce transformation readiness.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The client identifier.
      - name: advisory_email
        in: body
        type: string
        description: Advisory team email.
      steps:
      - name: analyze-workforce
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM workforce_assessment WHERE client_id = '{{client_id}}'
      - name: generate-report
        type: call
        call: sharepoint.create-document
        with:
          site_id: advisory
          folder_path: '{{client_id}}/Workforce'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{advisory_email}}'
          text: 'Workforce assessment for {{client_id}}: Readiness {{analyze-workforce.score}}/10. Report: {{generate-report.url}}.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://kpmg-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workforce-transformation-assessment-pipeline.yml

Triggers an Alteryx Server workflow by workflow ID and returns the job execution status. Used by audit analytics and data teams to run analytical procedures on demand.

naftiko: '0.5'
info:
  label: Alteryx Analytics Workflow Trigger
  description: Triggers an Alteryx Server workflow by workflow ID and returns the job execution status. Used by audit analytics and data teams to run analytical procedures on demand.
  tags:
  - analytics
  - alteryx
  - audit
  - data-processing
capability:
  exposes:
  - type: mcp
    namespace: audit-analytics-alteryx
    port: 8080
    tools:
    - name: trigger-alteryx-workflow
      description: Trigger an Alteryx Server workflow, log the execution in Jira, and notify the audit analytics team via Microsoft Teams.
      inputParameters:
      - name: workflow_id
        in: body
        type: string
        description: The Alteryx Server workflow ID.
      - name: engagement_code
        in: body
        type: string
        description: The audit engagement code.
      - name: analyst_email
        in: body
        type: string
        description: Email of the requesting analyst.
      steps:
      - name: run-workflow
        type: call
        call: alteryx.run-workflow
        with:
          workflow_id: '{{workflow_id}}'
      - name: log-execution
        type: call
        call: jira.create-issue
        with:
          project_key: AUDITANA
          issue_type: Task
          summary: Alteryx workflow {{workflow_id}} executed — {{engagement_code}}
          description: 'Job ID: {{run-workflow.id}}. Status: {{run-workflow.status}}. Analyst: {{analyst_email}}.'
      - name: notify-analyst
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{analyst_email}}'
          text: 'Alteryx workflow {{workflow_id}} triggered. Job: {{run-workflow.id}}. Status: {{run-workflow.status}}. Jira: {{log-execution.key}}.'
  consumes:
  - type: http
    namespace: alteryx
    baseUri: https://alteryx.kpmg.com/api/v3
    authentication:
      type: bearer
      token: $secrets.alteryx_token
    resources:
    - name: workflows
      path: /workflows/{{workflow_id}}/jobs
      inputParameters:
      - name: workflow_id
        in: path
      operations:
      - name: run-workflow
        method: POST
  - type: http
    namespace: jira
    baseUri: https://kpmg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → alteryx-analytics-workflow-trigger.yml

Queries Datadog for infrastructure metrics by host and metric name, returning the latest data point. Used by technology advisory teams for performance assessments.

naftiko: '0.5'
info:
  label: Datadog Infrastructure Metrics Lookup
  description: Queries Datadog for infrastructure metrics by host and metric name, returning the latest data point. Used by technology advisory teams for performance assessments.
  tags:
  - operations
  - monitoring
  - datadog
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: infra-monitoring
    port: 8080
    tools:
    - name: get-host-metric
      description: Query Datadog for a specific infrastructure metric on a given host and create a ServiceNow incident if the metric exceeds a threshold.
      inputParameters:
      - name: host_name
        in: body
        type: string
        description: The hostname to query metrics for.
      - name: metric_name
        in: body
        type: string
        description: The Datadog metric name (e.g., system.cpu.user, system.mem.used).
      - name: ops_team_email
        in: body
        type: string
        description: Email of the operations team lead.
      steps:
      - name: fetch-metric
        type: call
        call: datadog.query-metric
        with:
          host_name: '{{host_name}}'
          metric_name: '{{metric_name}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Metric alert: {{metric_name}} on {{host_name}}'
          description: 'Current value: {{fetch-metric.value}} {{fetch-metric.unit}}. Host: {{host_name}}.'
          assigned_group: IT_Operations
      - name: notify-ops
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{ops_team_email}}'
          text: 'Infrastructure alert: {{metric_name}} on {{host_name}} = {{fetch-metric.value}} {{fetch-metric.unit}}. ServiceNow: {{create-incident.number}}.'
  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: metrics
      path: /query?query={{metric_name}}{host:{{host_name}}}&from=-3600&to=now
      inputParameters:
      - name: host_name
        in: query
      - name: metric_name
        in: query
      operations:
      - name: query-metric
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kpmg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → datadog-infrastructure-metrics-lookup.yml

Tests accounts receivable balances by extracting AR aging from SAP, selecting confirmation samples in Databricks, generating letters in SharePoint, and tracking responses in Salesforce.

naftiko: '0.5'
info:
  label: Accounts Receivable Confirmation Pipeline
  description: Tests accounts receivable balances by extracting AR aging from SAP, selecting confirmation samples in Databricks, generating letters in SharePoint, and tracking responses in Salesforce.
  tags:
  - audit
  - accounts-receivable
  - sap
  - azure-databricks
  - sharepoint
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: ar-confirmation
    port: 8080
    tools:
    - name: test-ar-balances
      description: Test accounts receivable balances through confirmation procedures.
      inputParameters:
      - name: engagement_id
        in: body
        type: string
        description: The engagement ID.
      - name: cutoff_date
        in: body
        type: string
        description: AR cutoff date.
      steps:
      - name: extract-ar-aging
        type: call
        call: sap.get-ar-aging
        with:
          cutoff_date: '{{cutoff_date}}'
      - name: select-sample
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM ar_sampling WHERE engagement_id = '{{engagement_id}}' AND cutoff_date = '{{cutoff_date}}'
      - name: generate-confirmation-letters
        type: call
        call: sharepoint.create-document
        with:
          site_id: audit-engagements
          folder_path: '{{engagement_id}}/ARConfirmations'
          template: ar_confirmation_letters
      - name: create-tracking-records
        type: call
        call: salesforce.bulk-create
        with:
          object: AuditConfirmation__c
          records: '{{select-sample.sampled_customers}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kpmg-sap.kpmg.com/sap/opu/odata/sap
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: ar
      path: /FI_SRV/ARaging
      operations:
      - name: get-ar-aging
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://kpmg-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://kpmg.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: bulk
      path: /composite/sobjects
      operations:
      - name: bulk-create
        method: POST
Open in Framework → View in Fleet → accounts-receivable-confirmation-pipeline.yml

Pulls trial balance data from SAP, runs the tax provision calculation in Thomson Reuters ONESOURCE, stores the provision workpaper in SharePoint, and notifies the tax senior manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: Tax Provision Calculation Pipeline
  description: Pulls trial balance data from SAP, runs the tax provision calculation in Thomson Reuters ONESOURCE, stores the provision workpaper in SharePoint, and notifies the tax senior manager via Microsoft Teams.
  tags:
  - tax
  - provision
  - sap
  - thomson-reuters
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: tax-provision
    port: 8080
    tools:
    - name: calculate-tax-provision
      description: Given a company code, fiscal year, and period, pull SAP trial balance, run ONESOURCE provision, store workpaper in SharePoint, and notify the tax senior manager.
      inputParameters:
      - name: company_code
        in: body
        type: string
        description: SAP company code.
      - name: fiscal_year
        in: body
        type: string
        description: Fiscal year (YYYY).
      - name: period
        in: body
        type: string
        description: Fiscal period (e.g., Q1, Q2, Q3, Q4, FY).
      - name: tax_manager_email
        in: body
        type: string
        description: Email of the tax senior manager.
      steps:
      - name: get-trial-balance
        type: call
        call: sap.get-trial-balance
        with:
          company_code: '{{company_code}}'
          fiscal_year: '{{fiscal_year}}'
          period: '{{period}}'
      - name: run-provision
        type: call
        call: onesource.calculate-provision
        with:
          entity_code: '{{company_code}}'
          fiscal_year: '{{fiscal_year}}'
          period: '{{period}}'
          pretax_income: '{{get-trial-balance.pretax_income}}'
      - name: store-workpaper
        type: call
        call: sharepoint.create-file
        with:
          site_id: tax_provisions_site
          file_path: Provisions/{{company_code}}_{{fiscal_year}}_{{period}}_provision.xlsx
          content: 'Entity: {{company_code}}. Period: {{period}} FY{{fiscal_year}}. Pretax income: {{get-trial-balance.pretax_income}}. Current provision: {{run-provision.current_tax}}. Deferred provision: {{run-provision.deferred_tax}}. ETR: {{run-provision.effective_tax_rate}}.'
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{tax_manager_email}}'
          text: 'Tax provision for {{company_code}} {{period}} FY{{fiscal_year}} complete. Current: {{run-provision.current_tax}}. Deferred: {{run-provision.deferred_tax}}. ETR: {{run-provision.effective_tax_rate}}. Workpaper: {{store-workpaper.url}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kpmg-s4.sap.com/sap/opu/odata/sap/API_TRIALBALANCE
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    - name: sap-client
      in: header
      value: '100'
    resources:
    - name: trial-balance
      path: /TrialBalanceSet?$filter=CompanyCode eq '{{company_code}}' and FiscalYear eq '{{fiscal_year}}'
      inputParameters:
      - name: company_code
        in: query
      - name: fiscal_year
        in: query
      operations:
      - name: get-trial-balance
        method: GET
  - type: http
    namespace: onesource
    baseUri: https://api.tax.thomsonreuters.com/onesource/v2
    authentication:
      type: bearer
      token: $secrets.onesource_token
    resources:
    - name: provisions
      path: /provisions/calculate
      operations:
      - name: calculate-provision
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: create-file
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → tax-provision-calculation-pipeline.yml

Orchestrates tax return preparation by extracting client financial data from SAP, running tax calculations in Databricks, generating draft returns in SharePoint, and notifying the engagement team via Teams.

naftiko: '0.5'
info:
  label: Tax Return Preparation Orchestrator
  description: Orchestrates tax return preparation by extracting client financial data from SAP, running tax calculations in Databricks, generating draft returns in SharePoint, and notifying the engagement team via Teams.
  tags:
  - tax
  - preparation
  - sap
  - azure-databricks
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: tax-preparation
    port: 8080
    tools:
    - name: prepare-tax-return
      description: Orchestrate tax return preparation workflow.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The client identifier.
      - name: tax_year
        in: body
        type: string
        description: The tax year.
      - name: engagement_manager_email
        in: body
        type: string
        description: Engagement manager email.
      steps:
      - name: extract-financials
        type: call
        call: sap.get-trial-balance
        with:
          client_id: '{{client_id}}'
          fiscal_year: '{{tax_year}}'
      - name: calculate-tax
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM tax_calculation WHERE client_id = '{{client_id}}' AND tax_year = '{{tax_year}}'
      - name: generate-draft
        type: call
        call: sharepoint.create-document
        with:
          site_id: tax-engagements
          folder_path: '{{client_id}}/{{tax_year}}/Returns'
          template: tax_return_draft
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{engagement_manager_email}}'
          text: 'Tax return draft ready for {{client_id}} ({{tax_year}}). Taxable income: {{calculate-tax.taxable_income}}. Draft: {{generate-draft.url}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kpmg-sap.kpmg.com/sap/opu/odata/sap
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: trial-balance
      path: /GL_SRV/TrialBalance
      operations:
      - name: get-trial-balance
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://kpmg-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → tax-return-preparation-orchestrator.yml

Looks up supplier qualification status and risk ratings from SAP Ariba for procurement compliance assessments.

naftiko: '0.5'
info:
  label: SAP Ariba Supplier Qualification Lookup
  description: Looks up supplier qualification status and risk ratings from SAP Ariba for procurement compliance assessments.
  tags:
  - procurement
  - sap-ariba
capability:
  exposes:
  - type: mcp
    namespace: supplier-qualification
    port: 8080
    tools:
    - name: get-supplier-qualification
      description: Check supplier qualification status in SAP Ariba.
      inputParameters:
      - name: supplier_id
        in: body
        type: string
        description: The SAP Ariba supplier ID.
      call: ariba.get-qualification
      with:
        supplier_id: '{{supplier_id}}'
      outputParameters:
      - name: qualification_status
        type: string
        mapping: $.supplier.qualificationStatus
      - name: risk_rating
        type: string
        mapping: $.supplier.riskRating
      - name: last_assessment_date
        type: string
        mapping: $.supplier.lastAssessmentDate
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/supplier-management/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: suppliers
      path: /suppliers/{{supplier_id}}/qualification
      inputParameters:
      - name: supplier_id
        in: path
      operations:
      - name: get-qualification
        method: GET
Open in Framework → View in Fleet → sap-ariba-supplier-qualification-lookup.yml

Checks SSL certificate expiration dates stored in Azure Key Vault for IT general controls testing.

naftiko: '0.5'
info:
  label: Azure Key Vault Certificate Expiry Check
  description: Checks SSL certificate expiration dates stored in Azure Key Vault for IT general controls testing.
  tags:
  - security
  - azure-key-vault
capability:
  exposes:
  - type: mcp
    namespace: certificate-management
    port: 8080
    tools:
    - name: check-certificate-expiry
      description: Check certificate expiration status in Azure Key Vault.
      inputParameters:
      - name: vault_name
        in: body
        type: string
        description: The Azure Key Vault name.
      - name: cert_name
        in: body
        type: string
        description: The certificate name.
      call: keyvault.get-certificate
      with:
        vault_name: '{{vault_name}}'
        cert_name: '{{cert_name}}'
      outputParameters:
      - name: expiry_date
        type: string
        mapping: $.attributes.expires
      - name: enabled
        type: boolean
        mapping: $.attributes.enabled
  consumes:
  - type: http
    namespace: keyvault
    baseUri: https://{{vault_name}}.vault.azure.net
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: certificates
      path: /certificates/{{cert_name}}?api-version=7.4
      inputParameters:
      - name: cert_name
        in: path
      operations:
      - name: get-certificate
        method: GET
Open in Framework → View in Fleet → azure-key-vault-certificate-expiry-check.yml

Assesses client cloud security posture by scanning Azure configurations, checking compliance against CIS benchmarks in Databricks, generating findings reports in SharePoint, and alerting the cyber team.

naftiko: '0.5'
info:
  label: Cloud Security Assessment Orchestrator
  description: Assesses client cloud security posture by scanning Azure configurations, checking compliance against CIS benchmarks in Databricks, generating findings reports in SharePoint, and alerting the cyber team.
  tags:
  - cybersecurity
  - cloud-security
  - azure-databricks
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cloud-security
    port: 8080
    tools:
    - name: assess-cloud-security
      description: Assess client cloud security posture.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The client identifier.
      - name: subscription_id
        in: body
        type: string
        description: The Azure subscription ID to assess.
      - name: cyber_lead_email
        in: body
        type: string
        description: Cyber engagement lead email.
      steps:
      - name: scan-configuration
        type: call
        call: azure.get-security-score
        with:
          subscription_id: '{{subscription_id}}'
      - name: check-cis-compliance
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM cis_benchmark_results WHERE subscription_id = '{{subscription_id}}' AND compliance_status = 'FAIL'
      - name: generate-findings
        type: call
        call: sharepoint.create-document
        with:
          site_id: cyber-engagements
          folder_path: '{{client_id}}/CloudSecurity/{{subscription_id}}'
          template: cloud_security_assessment
      - name: notify-cyber-lead
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{cyber_lead_email}}'
          text: 'Cloud security assessment for {{client_id}}: Security score {{scan-configuration.score}}/100. CIS failures: {{check-cis-compliance.fail_count}}. Report: {{generate-findings.url}}.'
  consumes:
  - type: http
    namespace: azure
    baseUri: https://management.azure.com/subscriptions/{{subscription_id}}/providers/Microsoft.Security
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: security
      path: /secureScores/ascScore?api-version=2020-01-01
      operations:
      - name: get-security-score
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://kpmg-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → cloud-security-assessment-orchestrator.yml

Monitors Microsoft Power Automate flow runs for a consulting engagement, detects failures, creates ServiceNow incidents for failed runs, assigns remediation in Jira, and alerts the RPA team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Robotic Process Automation Monitoring Orchestrator
  description: Monitors Microsoft Power Automate flow runs for a consulting engagement, detects failures, creates ServiceNow incidents for failed runs, assigns remediation in Jira, and alerts the RPA team via Microsoft Teams.
  tags:
  - consulting
  - rpa
  - microsoft-power-automate
  - servicenow
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: rpa-monitoring
    port: 8080
    tools:
    - name: monitor-rpa-failures
      description: Given a Power Automate flow ID and monitoring window, check for failures, create ServiceNow incidents, assign Jira tasks, and alert the RPA team.
      inputParameters:
      - name: flow_id
        in: body
        type: string
        description: The Power Automate flow identifier.
      - name: environment_id
        in: body
        type: string
        description: The Power Platform environment ID.
      - name: rpa_team_email
        in: body
        type: string
        description: Email of the RPA support team lead.
      steps:
      - name: get-flow-runs
        type: call
        call: power-automate.get-flow-runs
        with:
          flow_id: '{{flow_id}}'
          environment_id: '{{environment_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'RPA failure: Flow {{flow_id}} — {{get-flow-runs.failed_count}} failures'
          description: 'Environment: {{environment_id}}. Failed runs: {{get-flow-runs.failed_count}}. Last failure: {{get-flow-runs.last_failure_message}}.'
          priority: '2'
          assigned_group: RPA_Support
      - name: create-remediation
        type: call
        call: jira.create-issue
        with:
          project_key: RPA
          issue_type: Bug
          summary: 'Fix: Power Automate flow {{flow_id}} failures'
          description: 'ServiceNow: {{create-incident.number}}. Failed: {{get-flow-runs.failed_count}}. Error: {{get-flow-runs.last_failure_message}}.'
      - name: alert-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{rpa_team_email}}'
          text: 'RPA Alert: Flow {{flow_id}} has {{get-flow-runs.failed_count}} failures. Error: {{get-flow-runs.last_failure_message}}. ServiceNow: {{create-incident.number}}. Jira: {{create-remediation.key}}.'
  consumes:
  - type: http
    namespace: power-automate
    baseUri: https://api.flow.microsoft.com/providers/Microsoft.ProcessSimple/environments/{{environment_id}}
    authentication:
      type: bearer
      token: $secrets.power_automate_token
    resources:
    - name: flow-runs
      path: /flows/{{flow_id}}/runs?$filter=status eq 'Failed'
      inputParameters:
      - name: flow_id
        in: path
      - name: environment_id
        in: path
      operations:
      - name: get-flow-runs
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kpmg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: jira
    baseUri: https://kpmg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → robotic-process-automation-monitoring-orchestrator.yml

Pulls scan results from Nessus for a target host, creates a ServiceNow security incident for critical findings, assigns remediation in Jira, and alerts the CISO team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Cybersecurity Vulnerability Assessment Orchestrator
  description: Pulls scan results from Nessus for a target host, creates a ServiceNow security incident for critical findings, assigns remediation in Jira, and alerts the CISO team in Microsoft Teams.
  tags:
  - cybersecurity
  - vulnerability-management
  - nessus
  - servicenow
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cyber-vuln
    port: 8080
    tools:
    - name: process-vulnerability-scan
      description: Given a Nessus scan ID and host IP, retrieve critical findings, create a ServiceNow security incident, assign Jira remediation, and alert the CISO team.
      inputParameters:
      - name: scan_id
        in: body
        type: string
        description: The Nessus scan ID.
      - name: host_ip
        in: body
        type: string
        description: Target host IP address.
      - name: ciso_team_email
        in: body
        type: string
        description: Email of the CISO team distribution list.
      steps:
      - name: get-scan-results
        type: call
        call: nessus.get-scan-results
        with:
          scan_id: '{{scan_id}}'
          host_ip: '{{host_ip}}'
      - name: create-security-incident
        type: call
        call: servicenow.create-security-incident
        with:
          short_description: 'Critical vulnerabilities: {{host_ip}} — {{get-scan-results.critical_count}} findings'
          description: 'Scan {{scan_id}}. Critical: {{get-scan-results.critical_count}}. High: {{get-scan-results.high_count}}. Top CVE: {{get-scan-results.top_cve}}.'
          priority: '1'
          assigned_group: Security_Operations
      - name: create-remediation-task
        type: call
        call: jira.create-issue
        with:
          project_key: SECOPS
          issue_type: Bug
          summary: 'Remediate: {{get-scan-results.top_cve}} on {{host_ip}}'
          description: 'Nessus scan {{scan_id}}. Critical findings: {{get-scan-results.critical_count}}. ServiceNow: {{create-security-incident.number}}.'
          priority: Highest
      - name: alert-ciso
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{ciso_team_email}}'
          text: 'CRITICAL: {{get-scan-results.critical_count}} vulnerabilities on {{host_ip}}. Top CVE: {{get-scan-results.top_cve}}. ServiceNow: {{create-security-incident.number}}. Jira: {{create-remediation-task.key}}.'
  consumes:
  - type: http
    namespace: nessus
    baseUri: https://nessus.kpmg.com:8834
    authentication:
      type: apiKey
      key: $secrets.nessus_api_key
    inputParameters:
    - name: X-ApiKeys
      in: header
      value: accessKey=$secrets.nessus_access_key;secretKey=$secrets.nessus_secret_key
    resources:
    - name: scan-results
      path: /scans/{{scan_id}}/hosts/{{host_ip}}
      inputParameters:
      - name: scan_id
        in: path
      - name: host_ip
        in: path
      operations:
      - name: get-scan-results
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kpmg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: security-incidents
      path: /table/sn_si_incident
      operations:
      - name: create-security-incident
        method: POST
  - type: http
    namespace: jira
    baseUri: https://kpmg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → cybersecurity-vulnerability-assessment-orchestrator.yml

Searches KPMG methodology documentation in Confluence for audit standards, advisory frameworks, and engagement procedures.

naftiko: '0.5'
info:
  label: Confluence Methodology Search
  description: Searches KPMG methodology documentation in Confluence for audit standards, advisory frameworks, and engagement procedures.
  tags:
  - methodology
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: methodology
    port: 8080
    tools:
    - name: search-methodology
      description: Search KPMG methodology knowledge base in Confluence.
      inputParameters:
      - name: search_term
        in: body
        type: string
        description: The search query.
      - name: service_line
        in: body
        type: string
        description: Service line filter (audit, tax, advisory).
      call: confluence.search
      with:
        cql: text ~ '{{search_term}}' AND label = '{{service_line}}' AND space = 'METHODOLOGY'
      outputParameters:
      - name: results
        type: array
        mapping: $.results
      - name: total_size
        type: integer
        mapping: $.totalSize
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://kpmg.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: search
      path: /content/search
      operations:
      - name: search
        method: GET
Open in Framework → View in Fleet → confluence-methodology-search.yml

On request for an architecture review, pulls the current architecture diagram from SharePoint, retrieves infrastructure inventory from ServiceNow CMDB, generates a technology radar summary via Confluence, and notifies the architecture review board via Microsoft Teams.

naftiko: '0.5'
info:
  label: Enterprise Architecture Review Orchestrator
  description: On request for an architecture review, pulls the current architecture diagram from SharePoint, retrieves infrastructure inventory from ServiceNow CMDB, generates a technology radar summary via Confluence, and notifies the architecture review board via Microsoft Teams.
  tags:
  - advisory
  - enterprise-architecture
  - sharepoint
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ea-review
    port: 8080
    tools:
    - name: initiate-architecture-review
      description: Given a client name and review scope, pull SharePoint diagrams, ServiceNow CMDB inventory, and notify the review board.
      inputParameters:
      - name: client_name
        in: body
        type: string
        description: The client name for the architecture review.
      - name: review_scope
        in: body
        type: string
        description: Scope of the architecture review (e.g., cloud, application, data).
      - name: sharepoint_site_id
        in: body
        type: string
        description: SharePoint site ID containing architecture artifacts.
      - name: review_board_email
        in: body
        type: string
        description: Email of the architecture review board lead.
      steps:
      - name: get-architecture-docs
        type: call
        call: sharepoint.list-folder
        with:
          site_id: '{{sharepoint_site_id}}'
          folder_path: Architecture/{{client_name}}
      - name: get-cmdb-inventory
        type: call
        call: servicenow.get-cmdb-summary
        with:
          client_name: '{{client_name}}'
      - name: create-review-record
        type: call
        call: servicenow.create-change-request
        with:
          short_description: 'Architecture Review: {{client_name}} — {{review_scope}}'
          description: 'Scope: {{review_scope}}. CMDB CIs: {{get-cmdb-inventory.ci_count}}. Architecture docs: {{get-architecture-docs.file_count}} files.'
          assigned_group: Enterprise_Architecture
      - name: notify-board
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{review_board_email}}'
          text: 'Architecture Review initiated for {{client_name}} ({{review_scope}}). CMDB CIs: {{get-cmdb-inventory.ci_count}}. Docs: {{get-architecture-docs.file_count}}. ServiceNow: {{create-review-record.number}}.'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      path: /{{site_id}}/drive/root:/{{folder_path}}:/children
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: list-folder
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kpmg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cmdb
      path: /table/cmdb_ci?sysparm_query=company={{client_name}}
      inputParameters:
      - name: client_name
        in: query
      operations:
      - name: get-cmdb-summary
        method: GET
    - name: change-requests
      path: /table/change_request
      operations:
      - name: create-change-request
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → enterprise-architecture-review-orchestrator.yml

Retrieves firewall security rules from Palo Alto Networks Panorama by device group, returning rule names, source/destination zones, and actions. Used by cybersecurity advisory teams for firewall policy audits.

naftiko: '0.5'
info:
  label: Palo Alto Networks Firewall Rule Audit
  description: Retrieves firewall security rules from Palo Alto Networks Panorama by device group, returning rule names, source/destination zones, and actions. Used by cybersecurity advisory teams for firewall policy audits.
  tags:
  - cybersecurity
  - palo-alto-networks
  - firewall
  - audit
capability:
  exposes:
  - type: mcp
    namespace: firewall-audit
    port: 8080
    tools:
    - name: get-firewall-rules
      description: Retrieve security rules from Palo Alto Panorama for a specified device group.
      inputParameters:
      - name: device_group
        in: body
        type: string
        description: The Panorama device group name.
      call: panorama.get-security-rules
      with:
        device_group: '{{device_group}}'
      outputParameters:
      - name: rules
        type: string
        mapping: $.result.entry
      - name: rule_count
        type: string
        mapping: $.result.@count
  consumes:
  - type: http
    namespace: panorama
    baseUri: https://panorama.kpmg.com/restapi/v10.2
    authentication:
      type: apiKey
      key: $secrets.panorama_api_key
    inputParameters:
    - name: X-PAN-KEY
      in: header
      value: $secrets.panorama_api_key
    resources:
    - name: security-rules
      path: /Policies/SecurityRules?location=device-group&device-group={{device_group}}
      inputParameters:
      - name: device_group
        in: query
      operations:
      - name: get-security-rules
        method: GET
Open in Framework → View in Fleet → palo-alto-networks-firewall-rule-audit.yml

Screens entities against global sanctions lists by querying client data from Salesforce, running screening in Databricks, documenting results in SharePoint, and alerting compliance.

naftiko: '0.5'
info:
  label: Sanctions Screening Pipeline
  description: Screens entities against global sanctions lists by querying client data from Salesforce, running screening in Databricks, documenting results in SharePoint, and alerting compliance.
  tags:
  - compliance
  - sanctions
  - salesforce
  - azure-databricks
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sanctions-screening
    port: 8080
    tools:
    - name: screen-entity
      description: Screen an entity against global sanctions lists.
      inputParameters:
      - name: entity_name
        in: body
        type: string
        description: The entity name to screen.
      - name: engagement_id
        in: body
        type: string
        description: The engagement ID.
      - name: compliance_email
        in: body
        type: string
        description: Compliance team email.
      steps:
      - name: get-entity-data
        type: call
        call: salesforce.get-client-entity
        with:
          entity_name: '{{entity_name}}'
      - name: run-screening
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM sanctions_screening WHERE entity_name LIKE '%{{entity_name}}%'
      - name: document-results
        type: call
        call: sharepoint.create-document
        with:
          site_id: compliance
          folder_path: SanctionsScreening/{{engagement_id}}/{{entity_name}}
          template: sanctions_screening_result
      - name: alert-compliance
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{compliance_email}}'
          text: 'Sanctions screening for {{entity_name}} ({{engagement_id}}): {{run-screening.match_count}} potential matches. Results: {{document-results.url}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://kpmg.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: clients
      path: /sobjects/Account
      operations:
      - name: get-client-entity
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://kpmg-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sanctions-screening-pipeline.yml

Retrieves the status of an Informatica Cloud data quality job run, returning execution state, row counts, and error summary. Used by data governance teams for ETL monitoring.

naftiko: '0.5'
info:
  label: Informatica Data Quality Job Status
  description: Retrieves the status of an Informatica Cloud data quality job run, returning execution state, row counts, and error summary. Used by data governance teams for ETL monitoring.
  tags:
  - data-governance
  - informatica
  - etl
  - data-quality
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: get-informatica-job-status
      description: Look up an Informatica Cloud data quality job run by run ID.
      inputParameters:
      - name: run_id
        in: body
        type: string
        description: The Informatica Cloud job run ID.
      call: informatica.get-activity-run
      with:
        run_id: '{{run_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: rows_success
        type: string
        mapping: $.successRowsCount
      - name: rows_error
        type: string
        mapping: $.errorRowsCount
      - name: start_time
        type: string
        mapping: $.startTime
  consumes:
  - type: http
    namespace: informatica
    baseUri: https://na1.dm-us.informaticacloud.com/saas/api/v2
    authentication:
      type: bearer
      token: $secrets.informatica_token
    resources:
    - name: activity-runs
      path: /activity/activityMonitor/{{run_id}}
      inputParameters:
      - name: run_id
        in: path
      operations:
      - name: get-activity-run
        method: GET
Open in Framework → View in Fleet → informatica-data-quality-job-status.yml

Verifies blockchain-based audit trails for transaction integrity by querying distributed ledger records and returning verification status.

naftiko: '0.5'
info:
  label: Blockchain Audit Trail Verification
  description: Verifies blockchain-based audit trails for transaction integrity by querying distributed ledger records and returning verification status.
  tags:
  - audit
  - blockchain
capability:
  exposes:
  - type: mcp
    namespace: blockchain-audit
    port: 8080
    tools:
    - name: verify-audit-trail
      description: Verify a blockchain audit trail by transaction hash.
      inputParameters:
      - name: transaction_hash
        in: body
        type: string
        description: The blockchain transaction hash.
      call: blockchain.verify-transaction
      with:
        hash: '{{transaction_hash}}'
      outputParameters:
      - name: verified
        type: boolean
        mapping: $.verification.isValid
      - name: timestamp
        type: string
        mapping: $.verification.timestamp
  consumes:
  - type: http
    namespace: blockchain
    baseUri: https://kpmg-ledger.kpmg.com/api/v1
    authentication:
      type: bearer
      token: $secrets.blockchain_token
    resources:
    - name: transactions
      path: /transactions/{{hash}}/verify
      inputParameters:
      - name: hash
        in: path
      operations:
      - name: verify-transaction
        method: GET
Open in Framework → View in Fleet → blockchain-audit-trail-verification.yml

Retrieves static application security testing results from Checkmarx for client security assessment engagements.

naftiko: '0.5'
info:
  label: Checkmarx Code Scan Results
  description: Retrieves static application security testing results from Checkmarx for client security assessment engagements.
  tags:
  - cybersecurity
  - checkmarx
capability:
  exposes:
  - type: mcp
    namespace: code-security
    port: 8080
    tools:
    - name: get-scan-results
      description: Retrieve Checkmarx SAST scan results by project ID.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The Checkmarx project identifier.
      call: checkmarx.get-results
      with:
        project_id: '{{project_id}}'
      outputParameters:
      - name: high_severity
        type: integer
        mapping: $.results.highSeverity
      - name: medium_severity
        type: integer
        mapping: $.results.mediumSeverity
      - name: scan_status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: checkmarx
    baseUri: https://kpmg.checkmarx.net/cxrestapi
    authentication:
      type: bearer
      token: $secrets.checkmarx_token
    resources:
    - name: scans
      path: /projects/{{project_id}}/lastScan
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-results
        method: GET
Open in Framework → View in Fleet → checkmarx-code-scan-results.yml

Collects ESG metrics from SAP Sustainability, retrieves carbon footprint data from an external provider, compiles the report in SharePoint, updates the Salesforce engagement record, and notifies the ESG practice lead via Microsoft Teams.

naftiko: '0.5'
info:
  label: ESG Reporting Data Collection Pipeline
  description: Collects ESG metrics from SAP Sustainability, retrieves carbon footprint data from an external provider, compiles the report in SharePoint, updates the Salesforce engagement record, and notifies the ESG practice lead via Microsoft Teams.
  tags:
  - advisory
  - esg
  - sustainability
  - sap
  - sharepoint
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: esg-reporting
    port: 8080
    tools:
    - name: collect-esg-data
      description: Given a client company code and reporting year, pull SAP sustainability metrics, compile a SharePoint report, update Salesforce, and notify the ESG lead.
      inputParameters:
      - name: company_code
        in: body
        type: string
        description: Client SAP company code.
      - name: reporting_year
        in: body
        type: string
        description: ESG reporting year (YYYY).
      - name: salesforce_opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID for the ESG engagement.
      - name: esg_lead_email
        in: body
        type: string
        description: Email of the ESG practice lead.
      steps:
      - name: get-sustainability-data
        type: call
        call: sap.get-sustainability-metrics
        with:
          company_code: '{{company_code}}'
          year: '{{reporting_year}}'
      - name: compile-esg-report
        type: call
        call: sharepoint.create-file
        with:
          site_id: esg_advisory_site
          file_path: Reports/{{company_code}}_ESG_{{reporting_year}}.xlsx
          content: 'ESG Report {{reporting_year}}. Scope 1: {{get-sustainability-data.scope1_emissions}}. Scope 2: {{get-sustainability-data.scope2_emissions}}. Energy consumption: {{get-sustainability-data.energy_kwh}}.'
      - name: update-engagement
        type: call
        call: salesforce.update-opportunity
        with:
          opportunity_id: '{{salesforce_opportunity_id}}'
          description: 'ESG report compiled for {{reporting_year}}. Report: {{compile-esg-report.url}}'
          stage: Deliverable Complete
      - name: notify-lead
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{esg_lead_email}}'
          text: 'ESG data collection complete for {{company_code}} ({{reporting_year}}). Scope 1: {{get-sustainability-data.scope1_emissions}} tCO2e. Scope 2: {{get-sustainability-data.scope2_emissions}} tCO2e. Report: {{compile-esg-report.url}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kpmg-s4.sap.com/sap/opu/odata/sap/API_SUSTAINABILITY
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: sustainability
      path: /SustainabilityMetricSet?$filter=CompanyCode eq '{{company_code}}' and Year eq '{{year}}'
      inputParameters:
      - name: company_code
        in: query
      - name: year
        in: query
      operations:
      - name: get-sustainability-metrics
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: create-file
        method: PUT
  - type: http
    namespace: salesforce
    baseUri: https://kpmg.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → esg-reporting-data-collection-pipeline.yml

Retrieves the general ledger account balance from SAP S/4HANA for a given company code, fiscal year, and GL account number. Used by audit and finance teams to validate trial balance figures.

naftiko: '0.5'
info:
  label: SAP General Ledger Balance Lookup
  description: Retrieves the general ledger account balance from SAP S/4HANA for a given company code, fiscal year, and GL account number. Used by audit and finance teams to validate trial balance figures.
  tags:
  - audit
  - finance
  - sap
  - general-ledger
capability:
  exposes:
  - type: mcp
    namespace: audit-gl
    port: 8080
    tools:
    - name: get-gl-balance
      description: Look up a SAP S/4HANA general ledger account balance by company code, fiscal year, and GL account number, and log the inquiry in ServiceNow for audit trail purposes.
      inputParameters:
      - name: company_code
        in: body
        type: string
        description: The SAP company code (4-digit).
      - name: fiscal_year
        in: body
        type: string
        description: The fiscal year (YYYY).
      - name: gl_account
        in: body
        type: string
        description: The GL account number (10-digit).
      - name: auditor_email
        in: body
        type: string
        description: Email of the requesting auditor.
      steps:
      - name: fetch-balance
        type: call
        call: sap.get-gl-balance
        with:
          company_code: '{{company_code}}'
          fiscal_year: '{{fiscal_year}}'
          gl_account: '{{gl_account}}'
      - name: log-inquiry
        type: call
        call: servicenow.create-task
        with:
          short_description: 'GL balance inquiry: {{company_code}}/{{gl_account}} FY{{fiscal_year}}'
          description: 'Balance: {{fetch-balance.EndingBalance}} {{fetch-balance.TransactionCurrency}}. Auditor: {{auditor_email}}.'
          assigned_group: Audit_Operations
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kpmg-s4.sap.com/sap/opu/odata/sap/API_GLACCOUNTBALANCE
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    - name: sap-client
      in: header
      value: '100'
    resources:
    - name: gl-balances
      path: /GLAccountBalanceSet(CompanyCode='{{company_code}}',FiscalYear='{{fiscal_year}}',GLAccount='{{gl_account}}')
      inputParameters:
      - name: company_code
        in: path
      - name: fiscal_year
        in: path
      - name: gl_account
        in: path
      operations:
      - name: get-gl-balance
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kpmg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → sap-general-ledger-balance-lookup.yml

Retrieves privileged role assignments from Azure Active Directory for a client tenant, returning user principal names, role names, and assignment expiration dates.

naftiko: '0.5'
info:
  label: Azure AD Privileged Access Review
  description: Retrieves privileged role assignments from Azure Active Directory for a client tenant, returning user principal names, role names, and assignment expiration dates.
  tags:
  - security
  - compliance
  - azure-active-directory
  - access-review
capability:
  exposes:
  - type: mcp
    namespace: security-audit
    port: 8080
    tools:
    - name: get-privileged-assignments
      description: Look up privileged role assignments in Azure AD for a client tenant. Returns users, roles, and expiration status.
      inputParameters:
      - name: tenant_id
        in: body
        type: string
        description: The Azure AD tenant identifier for the client.
      call: azure-ad.list-privileged-roles
      with:
        tenant_id: '{{tenant_id}}'
      outputParameters:
      - name: assignments
        type: array
        mapping: $.value
        items:
        - name: user_principal_name
          type: string
          mapping: $.principalName
        - name: role_name
          type: string
          mapping: $.roleDefinition.displayName
        - name: expires_at
          type: string
          mapping: $.scheduleInfo.expiration.endDateTime
  consumes:
  - type: http
    namespace: azure-ad
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: role-assignments
      path: /roleManagement/directory/roleAssignments
      inputParameters:
      - name: tenant_id
        in: header
      operations:
      - name: list-privileged-roles
        method: GET
Open in Framework → View in Fleet → azure-ad-privileged-access-review.yml

Retrieves staff utilization rates from Workday for a given practice area and time period, returning billable hours, total hours, and utilization percentage.

naftiko: '0.5'
info:
  label: Workday Utilization Rate Lookup
  description: Retrieves staff utilization rates from Workday for a given practice area and time period, returning billable hours, total hours, and utilization percentage.
  tags:
  - hr
  - finance
  - workday
  - utilization
capability:
  exposes:
  - type: mcp
    namespace: workforce-analytics
    port: 8080
    tools:
    - name: get-utilization-rate
      description: Look up utilization rates by practice and period from Workday. Returns billable hours, total hours, and utilization percentage.
      inputParameters:
      - name: practice_area
        in: body
        type: string
        description: The KPMG practice area code (e.g., audit, tax, advisory).
      - name: period
        in: body
        type: string
        description: Reporting period in YYYY-MM format.
      call: workday.get-utilization
      with:
        practice: '{{practice_area}}'
        period: '{{period}}'
      outputParameters:
      - name: billable_hours
        type: number
        mapping: $.billableHours
      - name: total_hours
        type: number
        mapping: $.totalHours
      - name: utilization_pct
        type: number
        mapping: $.utilizationPercentage
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: utilization
      path: /kpmg/utilization
      inputParameters:
      - name: practice
        in: query
      - name: period
        in: query
      operations:
      - name: get-utilization
        method: GET
Open in Framework → View in Fleet → workday-utilization-rate-lookup.yml

Retrieves API analytics from MuleSoft Anypoint Platform for a given API and environment, returning request counts, error rates, and average latency. Used by technology advisory teams.

naftiko: '0.5'
info:
  label: MuleSoft API Analytics Lookup
  description: Retrieves API analytics from MuleSoft Anypoint Platform for a given API and environment, returning request counts, error rates, and average latency. Used by technology advisory teams.
  tags:
  - integration
  - mulesoft
  - api-management
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: api-analytics
    port: 8080
    tools:
    - name: get-api-analytics
      description: Look up MuleSoft Anypoint API analytics by organization, environment, and API ID.
      inputParameters:
      - name: org_id
        in: body
        type: string
        description: MuleSoft Anypoint organization ID.
      - name: environment_id
        in: body
        type: string
        description: Target environment ID.
      - name: api_id
        in: body
        type: string
        description: The API instance ID.
      call: mulesoft.get-analytics
      with:
        org_id: '{{org_id}}'
        environment_id: '{{environment_id}}'
        api_id: '{{api_id}}'
      outputParameters:
      - name: total_requests
        type: string
        mapping: $.total
      - name: error_count
        type: string
        mapping: $.errors
      - name: avg_latency_ms
        type: string
        mapping: $.averageResponseTime
  consumes:
  - type: http
    namespace: mulesoft
    baseUri: https://anypoint.mulesoft.com/analytics/1.0
    authentication:
      type: bearer
      token: $secrets.mulesoft_token
    resources:
    - name: analytics
      path: /{{org_id}}/environments/{{environment_id}}/apis/{{api_id}}/events
      inputParameters:
      - name: org_id
        in: path
      - name: environment_id
        in: path
      - name: api_id
        in: path
      operations:
      - name: get-analytics
        method: GET
Open in Framework → View in Fleet → mulesoft-api-analytics-lookup.yml

Pulls intercompany transaction data from SAP, retrieves comparable benchmarking from Bloomberg, generates a transfer pricing memo in SharePoint, and notifies the tax partner via Microsoft Teams.

naftiko: '0.5'
info:
  label: Transfer Pricing Document Generator
  description: Pulls intercompany transaction data from SAP, retrieves comparable benchmarking from Bloomberg, generates a transfer pricing memo in SharePoint, and notifies the tax partner via Microsoft Teams.
  tags:
  - tax
  - transfer-pricing
  - sap
  - bloomberg
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: transfer-pricing
    port: 8080
    tools:
    - name: generate-tp-documentation
      description: Given a company code and fiscal year, retrieve SAP intercompany data, pull Bloomberg comparables, create the TP memo in SharePoint, and notify the tax partner.
      inputParameters:
      - name: company_code
        in: body
        type: string
        description: SAP company code for the tested party.
      - name: fiscal_year
        in: body
        type: string
        description: The fiscal year (YYYY).
      - name: transaction_type
        in: body
        type: string
        description: Intercompany transaction type (e.g., services, tangible_goods, royalties).
      - name: tax_partner_email
        in: body
        type: string
        description: Email of the responsible tax partner.
      steps:
      - name: get-ic-transactions
        type: call
        call: sap.get-ic-transactions
        with:
          company_code: '{{company_code}}'
          fiscal_year: '{{fiscal_year}}'
          transaction_type: '{{transaction_type}}'
      - name: get-comparables
        type: call
        call: bloomberg.search-comparables
        with:
          industry: '{{get-ic-transactions.industry_code}}'
          transaction_type: '{{transaction_type}}'
          region: '{{get-ic-transactions.region}}'
      - name: create-tp-memo
        type: call
        call: sharepoint.create-file
        with:
          site_id: tax_transfer_pricing_site
          file_path: TP_Memos/{{company_code}}_FY{{fiscal_year}}_{{transaction_type}}.docx
          content: 'Transfer Pricing Documentation — {{company_code}} FY{{fiscal_year}}. IC volume: {{get-ic-transactions.total_amount}}. Arm''s length range: {{get-comparables.interquartile_range}}.'
      - name: notify-partner
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{tax_partner_email}}'
          text: 'TP memo generated for {{company_code}} FY{{fiscal_year}} ({{transaction_type}}). IC volume: {{get-ic-transactions.total_amount}}. Comparables range: {{get-comparables.interquartile_range}}. Document: {{create-tp-memo.url}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kpmg-s4.sap.com/sap/opu/odata/sap/API_INTERCOMPANY_TRANSACTIONS
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    - name: sap-client
      in: header
      value: '100'
    resources:
    - name: ic-transactions
      path: /ICTransactionSet?$filter=CompanyCode eq '{{company_code}}' and FiscalYear eq '{{fiscal_year}}'
      inputParameters:
      - name: company_code
        in: query
      - name: fiscal_year
        in: query
      - name: transaction_type
        in: query
      operations:
      - name: get-ic-transactions
        method: GET
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: comparables
      path: /fieldLists
      operations:
      - name: search-comparables
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: create-file
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → transfer-pricing-document-generator.yml

When a new regulatory update is detected in Bloomberg Law, creates a Jira ticket for impact analysis, updates the compliance register in ServiceNow, posts an alert to the regulatory affairs team in Microsoft Teams, and stores the bulletin in SharePoint.

naftiko: '0.5'
info:
  label: Regulatory Change Impact Orchestrator
  description: When a new regulatory update is detected in Bloomberg Law, creates a Jira ticket for impact analysis, updates the compliance register in ServiceNow, posts an alert to the regulatory affairs team in Microsoft Teams, and stores the bulletin in SharePoint.
  tags:
  - compliance
  - regulatory
  - bloomberg
  - jira
  - servicenow
  - microsoft-teams
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: regulatory-monitoring
    port: 8080
    tools:
    - name: process-regulatory-change
      description: Given a Bloomberg Law alert ID and regulation domain, retrieve the update, create a Jira impact ticket, update the ServiceNow compliance register, store in SharePoint, and notify the regulatory team.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: Bloomberg Law alert identifier.
      - name: regulation_domain
        in: body
        type: string
        description: Domain of regulation (e.g., banking, insurance, securities, tax).
      - name: compliance_team_channel
        in: body
        type: string
        description: Microsoft Teams channel webhook URL for the compliance team.
      steps:
      - name: get-alert
        type: call
        call: bloomberg-law.get-alert
        with:
          alert_id: '{{alert_id}}'
      - name: create-impact-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: COMPLY
          issue_type: Task
          summary: 'Regulatory Change: {{get-alert.title}} — {{regulation_domain}}'
          description: 'Effective date: {{get-alert.effective_date}}. Jurisdiction: {{get-alert.jurisdiction}}. Summary: {{get-alert.summary}}'
      - name: update-register
        type: call
        call: servicenow.create-compliance-record
        with:
          regulation_name: '{{get-alert.title}}'
          domain: '{{regulation_domain}}'
          effective_date: '{{get-alert.effective_date}}'
          jira_reference: '{{create-impact-ticket.key}}'
      - name: store-bulletin
        type: call
        call: sharepoint.create-file
        with:
          site_id: regulatory_updates_site
          file_path: Bulletins/{{regulation_domain}}/{{get-alert.title}}_{{get-alert.effective_date}}.pdf
      - name: notify-team
        type: call
        call: msteams.post-webhook
        with:
          webhook_url: '{{compliance_team_channel}}'
          text: 'Regulatory Change Alert: {{get-alert.title}} ({{regulation_domain}}). Effective: {{get-alert.effective_date}}. Jira: {{create-impact-ticket.key}}. Bulletin: {{store-bulletin.url}}.'
  consumes:
  - type: http
    namespace: bloomberg-law
    baseUri: https://api.bloomberglaw.com/v2
    authentication:
      type: bearer
      token: $secrets.bloomberg_law_token
    resources:
    - name: alerts
      path: /alerts/{{alert_id}}
      inputParameters:
      - name: alert_id
        in: path
      operations:
      - name: get-alert
        method: GET
  - type: http
    namespace: jira
    baseUri: https://kpmg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://kpmg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: compliance
      path: /table/sn_compliance_policy
      operations:
      - name: create-compliance-record
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: create-file
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: webhooks
      path: /teams/{{webhook_url}}
      inputParameters:
      - name: webhook_url
        in: path
      operations:
      - name: post-webhook
        method: POST
Open in Framework → View in Fleet → regulatory-change-impact-orchestrator.yml

Generates client proposals by pulling opportunity data from Salesforce, retrieving methodology templates from Confluence, creating the proposal in SharePoint, and notifying the pursuit team via Teams.

naftiko: '0.5'
info:
  label: Client Proposal Generation Orchestrator
  description: Generates client proposals by pulling opportunity data from Salesforce, retrieving methodology templates from Confluence, creating the proposal in SharePoint, and notifying the pursuit team via Teams.
  tags:
  - business-development
  - proposals
  - salesforce
  - confluence
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: proposals
    port: 8080
    tools:
    - name: generate-proposal
      description: Generate a client proposal from opportunity data.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID.
      - name: service_line
        in: body
        type: string
        description: The service line (audit, tax, advisory).
      - name: pursuit_lead_email
        in: body
        type: string
        description: Pursuit lead email.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: get-methodology
        type: call
        call: confluence.search
        with:
          cql: label = 'proposal-template' AND label = '{{service_line}}'
      - name: create-proposal
        type: call
        call: sharepoint.create-document
        with:
          site_id: proposals
          folder_path: '{{get-opportunity.client_name}}/{{opportunity_id}}'
          template: '{{service_line}}_proposal'
      - name: notify-pursuit-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{pursuit_lead_email}}'
          text: 'Proposal generated for {{get-opportunity.client_name}} ({{service_line}}). Estimated value: {{get-opportunity.amount}}. Proposal: {{create-proposal.url}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://kpmg.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://kpmg.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: search
      path: /content/search
      operations:
      - name: search
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → client-proposal-generation-orchestrator.yml

Conducts data privacy impact assessments by scanning data flows in Azure Synapse, mapping to GDPR requirements in Confluence, creating assessment reports in SharePoint, and notifying the DPO.

naftiko: '0.5'
info:
  label: Data Privacy Impact Assessment Orchestrator
  description: Conducts data privacy impact assessments by scanning data flows in Azure Synapse, mapping to GDPR requirements in Confluence, creating assessment reports in SharePoint, and notifying the DPO.
  tags:
  - privacy
  - gdpr
  - azure-synapse
  - confluence
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: dpia
    port: 8080
    tools:
    - name: conduct-dpia
      description: Conduct a data privacy impact assessment for a client.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The client identifier.
      - name: data_process_name
        in: body
        type: string
        description: Name of the data processing activity.
      - name: dpo_email
        in: body
        type: string
        description: Data Protection Officer email.
      steps:
      - name: scan-data-flows
        type: call
        call: synapse.execute-query
        with:
          query: SELECT * FROM data_flow_catalog WHERE client_id = '{{client_id}}' AND process = '{{data_process_name}}'
      - name: map-gdpr-requirements
        type: call
        call: confluence.search
        with:
          cql: label = 'gdpr-requirements' AND text ~ '{{data_process_name}}'
      - name: create-assessment
        type: call
        call: sharepoint.create-document
        with:
          site_id: privacy-assessments
          folder_path: '{{client_id}}/DPIA/{{data_process_name}}'
          template: dpia_template
      - name: notify-dpo
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{dpo_email}}'
          text: 'DPIA completed for {{client_id}} - {{data_process_name}}. Data flows identified: {{scan-data-flows.count}}. Assessment: {{create-assessment.url}}.'
  consumes:
  - type: http
    namespace: synapse
    baseUri: https://kpmg-analytics.sql.azuresynapse.net
    authentication:
      type: bearer
      token: $secrets.synapse_token
    resources:
    - name: queries
      path: /sql/query
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://kpmg.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: search
      path: /content/search
      operations:
      - name: search
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → data-privacy-impact-assessment-orchestrator.yml

Retrieves the status of an Azure DevOps pipeline run by organization, project, and run ID. Used by technology consulting teams for CI/CD monitoring.

naftiko: '0.5'
info:
  label: Azure DevOps Pipeline Run Status
  description: Retrieves the status of an Azure DevOps pipeline run by organization, project, and run ID. Used by technology consulting teams for CI/CD monitoring.
  tags:
  - devops
  - azure-devops
  - ci-cd
capability:
  exposes:
  - type: mcp
    namespace: devops-pipeline
    port: 8080
    tools:
    - name: get-pipeline-run
      description: Look up an Azure DevOps pipeline run and create a Jira ticket if the run failed.
      inputParameters:
      - name: organization
        in: body
        type: string
        description: Azure DevOps organization name.
      - name: project
        in: body
        type: string
        description: Azure DevOps project name.
      - name: run_id
        in: body
        type: string
        description: The pipeline run ID.
      - name: dev_lead_email
        in: body
        type: string
        description: Email of the dev team lead.
      steps:
      - name: fetch-run
        type: call
        call: azdo.get-run
        with:
          organization: '{{organization}}'
          project: '{{project}}'
          run_id: '{{run_id}}'
      - name: log-failure
        type: call
        call: jira.create-issue
        with:
          project_key: DEVOPS
          issue_type: Bug
          summary: 'Pipeline failure: {{fetch-run.pipeline_name}} run {{run_id}}'
          description: 'State: {{fetch-run.state}}. Result: {{fetch-run.result}}. Created: {{fetch-run.createdDate}}.'
      - name: notify-lead
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{dev_lead_email}}'
          text: 'Pipeline {{fetch-run.pipeline_name}} run {{run_id}}: {{fetch-run.result}}. Jira: {{log-failure.key}}.'
  consumes:
  - type: http
    namespace: azdo
    baseUri: https://dev.azure.com/{{organization}}/{{project}}/_apis/pipelines
    authentication:
      type: basic
      username: ''
      password: $secrets.azdo_pat
    inputParameters:
    - name: api-version
      in: query
      value: '7.1'
    resources:
    - name: runs
      path: /runs/{{run_id}}
      inputParameters:
      - name: organization
        in: path
      - name: project
        in: path
      - name: run_id
        in: path
      operations:
      - name: get-run
        method: GET
  - type: http
    namespace: jira
    baseUri: https://kpmg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → azure-devops-pipeline-run-status.yml

Manages audit inventory observations by extracting book values from SAP, creating observation workpapers in SharePoint, and tracking exceptions in Jira.

naftiko: '0.5'
info:
  label: Inventory Observation Orchestrator
  description: Manages audit inventory observations by extracting book values from SAP, creating observation workpapers in SharePoint, and tracking exceptions in Jira.
  tags:
  - audit
  - inventory
  - sap
  - sharepoint
  - jira
capability:
  exposes:
  - type: mcp
    namespace: inventory-observation
    port: 8080
    tools:
    - name: manage-observation
      description: Manage audit inventory observation procedures.
      inputParameters:
      - name: engagement_id
        in: body
        type: string
        description: The engagement identifier.
      - name: warehouse_location
        in: body
        type: string
        description: Warehouse location code.
      steps:
      - name: get-book-values
        type: call
        call: sap.get-inventory
        with:
          location: '{{warehouse_location}}'
      - name: create-workpaper
        type: call
        call: sharepoint.create-document
        with:
          site_id: audit
          folder_path: '{{engagement_id}}/Inventory/{{warehouse_location}}'
      - name: track-exceptions
        type: call
        call: jira.create-issue
        with:
          project: AUDIT
          summary: 'Inventory observation: {{engagement_id}} - {{warehouse_location}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kpmg-sap.kpmg.com/sap/opu/odata/sap
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: inventory
      path: /MM_SRV/InventoryValues
      operations:
      - name: get-inventory
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: jira
    baseUri: https://kpmg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → inventory-observation-orchestrator.yml

Pulls approved timesheets from Workday for a consulting engagement, reconciles hours against the Jira project board, updates the project budget tracker in Microsoft Excel via SharePoint, and sends a weekly utilization summary to the engagement manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: Consulting Engagement Timesheet Pipeline
  description: Pulls approved timesheets from Workday for a consulting engagement, reconciles hours against the Jira project board, updates the project budget tracker in Microsoft Excel via SharePoint, and sends a weekly utilization summary to the engagement manager via Microsoft Teams.
  tags:
  - consulting
  - time-management
  - workday
  - jira
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: consulting-timesheets
    port: 8080
    tools:
    - name: reconcile-timesheets
      description: Given an engagement code and reporting week, pull Workday timesheets, reconcile against Jira, update SharePoint budget tracker, and notify the engagement manager.
      inputParameters:
      - name: engagement_code
        in: body
        type: string
        description: The consulting engagement project code.
      - name: week_ending
        in: body
        type: string
        description: Week ending date (YYYY-MM-DD).
      - name: engagement_manager_email
        in: body
        type: string
        description: Email of the engagement manager.
      steps:
      - name: get-timesheets
        type: call
        call: workday.get-time-entries
        with:
          project_code: '{{engagement_code}}'
          week_ending: '{{week_ending}}'
      - name: get-jira-logged
        type: call
        call: jira.get-project-worklogs
        with:
          project_key: '{{engagement_code}}'
          since: '{{week_ending}}'
      - name: update-budget-tracker
        type: call
        call: sharepoint.update-file
        with:
          site_id: consulting_projects_site
          file_path: BudgetTrackers/{{engagement_code}}_budget.xlsx
          content: 'Week: {{week_ending}}. Workday hours: {{get-timesheets.total_hours}}. Jira logged: {{get-jira-logged.total_hours}}. Variance: {{get-timesheets.variance}}.'
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{engagement_manager_email}}'
          text: 'Weekly timesheet reconciliation for {{engagement_code}} (week ending {{week_ending}}). Workday: {{get-timesheets.total_hours}}h. Jira: {{get-jira-logged.total_hours}}h. Budget tracker updated: {{update-budget-tracker.url}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: time-entries
      path: /timeEntries?projectCode={{project_code}}&weekEnding={{week_ending}}
      inputParameters:
      - name: project_code
        in: query
      - name: week_ending
        in: query
      operations:
      - name: get-time-entries
        method: GET
  - type: http
    namespace: jira
    baseUri: https://kpmg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: worklogs
      path: /project/{{project_key}}/worklogs?since={{since}}
      inputParameters:
      - name: project_key
        in: path
      - name: since
        in: query
      operations:
      - name: get-project-worklogs
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: update-file
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → consulting-engagement-timesheet-pipeline.yml

When an internal audit finding is identified, creates the finding in ServiceNow GRC, assigns a Jira remediation task to the control owner, and notifies the audit committee distribution list in Microsoft Teams.

naftiko: '0.5'
info:
  label: Internal Audit Finding Workflow
  description: When an internal audit finding is identified, creates the finding in ServiceNow GRC, assigns a Jira remediation task to the control owner, and notifies the audit committee distribution list in Microsoft Teams.
  tags:
  - internal-audit
  - governance
  - servicenow
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: internal-audit
    port: 8080
    tools:
    - name: log-audit-finding
      description: Given finding details, create a ServiceNow GRC finding, assign a Jira remediation task, and notify the audit committee via Microsoft Teams.
      inputParameters:
      - name: finding_title
        in: body
        type: string
        description: Title of the audit finding.
      - name: finding_description
        in: body
        type: string
        description: Detailed description of the finding.
      - name: severity
        in: body
        type: string
        description: Finding severity (critical, high, medium, low).
      - name: control_owner_email
        in: body
        type: string
        description: Email of the control owner responsible for remediation.
      - name: audit_committee_channel
        in: body
        type: string
        description: Microsoft Teams channel ID for the audit committee.
      steps:
      - name: create-grc-finding
        type: call
        call: servicenow.create-finding
        with:
          short_description: '{{finding_title}}'
          description: '{{finding_description}}'
          severity: '{{severity}}'
          assigned_to: '{{control_owner_email}}'
      - name: create-remediation-task
        type: call
        call: jira.create-issue
        with:
          project_key: IAUDIT
          issue_type: Task
          summary: 'Remediate: {{finding_title}}'
          description: 'Severity: {{severity}}. GRC Finding: {{create-grc-finding.number}}. {{finding_description}}'
          assignee: '{{control_owner_email}}'
      - name: notify-committee
        type: call
        call: msteams.send-channel-message
        with:
          channel_id: '{{audit_committee_channel}}'
          text: 'Internal Audit Finding: {{finding_title}} ({{severity}}). GRC: {{create-grc-finding.number}}. Remediation: {{create-remediation-task.key}}. Owner: {{control_owner_email}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://kpmg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: findings
      path: /table/sn_audit_finding
      operations:
      - name: create-finding
        method: POST
  - type: http
    namespace: jira
    baseUri: https://kpmg.atlassian.net/rest/api/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-channel-message
        method: POST
Open in Framework → View in Fleet → internal-audit-finding-workflow.yml

Tests revenue recognition compliance by extracting contract data from SAP, analyzing recognition patterns in Databricks, and documenting testing results in SharePoint.

naftiko: '0.5'
info:
  label: Revenue Recognition Testing Pipeline
  description: Tests revenue recognition compliance by extracting contract data from SAP, analyzing recognition patterns in Databricks, and documenting testing results in SharePoint.
  tags:
  - audit
  - revenue-recognition
  - sap
  - azure-databricks
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: revenue-testing
    port: 8080
    tools:
    - name: test-revenue-recognition
      description: Test client revenue recognition against ASC 606 requirements.
      inputParameters:
      - name: engagement_id
        in: body
        type: string
        description: The engagement ID.
      - name: fiscal_year
        in: body
        type: string
        description: The fiscal year under audit.
      steps:
      - name: extract-contracts
        type: call
        call: sap.get-contracts
        with:
          fiscal_year: '{{fiscal_year}}'
      - name: analyze-recognition
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM revenue_recognition_analysis WHERE fiscal_year = '{{fiscal_year}}' AND variance_flag = true
      - name: create-workpaper
        type: call
        call: sharepoint.create-document
        with:
          site_id: audit-engagements
          folder_path: '{{engagement_id}}/RevenueRecognition'
          template: asc606_testing_workpaper
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kpmg-sap.kpmg.com/sap/opu/odata/sap
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: contracts
      path: /SD_SRV/SalesContracts
      operations:
      - name: get-contracts
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://kpmg-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
Open in Framework → View in Fleet → revenue-recognition-testing-pipeline.yml

Retrieves the status of an Azure Databricks job run by run ID, returning state, start time, and duration. Used by data engineering and analytics teams for pipeline monitoring.

naftiko: '0.5'
info:
  label: Azure Databricks Job Run Status
  description: Retrieves the status of an Azure Databricks job run by run ID, returning state, start time, and duration. Used by data engineering and analytics teams for pipeline monitoring.
  tags:
  - data-engineering
  - azure-databricks
  - pipeline
capability:
  exposes:
  - type: mcp
    namespace: data-pipeline
    port: 8080
    tools:
    - name: get-databricks-run
      description: Look up an Azure Databricks job run by run ID and notify the data engineering team via Microsoft Teams with the execution results.
      inputParameters:
      - name: run_id
        in: body
        type: string
        description: The Databricks job run ID.
      - name: data_eng_email
        in: body
        type: string
        description: Email of the data engineering team lead.
      steps:
      - name: fetch-run
        type: call
        call: databricks.get-run
        with:
          run_id: '{{run_id}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{data_eng_email}}'
          text: 'Databricks run {{run_id}}: {{fetch-run.life_cycle_state}} / {{fetch-run.result_state}}. Duration: {{fetch-run.execution_duration}}ms.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://adb-kpmg.azuredatabricks.net/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: runs
      path: /jobs/runs/get?run_id={{run_id}}
      inputParameters:
      - name: run_id
        in: query
      operations:
      - name: get-run
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → azure-databricks-job-run-status.yml

Compiles penetration testing results from Nessus and Burp Suite, generates findings reports in SharePoint, creates remediation tasks in Jira, and notifies the client engagement lead.

naftiko: '0.5'
info:
  label: Penetration Test Report Orchestrator
  description: Compiles penetration testing results from Nessus and Burp Suite, generates findings reports in SharePoint, creates remediation tasks in Jira, and notifies the client engagement lead.
  tags:
  - cybersecurity
  - penetration-testing
  - nessus
  - sharepoint
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pentest-reporting
    port: 8080
    tools:
    - name: compile-pentest-report
      description: Compile penetration test findings into a client report.
      inputParameters:
      - name: engagement_id
        in: body
        type: string
        description: The engagement identifier.
      - name: scan_id
        in: body
        type: string
        description: The Nessus scan ID.
      - name: lead_email
        in: body
        type: string
        description: Engagement lead email.
      steps:
      - name: get-scan-results
        type: call
        call: nessus.get-report
        with:
          scan_id: '{{scan_id}}'
      - name: create-report
        type: call
        call: sharepoint.create-document
        with:
          site_id: cyber-engagements
          folder_path: '{{engagement_id}}/PenTestResults'
          template: pentest_report
      - name: create-remediation-tasks
        type: call
        call: jira.create-issue
        with:
          project: CYBER
          summary: 'Remediation plan: {{engagement_id}} - {{get-scan-results.critical}} critical findings'
          description: 'Report: {{create-report.url}}. Critical: {{get-scan-results.critical}}. High: {{get-scan-results.high}}.'
      - name: notify-lead
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{lead_email}}'
          text: 'Pentest report ready for {{engagement_id}}. Critical: {{get-scan-results.critical}}, High: {{get-scan-results.high}}. Report: {{create-report.url}}.'
  consumes:
  - type: http
    namespace: nessus
    baseUri: https://kpmg-nessus.kpmg.com:8834
    authentication:
      type: apiKey
      header: X-ApiKeys
      key: $secrets.nessus_api_keys
    resources:
    - name: scans
      path: /scans/{{scan_id}}
      inputParameters:
      - name: scan_id
        in: path
      operations:
      - name: get-report
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: jira
    baseUri: https://kpmg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → penetration-test-report-orchestrator.yml

Calculates tax equalization for globally mobile employees by extracting compensation data from Workday, running multi-jurisdiction tax calculations in Databricks, and generating equalization reports.

naftiko: '0.5'
info:
  label: Global Mobility Tax Equalization Pipeline
  description: Calculates tax equalization for globally mobile employees by extracting compensation data from Workday, running multi-jurisdiction tax calculations in Databricks, and generating equalization reports.
  tags:
  - tax
  - global-mobility
  - workday
  - azure-databricks
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: global-mobility
    port: 8080
    tools:
    - name: calculate-tax-equalization
      description: Calculate tax equalization for a mobile employee.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The employee ID.
      - name: home_country
        in: body
        type: string
        description: Home country code.
      - name: host_country
        in: body
        type: string
        description: Host country code.
      steps:
      - name: get-compensation
        type: call
        call: workday.get-compensation
        with:
          employee_id: '{{employee_id}}'
      - name: calculate-equalization
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM tax_equalization WHERE employee_id = '{{employee_id}}' AND home = '{{home_country}}' AND host = '{{host_country}}'
      - name: generate-report
        type: call
        call: sharepoint.create-document
        with:
          site_id: global-mobility
          folder_path: TaxEqualization/{{employee_id}}
          template: tax_equalization_report
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl.workday.com/ccx/api/v1/kpmg
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: compensation
      path: /workers/{{employee_id}}/compensation
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-compensation
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://kpmg-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
Open in Framework → View in Fleet → global-mobility-tax-equalization-pipeline.yml

Retrieves purchase order details from Coupa procurement platform, including line items, approval status, and vendor information.

naftiko: '0.5'
info:
  label: Coupa Purchase Order Lookup
  description: Retrieves purchase order details from Coupa procurement platform, including line items, approval status, and vendor information.
  tags:
  - procurement
  - coupa
capability:
  exposes:
  - type: mcp
    namespace: procurement
    port: 8080
    tools:
    - name: get-purchase-order
      description: Look up a purchase order in Coupa by PO number.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: The purchase order number.
      call: coupa.get-po
      with:
        po_number: '{{po_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: total_amount
        type: number
        mapping: $.total
      - name: vendor_name
        type: string
        mapping: $.supplier.name
  consumes:
  - type: http
    namespace: coupa
    baseUri: https://kpmg.coupahost.com/api
    authentication:
      type: apiKey
      header: X-COUPA-API-KEY
      key: $secrets.coupa_api_key
    resources:
    - name: purchase-orders
      path: /purchase_orders?po_number={{po_number}}
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-po
        method: GET
Open in Framework → View in Fleet → coupa-purchase-order-lookup.yml

Retrieves a compensation report for a Workday worker by ID, returning base salary, bonus, total compensation, and pay grade. Used by HR advisory and audit teams.

naftiko: '0.5'
info:
  label: Workday Compensation Report Lookup
  description: Retrieves a compensation report for a Workday worker by ID, returning base salary, bonus, total compensation, and pay grade. Used by HR advisory and audit teams.
  tags:
  - hr
  - compensation
  - workday
capability:
  exposes:
  - type: mcp
    namespace: hr-compensation
    port: 8080
    tools:
    - name: get-compensation
      description: Look up a Workday employee compensation details by worker ID.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: The Workday worker ID.
      call: workday.get-compensation
      with:
        worker_id: '{{worker_id}}'
      outputParameters:
      - name: base_salary
        type: string
        mapping: $.baseSalary
      - name: bonus_target
        type: string
        mapping: $.bonusTarget
      - name: total_compensation
        type: string
        mapping: $.totalCompensation
      - name: pay_grade
        type: string
        mapping: $.payGrade
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: compensation
      path: /workers/{{worker_id}}/compensation
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-compensation
        method: GET
Open in Framework → View in Fleet → workday-compensation-report-lookup.yml

Assesses vendor risk by pulling vendor data from SAP Ariba, analyzing risk indicators in Databricks, creating assessment reports in SharePoint, and notifying the advisory team.

naftiko: '0.5'
info:
  label: Vendor Risk Assessment Orchestrator
  description: Assesses vendor risk by pulling vendor data from SAP Ariba, analyzing risk indicators in Databricks, creating assessment reports in SharePoint, and notifying the advisory team.
  tags:
  - advisory
  - vendor-risk
  - sap-ariba
  - azure-databricks
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: vendor-risk
    port: 8080
    tools:
    - name: assess-vendor-risk
      description: Assess vendor risk for a client engagement.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The client identifier.
      - name: vendor_id
        in: body
        type: string
        description: The vendor ID.
      - name: advisory_email
        in: body
        type: string
        description: Advisory team email.
      steps:
      - name: get-vendor-data
        type: call
        call: ariba.get-vendor
        with:
          vendor_id: '{{vendor_id}}'
      - name: analyze-risk
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM vendor_risk WHERE vendor_id = '{{vendor_id}}'
      - name: create-assessment
        type: call
        call: sharepoint.create-document
        with:
          site_id: advisory
          folder_path: '{{client_id}}/VendorRisk/{{vendor_id}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{advisory_email}}'
          text: 'Vendor risk for {{vendor_id}}: Score {{analyze-risk.risk_score}}/10. Report: {{create-assessment.url}}.'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/supplier-management/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: vendors
      path: /suppliers/{{vendor_id}}
      inputParameters:
      - name: vendor_id
        in: path
      operations:
      - name: get-vendor
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://kpmg-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → vendor-risk-assessment-orchestrator.yml

Checks the health and performance status of APIs managed through the MuleSoft API gateway, returning uptime and error rates.

naftiko: '0.5'
info:
  label: MuleSoft API Gateway Health Check
  description: Checks the health and performance status of APIs managed through the MuleSoft API gateway, returning uptime and error rates.
  tags:
  - integration
  - mulesoft
capability:
  exposes:
  - type: mcp
    namespace: api-health
    port: 8080
    tools:
    - name: check-api-health
      description: Check the health status of a MuleSoft-managed API.
      inputParameters:
      - name: api_id
        in: body
        type: string
        description: The MuleSoft API identifier.
      call: mulesoft.get-api-status
      with:
        api_id: '{{api_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: uptime_percentage
        type: number
        mapping: $.metrics.uptime
      - name: error_rate
        type: number
        mapping: $.metrics.errorRate
  consumes:
  - type: http
    namespace: mulesoft
    baseUri: https://anypoint.mulesoft.com/apiplatform/repository/v2
    authentication:
      type: bearer
      token: $secrets.mulesoft_token
    resources:
    - name: apis
      path: /organizations/kpmg/apis/{{api_id}}/status
      inputParameters:
      - name: api_id
        in: path
      operations:
      - name: get-api-status
        method: GET
Open in Framework → View in Fleet → mulesoft-api-gateway-health-check.yml

Retrieves a Microsoft Sentinel security alert by alert ID, returning severity, status, tactics, and affected entities. Used by cybersecurity advisory teams.

naftiko: '0.5'
info:
  label: Microsoft Sentinel Security Alert Lookup
  description: Retrieves a Microsoft Sentinel security alert by alert ID, returning severity, status, tactics, and affected entities. Used by cybersecurity advisory teams.
  tags:
  - cybersecurity
  - microsoft-sentinel
  - security-operations
capability:
  exposes:
  - type: mcp
    namespace: security-sentinel
    port: 8080
    tools:
    - name: get-sentinel-alert
      description: Look up a Microsoft Sentinel security alert by ID and return severity and tactic details.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID.
      - name: resource_group
        in: body
        type: string
        description: Resource group name.
      - name: workspace_name
        in: body
        type: string
        description: Log Analytics workspace name.
      - name: alert_id
        in: body
        type: string
        description: The Sentinel alert ID.
      call: sentinel.get-alert
      with:
        subscription_id: '{{subscription_id}}'
        resource_group: '{{resource_group}}'
        workspace_name: '{{workspace_name}}'
        alert_id: '{{alert_id}}'
      outputParameters:
      - name: severity
        type: string
        mapping: $.properties.severity
      - name: status
        type: string
        mapping: $.properties.status
      - name: tactics
        type: string
        mapping: $.properties.tactics
      - name: alert_display_name
        type: string
        mapping: $.properties.alertDisplayName
  consumes:
  - type: http
    namespace: sentinel
    baseUri: https://management.azure.com/subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.OperationalInsights/workspaces/{{workspace_name}}/providers/Microsoft.SecurityInsights
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    inputParameters:
    - name: api-version
      in: query
      value: '2023-11-01'
    resources:
    - name: alerts
      path: /incidents/{{alert_id}}
      inputParameters:
      - name: subscription_id
        in: path
      - name: resource_group
        in: path
      - name: workspace_name
        in: path
      - name: alert_id
        in: path
      operations:
      - name: get-alert
        method: GET
Open in Framework → View in Fleet → microsoft-sentinel-security-alert-lookup.yml

Tracks CPE compliance for audit professionals by pulling completion data from Workday Learning, identifying gaps, creating remediation tasks in Jira, and notifying practice leaders.

naftiko: '0.5'
info:
  label: CPE Compliance Tracking Orchestrator
  description: Tracks CPE compliance for audit professionals by pulling completion data from Workday Learning, identifying gaps, creating remediation tasks in Jira, and notifying practice leaders.
  tags:
  - compliance
  - cpe
  - workday
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cpe-compliance
    port: 8080
    tools:
    - name: track-cpe-compliance
      description: Track CPE compliance status for a practice group.
      inputParameters:
      - name: practice_group
        in: body
        type: string
        description: The practice group name.
      - name: practice_leader_email
        in: body
        type: string
        description: Practice leader email.
      steps:
      - name: get-cpe-status
        type: call
        call: workday.get-cpe-report
        with:
          practice_group: '{{practice_group}}'
      - name: create-remediation-tasks
        type: call
        call: jira.create-issues-bulk
        with:
          project: CPE
          issues: '{{get-cpe-status.non_compliant_staff}}'
          issue_type: Task
      - name: notify-leader
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{practice_leader_email}}'
          text: 'CPE compliance report for {{practice_group}}: {{get-cpe-status.compliant_count}}/{{get-cpe-status.total_count}} compliant. {{create-remediation-tasks.created_count}} remediation tasks created.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl.workday.com/ccx/api/v1/kpmg
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: cpe
      path: /learningCompletions/cpe
      operations:
      - name: get-cpe-report
        method: GET
  - type: http
    namespace: jira
    baseUri: https://kpmg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/bulk
      operations:
      - name: create-issues-bulk
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → cpe-compliance-tracking-orchestrator.yml

Retrieves client invoice details from Microsoft Dynamics 365, including amount, status, and payment terms.

naftiko: '0.5'
info:
  label: Microsoft Dynamics Invoice Lookup
  description: Retrieves client invoice details from Microsoft Dynamics 365, including amount, status, and payment terms.
  tags:
  - billing
  - microsoft-dynamics
capability:
  exposes:
  - type: mcp
    namespace: client-billing
    port: 8080
    tools:
    - name: get-invoice
      description: Look up a client invoice by invoice number in Dynamics 365.
      inputParameters:
      - name: invoice_number
        in: body
        type: string
        description: The invoice number.
      call: dynamics.get-invoice
      with:
        invoice_number: '{{invoice_number}}'
      outputParameters:
      - name: amount
        type: number
        mapping: $.value[0].totalamount
      - name: status
        type: string
        mapping: $.value[0].statuscode
      - name: due_date
        type: string
        mapping: $.value[0].duedate
  consumes:
  - type: http
    namespace: dynamics
    baseUri: https://kpmg.api.crm.dynamics.com/api/data/v9.2
    authentication:
      type: bearer
      token: $secrets.dynamics_token
    resources:
    - name: invoices
      path: /invoices?$filter=invoicenumber eq '{{invoice_number}}'
      inputParameters:
      - name: invoice_number
        in: path
      operations:
      - name: get-invoice
        method: GET
Open in Framework → View in Fleet → microsoft-dynamics-invoice-lookup.yml

Executes SOX control testing by pulling control evidence from ServiceNow GRC, validating against SAP transaction logs, documenting test results in SharePoint, and notifying the SOX coordinator via Microsoft Teams.

naftiko: '0.5'
info:
  label: SOX Compliance Testing Orchestrator
  description: Executes SOX control testing by pulling control evidence from ServiceNow GRC, validating against SAP transaction logs, documenting test results in SharePoint, and notifying the SOX coordinator via Microsoft Teams.
  tags:
  - audit
  - sox
  - compliance
  - servicenow
  - sap
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sox-testing
    port: 8080
    tools:
    - name: execute-sox-test
      description: Given a control ID and testing period, pull evidence from ServiceNow GRC, validate against SAP, document in SharePoint, and notify the coordinator.
      inputParameters:
      - name: control_id
        in: body
        type: string
        description: The ServiceNow GRC control identifier.
      - name: testing_period_start
        in: body
        type: string
        description: Testing period start date (YYYY-MM-DD).
      - name: testing_period_end
        in: body
        type: string
        description: Testing period end date (YYYY-MM-DD).
      - name: coordinator_email
        in: body
        type: string
        description: Email of the SOX testing coordinator.
      steps:
      - name: get-control-evidence
        type: call
        call: servicenow.get-control
        with:
          control_id: '{{control_id}}'
      - name: get-sap-transactions
        type: call
        call: sap.get-transaction-log
        with:
          control_id: '{{control_id}}'
          date_from: '{{testing_period_start}}'
          date_to: '{{testing_period_end}}'
      - name: save-test-results
        type: call
        call: sharepoint.create-file
        with:
          site_id: sox_testing_site
          file_path: TestResults/{{control_id}}_{{testing_period_start}}_to_{{testing_period_end}}.xlsx
          content: 'Control: {{get-control-evidence.control_name}}. Transactions tested: {{get-sap-transactions.count}}. Exceptions: {{get-sap-transactions.exceptions}}.'
      - name: notify-coordinator
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{coordinator_email}}'
          text: 'SOX test complete for {{get-control-evidence.control_name}} ({{control_id}}). Period: {{testing_period_start}} to {{testing_period_end}}. Transactions: {{get-sap-transactions.count}}. Exceptions: {{get-sap-transactions.exceptions}}. Results: {{save-test-results.url}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://kpmg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: controls
      path: /table/sn_compliance_control/{{control_id}}
      inputParameters:
      - name: control_id
        in: path
      operations:
      - name: get-control
        method: GET
  - type: http
    namespace: sap
    baseUri: https://kpmg-s4.sap.com/sap/opu/odata/sap/API_JOURNAL_ENTRY
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: transaction-logs
      path: /JournalEntrySet?$filter=PostingDate ge datetime'{{date_from}}' and PostingDate le datetime'{{date_to}}'
      inputParameters:
      - name: date_from
        in: query
      - name: date_to
        in: query
      operations:
      - name: get-transaction-log
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: create-file
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sox-compliance-testing-orchestrator.yml

Verifies auditor independence by checking financial relationships in Salesforce, cross-referencing employee portfolios in Workday, and generating compliance reports in SharePoint.

naftiko: '0.5'
info:
  label: Client Independence Verification Pipeline
  description: Verifies auditor independence by checking financial relationships in Salesforce, cross-referencing employee portfolios in Workday, and generating compliance reports in SharePoint.
  tags:
  - independence
  - compliance
  - salesforce
  - workday
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: independence
    port: 8080
    tools:
    - name: verify-independence
      description: Verify auditor independence for a client engagement.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The client identifier.
      - name: employee_id
        in: body
        type: string
        description: The auditor employee ID.
      steps:
      - name: check-client-relationships
        type: call
        call: salesforce.get-relationships
        with:
          client_id: '{{client_id}}'
      - name: check-financial-interests
        type: call
        call: workday.get-financial-disclosures
        with:
          employee_id: '{{employee_id}}'
      - name: generate-compliance-report
        type: call
        call: sharepoint.create-document
        with:
          site_id: independence
          folder_path: Verifications/{{client_id}}/{{employee_id}}
          template: independence_verification
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://kpmg.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: relationships
      path: /sobjects/ClientRelationship__c
      operations:
      - name: get-relationships
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd5-impl.workday.com/ccx/api/v1/kpmg
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: disclosures
      path: /workers/{{employee_id}}/financialDisclosures
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-financial-disclosures
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
Open in Framework → View in Fleet → client-independence-verification-pipeline.yml

Scans SAP Ariba purchase transactions for recoverable VAT and GST, validates against jurisdiction rules in Snowflake, generates claim documentation, and files recovery requests through the tax portal.

naftiko: '0.5'
info:
  label: Indirect Tax Recovery Orchestrator
  description: Scans SAP Ariba purchase transactions for recoverable VAT and GST, validates against jurisdiction rules in Snowflake, generates claim documentation, and files recovery requests through the tax portal.
  tags:
  - tax
  - finance
  - sap-ariba
  - snowflake
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: tax-recovery
    port: 8080
    tools:
    - name: process-indirect-tax-recovery
      description: Given a client ID and date range, scan purchase transactions for recoverable indirect taxes, validate eligibility, and generate claim files.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The client engagement identifier.
      - name: start_date
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: End date in YYYY-MM-DD format.
      steps:
      - name: get-purchase-transactions
        type: call
        call: sap-ariba.get-purchase-orders
        with:
          client_id: '{{client_id}}'
          from: '{{start_date}}'
          to: '{{end_date}}'
      - name: validate-recovery-rules
        type: call
        call: snowflake.run-tax-rule-validation
        with:
          transactions: '{{get-purchase-transactions.orders}}'
      - name: generate-claim-docs
        type: call
        call: sharepoint.upload-document
        with:
          library: TaxRecoveryClaims
          filename: indirect-tax-claim-{{client_id}}-{{start_date}}.pdf
          data: '{{validate-recovery-rules.claim_data}}'
      - name: notify-engagement-team
        type: call
        call: msteams.post-message
        with:
          channel: tax-recovery-{{client_id}}
          message: 'Indirect tax recovery claim generated: {{validate-recovery-rules.recoverable_amount}} across {{validate-recovery-rules.jurisdiction_count}} jurisdictions.'
  consumes:
  - type: http
    namespace: sap-ariba
    baseUri: https://api.ariba.com/v2
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: purchase-orders
      path: /procurement/purchase-orders
      operations:
      - name: get-purchase-orders
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://kpmg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: queries
      path: /statements
      operations:
      - name: run-tax-rule-validation
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites/kpmg.sharepoint.com
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /drive/items
      operations:
      - name: upload-document
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/channels/messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → indirect-tax-recovery-orchestrator.yml

Retrieves IAM policy bindings for a Google Cloud Platform project, returning roles and members. Used by cloud advisory teams for access review audits.

naftiko: '0.5'
info:
  label: Google Cloud Platform Project IAM Lookup
  description: Retrieves IAM policy bindings for a Google Cloud Platform project, returning roles and members. Used by cloud advisory teams for access review audits.
  tags:
  - cloud
  - google-cloud-platform
  - iam
  - access-review
capability:
  exposes:
  - type: mcp
    namespace: gcp-iam
    port: 8080
    tools:
    - name: get-gcp-iam-policy
      description: Look up IAM policy bindings for a GCP project by project ID.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      call: gcp.get-iam-policy
      with:
        project_id: '{{project_id}}'
      outputParameters:
      - name: bindings
        type: string
        mapping: $.bindings
      - name: etag
        type: string
        mapping: $.etag
  consumes:
  - type: http
    namespace: gcp
    baseUri: https://cloudresourcemanager.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_token
    resources:
    - name: iam-policies
      path: /projects/{{project_id}}:getIamPolicy
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-iam-policy
        method: POST
Open in Framework → View in Fleet → google-cloud-platform-project-iam-lookup.yml

Assesses client supply chain risk by analyzing supplier data in Databricks, cross-referencing geopolitical risk indicators, generating risk reports in SharePoint, and briefing the advisory team.

naftiko: '0.5'
info:
  label: Supply Chain Risk Advisory Pipeline
  description: Assesses client supply chain risk by analyzing supplier data in Databricks, cross-referencing geopolitical risk indicators, generating risk reports in SharePoint, and briefing the advisory team.
  tags:
  - advisory
  - supply-chain-risk
  - azure-databricks
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-risk
    port: 8080
    tools:
    - name: assess-supply-chain-risk
      description: Assess a client's supply chain risk profile.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The client identifier.
      - name: advisory_lead_email
        in: body
        type: string
        description: Advisory lead email.
      steps:
      - name: analyze-suppliers
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM supply_chain_risk WHERE client_id = '{{client_id}}' ORDER BY risk_score DESC
      - name: generate-risk-report
        type: call
        call: sharepoint.create-document
        with:
          site_id: advisory-engagements
          folder_path: '{{client_id}}/SupplyChainRisk'
          template: supply_chain_risk_report
      - name: brief-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{advisory_lead_email}}'
          text: 'Supply chain risk assessment for {{client_id}}: {{analyze-suppliers.high_risk_count}} high-risk suppliers identified out of {{analyze-suppliers.total_suppliers}}. Report: {{generate-risk-report.url}}.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://kpmg-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → supply-chain-risk-advisory-pipeline.yml

When a Coupa invoice exceeds the auto-approval threshold, retrieves the invoice details, looks up the approver in Workday, routes the approval request via Microsoft Teams, and logs the exception in ServiceNow.

naftiko: '0.5'
info:
  label: Coupa Invoice Approval Orchestrator
  description: When a Coupa invoice exceeds the auto-approval threshold, retrieves the invoice details, looks up the approver in Workday, routes the approval request via Microsoft Teams, and logs the exception in ServiceNow.
  tags:
  - procurement
  - finance
  - coupa
  - workday
  - microsoft-teams
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: procurement-invoicing
    port: 8080
    tools:
    - name: route-invoice-approval
      description: Given a Coupa invoice ID and requestor employee ID, retrieve invoice details, resolve approver from Workday, notify via Teams, and log in ServiceNow.
      inputParameters:
      - name: invoice_id
        in: body
        type: string
        description: The Coupa invoice identifier.
      - name: requestor_employee_id
        in: body
        type: string
        description: Workday employee ID of the invoice submitter.
      steps:
      - name: get-invoice
        type: call
        call: coupa.get-invoice
        with:
          invoice_id: '{{invoice_id}}'
      - name: get-requestor
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{requestor_employee_id}}'
      - name: get-approver
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{get-requestor.manager_id}}'
      - name: notify-approver
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-approver.work_email}}'
          text: 'Invoice Approval Required: Coupa #{{invoice_id}} from {{get-requestor.full_name}}. Supplier: {{get-invoice.supplier_name}}. Amount: {{get-invoice.total_amount}} {{get-invoice.currency}}. Please review in Coupa.'
      - name: log-exception
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Invoice approval exception: Coupa #{{invoice_id}}'
          description: 'Supplier: {{get-invoice.supplier_name}}. Amount: {{get-invoice.total_amount}} {{get-invoice.currency}}. Requestor: {{get-requestor.full_name}}. Approver: {{get-approver.full_name}}.'
          assigned_group: Accounts_Payable
  consumes:
  - type: http
    namespace: coupa
    baseUri: https://kpmg.coupahost.com/api
    authentication:
      type: bearer
      token: $secrets.coupa_token
    resources:
    - name: invoices
      path: /invoices/{{invoice_id}}
      inputParameters:
      - name: invoice_id
        in: path
      operations:
      - name: get-invoice
        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
  - type: http
    namespace: servicenow
    baseUri: https://kpmg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → coupa-invoice-approval-orchestrator.yml

Retrieves a Jira issue by key, returning summary, status, assignee, and priority. Used by consulting and advisory teams to track project delivery milestones.

naftiko: '0.5'
info:
  label: Jira Issue Status Lookup
  description: Retrieves a Jira issue by key, returning summary, status, assignee, and priority. Used by consulting and advisory teams to track project delivery milestones.
  tags:
  - project-management
  - jira
  - consulting
capability:
  exposes:
  - type: mcp
    namespace: project-tracking
    port: 8080
    tools:
    - name: get-jira-issue
      description: Look up a Jira issue by key and return its current status and assignment.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: The Jira issue key (e.g., AUDIT-1234).
      call: jira.get-issue
      with:
        issue_key: '{{issue_key}}'
      outputParameters:
      - name: summary
        type: string
        mapping: $.fields.summary
      - name: status
        type: string
        mapping: $.fields.status.name
      - name: assignee
        type: string
        mapping: $.fields.assignee.displayName
      - name: priority
        type: string
        mapping: $.fields.priority.name
  consumes:
  - type: http
    namespace: jira
    baseUri: https://kpmg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-issue-status-lookup.yml

Retrieves the status and findings summary from Fortify application security scans used in security assessment engagements.

naftiko: '0.5'
info:
  label: Fortify Vulnerability Scan Status
  description: Retrieves the status and findings summary from Fortify application security scans used in security assessment engagements.
  tags:
  - cybersecurity
  - fortify
capability:
  exposes:
  - type: mcp
    namespace: appsec
    port: 8080
    tools:
    - name: get-fortify-scan
      description: Get Fortify scan status and findings summary.
      inputParameters:
      - name: application_id
        in: body
        type: string
        description: The Fortify application identifier.
      call: fortify.get-scan-summary
      with:
        application_id: '{{application_id}}'
      outputParameters:
      - name: critical_count
        type: integer
        mapping: $.issueSummary.critical
      - name: high_count
        type: integer
        mapping: $.issueSummary.high
      - name: scan_date
        type: string
        mapping: $.scanDate
  consumes:
  - type: http
    namespace: fortify
    baseUri: https://kpmg-fortify.fortify.com/ssc/api/v1
    authentication:
      type: bearer
      token: $secrets.fortify_token
    resources:
    - name: applications
      path: /projectVersions/{{application_id}}/issueSummaries
      inputParameters:
      - name: application_id
        in: path
      operations:
      - name: get-scan-summary
        method: GET
Open in Framework → View in Fleet → fortify-vulnerability-scan-status.yml

Archives engagement documents by moving files to a Box archive folder, creating an index page in Confluence, and notifying the document management team via Slack.

naftiko: '0.5'
info:
  label: Box Document Archive with Confluence Index
  description: Archives engagement documents by moving files to a Box archive folder, creating an index page in Confluence, and notifying the document management team via Slack.
  tags:
  - document-management
  - archiving
  - box
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: doc-archive
    port: 8080
    tools:
    - name: archive-documents
      description: Archive Box files, create Confluence index, and notify via Slack.
      inputParameters:
      - name: source_folder_id
        in: body
        type: string
        description: Box source folder ID.
      - name: archive_folder_id
        in: body
        type: string
        description: Box archive folder ID.
      - name: engagement_name
        in: body
        type: string
        description: Engagement name for indexing.
      - name: space_key
        in: body
        type: string
        description: Confluence space key.
      steps:
      - name: list-files
        type: call
        call: box.list-folder
        with:
          folder_id: '{{source_folder_id}}'
      - name: move-files
        type: call
        call: box.move-folder
        with:
          folder_id: '{{source_folder_id}}'
          parent_id: '{{archive_folder_id}}'
      - name: create-index
        type: call
        call: confluence.create-page
        with:
          space_key: '{{space_key}}'
          title: 'Document Archive: {{engagement_name}}'
          body: <h2>Archived Documents</h2><p>{{list-files.total_count}} files archived from engagement {{engagement_name}}.</p>
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: document-management
          text: '{{list-files.total_count}} documents archived for {{engagement_name}}. Index: {{create-index.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}}/items
      inputParameters:
      - name: folder_id
        in: path
      operations:
      - name: list-folder
        method: GET
    - name: folder-ops
      path: /folders/{{folder_id}}
      inputParameters:
      - name: folder_id
        in: path
      operations:
      - name: move-folder
        method: PUT
  - type: http
    namespace: confluence
    baseUri: https://mckinsey.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → box-document-archive-with-confluence-index.yml

Assembles a client proposal by pulling the opportunity from Salesforce, retrieving relevant case studies from Confluence, generating a slide deck outline in Google Slides, and notifying the proposal team via Slack.

naftiko: '0.5'
info:
  label: Client Proposal Generation Pipeline
  description: Assembles a client proposal by pulling the opportunity from Salesforce, retrieving relevant case studies from Confluence, generating a slide deck outline in Google Slides, and notifying the proposal team via Slack.
  tags:
  - consulting
  - proposals
  - salesforce
  - confluence
  - google-slides
  - slack
capability:
  exposes:
  - type: mcp
    namespace: proposal-pipeline
    port: 8080
    tools:
    - name: generate-proposal
      description: Given a Salesforce opportunity ID and industry, assemble a proposal pulling case studies and creating a slide deck.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID.
      - name: industry
        in: body
        type: string
        description: Industry vertical for case study matching.
      - name: proposal_lead
        in: body
        type: string
        description: Email of the proposal lead.
      steps:
      - name: get-opp
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: find-cases
        type: call
        call: confluence.search-content
        with:
          cql: type=page AND label="case-study" AND label="{{industry}}"
          limit: '5'
      - name: create-deck
        type: call
        call: gslides.create-presentation
        with:
          title: 'Proposal: {{get-opp.account_name}} - {{get-opp.stage}}'
      - name: notify-lead
        type: call
        call: slack.post-message
        with:
          channel: proposals
          text: 'Proposal deck created for {{get-opp.account_name}}: {{create-deck.url}}. {{find-cases.totalSize}} case studies found for {{industry}}. Lead: {{proposal_lead}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://mckinsey.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://mckinsey.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: search
      path: /search
      inputParameters:
      - name: cql
        in: query
      - name: limit
        in: query
      operations:
      - name: search-content
        method: GET
  - type: http
    namespace: gslides
    baseUri: https://slides.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: presentations
      path: /presentations
      operations:
      - name: create-presentation
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → client-proposal-generation-pipeline.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 8
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-8
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-8
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: tableau.publish-datasource
        with:
          dataset_id: workflow_8
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-8
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://mckinsey-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-8.yml

Publishes a research brief by creating a Confluence page with the content, uploading the PDF to Google Drive, sharing the link in Slack, and logging the publication in Salesforce as a content asset.

naftiko: '0.5'
info:
  label: Research Brief Publication Pipeline
  description: Publishes a research brief by creating a Confluence page with the content, uploading the PDF to Google Drive, sharing the link in Slack, and logging the publication in Salesforce as a content asset.
  tags:
  - research
  - publishing
  - confluence
  - google-drive
  - slack
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: research-publishing
    port: 8080
    tools:
    - name: publish-brief
      description: Publish a research brief across Confluence, Google Drive, Slack, and Salesforce.
      inputParameters:
      - name: title
        in: body
        type: string
        description: Title of the research brief.
      - name: content_html
        in: body
        type: string
        description: HTML body content for the Confluence page.
      - name: industry
        in: body
        type: string
        description: Industry tag for the brief.
      - name: author_email
        in: body
        type: string
        description: Email of the author.
      steps:
      - name: create-page
        type: call
        call: confluence.create-page
        with:
          space_key: RESEARCH
          title: '{{title}}'
          body: '{{content_html}}'
          labels: research-brief,{{industry}}
      - name: upload-pdf
        type: call
        call: gdrive.upload-file
        with:
          folder_id: research-briefs-folder
          name: '{{title}}.pdf'
          mimeType: application/pdf
      - name: share-brief
        type: call
        call: slack.post-message
        with:
          channel: research-publications
          text: 'New research brief published: {{title}} by {{author_email}}. Confluence: {{create-page.url}} | Drive: {{upload-pdf.webViewLink}}'
      - name: log-asset
        type: call
        call: salesforce.create-content-asset
        with:
          Name: '{{title}}'
          Type__c: Research Brief
          Industry__c: '{{industry}}'
          URL__c: '{{create-page.url}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://mckinsey.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: gdrive
    baseUri: https://www.googleapis.com/upload/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: files
      path: /files
      inputParameters:
      - name: uploadType
        in: query
        value: multipart
      operations:
      - name: upload-file
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://mckinsey.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: content-assets
      path: /sobjects/Content_Asset__c
      operations:
      - name: create-content-asset
        method: POST
Open in Framework → View in Fleet → research-brief-publication-pipeline.yml

On employee departure, updates Workday status, revokes access via Azure Active Directory, closes open ServiceNow tickets, and notifies HR and IT via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Employee Offboarding Pipeline
  description: On employee departure, updates Workday status, revokes access via Azure Active Directory, closes open ServiceNow tickets, and notifies HR and IT via Microsoft Teams.
  tags:
  - hr
  - offboarding
  - workday
  - azure-active-directory
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: process-offboarding
      description: Process employee offboarding across Workday, Azure AD, ServiceNow, and Teams.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: Workday worker ID.
      - name: last_day
        in: body
        type: string
        description: Last working day in YYYY-MM-DD format.
      - name: manager_upn
        in: body
        type: string
        description: Manager UPN for notification.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{worker_id}}'
      - name: disable-account
        type: call
        call: azuread.disable-user
        with:
          user_principal_name: '{{get-employee.work_email}}'
      - name: close-tickets
        type: call
        call: servicenow.close-user-tickets
        with:
          caller_id: '{{get-employee.work_email}}'
      - name: notify-teams
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{manager_upn}}'
          text: 'Offboarding complete for {{get-employee.full_name}} (last day: {{last_day}}). AD account disabled. {{close-tickets.count}} tickets closed.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1/mckinsey
    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: azuread
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users/{{user_principal_name}}
      inputParameters:
      - name: user_principal_name
        in: path
      operations:
      - name: disable-user
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://mckinsey.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      inputParameters:
      - name: caller_id
        in: query
      operations:
      - name: close-user-tickets
        method: PATCH
  - 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}}/chats
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-employee-offboarding-pipeline.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 9
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - box
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-9
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-9
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: box.upload-file
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-9
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-9.yml

When a staffing request is submitted, searches Workday for available consultants by skill and office, creates a staffing ticket in ServiceNow, and posts the opportunity to the internal Slack staffing channel.

naftiko: '0.5'
info:
  label: Consultant Staffing Request Pipeline
  description: When a staffing request is submitted, searches Workday for available consultants by skill and office, creates a staffing ticket in ServiceNow, and posts the opportunity to the internal Slack staffing channel.
  tags:
  - talent
  - staffing
  - workday
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: staffing-request
    port: 8080
    tools:
    - name: submit-staffing-request
      description: Submit a staffing request by skill set and office. Searches Workday, creates a ServiceNow ticket, and posts to Slack.
      inputParameters:
      - name: engagement_id
        in: body
        type: string
        description: The engagement identifier.
      - name: required_skills
        in: body
        type: string
        description: Comma-separated list of required skills.
      - name: office
        in: body
        type: string
        description: Preferred office location.
      - name: start_date
        in: body
        type: string
        description: Required start date in YYYY-MM-DD format.
      steps:
      - name: search-consultants
        type: call
        call: workday.search-workers
        with:
          skills: '{{required_skills}}'
          location: '{{office}}'
          availability_date: '{{start_date}}'
      - name: create-ticket
        type: call
        call: servicenow.create-request
        with:
          short_description: Staffing request for engagement {{engagement_id}}
          description: 'Skills: {{required_skills}}. Office: {{office}}. Start: {{start_date}}. Candidates found: {{search-consultants.total}}.'
          category: staffing
      - name: post-opportunity
        type: call
        call: slack.post-message
        with:
          channel: staffing-opportunities
          text: 'Staffing need for engagement {{engagement_id}}: {{required_skills}} in {{office}} starting {{start_date}}. Ticket: {{create-ticket.number}}. {{search-consultants.total}} candidates identified.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1/mckinsey
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers
      inputParameters:
      - name: skills
        in: query
      - name: location
        in: query
      - name: availability_date
        in: query
      operations:
      - name: search-workers
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://mckinsey.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → consultant-staffing-request-pipeline.yml

When a consultant submits a travel request, validates the budget against Workday cost center allocations, creates an approval task in ServiceNow, and notifies the manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: Travel Booking Approval Pipeline
  description: When a consultant submits a travel request, validates the budget against Workday cost center allocations, creates an approval task in ServiceNow, and notifies the manager via Microsoft Teams.
  tags:
  - travel
  - finance
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: travel-approval
    port: 8080
    tools:
    - name: submit-travel-request
      description: Submit a travel request for approval by validating budget, creating a ServiceNow task, and notifying the manager.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: Workday worker ID of the requestor.
      - name: engagement_id
        in: body
        type: string
        description: Engagement to charge travel to.
      - name: destination
        in: body
        type: string
        description: Travel destination.
      - name: estimated_cost
        in: body
        type: string
        description: Estimated travel cost.
      - name: travel_dates
        in: body
        type: string
        description: Travel date range.
      steps:
      - name: check-budget
        type: call
        call: workday.get-cost-center
        with:
          worker_id: '{{worker_id}}'
          engagement: '{{engagement_id}}'
      - name: create-approval
        type: call
        call: servicenow.create-request
        with:
          short_description: 'Travel approval: {{destination}} for {{worker_id}}'
          description: 'Destination: {{destination}}. Dates: {{travel_dates}}. Estimated cost: {{estimated_cost}}. Budget remaining: {{check-budget.remaining_budget}}.'
          category: travel
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{check-budget.manager_email}}'
          text: 'Travel approval needed for {{destination}} ({{travel_dates}}). Cost: {{estimated_cost}}. Budget remaining: {{check-budget.remaining_budget}}. Ticket: {{create-approval.number}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1/mckinsey
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: cost-centers
      path: /financialManagement/costCenters
      inputParameters:
      - name: worker_id
        in: query
      - name: engagement
        in: query
      operations:
      - name: get-cost-center
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://mckinsey.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chat-messages
      path: /users/{{recipient_upn}}/chats
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → travel-booking-approval-pipeline.yml

Retrieves campaign metrics from MailChimp after a newsletter send, logs engagement data in Salesforce, and posts a performance summary to Slack.

naftiko: '0.5'
info:
  label: MailChimp Newsletter with Salesforce Sync
  description: Retrieves campaign metrics from MailChimp after a newsletter send, logs engagement data in Salesforce, and posts a performance summary to Slack.
  tags:
  - marketing
  - email-campaigns
  - mailchimp
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: newsletter-sync
    port: 8080
    tools:
    - name: sync-newsletter-results
      description: Pull MailChimp campaign results, log in Salesforce, and notify via Slack.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: MailChimp campaign ID.
      - name: campaign_name
        in: body
        type: string
        description: Campaign name for logging.
      steps:
      - name: get-metrics
        type: call
        call: mailchimp.get-campaign-report
        with:
          campaign_id: '{{campaign_id}}'
      - name: log-results
        type: call
        call: salesforce.create-campaign-result
        with:
          Name: '{{campaign_name}}'
          Open_Rate__c: '{{get-metrics.opens.open_rate}}'
          Click_Rate__c: '{{get-metrics.clicks.click_rate}}'
          Emails_Sent__c: '{{get-metrics.emails_sent}}'
      - name: notify-marketing
        type: call
        call: slack.post-message
        with:
          channel: marketing-campaigns
          text: 'Newsletter {{campaign_name}} results: Open rate {{get-metrics.opens.open_rate}}%, Click rate {{get-metrics.clicks.click_rate}}%, Sent to {{get-metrics.emails_sent}} recipients.'
  consumes:
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: basic
      username: anystring
      password: $secrets.mailchimp_api_key
    resources:
    - name: reports
      path: /reports/{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-campaign-report
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://mckinsey.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign_Result__c
      operations:
      - name: create-campaign-result
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → mailchimp-newsletter-with-salesforce-sync.yml

Publishes a McKinsey Insights article by creating the page in Confluence, scheduling social media posts via HubSpot to LinkedIn and Twitter, and notifying the editorial team via Slack.

naftiko: '0.5'
info:
  label: Thought Leadership Publishing Pipeline
  description: Publishes a McKinsey Insights article by creating the page in Confluence, scheduling social media posts via HubSpot to LinkedIn and Twitter, and notifying the editorial team via Slack.
  tags:
  - marketing
  - thought-leadership
  - confluence
  - hubspot
  - slack
capability:
  exposes:
  - type: mcp
    namespace: thought-leadership
    port: 8080
    tools:
    - name: publish-article
      description: Publish a thought leadership article across Confluence, social channels, and Slack.
      inputParameters:
      - name: title
        in: body
        type: string
        description: Article title.
      - name: content_html
        in: body
        type: string
        description: HTML article body.
      - name: author_name
        in: body
        type: string
        description: Author display name.
      - name: industry_tags
        in: body
        type: string
        description: Comma-separated industry tags.
      steps:
      - name: create-article
        type: call
        call: confluence.create-page
        with:
          space_key: INSIGHTS
          title: '{{title}}'
          body: '{{content_html}}'
          labels: insights,{{industry_tags}}
      - name: schedule-linkedin
        type: call
        call: hubspot.create-social-post
        with:
          network: linkedin
          content: 'New from McKinsey: {{title}} by {{author_name}}. Read more: {{create-article.url}}'
      - name: schedule-twitter
        type: call
        call: hubspot.create-social-post
        with:
          network: twitter
          content: '{{title}} by {{author_name}} - {{create-article.url}} #McKinseyInsights'
      - name: notify-editorial
        type: call
        call: slack.post-message
        with:
          channel: editorial-team
          text: 'Article published: {{title}} by {{author_name}}. Social posts scheduled. Link: {{create-article.url}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://mckinsey.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: social
      path: /broadcast/v1/broadcasts
      operations:
      - name: create-social-post
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → thought-leadership-publishing-pipeline.yml

Uploads a document to a specified Google Drive folder. Used by research teams to share deliverables and working papers with engagement teams.

naftiko: '0.5'
info:
  label: Google Drive Document Upload
  description: Uploads a document to a specified Google Drive folder. Used by research teams to share deliverables and working papers with engagement teams.
  tags:
  - document-management
  - collaboration
  - google-drive
capability:
  exposes:
  - type: mcp
    namespace: drive-upload
    port: 8080
    tools:
    - name: upload-document
      description: Upload a document to a Google Drive folder by folder ID.
      inputParameters:
      - name: folder_id
        in: body
        type: string
        description: The Google Drive folder ID.
      - name: file_name
        in: body
        type: string
        description: Name of the file to upload.
      - name: mime_type
        in: body
        type: string
        description: MIME type of the file.
      call: gdrive.upload-file
      with:
        folder_id: '{{folder_id}}'
        name: '{{file_name}}'
        mimeType: '{{mime_type}}'
  consumes:
  - type: http
    namespace: gdrive
    baseUri: https://www.googleapis.com/upload/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: files
      path: /files
      inputParameters:
      - name: uploadType
        in: query
        value: multipart
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → google-drive-document-upload.yml

Runs a skills assessment by assigning a Pluralsight skill path, tracking completion in Workday learning records, and notifying the consultant and their manager via Slack.

naftiko: '0.5'
info:
  label: Pluralsight Skills Assessment Pipeline
  description: Runs a skills assessment by assigning a Pluralsight skill path, tracking completion in Workday learning records, and notifying the consultant and their manager via Slack.
  tags:
  - learning
  - talent-development
  - pluralsight
  - workday
  - slack
capability:
  exposes:
  - type: mcp
    namespace: skills-assessment
    port: 8080
    tools:
    - name: assign-skill-assessment
      description: Assign a Pluralsight skill assessment path and track results across Workday and Slack.
      inputParameters:
      - name: user_email
        in: body
        type: string
        description: Consultant email address.
      - name: skill_path_id
        in: body
        type: string
        description: Pluralsight skill path ID.
      - name: worker_id
        in: body
        type: string
        description: Workday worker ID.
      steps:
      - name: assign-path
        type: call
        call: pluralsight.assign-channel
        with:
          user_email: '{{user_email}}'
          channel_id: '{{skill_path_id}}'
      - name: log-learning
        type: call
        call: workday.create-learning-record
        with:
          worker_id: '{{worker_id}}'
          course_name: '{{assign-path.channel_name}}'
          provider: Pluralsight
          status: assigned
      - name: notify-consultant
        type: call
        call: slack.post-message
        with:
          channel: '{{user_email}}'
          text: 'You have been assigned the Pluralsight skill path: {{assign-path.channel_name}}. Complete it to update your skills profile.'
  consumes:
  - type: http
    namespace: pluralsight
    baseUri: https://api.pluralsight.com/api/v1
    authentication:
      type: bearer
      token: $secrets.pluralsight_token
    resources:
    - name: channels
      path: /channels/{{channel_id}}/assignments
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: assign-channel
        method: POST
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1/mckinsey
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: learning
      path: /learning/records
      operations:
      - name: create-learning-record
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → pluralsight-skills-assessment-pipeline.yml

Triggers a Databricks job run for a specified job ID. Used by data science teams to execute analytics pipelines for client engagements.

naftiko: '0.5'
info:
  label: Databricks Analytics Job Runner
  description: Triggers a Databricks job run for a specified job ID. Used by data science teams to execute analytics pipelines for client engagements.
  tags:
  - analytics
  - data-science
  - databricks
capability:
  exposes:
  - type: mcp
    namespace: databricks-jobs
    port: 8080
    tools:
    - name: run-job
      description: Trigger a Databricks job run by job ID with optional parameters.
      inputParameters:
      - name: job_id
        in: body
        type: string
        description: Databricks job ID.
      - name: notebook_params
        in: body
        type: string
        description: JSON string of notebook parameters.
      call: databricks.run-job
      with:
        job_id: '{{job_id}}'
        notebook_params: '{{notebook_params}}'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://mckinsey.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
Open in Framework → View in Fleet → databricks-analytics-job-runner.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 30
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-30
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-30
        with:
          identifier: '{{identifier}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: CONS
          summary: Task from workflow 30
          description: '{{process.details}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-30
        method: POST
  - type: http
    namespace: jira
    baseUri: https://mckinsey.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issues
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-30.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 24
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-24
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-24
        with:
          identifier: '{{identifier}}'
      - name: push
        type: call
        call: datadog.submit-metrics
        with:
          metric_name: consulting.workflow_24
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-24
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_token
    resources:
    - name: metrics
      path: /metrics
      operations:
      - name: submit-metrics
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-24.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 18
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-18
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-18
        with:
          identifier: '{{identifier}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: CONS
          summary: Task from workflow 18
          description: '{{process.details}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-18
        method: POST
  - type: http
    namespace: jira
    baseUri: https://mckinsey.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issues
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-18.yml

Triggers a Databricks analytics job, waits for completion, refreshes the associated Tableau dashboard, and shares the results in Slack.

naftiko: '0.5'
info:
  label: Databricks Pipeline with Tableau Visualization
  description: Triggers a Databricks analytics job, waits for completion, refreshes the associated Tableau dashboard, and shares the results in Slack.
  tags:
  - analytics
  - data-science
  - databricks
  - tableau
  - slack
capability:
  exposes:
  - type: mcp
    namespace: analytics-pipeline
    port: 8080
    tools:
    - name: run-analytics-pipeline
      description: Run a Databricks job, refresh Tableau, and share results via Slack.
      inputParameters:
      - name: job_id
        in: body
        type: string
        description: Databricks job ID.
      - name: workbook_id
        in: body
        type: string
        description: Tableau workbook ID to refresh.
      - name: results_channel
        in: body
        type: string
        description: Slack channel for results.
      steps:
      - name: run-job
        type: call
        call: databricks.run-job
        with:
          job_id: '{{job_id}}'
      - name: refresh-viz
        type: call
        call: tableau.refresh-workbook
        with:
          workbook_id: '{{workbook_id}}'
      - name: share-results
        type: call
        call: slack.post-message
        with:
          channel: '{{results_channel}}'
          text: 'Analytics pipeline complete. Databricks run: {{run-job.run_id}}. Dashboard refreshed: {{refresh-viz.url}}'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://mckinsey.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://tableau.mckinsey.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/mckinsey-main/workbooks/{{workbook_id}}/refresh
      inputParameters:
      - name: workbook_id
        in: path
      operations:
      - name: refresh-workbook
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → databricks-pipeline-with-tableau-visualization.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 19
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - teams
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-19
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-19
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: teams.send-message
        with:
          channel_id: consulting
          message: 'Workflow 19 complete: {{process.summary}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-19
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-19.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 25
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-25
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-25
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-25
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://mckinsey.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-25.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 31
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - teams
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-31
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-31
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: teams.send-message
        with:
          channel_id: consulting
          message: 'Workflow 31 complete: {{process.summary}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-31
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-31.yml

Runs client due diligence by pulling company data from ZoomInfo, financial data from Bloomberg, checking internal conflicts in Salesforce, and generating a due diligence report in Confluence.

naftiko: '0.5'
info:
  label: Client Due Diligence Orchestrator
  description: Runs client due diligence by pulling company data from ZoomInfo, financial data from Bloomberg, checking internal conflicts in Salesforce, and generating a due diligence report in Confluence.
  tags:
  - consulting
  - due-diligence
  - zoominfo
  - bloomberg
  - salesforce
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: due-diligence
    port: 8080
    tools:
    - name: run-due-diligence
      description: Run client due diligence across ZoomInfo, Bloomberg, Salesforce, and Confluence.
      inputParameters:
      - name: company_domain
        in: body
        type: string
        description: Company website domain.
      - name: company_ticker
        in: body
        type: string
        description: Bloomberg ticker symbol.
      - name: engagement_space_key
        in: body
        type: string
        description: Confluence space key for the engagement.
      steps:
      - name: enrich-company
        type: call
        call: zoominfo.enrich-company
        with:
          companyWebsite: '{{company_domain}}'
      - name: get-financials
        type: call
        call: bloomberg.get-company-data
        with:
          ticker: '{{company_ticker}}'
          fields: REVENUE,NET_INCOME,TOTAL_DEBT,MARKET_CAP
      - name: check-conflicts
        type: call
        call: salesforce.query-accounts
        with:
          q: SELECT Id, Name, Conflict_Status__c FROM Account WHERE Website='{{company_domain}}'
      - name: generate-report
        type: call
        call: confluence.create-page
        with:
          space_key: '{{engagement_space_key}}'
          title: 'Due Diligence: {{enrich-company.company_name}}'
          body: '<h2>Company Profile</h2><p>Revenue: {{get-financials.REVENUE}}</p><p>Employees: {{enrich-company.employee_count}}</p><p>Industry: {{enrich-company.industry}}</p><h2>Conflict Check</h2><p>{{check-conflicts.totalSize}} existing accounts found.</p>'
  consumes:
  - type: http
    namespace: zoominfo
    baseUri: https://api.zoominfo.com
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: enrich
      path: /enrich/company
      operations:
      - name: enrich-company
        method: POST
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/datasets
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: companies
      path: /company/{{ticker}}
      inputParameters:
      - name: ticker
        in: path
      - name: fields
        in: query
      operations:
      - name: get-company-data
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://mckinsey.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query
      inputParameters:
      - name: q
        in: query
      operations:
      - name: query-accounts
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://mckinsey.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → client-due-diligence-orchestrator.yml

Reads data from a specified range in a Google Sheets spreadsheet. Used by analysts to pull engagement metrics, financial models, and tracking data.

naftiko: '0.5'
info:
  label: Google Sheets Data Reader
  description: Reads data from a specified range in a Google Sheets spreadsheet. Used by analysts to pull engagement metrics, financial models, and tracking data.
  tags:
  - analytics
  - data
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: sheets-reader
    port: 8080
    tools:
    - name: read-sheet-data
      description: Read data from a Google Sheets range.
      inputParameters:
      - name: spreadsheet_id
        in: body
        type: string
        description: Google Sheets spreadsheet ID.
      - name: range
        in: body
        type: string
        description: A1 notation range (e.g., Sheet1!A1:D10).
      call: gsheets.get-values
      with:
        spreadsheet_id: '{{spreadsheet_id}}'
        range: '{{range}}'
  consumes:
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: values
      path: /spreadsheets/{{spreadsheet_id}}/values/{{range}}
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: get-values
        method: GET
Open in Framework → View in Fleet → google-sheets-data-reader.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 27
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - slack
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-27
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-27
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#consulting'
          text: 'Completed workflow 27: {{process.summary}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-27
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-27.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 33
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - box
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-33
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-33
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: box.upload-file
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-33
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-33.yml

Pulls Adobe Analytics report data for McKinsey.com, ingests it into Databricks for processing, and notifies the analytics team via Slack when the pipeline completes.

naftiko: '0.5'
info:
  label: Adobe Analytics to Databricks Data Pipeline
  description: Pulls Adobe Analytics report data for McKinsey.com, ingests it into Databricks for processing, and notifies the analytics team via Slack when the pipeline completes.
  tags:
  - analytics
  - data-engineering
  - adobe-analytics
  - databricks
  - slack
capability:
  exposes:
  - type: mcp
    namespace: adobe-databricks-pipeline
    port: 8080
    tools:
    - name: run-adobe-pipeline
      description: Pull Adobe Analytics data, ingest into Databricks, and notify via Slack.
      inputParameters:
      - name: report_suite_id
        in: body
        type: string
        description: Adobe Analytics report suite ID.
      - name: start_date
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: End date in YYYY-MM-DD format.
      steps:
      - name: get-report
        type: call
        call: adobe.get-report
        with:
          rsid: '{{report_suite_id}}'
          dateFrom: '{{start_date}}'
          dateTo: '{{end_date}}'
          metrics: pageviews,visits,uniqueVisitors
      - name: ingest-data
        type: call
        call: databricks.run-job
        with:
          job_id: adobe-analytics-ingestion
          notebook_params: '{"rsid": "{{report_suite_id}}", "start": "{{start_date}}", "end": "{{end_date}}"}'
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: analytics-engineering
          text: 'Adobe Analytics data pipeline complete for {{report_suite_id}} ({{start_date}} to {{end_date}}). Databricks run: {{ingest-data.run_id}}.'
  consumes:
  - type: http
    namespace: adobe
    baseUri: https://analytics.adobe.io/api
    authentication:
      type: bearer
      token: $secrets.adobe_analytics_token
    inputParameters:
    - name: x-api-key
      in: header
      value: $secrets.adobe_api_key
    resources:
    - name: reports
      path: /{{rsid}}/reports
      inputParameters:
      - name: rsid
        in: path
      operations:
      - name: get-report
        method: POST
  - type: http
    namespace: databricks
    baseUri: https://mckinsey.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → adobe-analytics-to-databricks-data-pipeline.yml

Sets up a McKinsey event by creating the event in Cvent, generating a Confluence event page, scheduling reminders via Microsoft Teams, and posting the announcement to Slack.

naftiko: '0.5'
info:
  label: Cvent Event Setup Pipeline
  description: Sets up a McKinsey event by creating the event in Cvent, generating a Confluence event page, scheduling reminders via Microsoft Teams, and posting the announcement to Slack.
  tags:
  - events
  - conferences
  - cvent
  - confluence
  - microsoft-teams
  - slack
capability:
  exposes:
  - type: mcp
    namespace: event-setup
    port: 8080
    tools:
    - name: setup-event
      description: Set up an event across Cvent, Confluence, Teams, and Slack.
      inputParameters:
      - name: event_name
        in: body
        type: string
        description: Name of the event.
      - name: event_date
        in: body
        type: string
        description: Event date in ISO 8601 format.
      - name: venue
        in: body
        type: string
        description: Event venue.
      - name: organizer_email
        in: body
        type: string
        description: Organizer email.
      steps:
      - name: create-event
        type: call
        call: cvent.create-event
        with:
          name: '{{event_name}}'
          date: '{{event_date}}'
          venue: '{{venue}}'
      - name: create-page
        type: call
        call: confluence.create-page
        with:
          space_key: EVENTS
          title: '{{event_name}} - {{event_date}}'
          body: '<h2>{{event_name}}</h2><p>Date: {{event_date}}</p><p>Venue: {{venue}}</p><p>Registration: {{create-event.registration_url}}</p>'
      - name: schedule-reminder
        type: call
        call: msgraph.create-event
        with:
          organizer: '{{organizer_email}}'
          subject: 'Reminder: {{event_name}}'
          start: '{{event_date}}'
          end: '{{event_date}}'
          attendees: '{{organizer_email}}'
      - name: announce
        type: call
        call: slack.post-message
        with:
          channel: events
          text: 'New event: {{event_name}} on {{event_date}} at {{venue}}. Register: {{create-event.registration_url}}. Details: {{create-page.url}}'
  consumes:
  - type: http
    namespace: cvent
    baseUri: https://api-platform.cvent.com/ea
    authentication:
      type: bearer
      token: $secrets.cvent_token
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://mckinsey.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: events
      path: /users/{{organizer}}/events
      inputParameters:
      - name: organizer
        in: path
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → cvent-event-setup-pipeline.yml

Retrieves LinkedIn company profile data including employee count, industry, headquarters, and recent updates. Used by research analysts for client due diligence.

naftiko: '0.5'
info:
  label: LinkedIn Company Insights Lookup
  description: Retrieves LinkedIn company profile data including employee count, industry, headquarters, and recent updates. Used by research analysts for client due diligence.
  tags:
  - research
  - market-intelligence
  - linkedin
capability:
  exposes:
  - type: mcp
    namespace: linkedin-research
    port: 8080
    tools:
    - name: get-company-profile
      description: Retrieve LinkedIn company profile by organization ID. Returns employee count, industry, and headquarters.
      inputParameters:
      - name: organization_id
        in: body
        type: string
        description: LinkedIn organization ID.
      call: linkedin.get-organization
      with:
        organization_id: '{{organization_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.localizedName
      - name: employee_count
        type: integer
        mapping: $.staffCount
      - name: industry
        type: string
        mapping: $.localizedIndustry
      - name: headquarters
        type: string
        mapping: $.locations[0].city
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: organizations
      path: /organizations/{{organization_id}}
      inputParameters:
      - name: organization_id
        in: path
      operations:
      - name: get-organization
        method: GET
Open in Framework → View in Fleet → linkedin-company-insights-lookup.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 32
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-32
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-32
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: tableau.publish-datasource
        with:
          dataset_id: workflow_32
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-32
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://mckinsey-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-32.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 26
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-26
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-26
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-26
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://mckinsey.service-now.com/api/now/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-26.yml

On engagement closeout, extracts key lessons from the Confluence engagement space, tags and indexes them in Elasticsearch, and notifies the knowledge management team via Slack.

naftiko: '0.5'
info:
  label: Knowledge Capture from Engagement Closeout
  description: On engagement closeout, extracts key lessons from the Confluence engagement space, tags and indexes them in Elasticsearch, and notifies the knowledge management team via Slack.
  tags:
  - knowledge-management
  - search
  - confluence
  - elasticsearch
  - slack
capability:
  exposes:
  - type: mcp
    namespace: knowledge-capture
    port: 8080
    tools:
    - name: capture-lessons
      description: Extract lessons learned from a Confluence engagement space, index in Elasticsearch, and notify the KM team.
      inputParameters:
      - name: space_key
        in: body
        type: string
        description: Confluence space key for the engagement.
      - name: engagement_name
        in: body
        type: string
        description: Name of the engagement.
      - name: industry
        in: body
        type: string
        description: Industry vertical.
      - name: capability_area
        in: body
        type: string
        description: Capability area (e.g., digital, operations, strategy).
      steps:
      - name: get-pages
        type: call
        call: confluence.search-content
        with:
          cql: space={{space_key}} AND label="lessons-learned"
          limit: '50'
      - name: index-lessons
        type: call
        call: elasticsearch.bulk-index
        with:
          index: knowledge-base
          documents: '{{get-pages.results}}'
          metadata: '{"engagement": "{{engagement_name}}", "industry": "{{industry}}", "capability": "{{capability_area}}"}'
      - name: notify-km
        type: call
        call: slack.post-message
        with:
          channel: knowledge-management
          text: '{{get-pages.totalSize}} lessons captured from {{engagement_name}} ({{industry}}/{{capability_area}}). Indexed in knowledge base.'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://mckinsey.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: search
      path: /search
      inputParameters:
      - name: cql
        in: query
      - name: limit
        in: query
      operations:
      - name: search-content
        method: GET
  - type: http
    namespace: elasticsearch
    baseUri: https://es.mckinsey.com
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: bulk
      path: /{{index}}/_bulk
      inputParameters:
      - name: index
        in: path
      operations:
      - name: bulk-index
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → knowledge-capture-from-engagement-closeout.yml

Runs the semi-annual talent review by pulling performance data from Workday, aggregating feedback from Google Forms, generating a summary deck in Google Slides, and scheduling the review meeting via Microsoft Teams.

naftiko: '0.5'
info:
  label: Talent Review Pipeline
  description: Runs the semi-annual talent review by pulling performance data from Workday, aggregating feedback from Google Forms, generating a summary deck in Google Slides, and scheduling the review meeting via Microsoft Teams.
  tags:
  - talent
  - performance-management
  - workday
  - google-forms
  - google-slides
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: talent-review
    port: 8080
    tools:
    - name: prepare-talent-review
      description: Prepare talent review materials by pulling performance data, aggregating feedback, creating a deck, and scheduling the meeting.
      inputParameters:
      - name: practice_area
        in: body
        type: string
        description: Practice area for the review.
      - name: review_period
        in: body
        type: string
        description: Review period (e.g., H1-2026).
      - name: review_panel_emails
        in: body
        type: string
        description: Comma-separated emails of review panel members.
      steps:
      - name: get-performance
        type: call
        call: workday.get-performance-reviews
        with:
          practice: '{{practice_area}}'
          period: '{{review_period}}'
      - name: get-feedback
        type: call
        call: gforms.list-responses
        with:
          form_id: talent-feedback-form
      - name: create-deck
        type: call
        call: gslides.create-presentation
        with:
          title: 'Talent Review: {{practice_area}} - {{review_period}}'
      - name: schedule-review
        type: call
        call: msgraph.create-event
        with:
          organizer: talent-ops@mckinsey.com
          subject: 'Talent Review: {{practice_area}} {{review_period}}'
          attendees: '{{review_panel_emails}}'
          start: '{{review_period}}-review-start'
          end: '{{review_period}}-review-end'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1/mckinsey
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: performance
      path: /performanceManagement/reviews
      inputParameters:
      - name: practice
        in: query
      - name: period
        in: query
      operations:
      - name: get-performance-reviews
        method: GET
  - type: http
    namespace: gforms
    baseUri: https://forms.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: responses
      path: /forms/{{form_id}}/responses
      inputParameters:
      - name: form_id
        in: path
      operations:
      - name: list-responses
        method: GET
  - type: http
    namespace: gslides
    baseUri: https://slides.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: presentations
      path: /presentations
      operations:
      - name: create-presentation
        method: POST
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: events
      path: /users/{{organizer}}/events
      inputParameters:
      - name: organizer
        in: path
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → talent-review-pipeline.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 22
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-22
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-22
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: sharepoint.upload-document
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-22
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://mckinsey.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: upload-document
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-22.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 23
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-23
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-23
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: hubspot.send-email
        with:
          to: '{{process.email}}'
          subject: Workflow 23 Complete
          body: '{{process.summary}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-23
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-23.yml

Retrieves operational data for Mckinsey consulting workflows.

naftiko: '0.5'
info:
  label: Mckinsey Data Lookup 9
  description: Retrieves operational data for Mckinsey consulting workflows.
  tags:
  - consulting
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mckinsey-data
    port: 8080
    tools:
    - name: get-data-9
      description: Retrieves operational data for Mckinsey consulting workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mckinsey-data.get-data-9
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mckinsey-data
    baseUri: https://api.mckinsey.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: data-9
      path: /data-9/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-9
        method: GET
Open in Framework → View in Fleet → mckinsey-data-lookup-9.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 35
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-35
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-35
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: hubspot.send-email
        with:
          to: '{{process.email}}'
          subject: Workflow 35 Complete
          body: '{{process.summary}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-35
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-35.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 21
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - box
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-21
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-21
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: box.upload-file
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-21
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-21.yml

Posts a message to a specified Slack channel. Used across functions for notifications, alerts, and team communications.

naftiko: '0.5'
info:
  label: Slack Channel Message Post
  description: Posts a message to a specified Slack channel. Used across functions for notifications, alerts, and team communications.
  tags:
  - communications
  - notifications
  - slack
capability:
  exposes:
  - type: mcp
    namespace: slack-messaging
    port: 8080
    tools:
    - name: post-channel-message
      description: Post a message to a Slack channel by channel name.
      inputParameters:
      - name: channel
        in: body
        type: string
        description: Slack channel name or ID.
      - name: message_text
        in: body
        type: string
        description: The message text to post.
      call: slack.post-message
      with:
        channel: '{{channel}}'
        text: '{{message_text}}'
  consumes:
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → slack-channel-message-post.yml

When an engagement risk flag is raised, creates a Salesforce case, escalates via ServiceNow priority ticket, alerts the risk committee in Microsoft Teams, and documents the issue in Confluence.

naftiko: '0.5'
info:
  label: Engagement Risk Escalation Pipeline
  description: When an engagement risk flag is raised, creates a Salesforce case, escalates via ServiceNow priority ticket, alerts the risk committee in Microsoft Teams, and documents the issue in Confluence.
  tags:
  - risk-management
  - consulting
  - salesforce
  - servicenow
  - microsoft-teams
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: risk-escalation
    port: 8080
    tools:
    - name: escalate-risk
      description: Escalate an engagement risk across Salesforce, ServiceNow, Teams, and Confluence.
      inputParameters:
      - name: engagement_id
        in: body
        type: string
        description: Engagement identifier.
      - name: risk_description
        in: body
        type: string
        description: Description of the risk.
      - name: severity
        in: body
        type: string
        description: Risk severity (high, critical).
      - name: engagement_space_key
        in: body
        type: string
        description: Confluence space key.
      steps:
      - name: create-case
        type: call
        call: salesforce.create-case
        with:
          Subject: 'Risk Escalation: {{engagement_id}}'
          Description: '{{risk_description}}'
          Priority: '{{severity}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Engagement risk: {{engagement_id}} - {{severity}}'
          description: '{{risk_description}}'
          priority: '1'
          assigned_group: Risk_Committee
      - name: alert-committee
        type: call
        call: msteams.send-message
        with:
          channel_id: risk-committee
          text: 'RISK ESCALATION [{{severity}}]: Engagement {{engagement_id}}. {{risk_description}}. Case: {{create-case.id}}. Ticket: {{create-ticket.number}}.'
      - name: document-risk
        type: call
        call: confluence.create-page
        with:
          space_key: '{{engagement_space_key}}'
          title: 'Risk Escalation: {{engagement_id}} - {{severity}}'
          body: '<h2>Risk Details</h2><p>{{risk_description}}</p><p>Severity: {{severity}}</p><p>SF Case: {{create-case.id}}</p><p>SN Ticket: {{create-ticket.number}}</p>'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://mckinsey.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://mckinsey.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/General/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://mckinsey.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → engagement-risk-escalation-pipeline.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 20
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-20
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-20
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: tableau.publish-datasource
        with:
          dataset_id: workflow_20
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-20
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://mckinsey-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-20.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 34
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-34
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-34
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: sharepoint.upload-document
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-34
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://mckinsey.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: upload-document
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-34.yml

Retrieves operational data for Mckinsey consulting workflows.

naftiko: '0.5'
info:
  label: Mckinsey Data Lookup 8
  description: Retrieves operational data for Mckinsey consulting workflows.
  tags:
  - consulting
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mckinsey-data
    port: 8080
    tools:
    - name: get-data-8
      description: Retrieves operational data for Mckinsey consulting workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mckinsey-data.get-data-8
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mckinsey-data
    baseUri: https://api.mckinsey.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: data-8
      path: /data-8/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-8
        method: GET
Open in Framework → View in Fleet → mckinsey-data-lookup-8.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 11
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-11
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-11
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: hubspot.send-email
        with:
          to: '{{process.email}}'
          subject: Workflow 11 Complete
          body: '{{process.summary}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-11
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-11.yml

Retrieves operational data for Mckinsey consulting workflows.

naftiko: '0.5'
info:
  label: Mckinsey Data Lookup 5
  description: Retrieves operational data for Mckinsey consulting workflows.
  tags:
  - consulting
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mckinsey-data
    port: 8080
    tools:
    - name: get-data-5
      description: Retrieves operational data for Mckinsey consulting workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mckinsey-data.get-data-5
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mckinsey-data
    baseUri: https://api.mckinsey.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: data-5
      path: /data-5/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-5
        method: GET
Open in Framework → View in Fleet → mckinsey-data-lookup-5.yml

Triggers a refresh of a Tableau workbook by workbook ID. Used by analytics teams to ensure client-facing dashboards reflect the latest data before presentations.

naftiko: '0.5'
info:
  label: Tableau Dashboard Refresh
  description: Triggers a refresh of a Tableau workbook by workbook ID. Used by analytics teams to ensure client-facing dashboards reflect the latest data before presentations.
  tags:
  - analytics
  - visualization
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: analytics-refresh
    port: 8080
    tools:
    - name: refresh-workbook
      description: Trigger a data refresh for a Tableau workbook by ID.
      inputParameters:
      - name: workbook_id
        in: body
        type: string
        description: The Tableau workbook ID.
      call: tableau.refresh-workbook
      with:
        workbook_id: '{{workbook_id}}'
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://tableau.mckinsey.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/{{site_id}}/workbooks/{{workbook_id}}/refresh
      inputParameters:
      - name: site_id
        in: path
        value: mckinsey-main
      - name: workbook_id
        in: path
      operations:
      - name: refresh-workbook
        method: POST
Open in Framework → View in Fleet → tableau-dashboard-refresh.yml

Retrieves operational data for Mckinsey consulting workflows.

naftiko: '0.5'
info:
  label: Mckinsey Data Lookup 4
  description: Retrieves operational data for Mckinsey consulting workflows.
  tags:
  - consulting
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mckinsey-data
    port: 8080
    tools:
    - name: get-data-4
      description: Retrieves operational data for Mckinsey consulting workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mckinsey-data.get-data-4
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mckinsey-data
    baseUri: https://api.mckinsey.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: data-4
      path: /data-4/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-4
        method: GET
Open in Framework → View in Fleet → mckinsey-data-lookup-4.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 10
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-10
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-10
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: sharepoint.upload-document
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-10
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://mckinsey.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: upload-document
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-10.yml

Retrieves operational data for Mckinsey consulting workflows.

naftiko: '0.5'
info:
  label: Mckinsey Data Lookup 14
  description: Retrieves operational data for Mckinsey consulting workflows.
  tags:
  - consulting
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mckinsey-data
    port: 8080
    tools:
    - name: get-data-14
      description: Retrieves operational data for Mckinsey consulting workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mckinsey-data.get-data-14
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mckinsey-data
    baseUri: https://api.mckinsey.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: data-14
      path: /data-14/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-14
        method: GET
Open in Framework → View in Fleet → mckinsey-data-lookup-14.yml

Retrieves a Zoom meeting recording, uploads it to Google Drive for long-term storage, creates a Confluence page linking to the recording, and notifies the team via Slack.

naftiko: '0.5'
info:
  label: Zoom Recording Archive Pipeline
  description: Retrieves a Zoom meeting recording, uploads it to Google Drive for long-term storage, creates a Confluence page linking to the recording, and notifies the team via Slack.
  tags:
  - collaboration
  - archiving
  - zoom
  - google-drive
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: recording-archive
    port: 8080
    tools:
    - name: archive-recording
      description: Archive a Zoom recording to Google Drive, document in Confluence, and notify via Slack.
      inputParameters:
      - name: meeting_id
        in: body
        type: string
        description: Zoom meeting ID.
      - name: drive_folder_id
        in: body
        type: string
        description: Google Drive folder ID for recordings.
      - name: space_key
        in: body
        type: string
        description: Confluence space key.
      steps:
      - name: get-recording
        type: call
        call: zoom.get-recordings
        with:
          meeting_id: '{{meeting_id}}'
      - name: upload-to-drive
        type: call
        call: gdrive.upload-file
        with:
          folder_id: '{{drive_folder_id}}'
          name: '{{get-recording.topic}}_recording.mp4'
          mimeType: video/mp4
      - name: create-page
        type: call
        call: confluence.create-page
        with:
          space_key: '{{space_key}}'
          title: 'Recording: {{get-recording.topic}}'
          body: '<p>Meeting: {{get-recording.topic}}</p><p>Duration: {{get-recording.duration}} minutes</p><p>Recording: {{upload-to-drive.webViewLink}}</p>'
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: recordings
          text: 'Recording archived: {{get-recording.topic}}. Drive: {{upload-to-drive.webViewLink}}. Confluence: {{create-page.url}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_token
    resources:
    - name: recordings
      path: /meetings/{{meeting_id}}/recordings
      inputParameters:
      - name: meeting_id
        in: path
      operations:
      - name: get-recordings
        method: GET
  - type: http
    namespace: gdrive
    baseUri: https://www.googleapis.com/upload/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: files
      path: /files
      inputParameters:
      - name: uploadType
        in: query
        value: multipart
      operations:
      - name: upload-file
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://mckinsey.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → zoom-recording-archive-pipeline.yml

Resolves a ServiceNow incident by updating its state and resolution notes, then documents the resolution in Confluence and notifies the team via Slack.

naftiko: '0.5'
info:
  label: ServiceNow Incident Resolution with Confluence Documentation
  description: Resolves a ServiceNow incident by updating its state and resolution notes, then documents the resolution in Confluence and notifies the team via Slack.
  tags:
  - it-support
  - incident-management
  - servicenow
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: incident-resolution
    port: 8080
    tools:
    - name: resolve-incident
      description: Resolve a ServiceNow incident, document in Confluence, and notify via Slack.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number.
      - name: resolution_notes
        in: body
        type: string
        description: Resolution notes.
      - name: space_key
        in: body
        type: string
        description: Confluence space key for documentation.
      steps:
      - name: resolve-ticket
        type: call
        call: servicenow.update-incident
        with:
          number: '{{incident_number}}'
          state: resolved
          close_notes: '{{resolution_notes}}'
      - name: document-resolution
        type: call
        call: confluence.create-page
        with:
          space_key: '{{space_key}}'
          title: 'Resolution: {{incident_number}}'
          body: <h2>Incident {{incident_number}}</h2><p>{{resolution_notes}}</p>
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: it-operations
          text: 'Incident {{incident_number}} resolved. Notes: {{resolution_notes}}. Documentation: {{document-resolution.url}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://mckinsey.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      inputParameters:
      - name: number
        in: query
      operations:
      - name: update-incident
        method: PATCH
  - type: http
    namespace: confluence
    baseUri: https://mckinsey.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-incident-resolution-with-confluence-documentation.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 12
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-12
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-12
        with:
          identifier: '{{identifier}}'
      - name: push
        type: call
        call: datadog.submit-metrics
        with:
          metric_name: consulting.workflow_12
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-12
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_token
    resources:
    - name: metrics
      path: /metrics
      operations:
      - name: submit-metrics
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-12.yml

Retrieves operational data for Mckinsey consulting workflows.

naftiko: '0.5'
info:
  label: Mckinsey Data Lookup 6
  description: Retrieves operational data for Mckinsey consulting workflows.
  tags:
  - consulting
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mckinsey-data
    port: 8080
    tools:
    - name: get-data-6
      description: Retrieves operational data for Mckinsey consulting workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mckinsey-data.get-data-6
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mckinsey-data
    baseUri: https://api.mckinsey.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: data-6
      path: /data-6/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-6
        method: GET
Open in Framework → View in Fleet → mckinsey-data-lookup-6.yml

Retrieves a HubSpot contact by email address. Returns name, company, lifecycle stage, and last activity date. Used by business development for lead qualification.

naftiko: '0.5'
info:
  label: HubSpot Contact Lookup
  description: Retrieves a HubSpot contact by email address. Returns name, company, lifecycle stage, and last activity date. Used by business development for lead qualification.
  tags:
  - business-development
  - crm
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: hubspot-contacts
    port: 8080
    tools:
    - name: get-contact-by-email
      description: Look up a HubSpot contact by email. Returns name, company, lifecycle stage, and last activity.
      inputParameters:
      - name: email
        in: body
        type: string
        description: Contact email address.
      call: hubspot.get-contact
      with:
        email: '{{email}}'
      outputParameters:
      - name: first_name
        type: string
        mapping: $.properties.firstname
      - name: last_name
        type: string
        mapping: $.properties.lastname
      - name: company
        type: string
        mapping: $.properties.company
      - name: lifecycle_stage
        type: string
        mapping: $.properties.lifecyclestage
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /objects/contacts/{{email}}
      inputParameters:
      - name: email
        in: path
      - name: idProperty
        in: query
        value: email
      operations:
      - name: get-contact
        method: GET
Open in Framework → View in Fleet → hubspot-contact-lookup.yml

Retrieves operational data for Mckinsey consulting workflows.

naftiko: '0.5'
info:
  label: Mckinsey Data Lookup 7
  description: Retrieves operational data for Mckinsey consulting workflows.
  tags:
  - consulting
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mckinsey-data
    port: 8080
    tools:
    - name: get-data-7
      description: Retrieves operational data for Mckinsey consulting workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mckinsey-data.get-data-7
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mckinsey-data
    baseUri: https://api.mckinsey.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: data-7
      path: /data-7/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-7
        method: GET
Open in Framework → View in Fleet → mckinsey-data-lookup-7.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 13
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-13
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-13
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-13
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://mckinsey.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-13.yml

Searches the McKinsey Confluence knowledge base for articles matching a query string. Returns top results with titles, excerpts, and links for consultant self-service research.

naftiko: '0.5'
info:
  label: Knowledge Article Search
  description: Searches the McKinsey Confluence knowledge base for articles matching a query string. Returns top results with titles, excerpts, and links for consultant self-service research.
  tags:
  - knowledge-management
  - research
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: knowledge-search
    port: 8080
    tools:
    - name: search-articles
      description: Search Confluence knowledge base for articles matching a query. Returns titles, excerpts, and URLs.
      inputParameters:
      - name: query
        in: body
        type: string
        description: The search query string.
      - name: max_results
        in: body
        type: integer
        description: Maximum number of results to return.
      call: confluence.search-content
      with:
        cql: type=page AND text~"{{query}}"
        limit: '{{max_results}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://mckinsey.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: search
      path: /search
      inputParameters:
      - name: cql
        in: query
      - name: limit
        in: query
      operations:
      - name: search-content
        method: GET
Open in Framework → View in Fleet → knowledge-article-search.yml

Retrieves operational data for Mckinsey consulting workflows.

naftiko: '0.5'
info:
  label: Mckinsey Data Lookup 15
  description: Retrieves operational data for Mckinsey consulting workflows.
  tags:
  - consulting
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mckinsey-data
    port: 8080
    tools:
    - name: get-data-15
      description: Retrieves operational data for Mckinsey consulting workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mckinsey-data.get-data-15
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mckinsey-data
    baseUri: https://api.mckinsey.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: data-15
      path: /data-15/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-15
        method: GET
Open in Framework → View in Fleet → mckinsey-data-lookup-15.yml

Retrieves operational data for Mckinsey consulting workflows.

naftiko: '0.5'
info:
  label: Mckinsey Data Lookup 11
  description: Retrieves operational data for Mckinsey consulting workflows.
  tags:
  - consulting
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mckinsey-data
    port: 8080
    tools:
    - name: get-data-11
      description: Retrieves operational data for Mckinsey consulting workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mckinsey-data.get-data-11
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mckinsey-data
    baseUri: https://api.mckinsey.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: data-11
      path: /data-11/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-11
        method: GET
Open in Framework → View in Fleet → mckinsey-data-lookup-11.yml

Generates a weekly status report by pulling active engagements from Salesforce, collecting time entries from Workday, building a summary in Google Sheets, and distributing via Microsoft Teams.

naftiko: '0.5'
info:
  label: Weekly Engagement Status Report Generator
  description: Generates a weekly status report by pulling active engagements from Salesforce, collecting time entries from Workday, building a summary in Google Sheets, and distributing via Microsoft Teams.
  tags:
  - reporting
  - engagement-management
  - salesforce
  - workday
  - google-sheets
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: status-reporting
    port: 8080
    tools:
    - name: generate-weekly-report
      description: Generate a weekly engagement status report pulling from Salesforce, Workday, and Google Sheets, then distribute via Teams.
      inputParameters:
      - name: report_week
        in: body
        type: string
        description: Week start date in YYYY-MM-DD format.
      - name: practice_area
        in: body
        type: string
        description: Practice area to report on.
      - name: distribution_channel
        in: body
        type: string
        description: Teams channel ID for distribution.
      steps:
      - name: get-engagements
        type: call
        call: salesforce.query-opportunities
        with:
          q: SELECT Id, Name, Account.Name, StageName FROM Opportunity WHERE StageName='Active' AND Practice__c='{{practice_area}}'
      - name: get-hours
        type: call
        call: workday.get-time-entries
        with:
          practice: '{{practice_area}}'
          week_start: '{{report_week}}'
      - name: update-sheet
        type: call
        call: gsheets.update-values
        with:
          spreadsheet_id: weekly-status-template
          range: WeeklyData!A2
          values: '{{get-engagements.records}}'
      - name: distribute-report
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{distribution_channel}}'
          text: 'Weekly Status Report for {{practice_area}} (week of {{report_week}}): {{get-engagements.totalSize}} active engagements. Spreadsheet: {{update-sheet.spreadsheetUrl}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://mckinsey.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query
      inputParameters:
      - name: q
        in: query
      operations:
      - name: query-opportunities
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1/mckinsey
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: time-entries
      path: /timeTracking/entries
      inputParameters:
      - name: practice
        in: query
      - name: week_start
        in: query
      operations:
      - name: get-time-entries
        method: GET
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: values
      path: /spreadsheets/{{spreadsheet_id}}/values/{{range}}
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: update-values
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/General/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → weekly-engagement-status-report-generator.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 17
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-17
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-17
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: workflow_17
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-17
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-17.yml

Retrieves operational data for Mckinsey consulting workflows.

naftiko: '0.5'
info:
  label: Mckinsey Data Lookup 3
  description: Retrieves operational data for Mckinsey consulting workflows.
  tags:
  - consulting
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mckinsey-data
    port: 8080
    tools:
    - name: get-data-3
      description: Retrieves operational data for Mckinsey consulting workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mckinsey-data.get-data-3
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mckinsey-data
    baseUri: https://api.mckinsey.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: data-3
      path: /data-3/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-3
        method: GET
Open in Framework → View in Fleet → mckinsey-data-lookup-3.yml

Retrieves an expense report from SAP Concur by report ID. Returns total amount, approval status, and currency. Used by finance teams for engagement cost tracking.

naftiko: '0.5'
info:
  label: SAP Concur Expense Report Lookup
  description: Retrieves an expense report from SAP Concur by report ID. Returns total amount, approval status, and currency. Used by finance teams for engagement cost tracking.
  tags:
  - finance
  - expense-management
  - sap-concur
capability:
  exposes:
  - type: mcp
    namespace: expense-tracking
    port: 8080
    tools:
    - name: get-expense-report
      description: Look up an SAP Concur expense report by report ID.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: SAP Concur expense report ID.
      call: concur.get-report
      with:
        report_id: '{{report_id}}'
      outputParameters:
      - name: total
        type: string
        mapping: $.Total
      - name: status
        type: string
        mapping: $.ApprovalStatusName
      - name: currency
        type: string
        mapping: $.CurrencyCode
      - name: submit_date
        type: string
        mapping: $.SubmitDate
  consumes:
  - type: http
    namespace: concur
    baseUri: https://us.api.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: reports
      path: /expense/reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-report
        method: GET
Open in Framework → View in Fleet → sap-concur-expense-report-lookup.yml

Retrieves operational data for Mckinsey consulting workflows.

naftiko: '0.5'
info:
  label: Mckinsey Data Lookup 2
  description: Retrieves operational data for Mckinsey consulting workflows.
  tags:
  - consulting
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mckinsey-data
    port: 8080
    tools:
    - name: get-data-2
      description: Retrieves operational data for Mckinsey consulting workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mckinsey-data.get-data-2
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mckinsey-data
    baseUri: https://api.mckinsey.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: data-2
      path: /data-2/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-2
        method: GET
Open in Framework → View in Fleet → mckinsey-data-lookup-2.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 16
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-16
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-16
        with:
          identifier: '{{identifier}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space: CONSUL
          title: Report 16
          content: '{{process.report}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-16
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://mckinsey.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-16.yml

Delivers sales enablement content by finding relevant materials in Seismic, generating a personalized share link, logging the interaction in Salesforce, and notifying the business development lead via Microsoft Teams.

naftiko: '0.5'
info:
  label: Seismic Content Delivery Pipeline
  description: Delivers sales enablement content by finding relevant materials in Seismic, generating a personalized share link, logging the interaction in Salesforce, and notifying the business development lead via Microsoft Teams.
  tags:
  - business-development
  - sales-enablement
  - seismic
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: content-delivery
    port: 8080
    tools:
    - name: deliver-content
      description: Find and deliver Seismic content to a prospect, log in Salesforce, and notify the BD lead.
      inputParameters:
      - name: content_query
        in: body
        type: string
        description: Search query for Seismic content.
      - name: prospect_email
        in: body
        type: string
        description: Prospect email address.
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID.
      - name: bd_lead_upn
        in: body
        type: string
        description: BD lead Microsoft Teams UPN.
      steps:
      - name: find-content
        type: call
        call: seismic.search-content
        with:
          query: '{{content_query}}'
      - name: create-link
        type: call
        call: seismic.create-share-link
        with:
          content_id: '{{find-content.results[0].id}}'
          recipient_email: '{{prospect_email}}'
      - name: log-activity
        type: call
        call: salesforce.create-task
        with:
          WhatId: '{{opportunity_id}}'
          Subject: 'Content shared: {{find-content.results[0].title}}'
          Description: 'Shared {{find-content.results[0].title}} with {{prospect_email}} via Seismic: {{create-link.url}}'
      - name: notify-bd
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{bd_lead_upn}}'
          text: 'Content shared with {{prospect_email}}: {{find-content.results[0].title}}. Link: {{create-link.url}}. Logged to opportunity {{opportunity_id}}.'
  consumes:
  - type: http
    namespace: seismic
    baseUri: https://api.seismic.com/integration/v2
    authentication:
      type: bearer
      token: $secrets.seismic_token
    resources:
    - name: content-search
      path: /content/search
      inputParameters:
      - name: query
        in: query
      operations:
      - name: search-content
        method: GET
    - name: share-links
      path: /content/shareLinks
      operations:
      - name: create-share-link
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://mckinsey.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: tasks
      path: /sobjects/Task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chat-messages
      path: /users/{{recipient_upn}}/chats
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → seismic-content-delivery-pipeline.yml

Retrieves operational data for Mckinsey consulting workflows.

naftiko: '0.5'
info:
  label: Mckinsey Data Lookup 10
  description: Retrieves operational data for Mckinsey consulting workflows.
  tags:
  - consulting
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mckinsey-data
    port: 8080
    tools:
    - name: get-data-10
      description: Retrieves operational data for Mckinsey consulting workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mckinsey-data.get-data-10
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mckinsey-data
    baseUri: https://api.mckinsey.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: data-10
      path: /data-10/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-10
        method: GET
Open in Framework → View in Fleet → mckinsey-data-lookup-10.yml

On engagement completion, updates the Salesforce opportunity to Closed Won, archives the Confluence space, sends a closeout summary to Slack, and triggers a client feedback survey via Microsoft Graph.

naftiko: '0.5'
info:
  label: Engagement Closeout Orchestrator
  description: On engagement completion, updates the Salesforce opportunity to Closed Won, archives the Confluence space, sends a closeout summary to Slack, and triggers a client feedback survey via Microsoft Graph.
  tags:
  - consulting
  - engagement-lifecycle
  - salesforce
  - confluence
  - slack
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: engagement-closeout
    port: 8080
    tools:
    - name: close-engagement
      description: Close an engagement by updating Salesforce, archiving Confluence, notifying Slack, and sending a feedback survey.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID.
      - name: space_key
        in: body
        type: string
        description: Confluence space key for the engagement.
      - name: client_email
        in: body
        type: string
        description: Client contact email for the feedback survey.
      - name: engagement_name
        in: body
        type: string
        description: Name of the engagement.
      steps:
      - name: update-opp
        type: call
        call: salesforce.update-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
          StageName: Closed Won
      - name: archive-space
        type: call
        call: confluence.archive-space
        with:
          space_key: '{{space_key}}'
      - name: send-survey
        type: call
        call: msgraph.send-mail
        with:
          to: '{{client_email}}'
          subject: 'McKinsey Engagement Feedback: {{engagement_name}}'
          body: Thank you for partnering with McKinsey on {{engagement_name}}. Please complete our brief feedback survey to help us improve.
      - name: notify-closeout
        type: call
        call: slack.post-message
        with:
          channel: engagement-closeouts
          text: Engagement {{engagement_name}} ({{opportunity_id}}) closed. Confluence archived. Feedback survey sent to {{client_email}}.
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://mckinsey.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://mckinsey.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: spaces
      path: /space/{{space_key}}
      inputParameters:
      - name: space_key
        in: path
      operations:
      - name: archive-space
        method: PUT
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/noreply@mckinsey.com/sendMail
      operations:
      - name: send-mail
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → engagement-closeout-orchestrator.yml

Retrieves operational data for Mckinsey consulting workflows.

naftiko: '0.5'
info:
  label: Mckinsey Data Lookup 12
  description: Retrieves operational data for Mckinsey consulting workflows.
  tags:
  - consulting
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mckinsey-data
    port: 8080
    tools:
    - name: get-data-12
      description: Retrieves operational data for Mckinsey consulting workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mckinsey-data.get-data-12
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mckinsey-data
    baseUri: https://api.mckinsey.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: data-12
      path: /data-12/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-12
        method: GET
Open in Framework → View in Fleet → mckinsey-data-lookup-12.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 28
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-28
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-28
        with:
          identifier: '{{identifier}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space: CONSUL
          title: Report 28
          content: '{{process.report}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-28
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://mckinsey.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-28.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 14
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-14
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-14
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-14
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://mckinsey.service-now.com/api/now/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-14.yml

When a Google Form client feedback submission arrives, parses the response, logs it in Salesforce as a survey record, generates a summary in Confluence, and alerts the engagement partner via Slack.

naftiko: '0.5'
info:
  label: Client Feedback Intake Pipeline
  description: When a Google Form client feedback submission arrives, parses the response, logs it in Salesforce as a survey record, generates a summary in Confluence, and alerts the engagement partner via Slack.
  tags:
  - client-experience
  - feedback
  - google-forms
  - salesforce
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: feedback-intake
    port: 8080
    tools:
    - name: process-feedback
      description: 'Process a client feedback form submission: log in Salesforce, summarize in Confluence, alert via Slack.'
      inputParameters:
      - name: form_response_id
        in: body
        type: string
        description: Google Form response ID.
      - name: form_id
        in: body
        type: string
        description: Google Form ID.
      - name: engagement_id
        in: body
        type: string
        description: Associated engagement ID.
      - name: partner_channel
        in: body
        type: string
        description: Slack channel for the engagement partner.
      steps:
      - name: get-response
        type: call
        call: gforms.get-response
        with:
          form_id: '{{form_id}}'
          response_id: '{{form_response_id}}'
      - name: log-feedback
        type: call
        call: salesforce.create-survey
        with:
          Engagement__c: '{{engagement_id}}'
          Overall_Rating__c: '{{get-response.answers.rating}}'
          Comments__c: '{{get-response.answers.comments}}'
      - name: create-summary
        type: call
        call: confluence.create-page
        with:
          space_key: FEEDBACK
          title: Client Feedback - {{engagement_id}} - {{get-response.respondentEmail}}
          body: 'Rating: {{get-response.answers.rating}}. Comments: {{get-response.answers.comments}}'
      - name: alert-partner
        type: call
        call: slack.post-message
        with:
          channel: '{{partner_channel}}'
          text: 'New client feedback for engagement {{engagement_id}}: Rating {{get-response.answers.rating}}/5. Details: {{create-summary.url}}'
  consumes:
  - type: http
    namespace: gforms
    baseUri: https://forms.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: responses
      path: /forms/{{form_id}}/responses/{{response_id}}
      inputParameters:
      - name: form_id
        in: path
      - name: response_id
        in: path
      operations:
      - name: get-response
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://mckinsey.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: surveys
      path: /sobjects/Survey_Response__c
      operations:
      - name: create-survey
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://mckinsey.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → client-feedback-intake-pipeline.yml

Retrieves operational data for Mckinsey consulting workflows.

naftiko: '0.5'
info:
  label: Mckinsey Data Lookup 1
  description: Retrieves operational data for Mckinsey consulting workflows.
  tags:
  - consulting
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mckinsey-data
    port: 8080
    tools:
    - name: get-data-1
      description: Retrieves operational data for Mckinsey consulting workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mckinsey-data.get-data-1
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mckinsey-data
    baseUri: https://api.mckinsey.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: data-1
      path: /data-1/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-1
        method: GET
Open in Framework → View in Fleet → mckinsey-data-lookup-1.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 15
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - slack
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-15
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-15
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#consulting'
          text: 'Completed workflow 15: {{process.summary}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-15
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-15.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 29
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-29
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-29
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: workflow_29
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-29
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-29.yml

Retrieves operational data for Mckinsey consulting workflows.

naftiko: '0.5'
info:
  label: Mckinsey Data Lookup 13
  description: Retrieves operational data for Mckinsey consulting workflows.
  tags:
  - consulting
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mckinsey-data
    port: 8080
    tools:
    - name: get-data-13
      description: Retrieves operational data for Mckinsey consulting workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: mckinsey-data.get-data-13
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: mckinsey-data
    baseUri: https://api.mckinsey.com/data/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: data-13
      path: /data-13/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-13
        method: GET
Open in Framework → View in Fleet → mckinsey-data-lookup-13.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 7
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - teams
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-7
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-7
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: teams.send-message
        with:
          channel_id: consulting
          message: 'Workflow 7 complete: {{process.summary}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-7
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-7.yml

Builds an engagement health dashboard by pulling active engagements from Salesforce, expenses from SAP Concur, time tracking from Workday, and rendering the dashboard in Tableau with a Slack notification.

naftiko: '0.5'
info:
  label: Engagement Health Dashboard Pipeline
  description: Builds an engagement health dashboard by pulling active engagements from Salesforce, expenses from SAP Concur, time tracking from Workday, and rendering the dashboard in Tableau with a Slack notification.
  tags:
  - consulting
  - reporting
  - salesforce
  - sap-concur
  - workday
  - tableau
  - slack
capability:
  exposes:
  - type: mcp
    namespace: engagement-health
    port: 8080
    tools:
    - name: build-health-dashboard
      description: Build an engagement health dashboard from Salesforce, Concur, Workday, and Tableau.
      inputParameters:
      - name: practice_area
        in: body
        type: string
        description: Practice area to report on.
      - name: reporting_period
        in: body
        type: string
        description: Reporting period (e.g., 2026-Q1).
      steps:
      - name: get-engagements
        type: call
        call: salesforce.query-opportunities
        with:
          q: SELECT Id, Name, Amount, StageName FROM Opportunity WHERE StageName='Active' AND Practice__c='{{practice_area}}'
      - name: get-expenses
        type: call
        call: concur.list-reports
        with:
          practice: '{{practice_area}}'
          period: '{{reporting_period}}'
      - name: get-utilization
        type: call
        call: workday.get-time-entries
        with:
          practice: '{{practice_area}}'
          period: '{{reporting_period}}'
      - name: refresh-dashboard
        type: call
        call: tableau.refresh-workbook
        with:
          workbook_id: engagement-health
      - name: notify-leadership
        type: call
        call: slack.post-message
        with:
          channel: practice-leadership
          text: 'Engagement health dashboard updated for {{practice_area}} ({{reporting_period}}). {{get-engagements.totalSize}} active engagements. Dashboard: {{refresh-dashboard.url}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://mckinsey.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query
      inputParameters:
      - name: q
        in: query
      operations:
      - name: query-opportunities
        method: GET
  - 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
      inputParameters:
      - name: practice
        in: query
      - name: period
        in: query
      operations:
      - name: list-reports
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1/mckinsey
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: time-entries
      path: /timeTracking/entries
      inputParameters:
      - name: practice
        in: query
      - name: period
        in: query
      operations:
      - name: get-time-entries
        method: GET
  - type: http
    namespace: tableau
    baseUri: https://tableau.mckinsey.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/mckinsey-main/workbooks/{{workbook_id}}/refresh
      inputParameters:
      - name: workbook_id
        in: path
      operations:
      - name: refresh-workbook
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → engagement-health-dashboard-pipeline.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 6
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-6
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-6
        with:
          identifier: '{{identifier}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: CONS
          summary: Task from workflow 6
          description: '{{process.details}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-6
        method: POST
  - type: http
    namespace: jira
    baseUri: https://mckinsey.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issues
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-6.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 4
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-4
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-4
        with:
          identifier: '{{identifier}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space: CONSUL
          title: Report 4
          content: '{{process.report}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-4
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://mckinsey.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-4.yml

Searches the McKinsey internal knowledge index in Elasticsearch by query string. Returns ranked results with titles, excerpts, and relevance scores.

naftiko: '0.5'
info:
  label: Elasticsearch Knowledge Search
  description: Searches the McKinsey internal knowledge index in Elasticsearch by query string. Returns ranked results with titles, excerpts, and relevance scores.
  tags:
  - knowledge-management
  - search
  - elasticsearch
capability:
  exposes:
  - type: mcp
    namespace: es-search
    port: 8080
    tools:
    - name: search-knowledge-base
      description: Search the Elasticsearch knowledge index by query. Returns ranked results.
      inputParameters:
      - name: query
        in: body
        type: string
        description: Search query string.
      - name: max_results
        in: body
        type: integer
        description: Maximum results to return.
      call: elasticsearch.search
      with:
        index: knowledge-base
        q: '{{query}}'
        size: '{{max_results}}'
  consumes:
  - type: http
    namespace: elasticsearch
    baseUri: https://es.mckinsey.com
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: search
      path: /{{index}}/_search
      inputParameters:
      - name: index
        in: path
      - name: q
        in: query
      - name: size
        in: query
      operations:
      - name: search
        method: GET
Open in Framework → View in Fleet → elasticsearch-knowledge-search.yml

Pulls industry benchmarking data from Bloomberg, enriches it with Tableau analytics, stores results in Databricks, and shares the dashboard link via Slack for the research team.

naftiko: '0.5'
info:
  label: Industry Benchmarking Data Pipeline
  description: Pulls industry benchmarking data from Bloomberg, enriches it with Tableau analytics, stores results in Databricks, and shares the dashboard link via Slack for the research team.
  tags:
  - research
  - benchmarking
  - bloomberg
  - tableau
  - databricks
  - slack
capability:
  exposes:
  - type: mcp
    namespace: benchmarking-pipeline
    port: 8080
    tools:
    - name: run-benchmark
      description: Execute an industry benchmarking pipeline across Bloomberg, Tableau, Databricks, and Slack.
      inputParameters:
      - name: industry_code
        in: body
        type: string
        description: Bloomberg industry classification code.
      - name: metric_set
        in: body
        type: string
        description: Comma-separated financial metrics to benchmark.
      - name: target_table
        in: body
        type: string
        description: Databricks target table for storing results.
      steps:
      - name: pull-data
        type: call
        call: bloomberg.get-industry-data
        with:
          industry: '{{industry_code}}'
          fields: '{{metric_set}}'
      - name: store-results
        type: call
        call: databricks.run-job
        with:
          job_id: benchmark-ingestion
          notebook_params: '{"industry": "{{industry_code}}", "table": "{{target_table}}"}'
      - name: refresh-dashboard
        type: call
        call: tableau.refresh-workbook
        with:
          workbook_id: industry-benchmarks
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: research-analytics
          text: 'Industry benchmark updated for {{industry_code}}. Data stored in {{target_table}}. Dashboard refreshed: {{refresh-dashboard.url}}'
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/datasets
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: industry
      path: /industry/{{industry}}
      inputParameters:
      - name: industry
        in: path
      - name: fields
        in: query
      operations:
      - name: get-industry-data
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://mckinsey.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://tableau.mckinsey.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/mckinsey-main/workbooks/{{workbook_id}}/refresh
      inputParameters:
      - name: workbook_id
        in: path
      operations:
      - name: refresh-workbook
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → industry-benchmarking-data-pipeline.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 5
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-5
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-5
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: workflow_5
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-5
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-5.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 1
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-1
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-1
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-1
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://mckinsey.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-1.yml

Pulls Google Analytics page metrics for a date range, writes the results to a Google Sheets spreadsheet, and sends a summary to the marketing team via Slack.

naftiko: '0.5'
info:
  label: Google Analytics to Google Sheets Reporting
  description: Pulls Google Analytics page metrics for a date range, writes the results to a Google Sheets spreadsheet, and sends a summary to the marketing team via Slack.
  tags:
  - analytics
  - marketing
  - google-analytics
  - google-sheets
  - slack
capability:
  exposes:
  - type: mcp
    namespace: ga-sheets-report
    port: 8080
    tools:
    - name: export-analytics-to-sheets
      description: Pull Google Analytics metrics, write to Google Sheets, and notify via Slack.
      inputParameters:
      - name: property_id
        in: body
        type: string
        description: Google Analytics property ID.
      - name: start_date
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: End date in YYYY-MM-DD format.
      - name: spreadsheet_id
        in: body
        type: string
        description: Destination Google Sheets spreadsheet ID.
      steps:
      - name: get-report
        type: call
        call: ga.run-report
        with:
          property_id: '{{property_id}}'
          dateRangeStart: '{{start_date}}'
          dateRangeEnd: '{{end_date}}'
      - name: write-sheet
        type: call
        call: gsheets.update-values
        with:
          spreadsheet_id: '{{spreadsheet_id}}'
          range: Analytics!A1
          values: '{{get-report.rows}}'
      - name: notify-marketing
        type: call
        call: slack.post-message
        with:
          channel: marketing-analytics
          text: 'Analytics export complete for {{start_date}} to {{end_date}}. Spreadsheet updated: {{write-sheet.spreadsheetUrl}}'
  consumes:
  - type: http
    namespace: ga
    baseUri: https://analyticsdata.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: reports
      path: /properties/{{property_id}}:runReport
      inputParameters:
      - name: property_id
        in: path
      operations:
      - name: run-report
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: values
      path: /spreadsheets/{{spreadsheet_id}}/values/{{range}}
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: update-values
        method: PUT
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → google-analytics-to-google-sheets-reporting.yml

Schedules a Microsoft Teams meeting for a client session, creates a Notion page for meeting notes, and posts the meeting link and notes page to Slack for the engagement team.

naftiko: '0.5'
info:
  label: Microsoft Teams Meeting with Notion Notes Pipeline
  description: Schedules a Microsoft Teams meeting for a client session, creates a Notion page for meeting notes, and posts the meeting link and notes page to Slack for the engagement team.
  tags:
  - collaboration
  - meetings
  - microsoft-teams
  - notion
  - slack
capability:
  exposes:
  - type: mcp
    namespace: meeting-notes-pipeline
    port: 8080
    tools:
    - name: schedule-meeting-with-notes
      description: Schedule a Teams meeting, create a Notion notes page, and share via Slack.
      inputParameters:
      - name: organizer_email
        in: body
        type: string
        description: Organizer email address.
      - name: subject
        in: body
        type: string
        description: Meeting subject.
      - name: start_time
        in: body
        type: string
        description: Start time in ISO 8601 format.
      - name: end_time
        in: body
        type: string
        description: End time in ISO 8601 format.
      - name: attendees
        in: body
        type: string
        description: Comma-separated attendee emails.
      - name: notification_channel
        in: body
        type: string
        description: Slack channel for the engagement.
      steps:
      - name: create-meeting
        type: call
        call: msgraph.create-event
        with:
          organizer: '{{organizer_email}}'
          subject: '{{subject}}'
          start: '{{start_time}}'
          end: '{{end_time}}'
          attendees: '{{attendees}}'
      - name: create-notes
        type: call
        call: notion.create-page
        with:
          database_id: meeting-notes-db
          title: 'Notes: {{subject}}'
          content: '## {{subject}}


            **Date:** {{start_time}}

            **Attendees:** {{attendees}}


            ### Agenda


            ### Notes


            ### Action Items'
      - name: share-details
        type: call
        call: slack.post-message
        with:
          channel: '{{notification_channel}}'
          text: 'Meeting scheduled: {{subject}} at {{start_time}}. Teams link: {{create-meeting.onlineMeeting.joinUrl}}. Notes: {{create-notes.url}}'
  consumes:
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: events
      path: /users/{{organizer}}/events
      inputParameters:
      - name: organizer
        in: path
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: notion
    baseUri: https://api.notion.com/v1
    authentication:
      type: bearer
      token: $secrets.notion_token
    inputParameters:
    - name: Notion-Version
      in: header
      value: '2022-06-28'
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → microsoft-teams-meeting-with-notion-notes-pipeline.yml

Orchestrates the recruiting pipeline by posting a job on Indeed, creating a tracking board in Notion, scheduling screening slots via Microsoft Teams calendar, and notifying the recruiting team on Slack.

naftiko: '0.5'
info:
  label: Recruiting Pipeline Orchestrator
  description: Orchestrates the recruiting pipeline by posting a job on Indeed, creating a tracking board in Notion, scheduling screening slots via Microsoft Teams calendar, and notifying the recruiting team on Slack.
  tags:
  - recruiting
  - talent-acquisition
  - indeed
  - notion
  - microsoft-teams
  - slack
capability:
  exposes:
  - type: mcp
    namespace: recruiting-pipeline
    port: 8080
    tools:
    - name: launch-recruiting
      description: 'Launch a recruiting pipeline: post on Indeed, create tracking in Notion, schedule screenings, and notify the team.'
      inputParameters:
      - name: job_title
        in: body
        type: string
        description: Job title.
      - name: description
        in: body
        type: string
        description: Job description.
      - name: location
        in: body
        type: string
        description: Job location.
      - name: recruiter_email
        in: body
        type: string
        description: Lead recruiter email.
      steps:
      - name: post-job
        type: call
        call: indeed.create-job
        with:
          title: '{{job_title}}'
          description: '{{description}}'
          location: '{{location}}'
          company: McKinsey & Company
      - name: create-tracker
        type: call
        call: notion.create-page
        with:
          database_id: recruiting-tracker-db
          title: '{{job_title}} - {{location}}'
          content: 'Indeed posting: {{post-job.url}}. Status: Active.'
      - name: create-screening-slots
        type: call
        call: msgraph.create-event
        with:
          organizer: '{{recruiter_email}}'
          subject: 'Screening Block: {{job_title}}'
          start: next-monday-09:00
          end: next-monday-12:00
          attendees: '{{recruiter_email}}'
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: recruiting
          text: 'New recruiting pipeline launched: {{job_title}} in {{location}}. Indeed: {{post-job.url}}. Tracker: {{create-tracker.url}}.'
  consumes:
  - type: http
    namespace: indeed
    baseUri: https://apis.indeed.com/ads/v1
    authentication:
      type: bearer
      token: $secrets.indeed_token
    resources:
    - name: jobs
      path: /jobs
      operations:
      - name: create-job
        method: POST
  - type: http
    namespace: notion
    baseUri: https://api.notion.com/v1
    authentication:
      type: bearer
      token: $secrets.notion_token
    inputParameters:
    - name: Notion-Version
      in: header
      value: '2022-06-28'
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: events
      path: /users/{{organizer}}/events
      inputParameters:
      - name: organizer
        in: path
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → recruiting-pipeline-orchestrator.yml

Updates a Salesforce opportunity stage and notifies the engagement team in Slack with the new status. Used by engagement managers to keep CRM and team communications in sync.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Update with Slack Notification
  description: Updates a Salesforce opportunity stage and notifies the engagement team in Slack with the new status. Used by engagement managers to keep CRM and team communications in sync.
  tags:
  - sales
  - crm
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: opp-update-notify
    port: 8080
    tools:
    - name: update-opportunity-notify
      description: Update a Salesforce opportunity stage and notify the team via Slack.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID.
      - name: new_stage
        in: body
        type: string
        description: New opportunity stage name.
      - name: notification_channel
        in: body
        type: string
        description: Slack channel for notification.
      steps:
      - name: update-opp
        type: call
        call: salesforce.update-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
          StageName: '{{new_stage}}'
      - name: get-opp
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: '{{notification_channel}}'
          text: 'Opportunity {{get-opp.Name}} moved to {{new_stage}}. Account: {{get-opp.Account.Name}}. Value: {{get-opp.Amount}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://mckinsey.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
      - name: get-opportunity
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-opportunity-update-with-slack-notification.yml

Enriches a lead via ZoomInfo by company domain, creates or updates the account in Salesforce, and notifies the business development team via Slack.

naftiko: '0.5'
info:
  label: ZoomInfo Lead Enrichment with Salesforce Sync
  description: Enriches a lead via ZoomInfo by company domain, creates or updates the account in Salesforce, and notifies the business development team via Slack.
  tags:
  - business-development
  - lead-enrichment
  - zoominfo
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: lead-enrichment
    port: 8080
    tools:
    - name: enrich-and-sync-lead
      description: Enrich a lead via ZoomInfo, sync to Salesforce, and notify BD team via Slack.
      inputParameters:
      - name: company_domain
        in: body
        type: string
        description: Company website domain.
      - name: bd_channel
        in: body
        type: string
        description: Slack channel for BD team.
      steps:
      - name: enrich
        type: call
        call: zoominfo.enrich-company
        with:
          companyWebsite: '{{company_domain}}'
      - name: upsert-account
        type: call
        call: salesforce.upsert-account
        with:
          Website: '{{company_domain}}'
          Name: '{{enrich.company_name}}'
          Industry: '{{enrich.industry}}'
          NumberOfEmployees: '{{enrich.employee_count}}'
          AnnualRevenue: '{{enrich.revenue}}'
      - name: notify-bd
        type: call
        call: slack.post-message
        with:
          channel: '{{bd_channel}}'
          text: 'Lead enriched: {{enrich.company_name}} ({{company_domain}}). Revenue: {{enrich.revenue}}. Employees: {{enrich.employee_count}}. Synced to Salesforce.'
  consumes:
  - type: http
    namespace: zoominfo
    baseUri: https://api.zoominfo.com
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: enrich
      path: /enrich/company
      operations:
      - name: enrich-company
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://mckinsey.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/Website/{{Website}}
      inputParameters:
      - name: Website
        in: path
      operations:
      - name: upsert-account
        method: PATCH
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → zoominfo-lead-enrichment-with-salesforce-sync.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 2
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-2
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-2
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-2
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://mckinsey.service-now.com/api/now/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-2.yml

Retrieves an SAP Concur expense report, validates against Workday budget allocations, and sends an alert to the engagement manager via Slack if the expense exceeds thresholds.

naftiko: '0.5'
info:
  label: Expense Report with Budget Check Pipeline
  description: Retrieves an SAP Concur expense report, validates against Workday budget allocations, and sends an alert to the engagement manager via Slack if the expense exceeds thresholds.
  tags:
  - finance
  - expense-management
  - sap-concur
  - workday
  - slack
capability:
  exposes:
  - type: mcp
    namespace: expense-budget-check
    port: 8080
    tools:
    - name: check-expense-budget
      description: Retrieve a Concur expense report, check budget in Workday, and alert via Slack.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: SAP Concur expense report ID.
      - name: engagement_id
        in: body
        type: string
        description: Engagement ID for budget lookup.
      - name: manager_channel
        in: body
        type: string
        description: Slack channel for the engagement manager.
      steps:
      - name: get-report
        type: call
        call: concur.get-report
        with:
          report_id: '{{report_id}}'
      - name: check-budget
        type: call
        call: workday.get-cost-center
        with:
          engagement: '{{engagement_id}}'
      - name: alert-manager
        type: call
        call: slack.post-message
        with:
          channel: '{{manager_channel}}'
          text: 'Expense report {{report_id}}: Total {{get-report.Total}} {{get-report.CurrencyCode}}. Budget remaining: {{check-budget.remaining_budget}}. Status: {{get-report.ApprovalStatusName}}.'
  consumes:
  - type: http
    namespace: concur
    baseUri: https://us.api.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: reports
      path: /expense/reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-report
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1/mckinsey
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: cost-centers
      path: /financialManagement/costCenters
      inputParameters:
      - name: engagement
        in: query
      operations:
      - name: get-cost-center
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → expense-report-with-budget-check-pipeline.yml

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: '0.5'
info:
  label: Mckinsey Workflow 3
  description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
  tags:
  - consulting
  - operations
  - slack
capability:
  exposes:
  - type: mcp
    namespace: consulting
    port: 8080
    tools:
    - name: mckinsey-workflow-3
      description: Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: mckinsey-ops.run-workflow-3
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#consulting'
          text: 'Completed workflow 3: {{process.summary}}'
  consumes:
  - type: http
    namespace: mckinsey-ops
    baseUri: https://api.mckinsey.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.mckinsey_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-3
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → mckinsey-workflow-3.yml

Queries Workday for available staff, matches skills in Snowflake, and posts staffing recommendations to engagement leads.

naftiko: '0.5'
info:
  label: Engagement Staffing Optimization
  description: Queries Workday for available staff, matches skills in Snowflake, and posts staffing recommendations to engagement leads.
  tags:
  - engagement
  - workday
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: engagement_staffing_optimization
      description: Queries Workday for available staff, matches skills in Snowflake, and posts staffing recommendations to engagement leads.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Engagement Staffing Optimization: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'Engagement Staffing Optimization for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → engagement-staffing-optimization.yml

When a new Salesforce engagement opportunity is created, fetches the client company's LinkedIn organization data to enrich the account record with industry and employee count.

naftiko: '0.5'
info:
  label: Salesforce Engagement Opportunity Enrichment from LinkedIn
  description: When a new Salesforce engagement opportunity is created, fetches the client company's LinkedIn organization data to enrich the account record with industry and employee count.
  tags:
  - sales
  - crm
  - salesforce
  - linkedin
  - lead-enrichment
  - client-engagement
capability:
  exposes:
  - type: mcp
    namespace: opportunity-enrichment
    port: 8080
    tools:
    - name: enrich-opportunity-account
      description: Given a Salesforce opportunity ID and the client LinkedIn organization URN, fetch LinkedIn company data and update the Salesforce account with industry, employee count, and headquarters location.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID for the new client engagement.
      - name: linkedin_org_urn
        in: body
        type: string
        description: The LinkedIn organization URN for the client company (e.g., 'urn:li:organization:12345').
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: get-linkedin-org
        type: call
        call: linkedin.get-organization
        with:
          org_urn: '{{linkedin_org_urn}}'
      - name: update-account
        type: call
        call: salesforce.update-account
        with:
          account_id: '{{get-opportunity.AccountId}}'
          industry: '{{get-linkedin-org.industries[0].localizedName}}'
          number_of_employees: '{{get-linkedin-org.staffCount}}'
          description: '{{get-linkedin-org.localizedDescription}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://pwc.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: update-account
        method: PATCH
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: organizations
      path: /organizations/{{org_urn}}
      inputParameters:
      - name: org_urn
        in: path
      operations:
      - name: get-organization
        method: GET
Open in Framework → View in Fleet → salesforce-engagement-opportunity-enrichment-from-linkedin.yml

Retrieves an expense report from SAP Concur by report ID, returning the total amount, status, and owner.

naftiko: '0.5'
info:
  label: SAP Concur Expense Lookup
  description: Retrieves an expense report from SAP Concur by report ID, returning the total amount, status, and owner.
  tags:
  - finance
  - expenses
  - sap-concur
capability:
  exposes:
  - type: mcp
    namespace: finance-expenses
    port: 8080
    tools:
    - name: get-expense-report
      description: Given a Concur expense report ID, return the total, currency, status, and owner.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: Concur expense report ID.
      call: concur.get-report
      with:
        report_id: '{{report_id}}'
      outputParameters:
      - name: total
        type: string
        mapping: $.Total
      - name: currency
        type: string
        mapping: $.CurrencyCode
      - name: status
        type: string
        mapping: $.ApprovalStatusName
  consumes:
  - type: http
    namespace: concur
    baseUri: https://us.api.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: reports
      path: /expense/reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-report
        method: GET
Open in Framework → View in Fleet → sap-concur-expense-lookup.yml

Runs compliance checks by pulling access logs from Okta, change records from ServiceNow, queries Snowflake for policy violations, and publishes a compliance report to Confluence.

naftiko: '0.5'
info:
  label: Regulatory Compliance Check Orchestration
  description: Runs compliance checks by pulling access logs from Okta, change records from ServiceNow, queries Snowflake for policy violations, and publishes a compliance report to Confluence.
  tags:
  - compliance
  - regulatory
  - okta
  - servicenow
  - snowflake
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: compliance-checks
    port: 8080
    tools:
    - name: run-compliance-check
      description: Execute a regulatory compliance check across identity, change management, and data systems.
      inputParameters:
      - name: regulation
        in: body
        type: string
        description: Regulation identifier (e.g., SOX, GDPR).
      - name: check_period_start
        in: body
        type: string
        description: Check period start date.
      - name: check_period_end
        in: body
        type: string
        description: Check period end date.
      steps:
      - name: get-access-logs
        type: call
        call: okta.get-system-logs
        with:
          since: '{{check_period_start}}'
          until: '{{check_period_end}}'
      - name: get-changes
        type: call
        call: servicenow.query-changes
        with:
          start_date: '{{check_period_start}}'
          end_date: '{{check_period_end}}'
      - name: check-violations
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT * FROM compliance.policy_violations WHERE regulation = '{{regulation}}' AND check_date BETWEEN '{{check_period_start}}' AND '{{check_period_end}}'
          warehouse: COMPLIANCE_WH
      - name: publish-report
        type: call
        call: confluence.create-page
        with:
          spaceKey: COMPLIANCE
          title: '{{regulation}} Compliance Check: {{check_period_start}} to {{check_period_end}}'
          body: 'Access events: {{get-access-logs.length}}, Changes: {{get-changes.count}}, Violations: {{check-violations.row_count}}'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://pwc.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_api_token
    resources:
    - name: logs
      path: /logs?since={{since}}&until={{until}}
      inputParameters:
      - name: since
        in: query
      - name: until
        in: query
      operations:
      - name: get-system-logs
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request?sysparm_query=sys_created_onBETWEEN{{start_date}}@{{end_date}}
      inputParameters:
      - name: start_date
        in: query
      - name: end_date
        in: query
      operations:
      - name: query-changes
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://pwc.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → regulatory-compliance-check-orchestration.yml

Provisions a secure SharePoint data room for client engagements, sets Okta access controls, and notifies the engagement team.

naftiko: '0.5'
info:
  label: Client Data Room Provisioning
  description: Provisions a secure SharePoint data room for client engagements, sets Okta access controls, and notifies the engagement team.
  tags:
  - engagement
  - sharepoint
  - okta
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: client_data_room_provisioning
      description: Provisions a secure SharePoint data room for client engagements, sets Okta access controls, and notifies the engagement team.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Client Data Room Provisioning: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'Client Data Room Provisioning for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → client-data-room-provisioning.yml

Assesses vendor risk by pulling vendor data from SAP, checking compliance records in Snowflake, creating a risk assessment in ServiceNow, and notifying procurement.

naftiko: '0.5'
info:
  label: Vendor Risk Assessment Workflow
  description: Assesses vendor risk by pulling vendor data from SAP, checking compliance records in Snowflake, creating a risk assessment in ServiceNow, and notifying procurement.
  tags:
  - procurement
  - risk-management
  - sap
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: vendor-risk
    port: 8080
    tools:
    - name: assess-vendor-risk
      description: Given a SAP vendor number, run a risk assessment across compliance and procurement data.
      inputParameters:
      - name: vendor_number
        in: body
        type: string
        description: SAP vendor number.
      steps:
      - name: get-vendor
        type: call
        call: sap.get-vendor
        with:
          vendor_id: '{{vendor_number}}'
      - name: check-compliance
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT * FROM procurement.vendor_compliance WHERE vendor_id = '{{vendor_number}}'
          warehouse: PROCUREMENT_WH
      - name: create-assessment
        type: call
        call: servicenow.create-request
        with:
          short_description: 'Vendor risk assessment: {{get-vendor.SupplierName}}'
          category: vendor_management
      - name: notify-procurement
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.procurement_team_id
          channel_id: $secrets.vendor_risk_channel_id
          text: 'Vendor risk assessment for {{get-vendor.SupplierName}}: Compliance records={{check-compliance.row_count}}. ServiceNow: {{create-assessment.number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://pwc-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: suppliers
      path: /A_Supplier('{{vendor_id}}')
      inputParameters:
      - name: vendor_id
        in: path
      operations:
      - name: get-vendor
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → vendor-risk-assessment-workflow.yml

Audits SharePoint document retention against policies, creates Jira remediation tasks, and notifies compliance.

naftiko: '0.5'
info:
  label: SharePoint Document Retention Compliance
  description: Audits SharePoint document retention against policies, creates Jira remediation tasks, and notifies compliance.
  tags:
  - compliance
  - sharepoint
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: sharepoint_document_retention_compliance
      description: Audits SharePoint document retention against policies, creates Jira remediation tasks, and notifies compliance.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'SharePoint Document Retention Compliance: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'SharePoint Document Retention Compliance for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → sharepoint-document-retention-compliance.yml

Retrieves a pending SAP Concur expense report, approves it, and notifies the submitter via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Concur Expense Report Approval
  description: Retrieves a pending SAP Concur expense report, approves it, and notifies the submitter via Microsoft Teams.
  tags:
  - finance
  - expense-management
  - sap-concur
  - approval
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: expense-approval
    port: 8080
    tools:
    - name: approve-expense-report
      description: Given a SAP Concur report ID and approver comment, retrieve the report, approve it, and notify the submitter via Teams.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The SAP Concur expense report ID to approve.
      - name: approver_comment
        in: body
        type: string
        description: Approval comment to attach to the submission.
      steps:
      - name: get-report
        type: call
        call: concur.get-report
        with:
          report_id: '{{report_id}}'
      - name: approve-report
        type: call
        call: concur.approve-report
        with:
          report_id: '{{report_id}}'
          comment: '{{approver_comment}}'
      - name: notify-submitter
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{get-report.submitter_email}}'
          text: Your expense report '{{get-report.name}}' (${{get-report.total}}) has been approved in SAP Concur.
  consumes:
  - type: http
    namespace: concur
    baseUri: https://www.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: reports
      path: /expense/reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-report
        method: GET
      - name: approve-report
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-concur-expense-report-approval.yml

When Dependabot finds a vulnerability, creates Jira ticket and alerts security team.

naftiko: '0.5'
info:
  label: GitHub Dependabot Vulnerability Triage
  description: When Dependabot finds a vulnerability, creates Jira ticket and alerts security team.
  tags:
  - security
  - github
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: github_dependabot_vulnerability_triage
      description: When Dependabot finds a vulnerability, creates Jira ticket and alerts security team.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'GitHub Dependabot Vulnerability Triage: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'GitHub Dependabot Vulnerability Triage for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → github-dependabot-vulnerability-triage.yml

Triggers a Power BI dataset refresh for the PwC practice performance dashboard and notifies the operations team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Power BI Practice Performance Dashboard Refresh
  description: Triggers a Power BI dataset refresh for the PwC practice performance dashboard and notifies the operations team in Microsoft Teams.
  tags:
  - data
  - analytics
  - power-bi
  - reporting
  - microsoft-teams
  - operations
capability:
  exposes:
  - type: mcp
    namespace: operations-bi
    port: 8080
    tools:
    - name: refresh-practice-dashboard
      description: Trigger a Power BI refresh for the PwC practice performance dashboard and notify the operations analytics team in Teams.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID for the practice performance dashboard.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the operations analytics team.
      steps:
      - name: trigger-refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: '{{dataset_id}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Practice performance dashboard refresh initiated. Dataset: {{dataset_id}} | Status: {{trigger-refresh.status}}.'
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: refreshes
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → power-bi-practice-performance-dashboard-refresh.yml

When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint workspace, and sends a Microsoft Teams welcome message to the new staff member.

naftiko: '0.5'
info:
  label: New Staff Onboarding Orchestrator
  description: When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint workspace, and sends a Microsoft Teams welcome message to the new staff member.
  tags:
  - hr
  - onboarding
  - workday
  - servicenow
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-onboarding
    port: 8080
    tools:
    - name: trigger-onboarding
      description: Given a Workday employee ID and start date, orchestrate the PwC onboarding sequence across ServiceNow, SharePoint, and Microsoft Teams.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: The Workday worker ID for the new PwC staff member.
      - name: start_date
        in: body
        type: string
        description: The staff member's start date in YYYY-MM-DD format.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{worker_id}}'
      - name: create-snow-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'New staff onboarding: {{get-employee.full_name}}'
          category: hr_onboarding
          assigned_group: IT_Onboarding
      - name: create-sharepoint-workspace
        type: call
        call: sharepoint.create-folder
        with:
          site_id: hr-onboarding-site
          folder_path: NewStaff/{{get-employee.full_name}}_{{start_date}}
      - name: send-welcome
        type: call
        call: msteams.send-message
        with:
          channel_id: hr-new-staff
          text: 'Welcome to PwC, {{get-employee.full_name}}! Your IT onboarding ticket: {{create-snow-ticket.number}}. Start date: {{start_date}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /pwc/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: folders
      path: /sites/{{site_id}}/drive/root/children
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → new-staff-onboarding-orchestrator.yml

When a DLP alert fires, queries Splunk for context, creates ServiceNow security incident, and notifies the security team.

naftiko: '0.5'
info:
  label: Data Loss Prevention Alert Response
  description: When a DLP alert fires, queries Splunk for context, creates ServiceNow security incident, and notifies the security team.
  tags:
  - security
  - dlp
  - splunk
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: data_loss_prevention_alert_response
      description: When a DLP alert fires, queries Splunk for context, creates ServiceNow security incident, and notifies the security team.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Data Loss Prevention Alert Response: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'Data Loss Prevention Alert Response for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → data-loss-prevention-alert-response.yml

Given an engagement proposal document in SharePoint, uses Anthropic Claude to identify delivery risks, independence conflicts, and compliance considerations, then posts the assessment to the risk management Teams channel.

naftiko: '0.5'
info:
  label: AI-Assisted Engagement Risk Assessment
  description: Given an engagement proposal document in SharePoint, uses Anthropic Claude to identify delivery risks, independence conflicts, and compliance considerations, then posts the assessment to the risk management Teams channel.
  tags:
  - ai
  - risk-management
  - anthropic
  - sharepoint
  - microsoft-teams
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: risk-ai
    port: 8080
    tools:
    - name: assess-engagement-risk
      description: Given a SharePoint proposal document and client name, use Anthropic Claude to identify delivery risks, independence conflicts, and regulatory compliance considerations.
      inputParameters:
      - name: document_id
        in: body
        type: string
        description: The SharePoint document ID for the engagement proposal.
      - name: site_id
        in: body
        type: string
        description: The SharePoint site ID containing the proposal.
      - name: client_name
        in: body
        type: string
        description: The prospective client's name for independence analysis.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the risk management team.
      steps:
      - name: get-proposal
        type: call
        call: sharepoint.get-file-content
        with:
          site_id: '{{site_id}}'
          document_id: '{{document_id}}'
      - name: assess-risks
        type: call
        call: anthropic.create-message
        with:
          model: claude-3-5-sonnet-20241022
          prompt: 'You are a PwC engagement risk manager. Review this proposal for client {{client_name}} and identify: 1) Delivery risks (complexity, resourcing, timeline), 2) Potential independence or conflict-of-interest issues, 3) Regulatory or ethical compliance considerations, 4) Risk mitigation recommendations. Proposal: {{get-proposal.content}}'
      - name: post-assessment
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Engagement Risk Assessment — {{client_name}} ({{get-proposal.name}}):

            {{assess-risks.content}}'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: files
      path: /sites/{{site_id}}/drive/items/{{document_id}}/content
      inputParameters:
      - name: site_id
        in: path
      - name: document_id
        in: path
      operations:
      - name: get-file-content
        method: GET
  - type: http
    namespace: anthropic
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: messages
      path: /messages
      operations:
      - name: create-message
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → ai-assisted-engagement-risk-assessment.yml

Triggers a Power BI dataset refresh for the PwC global engagement revenue dashboard and notifies the finance team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Power BI Engagement Revenue Dashboard Refresh
  description: Triggers a Power BI dataset refresh for the PwC global engagement revenue dashboard and notifies the finance team in Microsoft Teams.
  tags:
  - data
  - analytics
  - power-bi
  - finance
  - reporting
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: bi-ops
    port: 8080
    tools:
    - name: refresh-revenue-dashboard
      description: Trigger a Power BI refresh for the PwC global engagement revenue dashboard and post a Teams confirmation to the finance analytics team.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID for the global engagement revenue dashboard.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the finance analytics notification.
      steps:
      - name: trigger-refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: '{{dataset_id}}'
      - name: notify-finance
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Engagement revenue dashboard refresh initiated. Dataset: {{dataset_id}} | Status: {{trigger-refresh.status}}.'
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: refreshes
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → power-bi-engagement-revenue-dashboard-refresh.yml

When a pod crash is detected, gathers Splunk logs, creates ServiceNow incident, and alerts platform team.

naftiko: '0.5'
info:
  label: Kubernetes Pod Failure Escalation
  description: When a pod crash is detected, gathers Splunk logs, creates ServiceNow incident, and alerts platform team.
  tags:
  - devops
  - kubernetes
  - splunk
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: kubernetes_pod_failure_escalation
      description: When a pod crash is detected, gathers Splunk logs, creates ServiceNow incident, and alerts platform team.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Kubernetes Pod Failure Escalation: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'Kubernetes Pod Failure Escalation for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → kubernetes-pod-failure-escalation.yml

Identifies Okta users who are non-compliant with MFA policy and creates a ServiceNow security task for the information security team to remediate.

naftiko: '0.5'
info:
  label: Okta MFA Non-Compliance Alert
  description: Identifies Okta users who are non-compliant with MFA policy and creates a ServiceNow security task for the information security team to remediate.
  tags:
  - security
  - identity
  - okta
  - servicenow
  - compliance
  - mfa
capability:
  exposes:
  - type: mcp
    namespace: security-compliance
    port: 8080
    tools:
    - name: alert-mfa-non-compliance
      description: Given an Okta group ID, list users without MFA enrolled and create a ServiceNow security task listing the non-compliant accounts for remediation.
      inputParameters:
      - name: okta_group_id
        in: body
        type: string
        description: The Okta group ID to audit for MFA compliance.
      steps:
      - name: list-non-mfa-users
        type: call
        call: okta.list-users-without-mfa
        with:
          group_id: '{{okta_group_id}}'
      - name: create-remediation-task
        type: call
        call: servicenow.create-incident
        with:
          short_description: MFA Non-Compliance — {{list-non-mfa-users.count}} users in group {{okta_group_id}}
          category: security_compliance
          description: 'Non-compliant users: {{list-non-mfa-users.emails}}'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://pwc.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_key
      placement: header
    resources:
    - name: users
      path: /groups/{{group_id}}/users
      inputParameters:
      - name: group_id
        in: path
      operations:
      - name: list-users-without-mfa
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → okta-mfa-non-compliance-alert.yml

When a new hire's Workday record is confirmed, provisions the appropriate Okta group membership for their service line and practice, notifying IT in Teams.

naftiko: '0.5'
info:
  label: Okta Staff Access Provisioning
  description: When a new hire's Workday record is confirmed, provisions the appropriate Okta group membership for their service line and practice, notifying IT in Teams.
  tags:
  - identity
  - security
  - okta
  - workday
  - microsoft-teams
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: access-provisioning
    port: 8080
    tools:
    - name: provision-staff-access
      description: Given a Workday worker ID and target Okta group ID for the staff member's service line, add the user to the group and notify IT via Teams.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: The Workday worker ID for the new staff member.
      - name: okta_group_id
        in: body
        type: string
        description: The Okta group ID corresponding to the staff member's service line.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{worker_id}}'
      - name: add-to-group
        type: call
        call: okta.add-user-to-group
        with:
          group_id: '{{okta_group_id}}'
          user_email: '{{get-employee.email}}'
      - name: notify-it
        type: call
        call: msteams.send-message
        with:
          channel_id: it-ops-channel
          text: 'Access provisioned for {{get-employee.full_name}} — Okta group {{okta_group_id}} added. Email: {{get-employee.email}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /pwc/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: okta
    baseUri: https://pwc.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_key
      placement: header
    resources:
    - name: group-members
      path: /groups/{{group_id}}/users/{{user_email}}
      inputParameters:
      - name: group_id
        in: path
      - name: user_email
        in: path
      operations:
      - name: add-user-to-group
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → okta-staff-access-provisioning.yml

Pulls client data from Salesforce, retrieves relevant case studies from Confluence, checks team availability in Workday, and creates a proposal tracking task in Jira.

naftiko: '0.5'
info:
  label: Client Proposal Generation Workflow
  description: Pulls client data from Salesforce, retrieves relevant case studies from Confluence, checks team availability in Workday, and creates a proposal tracking task in Jira.
  tags:
  - sales
  - proposals
  - salesforce
  - confluence
  - workday
  - jira
capability:
  exposes:
  - type: mcp
    namespace: sales-proposals
    port: 8080
    tools:
    - name: prepare-proposal
      description: Given a Salesforce opportunity, gather supporting data and set up proposal tracking.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opp_id: '{{opportunity_id}}'
      - name: find-case-studies
        type: call
        call: confluence.search-page
        with:
          title: case study {{get-opportunity.Industry__c}}
      - name: check-availability
        type: call
        call: workday.get-practice-headcount
        with:
          practice: '{{get-opportunity.Practice__c}}'
      - name: create-proposal-task
        type: call
        call: jira.create-issue
        with:
          project: PROPOSALS
          issuetype: Task
          summary: 'Proposal: {{get-opportunity.Name}} - {{get-opportunity.Account.Name}}'
          description: 'Value: {{get-opportunity.Amount}}, Industry: {{get-opportunity.Industry__c}}, Case studies found: {{find-case-studies.results.length}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://pwc.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opp_id}}
      inputParameters:
      - name: opp_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://pwc.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content?title={{title}}&expand=space
      inputParameters:
      - name: title
        in: query
      operations:
      - name: search-page
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: headcount
      path: /workers?practice={{practice}}
      inputParameters:
      - name: practice
        in: query
      operations:
      - name: get-practice-headcount
        method: GET
  - type: http
    namespace: jira
    baseUri: https://pwc.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → client-proposal-generation-workflow.yml

Processes incoming tax documents by extracting data via AI, storing in Snowflake, creating a Jira review task, and notifying the tax team via Teams.

naftiko: '0.5'
info:
  label: Tax Document Processing Orchestration
  description: Processes incoming tax documents by extracting data via AI, storing in Snowflake, creating a Jira review task, and notifying the tax team via Teams.
  tags:
  - tax
  - document-processing
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: tax-processing
    port: 8080
    tools:
    - name: process-tax-document
      description: Given a document reference, extract tax data, store results, create review task, and notify team.
      inputParameters:
      - name: document_id
        in: body
        type: string
        description: Document ID in the document management system.
      - name: client_name
        in: body
        type: string
        description: Client name for the tax engagement.
      - name: tax_year
        in: body
        type: string
        description: Tax year.
      steps:
      - name: store-extraction
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO tax.document_extractions (document_id, client_name, tax_year, status) VALUES ('{{document_id}}', '{{client_name}}', '{{tax_year}}', 'pending_review')
          warehouse: TAX_WH
      - name: create-review-task
        type: call
        call: jira.create-issue
        with:
          project: TAX
          issuetype: Task
          summary: 'Review tax document: {{client_name}} - {{tax_year}}'
          description: 'Document ID: {{document_id}}'
      - name: notify-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.tax_team_id
          channel_id: $secrets.tax_processing_channel_id
          text: 'Tax document for {{client_name}} ({{tax_year}}) ready for review. Jira: {{create-review-task.key}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://pwc.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → tax-document-processing-orchestration.yml

Fetches the current Datadog monitor status for PwC's internal platforms and posts a health digest to the IT operations Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Datadog Platform Monitoring Digest
  description: Fetches the current Datadog monitor status for PwC's internal platforms and posts a health digest to the IT operations Microsoft Teams channel.
  tags:
  - observability
  - datadog
  - reporting
  - microsoft-teams
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: platform-reporting
    port: 8080
    tools:
    - name: digest-platform-health
      description: Given a Datadog environment tag, list all monitors and post a health digest with OK, Warning, and Critical counts to the IT operations Teams channel.
      inputParameters:
      - name: environment_tag
        in: body
        type: string
        description: The Datadog environment tag to filter monitors (e.g., 'env:production').
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the IT operations digest.
      steps:
      - name: list-monitors
        type: call
        call: datadog.list-monitors
        with:
          tags: '{{environment_tag}}'
      - name: post-digest
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Platform Health ({{environment_tag}}): Total: {{list-monitors.total}} | OK: {{list-monitors.ok_count}} | Warning: {{list-monitors.warning_count}} | Critical: {{list-monitors.critical_count}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor
      inputParameters:
      - name: tags
        in: query
      operations:
      - name: list-monitors
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → datadog-platform-monitoring-digest.yml

Given a tax research query and jurisdiction, uses Anthropic Claude to generate a structured tax position summary, posting the result to the tax team's Microsoft Teams channel.

naftiko: '0.5'
info:
  label: AI-Assisted Tax Research Summary
  description: Given a tax research query and jurisdiction, uses Anthropic Claude to generate a structured tax position summary, posting the result to the tax team's Microsoft Teams channel.
  tags:
  - ai
  - tax
  - anthropic
  - microsoft-teams
  - research
capability:
  exposes:
  - type: mcp
    namespace: tax-ai
    port: 8080
    tools:
    - name: summarize-tax-research
      description: Given a tax research question and jurisdiction, invoke Anthropic Claude to generate a structured tax position analysis with relevant authority citations and risk assessment.
      inputParameters:
      - name: research_query
        in: body
        type: string
        description: The tax research question to analyze (e.g., 'Transfer pricing treatment for intercompany IP licensing').
      - name: jurisdiction
        in: body
        type: string
        description: The tax jurisdiction for the analysis (e.g., 'United States', 'United Kingdom', 'Germany').
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the tax team research digest.
      steps:
      - name: generate-analysis
        type: call
        call: anthropic.create-message
        with:
          model: claude-3-5-sonnet-20241022
          prompt: 'You are a senior PwC tax advisor. Analyze the following tax research question for {{jurisdiction}}: {{research_query}}. Provide: 1) Tax position analysis, 2) Relevant statutory or regulatory authority, 3) Key risks and uncertainties, 4) Recommended next steps. Note: This is preliminary research only.'
      - name: post-analysis
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Tax Research Analysis — {{jurisdiction}}:

            Query: {{research_query}}


            {{generate-analysis.content}}


            Note: AI-assisted research — human review required before client delivery.'
  consumes:
  - type: http
    namespace: anthropic
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: messages
      path: /messages
      operations:
      - name: create-message
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → ai-assisted-tax-research-summary.yml

Analyzes Azure cloud costs, identifies optimization opportunities in Snowflake, creates Jira action items, and posts savings recommendations to the FinOps Teams channel.

naftiko: '0.5'
info:
  label: Cloud Cost Optimization Orchestration
  description: Analyzes Azure cloud costs, identifies optimization opportunities in Snowflake, creates Jira action items, and posts savings recommendations to the FinOps Teams channel.
  tags:
  - cloud
  - finops
  - microsoft-azure
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cloud-optimization
    port: 8080
    tools:
    - name: optimize-cloud-costs
      description: Analyze cloud costs and create optimization action items.
      inputParameters:
      - name: billing_month
        in: body
        type: string
        description: Billing month to analyze.
      steps:
      - name: get-costs
        type: call
        call: azure.get-cost
        with:
          subscription: $secrets.azure_subscription_id
          rg: all
      - name: analyze-savings
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT * FROM finops.cost_optimization_recommendations WHERE billing_month = '{{billing_month}}'
          warehouse: FINOPS_WH
      - name: create-actions
        type: call
        call: jira.create-issue
        with:
          project: FINOPS
          issuetype: Task
          summary: Cloud cost optimization actions for {{billing_month}}
      - name: post-recommendations
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.finops_team_id
          channel_id: $secrets.finops_channel_id
          text: 'Cloud cost analysis for {{billing_month}}: Total={{get-costs.total_cost}}, Optimization opportunities={{analyze-savings.row_count}}. Jira: {{create-actions.key}}'
  consumes:
  - type: http
    namespace: azure
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: cost-management
      path: /subscriptions/{{subscription}}/providers/Microsoft.CostManagement/query?api-version=2023-03-01
      inputParameters:
      - name: subscription
        in: path
      operations:
      - name: get-cost
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://pwc.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → cloud-cost-optimization-orchestration.yml

When a new hire is confirmed in Workday, creates Okta account, provisions access, and notifies IT.

naftiko: '0.5'
info:
  label: Workday New Hire IT Provisioning
  description: When a new hire is confirmed in Workday, creates Okta account, provisions access, and notifies IT.
  tags:
  - hr
  - workday
  - okta
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: workday_new_hire_it_provisioning
      description: When a new hire is confirmed in Workday, creates Okta account, provisions access, and notifies IT.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Workday New Hire IT Provisioning: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'Workday New Hire IT Provisioning for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → workday-new-hire-it-provisioning.yml

When a staff departure is processed in Workday, creates a ServiceNow offboarding ticket and notifies IT security in Microsoft Teams to revoke access.

naftiko: '0.5'
info:
  label: Staff Offboarding Workflow
  description: When a staff departure is processed in Workday, creates a ServiceNow offboarding ticket and notifies IT security in Microsoft Teams to revoke access.
  tags:
  - hr
  - offboarding
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: trigger-offboarding
      description: Given a Workday worker ID and last day date, create a ServiceNow offboarding task and alert IT security in Teams to begin access revocation for the departing staff member.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: The Workday worker ID of the departing staff member.
      - name: last_day
        in: body
        type: string
        description: The staff member's last working date in YYYY-MM-DD format.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{worker_id}}'
      - name: create-offboard-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Offboarding: {{get-employee.full_name}} — last day {{last_day}}'
          category: hr_offboarding
          assigned_group: IT_Security
      - name: alert-it-security
        type: call
        call: msteams.send-message
        with:
          channel_id: it-security-channel
          text: 'Offboarding initiated: {{get-employee.full_name}} (last day: {{last_day}}). SNOW: {{create-offboard-ticket.number}}. Begin access revocation.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /pwc/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → staff-offboarding-workflow.yml

Triggers a data extract refresh for a specified Tableau workbook to ensure current data.

naftiko: '0.5'
info:
  label: Tableau Workbook Refresh
  description: Triggers a data extract refresh for a specified Tableau workbook to ensure current data.
  tags:
  - analytics
  - reporting
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: analytics-dashboards
    port: 8080
    tools:
    - name: refresh-workbook
      description: Trigger a data extract refresh for a Tableau workbook by ID.
      inputParameters:
      - name: workbook_id
        in: body
        type: string
        description: Tableau workbook ID.
      call: tableau.refresh-workbook
      with:
        workbook_id: '{{workbook_id}}'
      outputParameters:
      - name: job_id
        type: string
        mapping: $.job.id
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://tableau.pwc.com/api/3.21
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/$secrets.tableau_site_id/workbooks/{{workbook_id}}/refresh
      inputParameters:
      - name: workbook_id
        in: path
      operations:
      - name: refresh-workbook
        method: POST
Open in Framework → View in Fleet → tableau-workbook-refresh.yml

Retrieves the current month-to-date cost for a specified Azure resource group from Azure Cost Management.

naftiko: '0.5'
info:
  label: Azure Resource Cost Lookup
  description: Retrieves the current month-to-date cost for a specified Azure resource group from Azure Cost Management.
  tags:
  - cloud
  - finops
  - microsoft-azure
capability:
  exposes:
  - type: mcp
    namespace: cloud-costs
    port: 8080
    tools:
    - name: get-resource-group-cost
      description: Given an Azure resource group, return the month-to-date spend.
      inputParameters:
      - name: resource_group
        in: body
        type: string
        description: Azure resource group name.
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID.
      call: azure.get-cost
      with:
        subscription: '{{subscription_id}}'
        rg: '{{resource_group}}'
      outputParameters:
      - name: total_cost
        type: string
        mapping: $.properties.rows[0][0]
      - name: currency
        type: string
        mapping: $.properties.rows[0][1]
  consumes:
  - type: http
    namespace: azure
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: cost-management
      path: /subscriptions/{{subscription}}/resourceGroups/{{rg}}/providers/Microsoft.CostManagement/query?api-version=2023-03-01
      inputParameters:
      - name: subscription
        in: path
      - name: rg
        in: path
      operations:
      - name: get-cost
        method: POST
Open in Framework → View in Fleet → azure-resource-cost-lookup.yml

When an audit finding is logged, creates a Jira remediation ticket, assigns to the responsible owner from Workday, creates a ServiceNow change request, and notifies audit leadership via Teams.

naftiko: '0.5'
info:
  label: Audit Finding Remediation Workflow
  description: When an audit finding is logged, creates a Jira remediation ticket, assigns to the responsible owner from Workday, creates a ServiceNow change request, and notifies audit leadership via Teams.
  tags:
  - audit
  - compliance
  - jira
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: audit-remediation
    port: 8080
    tools:
    - name: process-audit-finding
      description: Given audit finding details, create remediation tracking across systems and notify leadership.
      inputParameters:
      - name: finding_id
        in: body
        type: string
        description: Audit finding identifier.
      - name: severity
        in: body
        type: string
        description: Finding severity (Critical, High, Medium, Low).
      - name: responsible_employee_id
        in: body
        type: string
        description: Workday ID of responsible person.
      - name: description
        in: body
        type: string
        description: Finding description.
      steps:
      - name: get-owner
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{responsible_employee_id}}'
      - name: create-remediation-ticket
        type: call
        call: jira.create-issue
        with:
          project: AUDIT
          issuetype: Task
          summary: Remediate finding {{finding_id}} [{{severity}}]
          description: '{{description}}'
          assignee: '{{get-owner.work_email}}'
      - name: create-change-request
        type: call
        call: servicenow.create-change
        with:
          short_description: 'Audit remediation: {{finding_id}}'
          category: audit
          assigned_to: '{{get-owner.work_email}}'
      - name: notify-leadership
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.audit_team_id
          channel_id: $secrets.audit_findings_channel_id
          text: 'Audit finding {{finding_id}} [{{severity}}] assigned to {{get-owner.full_name}}. Jira: {{create-remediation-ticket.key}}, Change: {{create-change-request.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: jira
    baseUri: https://pwc.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → audit-finding-remediation-workflow.yml

Uses Anthropic Claude to analyze engagement risk factors from Snowflake and generates risk scores for the quality team.

naftiko: '0.5'
info:
  label: AI-Assisted Risk Assessment Scoring
  description: Uses Anthropic Claude to analyze engagement risk factors from Snowflake and generates risk scores for the quality team.
  tags:
  - risk
  - anthropic
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: ai_assisted_risk_assessment_scoring
      description: Uses Anthropic Claude to analyze engagement risk factors from Snowflake and generates risk scores for the quality team.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'AI-Assisted Risk Assessment Scoring: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'AI-Assisted Risk Assessment Scoring for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → ai-assisted-risk-assessment-scoring.yml

Detects travel policy violations in SAP Concur, creates ServiceNow compliance tickets, and notifies managers.

naftiko: '0.5'
info:
  label: SAP Concur Travel Policy Violation Alert
  description: Detects travel policy violations in SAP Concur, creates ServiceNow compliance tickets, and notifies managers.
  tags:
  - finance
  - compliance
  - sap-concur
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: sap_concur_travel_policy_violation_alert
      description: Detects travel policy violations in SAP Concur, creates ServiceNow compliance tickets, and notifies managers.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'SAP Concur Travel Policy Violation Alert: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'SAP Concur Travel Policy Violation Alert for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → sap-concur-travel-policy-violation-alert.yml

Validates client independence requirements against Salesforce relationships, checks Snowflake records, and notifies ethics team.

naftiko: '0.5'
info:
  label: Client Independence Check Workflow
  description: Validates client independence requirements against Salesforce relationships, checks Snowflake records, and notifies ethics team.
  tags:
  - compliance
  - independence
  - salesforce
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: client_independence_check_workflow
      description: Validates client independence requirements against Salesforce relationships, checks Snowflake records, and notifies ethics team.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Client Independence Check Workflow: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'Client Independence Check Workflow for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → client-independence-check-workflow.yml

Tracks IT asset lifecycles in ServiceNow CMDB, identifies end-of-life assets, and creates replacement requests.

naftiko: '0.5'
info:
  label: IT Asset Lifecycle Management
  description: Tracks IT asset lifecycles in ServiceNow CMDB, identifies end-of-life assets, and creates replacement requests.
  tags:
  - itsm
  - asset-management
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: it_asset_lifecycle_management
      description: Tracks IT asset lifecycles in ServiceNow CMDB, identifies end-of-life assets, and creates replacement requests.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'IT Asset Lifecycle Management: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'IT Asset Lifecycle Management for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → it-asset-lifecycle-management.yml

Retrieves compensation details for an employee from Workday including base salary, bonus target, and pay grade.

naftiko: '0.5'
info:
  label: Workday Compensation Lookup
  description: Retrieves compensation details for an employee from Workday including base salary, bonus target, and pay grade.
  tags:
  - hr
  - compensation
  - workday
capability:
  exposes:
  - type: mcp
    namespace: hr-compensation
    port: 8080
    tools:
    - name: get-compensation
      description: Given a Workday employee ID, return base salary, bonus target, and pay grade.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      call: workday.get-compensation
      with:
        worker_id: '{{employee_id}}'
      outputParameters:
      - name: base_salary
        type: string
        mapping: $.compensation.baseSalary
      - name: bonus_target
        type: string
        mapping: $.compensation.bonusTarget
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: compensation
      path: /workers/{{worker_id}}/compensation
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-compensation
        method: GET
Open in Framework → View in Fleet → workday-compensation-lookup.yml

When Datadog detects API gateway degradation, creates ServiceNow incident and notifies the platform team.

naftiko: '0.5'
info:
  label: API Gateway Performance Alert
  description: When Datadog detects API gateway degradation, creates ServiceNow incident and notifies the platform team.
  tags:
  - devops
  - api
  - datadog
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: api_gateway_performance_alert
      description: When Datadog detects API gateway degradation, creates ServiceNow incident and notifies the platform team.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'API Gateway Performance Alert: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'API Gateway Performance Alert for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → api-gateway-performance-alert.yml

Pulls pipeline data from Salesforce, queries Snowflake for historical trends, and posts forecast to leadership.

naftiko: '0.5'
info:
  label: Salesforce Pipeline Forecast Digest
  description: Pulls pipeline data from Salesforce, queries Snowflake for historical trends, and posts forecast to leadership.
  tags:
  - sales
  - salesforce
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: salesforce_pipeline_forecast_digest
      description: Pulls pipeline data from Salesforce, queries Snowflake for historical trends, and posts forecast to leadership.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Salesforce Pipeline Forecast Digest: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'Salesforce Pipeline Forecast Digest for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → salesforce-pipeline-forecast-digest.yml

Retrieves the compensation grade and pay range for a given Workday job profile to support offer generation and compensation planning.

naftiko: '0.5'
info:
  label: Workday Compensation Grade Lookup
  description: Retrieves the compensation grade and pay range for a given Workday job profile to support offer generation and compensation planning.
  tags:
  - hr
  - compensation
  - workday
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: hr-comp
    port: 8080
    tools:
    - name: get-compensation-grade
      description: Given a Workday job profile ID, return the compensation grade, pay range minimum and maximum, and currency for use in offer generation or compensation benchmarking.
      inputParameters:
      - name: job_profile_id
        in: body
        type: string
        description: The Workday job profile ID to retrieve compensation data for.
      call: workday.get-comp-grade
      with:
        job_profile_id: '{{job_profile_id}}'
      outputParameters:
      - name: grade
        type: string
        mapping: $.compensationGrade.descriptor
      - name: pay_min
        type: string
        mapping: $.compensationGradeProfile.minimumSalary
      - name: pay_max
        type: string
        mapping: $.compensationGradeProfile.maximumSalary
      - name: currency
        type: string
        mapping: $.compensationGradeProfile.currency
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: compensation-grades
      path: /pwc/compensationGrades/{{job_profile_id}}
      inputParameters:
      - name: job_profile_id
        in: path
      operations:
      - name: get-comp-grade
        method: GET
Open in Framework → View in Fleet → workday-compensation-grade-lookup.yml

Pulls engagement metrics from Salesforce, workpaper status from SharePoint, team utilization from Workday, and compiles a quality review summary posted to Teams.

naftiko: '0.5'
info:
  label: Engagement Quality Review Workflow
  description: Pulls engagement metrics from Salesforce, workpaper status from SharePoint, team utilization from Workday, and compiles a quality review summary posted to Teams.
  tags:
  - quality
  - audit
  - salesforce
  - sharepoint
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: quality-review
    port: 8080
    tools:
    - name: run-quality-review
      description: Given an engagement ID, compile quality metrics from all systems and post review summary.
      inputParameters:
      - name: engagement_id
        in: body
        type: string
        description: Salesforce engagement opportunity ID.
      steps:
      - name: get-engagement
        type: call
        call: salesforce.get-opportunity
        with:
          opp_id: '{{engagement_id}}'
      - name: check-workpapers
        type: call
        call: sharepoint.search
        with:
          query: '{{get-engagement.Name}} workpaper'
      - name: get-team-utilization
        type: call
        call: workday.get-project-hours
        with:
          project_id: '{{get-engagement.Project_Code__c}}'
      - name: post-review
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.quality_team_id
          channel_id: $secrets.quality_review_channel_id
          text: 'EQR for {{get-engagement.Name}}: Workpapers found={{check-workpapers.count}}, Team hours={{get-team-utilization.total_hours}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://pwc.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opp_id}}
      inputParameters:
      - name: opp_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: search
      path: /search/query
      operations:
      - name: search
        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: project-hours
      path: /projects/{{project_id}}/hours
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-project-hours
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → engagement-quality-review-workflow.yml

When a GitHub Dependabot or code scanning alert is raised in a PwC internal repository, creates a Jira security task and notifies the information security team in Microsoft Teams.

naftiko: '0.5'
info:
  label: GitHub Code Repository Security Scan Alert
  description: When a GitHub Dependabot or code scanning alert is raised in a PwC internal repository, creates a Jira security task and notifies the information security team in Microsoft Teams.
  tags:
  - security
  - devops
  - github
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: security-devops
    port: 8080
    tools:
    - name: handle-security-alert
      description: Given a GitHub repository, security alert number, and severity, create a Jira security task and notify the PwC information security team in Teams.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository in 'org/repo' format.
      - name: alert_number
        in: body
        type: integer
        description: The GitHub security alert number.
      - name: severity
        in: body
        type: string
        description: 'Alert severity: ''critical'', ''high'', ''medium'', or ''low''.'
      steps:
      - name: get-alert
        type: call
        call: github.get-security-alert
        with:
          repo: '{{repo}}'
          alert_number: '{{alert_number}}'
      - name: create-jira-task
        type: call
        call: jira.create-issue
        with:
          project_key: SEC
          issuetype: Task
          summary: '[{{severity}}] Security alert — {{repo}} — {{get-alert.rule_id}}'
          description: 'Alert {{alert_number}} in {{repo}}. Severity: {{severity}}. Rule: {{get-alert.rule_description}}. URL: {{get-alert.html_url}}'
      - name: notify-infosec
        type: call
        call: msteams.send-message
        with:
          channel_id: security-alerts
          text: 'Security Alert [{{severity}}]: {{repo}} | Rule: {{get-alert.rule_id}} | Jira: {{create-jira-task.key}} | GitHub: {{get-alert.html_url}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: code-scanning-alerts
      path: /repos/{{repo}}/code-scanning/alerts/{{alert_number}}
      inputParameters:
      - name: repo
        in: path
      - name: alert_number
        in: path
      operations:
      - name: get-security-alert
        method: GET
  - type: http
    namespace: jira
    baseUri: https://pwc.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → github-code-repository-security-scan-alert.yml

Exports current active headcount from Workday by service line and posts a snapshot with average billing rates to the PwC finance leadership Teams channel.

naftiko: '0.5'
info:
  label: Workday Headcount and Billing Rate Snapshot
  description: Exports current active headcount from Workday by service line and posts a snapshot with average billing rates to the PwC finance leadership Teams channel.
  tags:
  - hr
  - finance
  - workday
  - reporting
  - microsoft-teams
  - workforce-planning
capability:
  exposes:
  - type: mcp
    namespace: hr-finance-reporting
    port: 8080
    tools:
    - name: get-headcount-snapshot
      description: Retrieve current headcount and billing rate data from Workday by service line and post a summary to the finance leadership Teams channel.
      inputParameters:
      - name: as_of_date
        in: body
        type: string
        description: The snapshot date in YYYY-MM-DD format.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the finance leadership snapshot.
      steps:
      - name: export-workers
        type: call
        call: workday.list-workers
        with:
          status: active
          as_of_date: '{{as_of_date}}'
      - name: post-snapshot
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'PwC Headcount Snapshot ({{as_of_date}}): {{export-workers.total}} active staff across {{export-workers.service_line_count}} service lines.'
  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: /pwc/workers
      inputParameters:
      - name: status
        in: query
      - name: as_of_date
        in: query
      operations:
      - name: list-workers
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-headcount-and-billing-rate-snapshot.yml

Retrieves Salesforce client account metrics and posts an account health digest to the engagement partner's Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Salesforce Client Account Health Digest
  description: Retrieves Salesforce client account metrics and posts an account health digest to the engagement partner's Microsoft Teams channel.
  tags:
  - sales
  - crm
  - salesforce
  - reporting
  - microsoft-teams
  - client-management
capability:
  exposes:
  - type: mcp
    namespace: client-reporting
    port: 8080
    tools:
    - name: digest-client-health
      description: Given a Salesforce account ID and engagement partner's Teams UPN, fetch client account metrics and post a health digest to the partner's Teams channel.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID for the client.
      - name: partner_teams_upn
        in: body
        type: string
        description: The Teams UPN of the engagement partner to notify.
      steps:
      - name: get-account
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{account_id}}'
      - name: post-digest
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{partner_teams_upn}}'
          text: 'Client Health: {{get-account.Name}} | Revenue: ${{get-account.AnnualRevenue}} | Open Cases: {{get-account.OpenCasesCount}} | Last Activity: {{get-account.LastActivityDate}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://pwc.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-client-account-health-digest.yml

When an employee departs, revokes Okta access, closes Workday record, and notifies IT and HR.

naftiko: '0.5'
info:
  label: Employee Offboarding Workflow
  description: When an employee departs, revokes Okta access, closes Workday record, and notifies IT and HR.
  tags:
  - hr
  - offboarding
  - workday
  - okta
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: employee_offboarding_workflow
      description: When an employee departs, revokes Okta access, closes Workday record, and notifies IT and HR.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Employee Offboarding Workflow: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'Employee Offboarding Workflow for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → employee-offboarding-workflow.yml

When a P1 IT incident is raised at PwC, creates a ServiceNow P1 incident, annotates Datadog, and alerts the IT engineering team in Microsoft Teams.

naftiko: '0.5'
info:
  label: P1 IT Incident Response Chain
  description: When a P1 IT incident is raised at PwC, creates a ServiceNow P1 incident, annotates Datadog, and alerts the IT engineering team in Microsoft Teams.
  tags:
  - itsm
  - incident-response
  - servicenow
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: itsm-ops
    port: 8080
    tools:
    - name: handle-p1-incident
      description: Given an affected PwC system and impact description, create a ServiceNow P1 incident, create a Datadog event annotation, and alert the IT engineering team via Teams.
      inputParameters:
      - name: affected_system
        in: body
        type: string
        description: The PwC system or service experiencing the P1 incident.
      - name: impact_description
        in: body
        type: string
        description: Brief description of the business impact.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the engineering on-call team.
      steps:
      - name: create-p1-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'P1: {{affected_system}} — {{impact_description}}'
          urgency: '1'
          priority: '1'
          category: application
      - name: annotate-datadog
        type: call
        call: datadog.create-event
        with:
          title: 'P1 Incident: {{affected_system}}'
          text: SNOW {{create-p1-incident.number}} — {{impact_description}}
          alert_type: error
      - name: alert-team
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'P1 INCIDENT: {{affected_system}} | Impact: {{impact_description}} | SNOW: {{create-p1-incident.number}} | Datadog: {{annotate-datadog.url}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → p1-it-incident-response-chain.yml

Queries Snowflake for partner billing and utilization data, refreshes Power BI dashboard, and posts to leadership.

naftiko: '0.5'
info:
  label: Power BI Partner Performance Dashboard
  description: Queries Snowflake for partner billing and utilization data, refreshes Power BI dashboard, and posts to leadership.
  tags:
  - reporting
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: power_bi_partner_performance_dashboard
      description: Queries Snowflake for partner billing and utilization data, refreshes Power BI dashboard, and posts to leadership.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Power BI Partner Performance Dashboard: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'Power BI Partner Performance Dashboard for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → power-bi-partner-performance-dashboard.yml

Uses Anthropic Claude to generate research memos from Snowflake data, uploads to SharePoint, and notifies the team.

naftiko: '0.5'
info:
  label: AI-Assisted Research Memo Generation
  description: Uses Anthropic Claude to generate research memos from Snowflake data, uploads to SharePoint, and notifies the team.
  tags:
  - research
  - anthropic
  - snowflake
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: ai_assisted_research_memo_generation
      description: Uses Anthropic Claude to generate research memos from Snowflake data, uploads to SharePoint, and notifies the team.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'AI-Assisted Research Memo Generation: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'AI-Assisted Research Memo Generation for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → ai-assisted-research-memo-generation.yml

Fetches PwC LinkedIn company page engagement metrics for thought leadership content and posts a monthly digest to the brand and communications Microsoft Teams channel.

naftiko: '0.5'
info:
  label: LinkedIn Thought Leadership Engagement Digest
  description: Fetches PwC LinkedIn company page engagement metrics for thought leadership content and posts a monthly digest to the brand and communications Microsoft Teams channel.
  tags:
  - marketing
  - linkedin
  - social
  - reporting
  - microsoft-teams
  - thought-leadership
capability:
  exposes:
  - type: mcp
    namespace: brand-reporting
    port: 8080
    tools:
    - name: digest-thought-leadership-engagement
      description: Retrieve LinkedIn organization page share statistics for the past 30 days and post a thought leadership performance digest to the communications Teams channel.
      inputParameters:
      - name: organization_id
        in: body
        type: string
        description: The LinkedIn organization ID for PwC's company page.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for brand and communications team.
      steps:
      - name: get-share-stats
        type: call
        call: linkedin.get-share-statistics
        with:
          organization_id: '{{organization_id}}'
      - name: post-digest
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'LinkedIn Thought Leadership (30d): Impressions: {{get-share-stats.impressions}} | Reactions: {{get-share-stats.likes}} | Shares: {{get-share-stats.shares}} | Comments: {{get-share-stats.comments}} | Follower Growth: +{{get-share-stats.follower_gain}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: share-statistics
      path: /organizationalEntityShareStatistics
      inputParameters:
      - name: organization_id
        in: query
      operations:
      - name: get-share-statistics
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → linkedin-thought-leadership-engagement-digest.yml

When Azure Cost Management detects a spend anomaly on a PwC subscription, creates a ServiceNow financial incident and posts a FinOps alert to the Microsoft Teams cost management channel.

naftiko: '0.5'
info:
  label: Azure Cloud Cost Anomaly Responder
  description: When Azure Cost Management detects a spend anomaly on a PwC subscription, creates a ServiceNow financial incident and posts a FinOps alert to the Microsoft Teams cost management channel.
  tags:
  - finops
  - cloud
  - azure
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finops
    port: 8080
    tools:
    - name: handle-azure-cost-anomaly
      description: Given an Azure subscription, resource group, and estimated overage in USD, create a ServiceNow financial incident and post a FinOps alert to the Teams cost management channel.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: The Azure subscription ID where the cost anomaly was detected.
      - name: resource_group
        in: body
        type: string
        description: The resource group generating the cost anomaly.
      - name: estimated_overage_usd
        in: body
        type: number
        description: Estimated spend overage in US dollars.
      steps:
      - name: create-snow-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: Azure Cost Anomaly — {{resource_group}} — ${{estimated_overage_usd}}
          category: cloud_cost
          urgency: '2'
      - name: post-finops-alert
        type: call
        call: msteams.send-message
        with:
          channel_id: finops-alerts
          text: 'Azure Cost Anomaly: {{resource_group}} ({{subscription_id}}) | Overage: ${{estimated_overage_usd}} | SNOW: {{create-snow-incident.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → azure-cloud-cost-anomaly-responder.yml

Monitors Snowflake data quality metrics, creates Jira tickets for anomalies, and notifies the data team.

naftiko: '0.5'
info:
  label: Snowflake Data Quality Monitoring
  description: Monitors Snowflake data quality metrics, creates Jira tickets for anomalies, and notifies the data team.
  tags:
  - data-engineering
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: snowflake_data_quality_monitoring
      description: Monitors Snowflake data quality metrics, creates Jira tickets for anomalies, and notifies the data team.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Snowflake Data Quality Monitoring: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'Snowflake Data Quality Monitoring for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → snowflake-data-quality-monitoring.yml

Submits a ServiceNow change request for updates to PwC's audit or tax systems and notifies the change advisory board in Microsoft Teams.

naftiko: '0.5'
info:
  label: ServiceNow Change Request for Audit System Updates
  description: Submits a ServiceNow change request for updates to PwC's audit or tax systems and notifies the change advisory board in Microsoft Teams.
  tags:
  - itsm
  - change-management
  - servicenow
  - microsoft-teams
  - audit
  - approval
capability:
  exposes:
  - type: mcp
    namespace: change-ops
    port: 8080
    tools:
    - name: submit-audit-system-change
      description: Given a change description, affected audit or tax system, planned start, and CAB Teams channel, create a ServiceNow change request and notify the CAB.
      inputParameters:
      - name: change_description
        in: body
        type: string
        description: Full description of the system change, scope, and rollback plan.
      - name: affected_system
        in: body
        type: string
        description: The PwC audit or tax system being changed (e.g., 'Aura Audit', 'PwC Tax Connect').
      - name: planned_start
        in: body
        type: string
        description: Planned change start datetime in ISO 8601 format.
      - name: cab_channel_id
        in: body
        type: string
        description: Teams channel ID for the change advisory board notification.
      steps:
      - name: create-change
        type: call
        call: servicenow.create-change
        with:
          short_description: 'Change: {{affected_system}} — {{change_description}}'
          planned_start: '{{planned_start}}'
          category: audit_systems
      - name: notify-cab
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{cab_channel_id}}'
          text: 'Change Request: {{affected_system}} | CHG: {{create-change.number}} | Planned: {{planned_start}} | Scope: {{change_description}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → servicenow-change-request-for-audit-system-updates.yml

Queries Azure security center for posture score, creates Jira remediation tasks, and notifies the cloud security team.

naftiko: '0.5'
info:
  label: Azure Security Posture Assessment
  description: Queries Azure security center for posture score, creates Jira remediation tasks, and notifies the cloud security team.
  tags:
  - security
  - azure
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: azure_security_posture_assessment
      description: Queries Azure security center for posture score, creates Jira remediation tasks, and notifies the cloud security team.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Azure Security Posture Assessment: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'Azure Security Posture Assessment for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → azure-security-posture-assessment.yml

Lists Okta users in privileged access groups and creates a ServiceNow access review task for the security team to certify quarterly.

naftiko: '0.5'
info:
  label: Okta Privileged Access Review
  description: Lists Okta users in privileged access groups and creates a ServiceNow access review task for the security team to certify quarterly.
  tags:
  - security
  - identity
  - okta
  - servicenow
  - access-review
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: access-review
    port: 8080
    tools:
    - name: run-access-review
      description: Given an Okta privileged group ID and review quarter label, list all members and create a ServiceNow access review task for certification.
      inputParameters:
      - name: okta_group_id
        in: body
        type: string
        description: The Okta privileged access group ID to audit.
      - name: review_quarter
        in: body
        type: string
        description: The access review quarter label (e.g., 'Q2-2026').
      steps:
      - name: list-group-members
        type: call
        call: okta.list-group-users
        with:
          group_id: '{{okta_group_id}}'
      - name: create-review-task
        type: call
        call: servicenow.create-incident
        with:
          short_description: Access Review {{review_quarter}} — Group {{okta_group_id}}
          category: security_access_review
          description: '{{list-group-members.count}} users require certification. Emails: {{list-group-members.emails}}'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://pwc.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_key
      placement: header
    resources:
    - name: group-users
      path: /groups/{{group_id}}/users
      inputParameters:
      - name: group_id
        in: path
      operations:
      - name: list-group-users
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → okta-privileged-access-review.yml

Uses Anthropic Claude to review contract terms, identifies risk clauses, and posts summary to the legal team.

naftiko: '0.5'
info:
  label: AI-Assisted Contract Review
  description: Uses Anthropic Claude to review contract terms, identifies risk clauses, and posts summary to the legal team.
  tags:
  - legal
  - anthropic
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: ai_assisted_contract_review
      description: Uses Anthropic Claude to review contract terms, identifies risk clauses, and posts summary to the legal team.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'AI-Assisted Contract Review: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'AI-Assisted Contract Review for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → ai-assisted-contract-review.yml

Queries Workday for incomplete benefits enrollments and sends reminders via Teams.

naftiko: '0.5'
info:
  label: Workday Benefits Enrollment Reminder
  description: Queries Workday for incomplete benefits enrollments and sends reminders via Teams.
  tags:
  - hr
  - benefits
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: workday_benefits_enrollment_reminder
      description: Queries Workday for incomplete benefits enrollments and sends reminders via Teams.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Workday Benefits Enrollment Reminder: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'Workday Benefits Enrollment Reminder for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → workday-benefits-enrollment-reminder.yml

Pulls open positions from Workday, creates LinkedIn postings, and posts summary to talent team.

naftiko: '0.5'
info:
  label: LinkedIn Talent Acquisition Campaign
  description: Pulls open positions from Workday, creates LinkedIn postings, and posts summary to talent team.
  tags:
  - hr
  - talent-acquisition
  - workday
  - linkedin
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: linkedin_talent_acquisition_campaign
      description: Pulls open positions from Workday, creates LinkedIn postings, and posts summary to talent team.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'LinkedIn Talent Acquisition Campaign: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'LinkedIn Talent Acquisition Campaign for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → linkedin-talent-acquisition-campaign.yml

Coordinates major incident response by creating ServiceNow bridge, paging on-call via PagerDuty, and notifying leadership.

naftiko: '0.5'
info:
  label: ServiceNow Major Incident Management
  description: Coordinates major incident response by creating ServiceNow bridge, paging on-call via PagerDuty, and notifying leadership.
  tags:
  - itsm
  - servicenow
  - pagerduty
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: servicenow_major_incident_management
      description: Coordinates major incident response by creating ServiceNow bridge, paging on-call via PagerDuty, and notifying leadership.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'ServiceNow Major Incident Management: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'ServiceNow Major Incident Management for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → servicenow-major-incident-management.yml

Given an audit working paper or client document in SharePoint, uses Anthropic Claude to extract key findings, risks, and control observations, posting a summary to the audit team's Teams channel.

naftiko: '0.5'
info:
  label: AI-Assisted Audit Document Review
  description: Given an audit working paper or client document in SharePoint, uses Anthropic Claude to extract key findings, risks, and control observations, posting a summary to the audit team's Teams channel.
  tags:
  - ai
  - audit
  - anthropic
  - sharepoint
  - microsoft-teams
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: audit-ai
    port: 8080
    tools:
    - name: review-audit-document
      description: Given a SharePoint document ID and audit engagement code, retrieve the document and use Anthropic Claude to extract key findings, control deficiencies, and risk observations for the audit team.
      inputParameters:
      - name: document_id
        in: body
        type: string
        description: The SharePoint document item ID for the audit working paper.
      - name: site_id
        in: body
        type: string
        description: The SharePoint site ID containing the audit document.
      - name: engagement_code
        in: body
        type: string
        description: The PwC engagement code for the audit (e.g., 'ENG-2026-00123').
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the audit team review.
      steps:
      - name: get-document
        type: call
        call: sharepoint.get-file-content
        with:
          site_id: '{{site_id}}'
          document_id: '{{document_id}}'
      - name: generate-review
        type: call
        call: anthropic.create-message
        with:
          model: claude-3-5-sonnet-20241022
          prompt: 'You are a PwC audit manager reviewing working papers for engagement {{engagement_code}}. Extract: 1) Key findings, 2) Control deficiencies identified, 3) Risks noted, 4) Recommended action items. Document: {{get-document.content}}'
      - name: post-review
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Audit Document Review — {{get-document.name}} ({{engagement_code}}):

            {{generate-review.content}}'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: files
      path: /sites/{{site_id}}/drive/items/{{document_id}}/content
      inputParameters:
      - name: site_id
        in: path
      - name: document_id
        in: path
      operations:
      - name: get-file-content
        method: GET
  - type: http
    namespace: anthropic
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: messages
      path: /messages
      operations:
      - name: create-message
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → ai-assisted-audit-document-review.yml

Creates a new client account and primary contact in Salesforce, opens a ServiceNow client onboarding task, and notifies the engagement partner in Microsoft Teams.

naftiko: '0.5'
info:
  label: Salesforce New Client Onboarding
  description: Creates a new client account and primary contact in Salesforce, opens a ServiceNow client onboarding task, and notifies the engagement partner in Microsoft Teams.
  tags:
  - sales
  - crm
  - salesforce
  - servicenow
  - onboarding
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: client-onboarding
    port: 8080
    tools:
    - name: onboard-client
      description: Given client company name, primary contact details, service line, and engagement partner's Teams UPN, create a Salesforce account and contact, open a ServiceNow onboarding task, and notify the partner.
      inputParameters:
      - name: company_name
        in: body
        type: string
        description: The client's legal company name.
      - name: contact_name
        in: body
        type: string
        description: Primary contact's full name at the client.
      - name: contact_email
        in: body
        type: string
        description: Primary contact's business email address.
      - name: service_line
        in: body
        type: string
        description: The PwC service line for this engagement (e.g., 'Audit & Assurance', 'Tax').
      - name: partner_teams_upn
        in: body
        type: string
        description: The Teams UPN of the engagement partner to notify.
      steps:
      - name: create-account
        type: call
        call: salesforce.create-account
        with:
          name: '{{company_name}}'
          type: Client
          service_line: '{{service_line}}'
      - name: create-contact
        type: call
        call: salesforce.create-contact
        with:
          account_id: '{{create-account.id}}'
          name: '{{contact_name}}'
          email: '{{contact_email}}'
      - name: open-onboarding-task
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Client Onboarding: {{company_name}} — {{service_line}}'
          category: client_onboarding
          description: 'Salesforce Account: {{create-account.id}}. Contact: {{contact_name}} ({{contact_email}}).'
      - name: notify-partner
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{partner_teams_upn}}'
          text: 'New client onboarded: {{company_name}} ({{service_line}}). Salesforce: {{create-account.id}}. SNOW task: {{open-onboarding-task.number}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://pwc.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account
      operations:
      - name: create-account
        method: POST
    - name: contacts
      path: /sobjects/Contact
      operations:
      - name: create-contact
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-new-client-onboarding.yml

Monitors Snowflake pipeline task health for PwC engagement analytics and alerts the data engineering team in Teams if failures are detected.

naftiko: '0.5'
info:
  label: Snowflake Engagement Analytics Pipeline Monitor
  description: Monitors Snowflake pipeline task health for PwC engagement analytics and alerts the data engineering team in Teams if failures are detected.
  tags:
  - data
  - analytics
  - snowflake
  - monitoring
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: analytics-ops
    port: 8080
    tools:
    - name: monitor-analytics-pipelines
      description: Given a Snowflake database and schema for engagement analytics, check for task failures in the past 24 hours and post an alert to the data engineering Teams channel.
      inputParameters:
      - name: database
        in: body
        type: string
        description: The Snowflake database name for engagement analytics (e.g., 'ENGAGEMENT_ANALYTICS').
      - name: schema
        in: body
        type: string
        description: The Snowflake schema containing analytics pipeline tasks.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for data engineering alerts.
      steps:
      - name: check-task-failures
        type: call
        call: snowflake.query-task-history
        with:
          database: '{{database}}'
          schema: '{{schema}}'
      - name: post-alert
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Analytics Pipeline Health ({{database}}.{{schema}}): {{check-task-failures.failed_count}} failures in 24h. Failed tasks: {{check-task-failures.failed_task_names}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: task-history
      path: /databases/{{database}}/schemas/{{schema}}/tasks
      inputParameters:
      - name: database
        in: path
      - name: schema
        in: path
      operations:
      - name: query-task-history
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → snowflake-engagement-analytics-pipeline-monitor.yml

Pulls diversity metrics from Workday, refreshes Power BI dashboard, and posts report to HR leadership.

naftiko: '0.5'
info:
  label: Workday Diversity Metrics Report
  description: Pulls diversity metrics from Workday, refreshes Power BI dashboard, and posts report to HR leadership.
  tags:
  - hr
  - diversity
  - workday
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: workday_diversity_metrics_report
      description: Pulls diversity metrics from Workday, refreshes Power BI dashboard, and posts report to HR leadership.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Workday Diversity Metrics Report: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'Workday Diversity Metrics Report for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → workday-diversity-metrics-report.yml

When a Databricks job fails, creates a Jira ticket and notifies the data platform team.

naftiko: '0.5'
info:
  label: Databricks Job Failure Alert
  description: When a Databricks job fails, creates a Jira ticket and notifies the data platform team.
  tags:
  - data-engineering
  - databricks
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: databricks_job_failure_alert
      description: When a Databricks job fails, creates a Jira ticket and notifies the data platform team.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Databricks Job Failure Alert: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'Databricks Job Failure Alert for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → databricks-job-failure-alert.yml

Orchestrates quarterly close by verifying SAP period status, running Snowflake reconciliation, refreshing Power BI dashboards, and posting summary to Teams.

naftiko: '0.5'
info:
  label: Quarterly Financial Close Orchestration
  description: Orchestrates quarterly close by verifying SAP period status, running Snowflake reconciliation, refreshing Power BI dashboards, and posting summary to Teams.
  tags:
  - finance
  - accounting
  - sap
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finance-close
    port: 8080
    tools:
    - name: run-quarterly-close
      description: Execute quarterly close checklist across finance systems.
      inputParameters:
      - name: fiscal_period
        in: body
        type: string
        description: Fiscal period (e.g., 2026-Q1).
      steps:
      - name: run-reconciliation
        type: call
        call: snowflake.execute-query
        with:
          statement: CALL finance.reconciliation_check('{{fiscal_period}}')
          warehouse: FINANCE_WH
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          group_id: $secrets.finance_workspace_id
          dataset_id: $secrets.close_dataset_id
      - name: post-summary
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.finance_team_id
          channel_id: $secrets.finance_close_channel_id
          text: 'Q close for {{fiscal_period}}: Reconciliation rows={{run-reconciliation.row_count}}, Dashboard refreshed.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /groups/{{group_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: group_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → quarterly-financial-close-orchestration.yml

Audits SAP Concur expense reports for missing receipts, creates compliance tickets, and notifies expense owners.

naftiko: '0.5'
info:
  label: SAP Concur Receipt Compliance Audit
  description: Audits SAP Concur expense reports for missing receipts, creates compliance tickets, and notifies expense owners.
  tags:
  - finance
  - compliance
  - sap-concur
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: sap_concur_receipt_compliance_audit
      description: Audits SAP Concur expense reports for missing receipts, creates compliance tickets, and notifies expense owners.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'SAP Concur Receipt Compliance Audit: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'SAP Concur Receipt Compliance Audit for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → sap-concur-receipt-compliance-audit.yml

Runs quarterly access certification for privileged Okta accounts, creates ServiceNow audit records, and notifies security.

naftiko: '0.5'
info:
  label: Okta Privileged Access Certification
  description: Runs quarterly access certification for privileged Okta accounts, creates ServiceNow audit records, and notifies security.
  tags:
  - security
  - identity
  - okta
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: okta_privileged_access_certification
      description: Runs quarterly access certification for privileged Okta accounts, creates ServiceNow audit records, and notifies security.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Okta Privileged Access Certification: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'Okta Privileged Access Certification for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → okta-privileged-access-certification.yml

Initiates a performance review cycle in Workday for a PwC service line and notifies all people managers in Microsoft Teams to begin annual evaluations.

naftiko: '0.5'
info:
  label: Workday Performance Review Cycle Launch
  description: Initiates a performance review cycle in Workday for a PwC service line and notifies all people managers in Microsoft Teams to begin annual evaluations.
  tags:
  - hr
  - performance-management
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-performance
    port: 8080
    tools:
    - name: launch-review-cycle
      description: Given a service line code and review period, initiate the Workday performance review cycle and send a Teams notification to all people managers.
      inputParameters:
      - name: service_line
        in: body
        type: string
        description: The PwC service line code for the review cycle (e.g., 'ASSURANCE', 'TAX', 'ADVISORY').
      - name: review_period
        in: body
        type: string
        description: The review period label (e.g., 'Annual-2025').
      - name: due_date
        in: body
        type: string
        description: Review completion deadline in YYYY-MM-DD format.
      - name: manager_channel_id
        in: body
        type: string
        description: Teams channel ID for the manager notification.
      steps:
      - name: create-cycle
        type: call
        call: workday.create-review-cycle
        with:
          service_line: '{{service_line}}'
          review_period: '{{review_period}}'
          due_date: '{{due_date}}'
      - name: notify-managers
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{manager_channel_id}}'
          text: 'Performance Review Cycle ''{{review_period}}'' launched for {{service_line}}. Complete all Workday evaluations by {{due_date}}. Cycle ID: {{create-cycle.cycle_id}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: review-cycles
      path: /pwc/performanceReviews
      operations:
      - name: create-review-cycle
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-performance-review-cycle-launch.yml

Detects payroll discrepancies between Workday and Snowflake, creates Jira investigation tickets, and notifies payroll.

naftiko: '0.5'
info:
  label: Workday Payroll Discrepancy Investigation
  description: Detects payroll discrepancies between Workday and Snowflake, creates Jira investigation tickets, and notifies payroll.
  tags:
  - hr
  - payroll
  - workday
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: workday_payroll_discrepancy_investigation
      description: Detects payroll discrepancies between Workday and Snowflake, creates Jira investigation tickets, and notifies payroll.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Workday Payroll Discrepancy Investigation: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'Workday Payroll Discrepancy Investigation for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → workday-payroll-discrepancy-investigation.yml

Queries Salesforce for open client engagement opportunities by service line and posts a pipeline digest to the practice leadership Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Salesforce Client Opportunity Pipeline Digest
  description: Queries Salesforce for open client engagement opportunities by service line and posts a pipeline digest to the practice leadership Microsoft Teams channel.
  tags:
  - sales
  - crm
  - salesforce
  - reporting
  - microsoft-teams
  - client-engagement
capability:
  exposes:
  - type: mcp
    namespace: engagement-reporting
    port: 8080
    tools:
    - name: digest-engagement-pipeline
      description: Given a PwC service line and Teams channel, query Salesforce for open client engagement opportunities and post a pipeline digest with deal counts and total value.
      inputParameters:
      - name: service_line
        in: body
        type: string
        description: The PwC service line to filter opportunities (e.g., 'Audit & Assurance', 'Tax', 'Advisory', 'Consulting').
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the practice leadership digest.
      steps:
      - name: query-opportunities
        type: call
        call: salesforce.query-records
        with:
          q: SELECT Id,Name,StageName,Amount,CloseDate FROM Opportunity WHERE Service_Line__c = '{{service_line}}' AND IsClosed = false
      - name: post-digest
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Engagement Pipeline — {{service_line}}: {{query-opportunities.totalSize}} open opportunities | Total pipeline: ${{query-opportunities.total_amount}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://pwc.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query
      inputParameters:
      - name: q
        in: query
      operations:
      - name: query-records
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-client-opportunity-pipeline-digest.yml

When a Tableau workbook refresh fails, creates a Jira ticket and notifies the BI team via Teams.

naftiko: '0.5'
info:
  label: Tableau Workbook Failure Alert
  description: When a Tableau workbook refresh fails, creates a Jira ticket and notifies the BI team via Teams.
  tags:
  - reporting
  - tableau
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: tableau_workbook_failure_alert
      description: When a Tableau workbook refresh fails, creates a Jira ticket and notifies the BI team via Teams.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Tableau Workbook Failure Alert: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'Tableau Workbook Failure Alert for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → tableau-workbook-failure-alert.yml

Audits Confluence pages for outdated content, creates Jira update tasks, and notifies content owners.

naftiko: '0.5'
info:
  label: Confluence Knowledge Base Audit
  description: Audits Confluence pages for outdated content, creates Jira update tasks, and notifies content owners.
  tags:
  - collaboration
  - confluence
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: confluence_knowledge_base_audit
      description: Audits Confluence pages for outdated content, creates Jira update tasks, and notifies content owners.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Confluence Knowledge Base Audit: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'Confluence Knowledge Base Audit for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → confluence-knowledge-base-audit.yml

Uses Anthropic Claude to review financial statement data from Snowflake and posts findings to the audit team.

naftiko: '0.5'
info:
  label: AI-Assisted Financial Statement Review
  description: Uses Anthropic Claude to review financial statement data from Snowflake and posts findings to the audit team.
  tags:
  - audit
  - anthropic
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: ai_assisted_financial_statement_review
      description: Uses Anthropic Claude to review financial statement data from Snowflake and posts findings to the audit team.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'AI-Assisted Financial Statement Review: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'AI-Assisted Financial Statement Review for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → ai-assisted-financial-statement-review.yml

Queries Workday for overdue compliance training, creates ServiceNow ticket, and notifies managers.

naftiko: '0.5'
info:
  label: Compliance Training Overdue Alert
  description: Queries Workday for overdue compliance training, creates ServiceNow ticket, and notifies managers.
  tags:
  - hr
  - compliance
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: compliance_training_overdue_alert
      description: Queries Workday for overdue compliance training, creates ServiceNow ticket, and notifies managers.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Compliance Training Overdue Alert: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'Compliance Training Overdue Alert for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → compliance-training-overdue-alert.yml

Queries Microsoft 365 license usage, identifies unused licenses, and posts optimization report to IT.

naftiko: '0.5'
info:
  label: Microsoft 365 License Optimization
  description: Queries Microsoft 365 license usage, identifies unused licenses, and posts optimization report to IT.
  tags:
  - it
  - microsoft-365
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pwc-ops
    port: 8080
    tools:
    - name: microsoft_365_license_optimization
      description: Queries Microsoft 365 license usage, identifies unused licenses, and posts optimization report to IT.
      inputParameters:
      - name: entity_id
        type: string
        description: Primary entity identifier.
      - name: context
        type: string
        description: Additional context.
      steps:
      - name: gather-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
          context: '{{context}}'
      - name: create-action
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Microsoft 365 License Optimization: {{entity_id}}'
          description: 'Data: {{gather-data.results}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_ops_channel
          text: 'Microsoft 365 License Optimization for {{entity_id}} | Action: {{create-action.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pwc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://pwc.service-now.com/api/now
    authentication:
      type: 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/ops/channels/{{channel_id}}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → microsoft-365-license-optimization.yml

Areas — Total: 2561

  • .NET
  • 3D
  • 3D Rendering
  • AI Agents
  • AI Applications
  • AI Architectures
  • AI Assistants
  • AI Ethics
  • AI Governance
  • AI Infrastructure
  • AI Operations
  • AI Ops
  • AI Platforms
  • AI Safety
  • AI Securities
  • AI Solutions
  • AI Technologies
  • AI Testing
  • AI Tools
  • AI Trainings
  • AJAX
  • API Design
  • API Development
  • API Gateways
  • API Integrations
  • API Management
  • API Securities
  • API Testing
  • Abacus
  • Acceptance Testing
  • Access Controls
  • Access Management
  • Access Management Solutions
  • Accessibility
  • Accessibility Testing
  • Account Management
  • Accountability
  • Accounting
  • Accounting Platforms
  • Accounting Software
  • Accounting Systems
  • Accounting Tools
  • Accounts Payables
  • Accounts Receivables
  • Active Directory
  • Active Directory Certificate Services
  • Active Directory Domain Services
  • Actuarial Sciences
  • Ad Management
  • Ad Platforms
  • Ad-teches
  • Administration
  • Administratives
  • Advertising
  • Advertising Platforms
  • Agent Development
  • Agent Frameworks
  • Agent-based Systems
  • Agentic AI
  • Agentic Frameworks
  • Agentic Solutions
  • Agentic Systems
  • Agentics
  • Agents
  • Alarm Systems
  • Alerting
  • Alerts
  • Algorithm Development
  • Algorithmic Tradings
  • Algorithms
  • Ambassadors
  • Analysis
  • Analytics
  • Androids
  • Animations
  • Annotations
  • Anomaly Detections
  • Anti-Money Launderings
  • Antivirus
  • Apache Portable Runtimes
  • Applicant Tracking Systems
  • Application Architectures
  • Application Deliveries
  • Application Development
  • Application Integrations
  • Application Lifecycle Management
  • Application Management
  • Application Performance Management
  • Application Performance Monitoring
  • Application Platforms
  • Application Programming Interfaces
  • Application Securities
  • Application Servers
  • Applications
  • Architecture Design
  • Architecture Governance
  • Architecture Strategies
  • Architectures
  • Archives
  • Archiving
  • Argus
  • Arrays
  • Artifact Management
  • Artificial Intelligence
  • Artificial Intelligence/Machine Learning
  • Assessment Tools
  • Assessments
  • Asset Inventories
  • Asset Liability Management
  • Asset Management
  • Asset Managers
  • Asset Protection
  • Asset Servicings
  • Asset Tracking
  • Asset Valuations
  • Assignments
  • Asynchronous
  • Asynchronous Processing
  • Attendance Tracking
  • Attendee Management
  • Audience Engagements
  • Audience Segmentations
  • Audio
  • Audit Management
  • Audit Processes
  • Audit Reports
  • Audit Techniques
  • Audit Technologies
  • Audit Tools
  • Audit Trails
  • Audits
  • Australias
  • Authentications
  • Authoring Tools
  • Authorizations
  • Automated Incident Responses
  • Automated Testing
  • Automated Testing Frameworks
  • Automation
  • Automation Platforms
  • Automation Testing
  • Automation Toolings
  • Automation Tools And Processes
  • Automls
  • Automotive
  • Autonomous Agents
  • Autonomous Systems
  • Autoscalings
  • Awareness
  • Axiom Controllers
  • Axioms
  • B2B Marketing
  • BI
  • BPM
  • Backend Development
  • Backend Engineering
  • Backends
  • Background Checks
  • Backup And Recovery
  • Backups
  • Banking
  • Banking Platforms
  • Banking Software
  • Banking Supervisions
  • Banking Systems
  • Banking Technologies
  • Bashes
  • Batch Processing
  • Behavioral Analysis
  • Belts
  • Benchmarking Studies
  • Benchmarkings
  • Benchmarks
  • Best Practices
  • Big Data
  • Billing Management
  • Billings
  • Biotechnologies
  • Black Box Testing
  • Blockchains
  • Bookings
  • Bookkeepings
  • Border Controls
  • Borrowings
  • Bots
  • Bridges
  • Broadcastings
  • Browser Compatibilities
  • Browser Testing
  • Browser-Based
  • Browsers
  • Budgetings
  • Build Automation
  • Build Pipelines
  • Build Tools
  • Building Automation
  • Building Securities
  • Built Environments
  • Business
  • Business Alignments
  • Business Analysis
  • Business Analytics
  • Business Applications
  • Business Automation
  • Business Continuities
  • Business Excellence
  • Business Insurances
  • Business Intelligence
  • Business Logics
  • Business Management
  • Business Modeling
  • Business Models
  • Business Operations
  • Business Plannings
  • Business Plans
  • Business Process
  • Business Process Automation
  • Business Process Management
  • Business Process Mappings
  • Business Roles
  • Business Software
  • Business Solutions
  • Business Strategies
  • Business Tools
  • Business Transformations
  • Business to Consumers
  • Business-to-Business
  • CI
  • CI/CD Pipelines
  • Caches
  • Caching
  • Calendars
  • Cameras
  • Campaign Management
  • Capacity Management
  • Capital Adequacies
  • Capital Markets
  • Capital Markets Surveillances
  • Carbon Accounting
  • Career Development
  • Case Laws
  • Case Management
  • Cash Flow Management
  • Cash Management
  • Cash Reconciliations
  • Catalog Management
  • Catalogs
  • Centralized Management
  • Certificate Authorities
  • Certificates
  • Certifications
  • Change Data Captures
  • Change Management
  • Charting
  • Charts
  • Chatbots
  • Chats
  • Chemical Engineering
  • Cities
  • Claims Management
  • Claims Management Systems
  • Claims Processing
  • Classification
  • Clean Energies
  • Clearings
  • Client Books
  • Client Communications
  • Client Data
  • Client Experiences
  • Client Libraries
  • Client Management
  • Client Relations
  • Client Relationship Management
  • Client Reportings
  • Client Satisfaction Surveys
  • Client Services
  • Client Solutions
  • Client Updates
  • Client Visions
  • Client-servers
  • Clients
  • Climate Changes
  • Climate Strategies
  • Climates
  • Cloud Access
  • Cloud Adoptions
  • Cloud Application Development
  • Cloud Architectures
  • Cloud Computes
  • Cloud Computing
  • Cloud Computing Environments
  • Cloud Computing Infrastructure
  • Cloud Computing Platforms
  • Cloud Computing Services
  • Cloud Connectivity
  • Cloud Controls
  • Cloud Data
  • Cloud Data Platforms
  • Cloud Data Warehouses
  • Cloud Deployments
  • Cloud Development
  • Cloud Ecosystems
  • Cloud Engineering
  • Cloud Environments
  • Cloud Governance
  • Cloud Implementations
  • Cloud Infrastructure
  • Cloud Integrations
  • Cloud Journeys
  • Cloud Landing Zones
  • Cloud Management
  • Cloud Migrations
  • Cloud Natives
  • Cloud Networking
  • Cloud Operations
  • Cloud Optimizations
  • Cloud Platforms
  • Cloud Risk Management
  • Cloud Risks
  • Cloud Securities
  • Cloud Security Best Practices
  • Cloud Security Controls
  • Cloud Security Frameworks
  • Cloud Security Measures
  • Cloud Security Posture Management
  • Cloud Security Tools
  • Cloud Service Providers
  • Cloud Services
  • Cloud Software
  • Cloud Solutions
  • Cloud Spanners
  • Cloud Storage
  • Cloud Strategies
  • Cloud Systems
  • Cloud Technologies
  • Cloud Technologies And Services
  • Cloud Transformations
  • Cloud Workload Protection Platforms
  • Cloud-Based
  • Cloud-Based Applications
  • Cloud-Based Architectures
  • Cloud-Based Data Platforms
  • Cloud-Based Infrastructure
  • Cloud-Based Products
  • Cloud-Based Software
  • Cloud-Based Technologies
  • Cloud-First Infrastructure
  • Cloud-based Environments
  • Cloud-based Services
  • Cloud-based Solutions
  • Cloud-native Applications
  • Cloud-native Architectures
  • Cloud-native Design
  • Cloud-native Development
  • Cloud-native Platforms
  • Cloud-native Services
  • Cloud-native Solutions
  • Cloud-native Tech
  • Cloud-native Technologies
  • Clouds
  • Clustering
  • Coals
  • Code Analysis
  • Code Coverages
  • Code Generations
  • Code Management
  • Code Quality
  • Code Refactorings
  • Code Repositories
  • Code Reuses
  • Code Reviews
  • Code Signings
  • Code Versioning Tools
  • Codes
  • Collaboration Tools
  • Collaborations
  • Collaborative Development
  • Collateral Management
  • Collaterals
  • Collections
  • Command Lines
  • Commerce
  • Commercial Services
  • Commodities
  • Common Sense
  • Communication Tools
  • Communications
  • Communities
  • Community Engagements
  • Community Healths
  • Compatibilities
  • Compensation Management
  • Competency Frameworks
  • Competitive Analyses
  • Competitive Analysis
  • Competitive Intelligence
  • Competitor Analysis
  • Compilations
  • Complex Systems
  • Compliance
  • Compliance Automation
  • Compliance Expertises
  • Compliance Frameworks
  • Compliance Management
  • Compliance Managers
  • Compliance Monitoring
  • Compliance Monitoring Programs
  • Compliance Oversights
  • Compliance Policies
  • Compliance Services
  • Compliance Solutions
  • Compliance Systems
  • Compliance Technologies
  • Component Frameworks
  • Component Libraries
  • Compressions
  • Computations
  • Computer Aided Design
  • Computer Aided Engineering
  • Computer Aided Manufacturing
  • Computer Applications
  • Computer Graphics
  • Computer Sciences
  • Computer Systems
  • Computer Visions
  • Computers
  • Computes
  • Computing
  • Concurrencies
  • Conferences
  • Conferencings
  • Configuration Management
  • Configuration Management Tools
  • Configurations
  • Connectivity
  • Connectors
  • Construction
  • Consulting Services
  • Consultings
  • Consumer Behaviors
  • Consumer Electronics
  • Consumer Protection
  • Contact Centers
  • Contact Databases
  • Contact Management
  • Contacts
  • Container Images
  • Container Management
  • Container Orchestration
  • Container Platforms
  • Container Runtimes
  • Container Securities
  • Container Services
  • Containerization
  • Containerization Technologies
  • Containerized Applications
  • Containerized Deployments
  • Containerized Environments
  • Containerized Workloads
  • Containers
  • Content Creations
  • Content Deliveries
  • Content Delivery Networks
  • Content Filterings
  • Content Generations
  • Content Management
  • Content Management Systems
  • Content Marketing
  • Content Organizations
  • Content Personalizations
  • Content Repositories
  • Content Sharing
  • Content Strategies
  • Contents
  • Contexts and Dependency Injections
  • Continuous Deliveries
  • Continuous Deployments
  • Continuous Improvements
  • Continuous Integration/Continuous Deployments
  • Continuous Integrations
  • Continuous Learning
  • Continuous Monitoring
  • Contract Management
  • Contributions
  • Control Planes
  • Control Systems
  • Controllers
  • Controls
  • Controls Frameworks
  • Conversation Analytics
  • Conversational AI
  • Coordinates
  • Copywritings
  • Core Banking
  • Core Systems
  • Corporate Actions
  • Corporate Banking
  • Corporate Finances
  • Corporate Learning
  • Cost Accounting
  • Cost Containments
  • Cost Controls
  • Cost Engineering
  • Cost Management
  • Cost Optimizations
  • Country-Specific
  • Crawlings
  • Creative Productions
  • Creative Services
  • Creative Suites
  • Creative Tools
  • Credentials
  • Credit Applications
  • Credit Controls
  • Credit Management
  • Credit Process
  • Credit Ratings
  • Credit Risk Modeling
  • Credit Risks
  • Credit Valuation Adjustments
  • Crisis Management
  • Critical Thinkings
  • Cross Currency Swaps
  • Cross Platforms
  • Cross-border Payments
  • Cross-browser Compatibilities
  • Cross-browser Testing
  • Cryptocurrencies
  • Cryptographies
  • Cs
  • Cultural Changes
  • Currencies
  • Custodies
  • Custody Services
  • Custom Development
  • Custom Software
  • Custom Solutions
  • Customer Analytics
  • Customer Data
  • Customer Data Platforms
  • Customer Engagements
  • Customer Experience Design
  • Customer Experiences
  • Customer Feedback
  • Customer Intelligence
  • Customer Journey Mappings
  • Customer Journeys
  • Customer Management
  • Customer Onboardings
  • Customer Relationship Management
  • Customer Satisfactions
  • Customer Segmentations
  • Customer Service
  • Customer Success
  • Customer Support
  • Customer Targetings
  • Customizations
  • Customs
  • Customs Procedures
  • Cyber Defenses
  • Cyber Governance
  • Cyber Programs
  • Cyber Resiliences
  • Cyber Risk Management
  • Cyber Securities
  • Cyber Security Assessments
  • Cybersecurities
  • Cybersecurity Frameworks
  • DDoS Protection
  • DNS, DHCP, and IP Address Management
  • Dashboards
  • Data
  • Data Access
  • Data Access Governance
  • Data Accessibility
  • Data Acquisition
  • Data Analysis
  • Data Analysis Methods
  • Data Analysis Software
  • Data Analysis Techniques
  • Data Analysis Tools
  • Data Analysis Tools And Techniques
  • Data Analytic Tools
  • Data Analytics
  • Data Analytics Tools
  • Data Analytics Tools And Techniques
  • Data And Analytics Tools
  • Data Annotations
  • Data Anonymizations
  • Data Architectures
  • Data As A Services
  • Data Bindings
  • Data Capabilities
  • Data Captures
  • Data Catalogs
  • Data Center Infrastructure
  • Data Center Operations
  • Data Center Services
  • Data Centers
  • Data Centres
  • Data Certifications
  • Data Classification
  • Data Cleanings
  • Data Cleansing
  • Data Collections
  • Data Consumptions
  • Data Conversions
  • Data Discoveries
  • Data Distributions
  • Data Encryptions
  • Data Engineering
  • Data Engines
  • Data Enrichments
  • Data Entries
  • Data Exchanges
  • Data Explorations
  • Data Extractions
  • Data Fabrics
  • Data Factories
  • Data Flows
  • Data Foundations
  • Data Gatherings
  • Data Governance
  • Data Governance Frameworks
  • Data Governance Policies
  • Data Governance Strategies
  • Data Governance Toolings
  • Data Governance Tools
  • Data Handling
  • Data Historians
  • Data Infrastructure
  • Data Ingestions
  • Data Insights
  • Data Integrations
  • Data Integrity
  • Data Intelligence
  • Data Interpretations
  • Data Labelings
  • Data Lake Storage
  • Data Lakes
  • Data Licensings
  • Data Lifecycle
  • Data Lifecycle Management
  • Data Lineages
  • Data Loadings
  • Data Loss Preventions
  • Data Management
  • Data Management Frameworks
  • Data Management Platforms
  • Data Management Strategies
  • Data Management Systems
  • Data Management Tools
  • Data Manipulations
  • Data Mappings
  • Data Marts
  • Data Meshes
  • Data Migrations
  • Data Mining
  • Data Monetizations
  • Data Movements
  • Data Normalizations
  • Data Observability
  • Data Operations
  • Data Orchestration
  • Data Ownerships
  • Data Pipelines
  • Data Platforms
  • Data Preparations
  • Data Privacies
  • Data Privacy Rules
  • Data Processes
  • Data Processing
  • Data Processing Frameworks
  • Data Processing Pipelines
  • Data Products
  • Data Profilings
  • Data Protection
  • Data Providers
  • Data Quality
  • Data Quality Checks
  • Data Quality Controls
  • Data Quality Frameworks
  • Data Quality Management
  • Data Quality Tools
  • Data Reconciliations
  • Data Replications
  • Data Reportings
  • Data Repositories
  • Data Retentions
  • Data Retrievals
  • Data Risk Management
  • Data Science Techniques
  • Data Science Workflows
  • Data Sciences
  • Data Securities
  • Data Security And Privacies
  • Data Services
  • Data Sharing
  • Data Stacks
  • Data Standardizations
  • Data Stewardships
  • Data Storage
  • Data Storytellings
  • Data Strategies
  • Data Streamings
  • Data Structures
  • Data Synchronizations
  • Data Systems
  • Data Technologies
  • Data Testing
  • Data Tools
  • Data Tracking
  • Data Transfers
  • Data Transformation Workflows
  • Data Transformations
  • Data Transmissions
  • Data Validation
  • Data Vaults
  • Data Visualisations
  • Data Visualization Platforms
  • Data Visualization Tools
  • Data Visualizations
  • Data Warehouse Architectures
  • Data Warehouses
  • Data Warehousing
  • Data Wranglings
  • Data and Analytics
  • Data-Driven
  • Data-Driven Processes
  • Data-Driven Products
  • Data-driven Dashboards
  • Data-driven Decision Making
  • Data-driven Initiatives
  • Data-driven Insights
  • Database Administration
  • Database Architectures
  • Database Design
  • Database Integrations
  • Database Management
  • Database Queries
  • Database Securities
  • Database Systems
  • Database Technologies
  • Databases
  • Databases/Systems
  • Datastages
  • Debt Financings
  • Debt Securities
  • Debuggings
  • Decentralizations
  • Decentralized
  • Decentralized Autonomous Organizations
  • Decision Automation
  • Decision Making
  • Decision Sciences
  • Decision Support
  • Decision Support Systems
  • Deep Learning
  • Defis
  • Deliveries
  • Dependencies
  • Dependency Injection Frameworks
  • Dependency Management
  • Dependency Mappings
  • Dependency Tracking
  • Deployment Automation
  • Deployment Infrastructure
  • Deployment Pipelines
  • Deployment Plannings
  • Deployment Practices
  • Deployment Strategies
  • Deployment Tools
  • Deployments
  • Derbies
  • Derivatives
  • Derivatives Pricing Models
  • Derivatives Pricings
  • Design
  • Design Guidelines
  • Design Principles
  • Design Reviews
  • Design Software
  • Design Systems
  • Design Thinkings
  • Design Tools
  • Desktops
  • DevOps Practices
  • DevOps Tools
  • Developer Experiences
  • Developer Portals
  • Developer Tools
  • Development
  • Development Lifecycle
  • Development Operations
  • Development Platforms
  • Development Practices
  • Development Process
  • Development Software
  • Development Tools
  • Device Management
  • Diagnostic Tools
  • Diagnostics
  • Differential Equations
  • Digital Ads
  • Digital Advertising
  • Digital Arts
  • Digital Assets
  • Digital Banking
  • Digital Certificates
  • Digital Channels
  • Digital Commerce
  • Digital Contents
  • Digital Distributions
  • Digital Engagements
  • Digital Experiences
  • Digital Identities
  • Digital Infrastructure
  • Digital Marketing
  • Digital Marketing Technologies
  • Digital Media
  • Digital Operations
  • Digital Payments
  • Digital Products
  • Digital Publishings
  • Digital Rights
  • Digital Self-services
  • Digital Services
  • Digital Signatures
  • Digital Solutions
  • Digital Storytellings
  • Digital Strategies
  • Digital Systems
  • Digital Technologies
  • Digital Tools
  • Digital Transactions
  • Digital Transformations
  • Digital Twins
  • Digital Wallets
  • Digitals
  • Digitizations
  • Directed Acyclic Graphs
  • Directory
  • Directory Services
  • Disaster Recovery
  • Discontinued
  • Distributed
  • Distributed Applications
  • Distributed Computing
  • Distributed Data Processing
  • Distributed Environments
  • Distributed Storage
  • Distributed Systems
  • Distributed Tracing
  • Distribution Systems
  • Distributions
  • Document Analysis
  • Document Creations
  • Document Management
  • Document Management Systems
  • Document Object Models
  • Document Processing
  • Document Stores
  • Documentaries
  • Documentations
  • Documents
  • Domain Adaptations
  • Due Diligences
  • Dynamic Application Security Testing
  • Dynamic Contents
  • Dynamic Pricings
  • Dynamics
  • E-bankings
  • E-commerces
  • E-learnings
  • E-mails
  • E-procurements
  • E-signatures
  • ERP
  • ESB
  • ESG Reportings
  • Earth Sciences
  • Ecommerce Platforms
  • Ecommerces
  • Econometric Techniques
  • Econometrics
  • Economic Analysis
  • Economic Data
  • Economics
  • Ecosystems
  • Edge Computing
  • Edteches
  • Educations
  • Efficiencies
  • Elections
  • Electric Vehicles
  • Electronic Communications
  • Electronic Data Interchange
  • Electronic Invoicings
  • Electronic Payments
  • Electronic Platforms
  • Electronic Tradings
  • Electronics
  • Email Marketing
  • Email Securities
  • Emails
  • Embedded Analytics
  • Embedded Systems
  • Embeddings
  • Emergency Responses
  • Employee Benefits
  • Employee Development
  • Employee Engagements
  • Employee Experiences
  • Employee Networks
  • Employment
  • Enablement
  • Enablement Platforms
  • Encryptions
  • End To End
  • End-to-end Testing
  • Endpoint Detection And Responses
  • Endpoint Management
  • Endpoint Protection
  • Endpoint Securities
  • Endpoint Security Controls
  • Energies
  • Energy Efficiencies
  • Energy Generations
  • Energy Infrastructure
  • Energy Management
  • Energy Performances
  • Engagement Management Platforms
  • Engineering
  • Enterprise AI
  • Enterprise Applications
  • Enterprise Architectures
  • Enterprise Automation
  • Enterprise Content Management
  • Enterprise Data
  • Enterprise IT
  • Enterprise Integrations
  • Enterprise Management
  • Enterprise Performance Management
  • Enterprise Resource Planning
  • Enterprise Risk Management
  • Enterprise Risks
  • Enterprise Searches
  • Enterprise Securities
  • Enterprise Service Bus
  • Enterprise Software
  • Enterprise Solutions
  • Enterprise Systems
  • Enterprise Technologies
  • Enterprise-grade Architectures
  • Enterprises
  • Entertainments
  • Entity Resolutions
  • Entrepreneurships
  • Environment Management
  • Equipments
  • Equities
  • Error Handling
  • Estate Plannings
  • Estimations
  • Ethical Hackings
  • Ethics
  • Evaluation Frameworks
  • Evaluations
  • Evasion Techniques
  • Event Driven
  • Event Handling
  • Event Management
  • Event Marketing
  • Event Meshes
  • Event Plannings
  • Event Registrations
  • Event Streamings
  • Event Technologies
  • Event-driven Systems
  • Events
  • Examples
  • Excel Add-ins
  • Excels
  • Executions
  • Executive Reportings
  • Expense Management
  • Experiment Design
  • Experimentations
  • Explainable AI
  • Exploitations
  • Exploratory Data Analysis
  • Extended Detection and Responses
  • Extensions
  • External Databases
  • External Dependencies
  • External Systems
  • Extract Transform Loads
  • Facial Recognitions
  • Facilities Management
  • Fault Tolerances
  • Feature Engineering
  • Feature Stores
  • Federations
  • Feedback
  • Feedback Systems
  • File Transfers
  • Filing Systems
  • Filmmakings
  • Finances
  • Financial Accounting
  • Financial Analysis
  • Financial Analytics
  • Financial Compliances
  • Financial Controls
  • Financial Crime Preventions
  • Financial Crimes
  • Financial Data
  • Financial Engineering
  • Financial Inclusions
  • Financial Infrastructure
  • Financial Instruments
  • Financial Management
  • Financial Mathematics
  • Financial Modeling
  • Financial Models
  • Financial Operations
  • Financial Plannings
  • Financial Reportings
  • Financial Researches
  • Financial Risk Management
  • Financial Securities
  • Financial Services
  • Financial Software
  • Financial Stabilities
  • Financial Systems
  • Financial Technologies
  • Fine-tunings
  • Fintech
  • Firewalls
  • Firmwares
  • First-Party Data
  • Fixed Incomes
  • Flashes
  • Flexibilities
  • Flexible Workings
  • Flinks
  • Floor Plannings
  • Forecasting
  • Forecasting Models
  • Foreign Exchanges
  • Forexes
  • Forge
  • Form Validation
  • Formatting Objects Processors
  • Forms
  • Fossil Fuels
  • Foundations
  • Frameworks
  • Fraud Detection Systems
  • Fraud Detections
  • Fraud Preventions
  • Frenches
  • Front-ends
  • Frontend Development
  • Frontend Frameworks
  • Frontends
  • Full Stack Development
  • Full Stacks
  • Functional Testing
  • Functions
  • Fund Accounting
  • Fund Management
  • Fund Valuations
  • Futures
  • GPS Technologies
  • Game Developers
  • Game Development
  • Game Engines
  • Gamings
  • Gateways
  • General Ledgers
  • Generative AI
  • Generative Modeling
  • Generative Models
  • Genomics
  • Geographic Information Systems
  • Geographies
  • Geolocations
  • Geospatials
  • GitHub Copilots
  • Global Markets
  • Global People Surveys
  • Global Positioning Systems
  • Globalizations
  • Goal Settings
  • Google Cloud Functions
  • Goverances
  • Governance
  • Governance And Controls
  • Governance Frameworks
  • Governance Tools
  • Government
  • Government Policies
  • Government Relations
  • Government Systems
  • Graph Databases
  • Graphic Design
  • Graphical User Interfaces
  • Graphics
  • Graphics Processing Units
  • Graphs
  • Green Buildings
  • Green Technologies
  • Grid Management
  • HCM
  • HR Management
  • HR Tech
  • HR Technologies
  • Hadoop Distributed File Systems
  • Hardenings
  • Hardware
  • Hbases
  • Health Infrastructure
  • Healthcare
  • Healthcare Systems
  • Heating, Ventilation, and Air Conditionings
  • Hedging
  • Help Desks
  • High Availabilities
  • High Performance Computing
  • High Performances
  • High Throughputs
  • Hirings
  • Hospitality
  • Hosting
  • Human Capital Management
  • Human Computer Interactions
  • Human Factors
  • Human Resources
  • Human Spaceflights
  • Human-Centered Design
  • Hybrid Clouds
  • Hypervisors
  • Hypothesis Testing
  • IPAM
  • IT Architectures
  • IT Audits
  • IT Consultings
  • IT Governance
  • IT Infrastructure
  • IT Management
  • IT Modernizations
  • IT Operations
  • IT Plannings
  • IT Platforms
  • IT Project Management
  • IT Risk Management
  • IT Risks
  • IT Service Management
  • IT Services
  • IT Strategies
  • IT and Operational Risks
  • Ideas
  • Ideations
  • Identities
  • Identity And Access Management
  • Identity Management
  • Identity Providers
  • Identity Verifications
  • Image Generations
  • Image Loadings
  • Image Processing
  • Image Scannings
  • Implementations
  • In Memories
  • Incident Management
  • Incident Response Management
  • Incident Responses
  • Inclusive Design
  • Incubation
  • Indexings
  • Industrial Automation
  • Industrial Engineering
  • Industrial Equipments
  • Industrial Iots
  • Industry Analysis
  • Industry Reports
  • Inference Optimizations
  • Inferences
  • Informatics
  • Information Architectures
  • Information Governance
  • Information Management
  • Information Protection
  • Information Retrievals
  • Information Securities
  • Information Security Controls
  • Information Security Frameworks
  • Information Sharing
  • Information Systems
  • Information Technologies
  • Information Technology Infrastructure
  • Informationssystemes
  • Infrastructure
  • Infrastructure As Codes
  • Infrastructure Components
  • Infrastructure Improvements
  • Infrastructure Management
  • Infrastructure Monitoring
  • Infrastructure Securities
  • Infrastructure-as-a-Service
  • Ingress Controllers
  • Innovation
  • Insights
  • Inspections
  • Instant Messaging
  • Instrumentations
  • Insurance Operations
  • Insurance Software
  • Insurance Technologies
  • Insurances
  • Integrated Development Environments
  • Integrated Solutions
  • Integration Frameworks
  • Integration Platforms
  • Integration Strategies
  • Integration Testing
  • Integration Tests
  • Integrations
  • Integrity
  • Intellectual Properties
  • Intelligence
  • Intelligent Systems
  • Interactive Design
  • Interactive Media
  • Interactive Prototypes
  • Interactive Voice Responses
  • Interactives
  • Interest Rate Swaps
  • Interface Design
  • Interfaces
  • Internal Applications
  • Internal Audits
  • Internal Clouds
  • Internal Communications
  • Internal Control Frameworks
  • Internal Controls
  • Internal Databases
  • Internal Networks
  • Internal Platforms
  • Internal Systems
  • Internal Tools
  • International Banking
  • International Laws
  • International Markets
  • International Relations
  • International Trades
  • Internationalizations
  • Internet
  • Internet Banking
  • Internet Information Services
  • Internet Securities
  • Internet of Things
  • Interoperabilities
  • Intranets
  • Intrusion Detection Systems
  • Intrusion Detections
  • Intrusion Prevention Systems
  • Intrusion Preventions
  • Inventory Management
  • Investment Analysis
  • Investment Banking
  • Investment Funds
  • Investment Management
  • Investment Platforms
  • Investments
  • Investor Relations
  • Invoice Processing
  • Isolations
  • Issue Tracking
  • Iterative Development
  • Ivies
  • Java Virtual Machines
  • Job Boards
  • Job Schedulers
  • Job Scheduling
  • Journalism
  • Journey Design
  • Journey Mappings
  • Kernels
  • Key Management
  • Key Metrics
  • Key Risk Indicators (KRIs)
  • Key Values
  • Know Your Customers
  • Knowledge Bases
  • Knowledge Graphs
  • Knowledge Management
  • Knowledge Representations
  • Knowledge Sharing
  • LLM
  • Language Understandings
  • Large Data Sets
  • Large Databases
  • Large Datasets
  • Large Language Models
  • Launch Strategies
  • Law Enforcements
  • Layer 2S
  • Lead Generations
  • Lead Management
  • Leaderships
  • Learning
  • Learning And Development
  • Learning Management
  • Learning Management Systems (LMS)
  • Learning Technologies
  • Ledgers
  • Legacy Systems
  • Legal
  • Legal Compliances
  • Legal Frameworks
  • Legal Researches
  • Legal Tech
  • Legal Technologies
  • Lendings
  • Lessons Learned
  • Libraries
  • License Compliances
  • License Management
  • Licensings
  • Life Cycle Management
  • Lifecycle Management
  • Lightings
  • Linear Algebras
  • Linked Data
  • Liquidity Management
  • Liquidity Risk Management
  • Liquidity Stress Testing
  • Live Chats
  • Live Data
  • Live Streamings
  • Load Balancers
  • Load Balancings
  • Load Testing
  • Local GAAP
  • Localizations
  • Location Services
  • Log Analysis
  • Log Analytics
  • Log Collections
  • Log Management
  • Logging
  • Logistic Regressions
  • Logistics
  • Loss Data
  • Low Carbons
  • Low Codes
  • Low Latencies
  • Low-Code Platforms
  • M&AS
  • ML Engineering
  • Machine Learning
  • Machine Learning Algorithms
  • Machine Learning Engineering
  • Machine Learning Frameworks
  • Machine Learning Lifecycle
  • Machine Learning Models
  • Machine Learning Platforms
  • Machine Learning Systems
  • Machinings
  • Mails
  • Mainframes
  • Maintenance
  • Major Incident Management
  • Managed Services
  • Management
  • Management Accounting
  • Management Information
  • Management Information And Reportings
  • Management Software
  • Management Systems
  • Management Tools
  • Manual Processes
  • Manual Testing
  • Manufacturing
  • Mapping Software
  • Mappings
  • Market Analysis
  • Market Analytics
  • Market Data
  • Market Information
  • Market Intelligence
  • Market Makers
  • Market Researches
  • Market Risks
  • Marketing
  • Marketing Analytics
  • Marketing Automation
  • Marketing Platforms
  • Marketing Strategies
  • Marketing Technologies
  • Marketing Tools
  • Marketplace Platforms
  • Marketplaces
  • Markets
  • Massively Parallel Processing
  • Master Data
  • Master Data Management
  • Matching Algorithms
  • Material Design
  • Material Handling
  • Mathematics
  • Matrixes
  • Measurements
  • Mechanical Systems
  • Media
  • Media Contents
  • Media Management
  • Media Monitoring
  • Media Productions
  • Mediations
  • Medical Devices
  • Medical Records
  • Meeting Management
  • Meetings
  • Memory Management
  • Mental Healths
  • Mentoring
  • Mergers And Acquisitions
  • Meridians
  • Message Brokers
  • Message Queuings
  • Messaging
  • Messaging Platforms
  • Messaging Systems
  • Metadata
  • Metadata Management
  • Metrics
  • Micro-services
  • Microfinances
  • Microservice-based Architectures
  • Microservices
  • Microsoft Access
  • Middle Offices
  • Middlewares
  • Migration Plannings
  • Migrations
  • Milestone Tracking
  • Mission Critical
  • Mobile Applications
  • Mobile Apps
  • Mobile Banking
  • Mobile Development
  • Mobile Device Management
  • Mobile Devices
  • Mobile Operating Systems
  • Mobile Payments
  • Mobile Technologies
  • Mobile Testing
  • Mobile Tradings
  • Mobiles
  • Mockings
  • Model Adaptations
  • Model Analysis
  • Model Architectures
  • Model Compressions
  • Model Context Protocols
  • Model Context Protocols (MCP)
  • Model Deployments
  • Model Development
  • Model Evaluations
  • Model Fine-tunings
  • Model Governance
  • Model Integrity
  • Model Lifecycle Management
  • Model Management
  • Model Monitoring
  • Model Orchestration
  • Model Performance
  • Model Retrainings
  • Model Testing
  • Model Trainings
  • Model Validation
  • Model Versionings
  • Modeling
  • Modeling And Analytics Tools
  • Modeling Platforms
  • Modeling Tools
  • Modernizations
  • Modularity
  • Monetizations
  • Money Markets
  • Monitoring
  • Monitoring And Controls
  • Monitoring Tools
  • Monte Carloes
  • Multi Clouds
  • Multi-Agent Systems
  • Multi-Factor Authentications
  • Multi-channels
  • Multi-platforms
  • Multi-regions
  • Multidimensional Databases
  • Multimedias
  • Multimodals
  • Multiplatforms
  • Multiple Systems
  • NLP
  • Natural Gas
  • Natural Language Processing
  • Navigation
  • Negotiations
  • Neobanks
  • Netwerkens
  • Network Access
  • Network Analysis
  • Network Architectures
  • Network Automation
  • Network Configurations
  • Network Design
  • Network Devices
  • Network Engineering
  • Network Infrastructure
  • Network Management
  • Network Monitoring
  • Network Optimizations
  • Network Performance
  • Network Securities
  • Network Topologies
  • Networking
  • Neural Networks
  • Neurodiversities
  • New Tabs
  • News
  • News Media
  • Newsletters
  • No Codes
  • NoSQL
  • Nonprofits
  • Nostro
  • Notebooks
  • Notifications
  • Nuclear Energies
  • OIA
  • OLE for Process Controls
  • ORM
  • OSX
  • Object Storage
  • Object Stores
  • Object-Oriented
  • Observability
  • Observability Platforms
  • Observability Stacks
  • Observability Toolings
  • Observability Tools
  • Office Applications
  • Office Management
  • Office Software
  • Office Suites
  • Omnichannels
  • On Demands
  • Onboardings
  • Online Advertising
  • Online Analytical Processing
  • Online Banking
  • Online Learning
  • Online Shoppings
  • Online Tools
  • Online Transaction Processing
  • Ontologies
  • Open Data
  • Open Source
  • Open-Source Solutions
  • Open-source Frameworks
  • Open-source Technologies
  • Open-source Tools
  • Operating Systems
  • Operational Efficiencies
  • Operational Excellence
  • Operational Intelligence
  • Operational Metrics
  • Operational Practices
  • Operational Reportings
  • Operational Resiliences
  • Operational Risk Management
  • Operational Risks
  • Operational Systems
  • Operational Technologies
  • Operations
  • Operations Management
  • Operations Researches
  • Operations Solutions
  • Operators
  • Optical Character Recognitions
  • Optimization Techniques
  • Optimizations
  • Options
  • Orchestration
  • Order Management
  • Order Management Systems
  • Organizational Changes
  • Organizational Design
  • Organizational Development
  • Organizational Structures
  • Organizational Transformations
  • Organizations
  • Outils Digitauxes
  • Packages
  • Packaging
  • Packet Captures
  • Paid Media
  • Panoramas
  • Parallel Processing
  • Patch Management
  • Pattern Recognitions
  • Patterns
  • Pay Per Clicks
  • Payment Models
  • Payment Processing
  • Payment Solutions
  • Payment Systems
  • Payments
  • Payroll
  • Penetration Testing
  • Performance
  • Performance Analysis
  • Performance Engineering
  • Performance Evaluations
  • Performance Improvements
  • Performance Management
  • Performance Measurements
  • Performance Metrics
  • Performance Monitoring
  • Performance Optimizations
  • Performance Testing
  • Performance Tracking
  • Performance Tuning
  • Persistences
  • Persistent Memories
  • Personal Finances
  • Personalizations
  • Personalized Medicines
  • Pharmaceuticals
  • Photographies
  • Physical Securities
  • Pigs
  • Pillar 3S
  • Pipeline As Codes
  • Pipeline Management
  • Pipeline Orchestration
  • Pipelines
  • Pivot Tables
  • Planning Analytics
  • Plannings
  • Platform Development
  • Platform Ecosystems
  • Platform Engineering
  • Platform Management
  • Platform Modernizations
  • Platform Securities
  • Platform Services
  • Platform Solutions
  • Platform Strategies
  • Platform Systems
  • Platform-as-a-Service
  • Platforms
  • Plottings
  • Plugins
  • Point Of Sales
  • Policies
  • Policy Administration
  • Policy Administration Systems
  • Policy Advisories
  • Policy Analysis
  • Policy Enforcements
  • Policy Management
  • Policy Researches
  • Portabilities
  • Portables
  • Portals
  • Portfolio Management
  • Portfolio Management Tools
  • Portfolio Reviews
  • Portlets
  • Post Productions
  • Postmortems
  • Power Distributions
  • Power Generations
  • Power Plants
  • Power Transmissions
  • Practice Management
  • Predictabilities
  • Predictions
  • Predictive Analytics
  • Predictive Modeling
  • Presentation Software
  • Presentations
  • Price Optimizations
  • Pricing Analytics
  • Pricing Models
  • Pricing Strategies
  • Pricing Systems
  • Pricing Tools
  • Pricings
  • Prioritizations
  • Privacy
  • Privacy Impact Assessments
  • Private Clouds
  • Privilege Escalations
  • Privileged Access Controls
  • Probabilities
  • Probability Theories
  • Problem Management
  • Problem Resolutions
  • Problem Solving
  • Process Analysis
  • Process Analytics
  • Process Automation
  • Process Builders
  • Process Controls
  • Process Design
  • Process Documentations
  • Process Engineering
  • Process Frameworks
  • Process Improvements
  • Process Management
  • Process Mapping Tools
  • Process Mappings
  • Process Maps
  • Process Mining
  • Process Modeling
  • Process Modeling Tools
  • Process Monitoring
  • Process Optimizations
  • Process Re-engineerings
  • Process Reengineerings
  • Process Safety
  • Processes
  • Procure To Pays
  • Procurement Tools
  • Procurements
  • Product Costings
  • Product Design
  • Product Development
  • Product Development Lifecycle
  • Product Information Management
  • Product Lifecycle Management
  • Product Management
  • Product Management Tools
  • Product Masters
  • Product Owners
  • Product Ownerships
  • Product Platforms
  • Product Roadmaps
  • Product Securities
  • Product Strategies
  • Product Testing
  • Product Tools
  • Product Upgrades
  • Production
  • Production Deployments
  • Production Environments
  • Production Management
  • Production Support
  • Production Systems
  • Productivity
  • Productivity Suites
  • Productivity Tools
  • Products
  • Professional Development
  • Professional Networking
  • Professional Photographies
  • Professional Services
  • Professional Trainings
  • Profilings
  • Profitability Analysis
  • Program Management
  • Programmable Logic Controllers
  • Programming
  • Programming Languages
  • Progress Reports
  • Project Charters
  • Project Closeouts
  • Project Governance
  • Project Life-cycles
  • Project Management
  • Project Management Processes
  • Project Management Tools
  • Project Schedules
  • Projects
  • Prompt Engineering
  • Prompt Injection Defenses
  • Promptings
  • Prompts
  • Property Management
  • Proprietary Software
  • Protection
  • Protocols
  • Prototyping
  • Provisioning Process
  • Provisionings
  • Proxies
  • Prunings
  • Psychologies
  • Public Affairs
  • Public Clouds
  • Public Health Systems
  • Public Healths
  • Public Key Infrastructure
  • Purchasings
  • Push Notifications
  • QA
  • QA Automation
  • Quality Assurance
  • Quality Assurance Frameworks
  • Quality Assurance Processes
  • Quality Assurance Reviews
  • Quality Assurance Testing
  • Quality Controls
  • Quality Frameworks
  • Quality Management
  • Quality Metrics
  • Quality Tools
  • Quantitative Analysis
  • Quantitative Finances
  • Quantitative Methods
  • Quantitative Modeling
  • Quantitative Models
  • Quantum Computing
  • Query Languages
  • Query Optimizations
  • Question Answerings
  • Queues
  • Rapid Development
  • Rapid Prototyping
  • Rate Limitings
  • Ratings
  • Reactives
  • Real Estates
  • Real Time
  • Real-Time Operating Systems
  • Real-Time Payments
  • Real-time Analytics
  • Real-time Data
  • Real-time Data Flows
  • Real-time Insights
  • Real-time Monitoring
  • Real-time Operations
  • Real-time Processing
  • Real-time Rendering
  • Real-time Streamings
  • Real-time Systems
  • Real-time Visibility
  • Reasonings
  • Receivables Management
  • Recipes
  • Recommendation Engines
  • Reconciliation Reports
  • Reconciliations
  • Reconnaissances
  • Record Keepings
  • Recordings
  • Records Management
  • Recruitings
  • Recruitment
  • Reference Data
  • Reference Management
  • Reference Models
  • Registrations
  • Regression Testing
  • Regulatory Affairs
  • Regulatory Analysis
  • Regulatory Capital
  • Regulatory Compliances
  • Regulatory Consultings
  • Regulatory Filings
  • Regulatory Intelligence
  • Regulatory Reportings
  • Regulatory Solutions
  • Regulatory Technologies
  • Reinforcement Learning
  • Relational Data
  • Relational Database Management Systems
  • Relational Databases
  • Relationals
  • Relationship Buildings
  • Relationship Management
  • Release Activities
  • Release Management
  • Release Management Processes
  • Release Pipelines
  • Release Plannings
  • Reliabilities
  • Reliability Engineering
  • Remittances
  • Remote Access
  • Remote Collaborations
  • Remote Communications
  • Remote Works
  • Rendering
  • Renewable Energies
  • Replications
  • Reporting And Analytics
  • Reporting And Measurements
  • Reporting Applications
  • Reporting Automation
  • Reporting Dashboards
  • Reporting Frameworks
  • Reporting Mechanisms
  • Reporting Metrics
  • Reporting Platforms
  • Reporting Solutions
  • Reporting Systems
  • Reporting Tools
  • Reportings
  • Repository Management
  • Repository Managers
  • Requirements
  • Requirements Engineering
  • Requirements Gatherings
  • Requirements Management
  • Research
  • Research Data
  • Research Methods
  • Research Tools
  • Resiliences
  • Resiliency
  • Resilient Architectures
  • Resilient Systems
  • Resource Allocations
  • Resource Management
  • Resource Plannings
  • Resource Scheduling
  • Responsive Design
  • Rest Assured
  • Retail Technologies
  • Retails
  • Retry Logics
  • Reusable Components
  • Revenue Generations
  • Revenue Intelligence
  • Revenue Management
  • Revenue Models
  • Revenue Operations
  • Revenue Optimizations
  • Revenues
  • Reverse Proxies
  • Review And Approvals
  • Reviews
  • Rich Internet Applications
  • Risk Analysis
  • Risk And Control Frameworks
  • Risk Assessments
  • Risk Management
  • Risk Management Plans
  • Risk Management Systems
  • Risk Management Tools
  • Risk Models
  • Risk Systems
  • Roadmappings
  • Robotic Process Automation
  • Robotics
  • Robustness
  • Root Cause Analysis
  • Routers
  • Routings
  • Runtimes
  • SQL Databases
  • SQL Queries
  • SUMIF
  • Safes
  • Safety
  • Sales
  • Sales Analytics
  • Sales Automation
  • Sales Clouds
  • Sales Enablement
  • Sales Enablement Platforms
  • Sales Enablement Tools
  • Sales Management
  • Sales Productivity
  • Sales Technologies
  • Sales Tools
  • Sales Trainings
  • Sanctions
  • Sanctions Compliances
  • Sanctions Screenings
  • Sandboxes
  • Sanity Testing
  • Satellite Data
  • Scalabilities
  • Scaling
  • Scannings
  • Scenario Analysis
  • Scenario Modeling
  • Scenarios
  • Scheduling
  • Scientific Computing
  • Scorings
  • Screenings
  • Scripting Languages
  • Scriptings
  • Search
  • Search Engine Optimizations
  • Search Engines
  • Secrets Management
  • Secure Architecture Design
  • Secure Architectures
  • Secure Code Reviews
  • Secure Coding Practices
  • Secure Codings
  • Secure Communications
  • Secure Configurations
  • Secure Design
  • Secure Design Reviews
  • Secure Development
  • Secure Web Gateways
  • Securities Lendings
  • Securities Tradings
  • Security
  • Security Administration
  • Security Alarms
  • Security Analysis
  • Security Analytics
  • Security Architecture And Design
  • Security Architectures
  • Security Assessments
  • Security Audits
  • Security Automation
  • Security Baselines
  • Security Best Practices
  • Security Compliances
  • Security Controls
  • Security Design
  • Security Development Lifecycle
  • Security Engineering
  • Security Frameworks
  • Security Governance
  • Security Groups
  • Security Incident Responses
  • Security Information and Event Management
  • Security Infrastructure
  • Security Intelligence
  • Security Management
  • Security Measures
  • Security Mechanisms
  • Security Models
  • Security Monitoring
  • Security Operations
  • Security Orchestration, Automation and Responses
  • Security Platforms
  • Security Procedures
  • Security Requirements
  • Security Reviews
  • Security Risk Assessments
  • Security Settings
  • Security Solutions
  • Security Systems
  • Security Testing
  • Security Tools
  • Security Updates
  • Segmentations
  • Self Services
  • Self-healings
  • Self-improvements
  • Semantic Searches
  • Sensors
  • Serializations
  • Server-Side Rendering
  • Serverless
  • Serverless Architectures
  • Servers
  • Service Bus
  • Service Catalogs
  • Service Clouds
  • Service Deliveries
  • Service Design
  • Service Desks
  • Service Discoveries
  • Service Frameworks
  • Service Management
  • Service Mappings
  • Service Meshes
  • Service Operations
  • Service Strategies
  • Services
  • Servlets
  • Settlement Systems
  • Settlements
  • Shared Resources
  • Shared Responsibilities
  • Shells
  • Shift-left Testing
  • Shippings
  • Short Message Services
  • Signal Processing
  • Simple API for XML
  • Simulation Tools
  • Simulations
  • Site Reliability Engineering
  • Skill Development
  • Skills Development
  • Slides
  • Slideshows
  • Smart Contracts
  • Smart Grids
  • Smart Homes
  • Smart Workings
  • Smartphones
  • Smoke Testing
  • Snapshot Testing
  • Social
  • Social Media
  • Social Media Management
  • Social Networking
  • Social Networks
  • Software
  • Software Applications
  • Software Architectures
  • Software Asset Management
  • Software Configuration Management
  • Software Configurations
  • Software Deliveries
  • Software Delivery Life Cycles
  • Software Deployments
  • Software Design
  • Software Development
  • Software Development Best Practices
  • Software Development Kits
  • Software Distributions
  • Software Documentations
  • Software Engineering
  • Software Languages
  • Software Licensings
  • Software Platforms
  • Software Projects
  • Software Quality
  • Software Solutions
  • Software Systems
  • Software Technologies
  • Software Testing
  • Software Testing Methodologies
  • Software Tools
  • Software as a Services
  • Software-as-a-Service
  • Solutions
  • Source Code Management
  • Source Code Management Tools
  • Source Codes
  • Source Control Management
  • Source Controls
  • Source Systems
  • Sourcings
  • Spatial Analytics
  • Spatial Data
  • Spend Management
  • Spreadsheets
  • Stakeholder Management
  • Standups
  • Startups
  • State Management
  • Statefuls
  • Static Analysis
  • Static Application Security Testing
  • Statistical Analysis
  • Statistical Methods
  • Statistical Modeling
  • Statistical Modellings
  • Statistical Models
  • Statistical Packages
  • Statistical Techniques
  • Statistical Tools
  • Statistics
  • Stochastic Calculus
  • Stock Controls
  • Storage
  • Stored Procedures
  • Strategic Design
  • Strategic Plannings
  • Strategies
  • Stream Analytics
  • Stream Processing
  • Streaming Architectures
  • Streaming Data
  • Streamings
  • Stress Testing
  • Stress Testing Models
  • Stress Tests
  • Strong Authentications
  • Structured Data
  • Structured Databases
  • Structured Products
  • Structured Streamings
  • Subscription Models
  • Subscriptions
  • Supervised Learning
  • Supplier Contracts
  • Supplier Management
  • Supply Chain Finances
  • Supply Chain Management
  • Supply Chain Risk Management
  • Supply Chain Securities
  • Supply Chains
  • Support
  • Support Platforms
  • Support Systems
  • Support Ticketing
  • Surveillances
  • Survey Platforms
  • Sustainability
  • Sustainable Investings
  • Switches
  • Synthetics
  • System Administration
  • System Analysis
  • System Applications
  • System Architectures
  • System Configurations
  • System Design
  • System Development
  • System Enhancements
  • System Hardenings
  • System Implementations
  • System Information
  • System Integrations
  • System Interfaces
  • System Maintenance
  • System Management
  • System Monitoring
  • System Of Records
  • System Operations
  • System Optimizations
  • System Performances
  • System Programming
  • System Requirements
  • System Securities
  • System Services
  • System Software
  • System Solutions
  • System Stabilities
  • System Testing
  • System Tools
  • System Updates
  • Systems
  • Systems Administration
  • Systems Analysis
  • Systems Architectures
  • Systems Design
  • Systems Development
  • Systems Engineering
  • Systems Integrations
  • Systems Management
  • Systems Programming
  • Systems Thinkings
  • T1S
  • Tableaux De Bords
  • Tablets
  • Tag Management
  • Tainas
  • Talent Acquisition
  • Talent Management
  • Task Automation
  • Task Management
  • Tasks
  • Tax Compliances
  • Tax Laws
  • Tax Management
  • Tax Plannings
  • Tax Preparations
  • Tax Researches
  • Tax Software
  • Tax Systems
  • Tax Technology Solutions
  • Taxes
  • Tcls
  • Team Collaborations
  • Team Communications
  • Team Development
  • Team Management
  • Technical Debt
  • Technical Plannings
  • Technical Reviews
  • Technical Support
  • Technical Writings
  • Technologies
  • Technology Adoptions
  • Technology Architectures
  • Technology Enhancements
  • Technology Governance
  • Technology Plannings
  • Technology Platforms
  • Technology Risk Management
  • Technology Services
  • Technology Stacks
  • Technology Strategies
  • Technology Upgrades
  • Telecommunications
  • Telefonoes
  • Telefons
  • Telefoons
  • Telemetry
  • Telephonies
  • Telewerkens
  • Terminals
  • Territory Management
  • Test Anything Protocols
  • Test Automation
  • Test Automation Frameworks
  • Test Automation Tools
  • Test Design
  • Test Engineering
  • Test Environments
  • Test Equipments
  • Test Executions
  • Test Management
  • Test Management Tools
  • Test Plannings
  • Test Strategies
  • Test Tools
  • Testing Frameworks
  • Testing Strategies
  • Testing Tools
  • Tests
  • Text Analysis
  • Text Analytics
  • Text Mining
  • Text Processing
  • Third Parties
  • Third Party Risks
  • Third-Party Integrations
  • Third-Party Software
  • Third-party Data
  • Third-party Libraries
  • Third-party Management
  • Third-party Risk Management
  • Third-party Securities
  • Third-party Systems
  • Threat Analysis
  • Threat Detections
  • Threat Huntings
  • Threat Intelligence
  • Threat Management
  • Threat Mitigations
  • Threat Modeling
  • Threat Monitoring
  • Threat Preventions
  • Threat Protection
  • Ticketing
  • Ticketing Systems
  • Tickets
  • Time Management
  • Time Series
  • Time Series Analysis
  • Time Series Forecasting
  • Timelines
  • Tokenizations
  • Tokenized Assets
  • Tokens
  • Tools
  • Total Rewards
  • Tracing
  • Tracking
  • Tracking Software
  • Tracs
  • Trade Compliances
  • Trade Finances
  • Trade Life Cycles
  • Trade Lifecycle Management
  • Trade Management
  • Trade Processing
  • Trade Restrictions
  • Trade Services
  • Trade Settlements
  • Trade Shows
  • Trade Surveillances
  • Trade Validation
  • Trading Platforms
  • Trading Technologies
  • Tradings
  • Traffic Analysis
  • Traffic Management
  • Training Data
  • Training Management
  • Trainings
  • Transaction Banking
  • Transaction Management
  • Transaction Monitoring
  • Transaction Processing
  • Transfer Learning
  • Transformations
  • Transformers
  • Translations
  • Transparency
  • Transportation
  • Travel Management
  • Travel Technologies
  • Travels
  • Traversals
  • Treasuries
  • Treasury Management
  • Treasury Operations
  • Troubleshooting
  • Trust And Safety
  • Tuning
  • Turkishes
  • UDFs
  • UI
  • UI Design
  • UX
  • UX Design
  • Ubixes
  • Underwritings
  • Unified Communications
  • Unified Models
  • Unit Testing
  • Unixes
  • Unstructured Data
  • Unsupervised Learning
  • Updates
  • Uptime
  • Urban Plannings
  • Usabilities
  • Usability Testing
  • User Acceptance Testing
  • User Account Management
  • User Administration
  • User Engagements
  • User Experiences
  • User Feedback
  • User Guides
  • User Insights
  • User Interface/User Experiences
  • User Interfaces
  • User Journeys
  • User Lifecycle
  • User Management
  • User Provisionings
  • User Researches
  • User Testing
  • Utilities
  • VBA
  • VOIP
  • Validation
  • Validation Frameworks
  • Validation Rules
  • Validation Tools
  • Validation and Testing
  • Valuation Models
  • Valuations
  • Value Streams
  • Vector Databases
  • Vector Stores
  • Vendor Management
  • Vendor Researches
  • Venture Capital
  • Venue Management
  • Venue Selections
  • Venues
  • Verifications
  • Version Control Systems
  • Version Controls
  • Versionings
  • Video Calls
  • Video Conferences
  • Video Conferencings
  • Video Editing Tools
  • Video Editings
  • Video Games
  • Video Processing
  • Video Productions
  • Videogespreks
  • Videos
  • Virtual Assistants
  • Virtual Desktop Infrastructure
  • Virtual Environments
  • Virtual Events
  • Virtual Machines
  • Virtual Meetings
  • Virtual Networks
  • Virtual Testing
  • Virtual Trainings
  • Virtualizations
  • Visibility
  • Visioconférences
  • Visual Analytics
  • Visual Arts
  • Visual Design
  • Visual Effects
  • Visualizations
  • Voice
  • Voice Assistants
  • Votings
  • Vues
  • Vulnerability Analysis
  • Vulnerability Assessments
  • Vulnerability Management
  • Vulnerability Management Tools
  • Vulnerability Scanners
  • Vulnerability Scanning Tools
  • Vulnerability Scannings
  • Wallets
  • Warehouse Automation
  • Warehouse Management
  • Wealth Management
  • Web API
  • Web Analytics
  • Web Application Development
  • Web Application Securities
  • Web Applications
  • Web Apps
  • Web Based
  • Web Browsers
  • Web Components
  • Web Design
  • Web Development
  • Web Filterings
  • Web Frameworks
  • Web Intelligence
  • Web Interfaces
  • Web Performances
  • Web Platforms
  • Web Proxies
  • Web Scrapings
  • Web Searches
  • Web Securities
  • Web Servers
  • Web Services
  • Web Sites
  • Web Technologies
  • Web Tools
  • Web-based Applications
  • Web3s
  • Webinars
  • Webs
  • Wellbeings
  • Whiteboards
  • Wi-Fi
  • Wikis
  • Windows Servers
  • Wins
  • Words
  • Work From Homes
  • Work Life Balances
  • Workflow Analysis
  • Workflow Automation
  • Workflow Design
  • Workflow Management
  • Workflow Management Tools
  • Workflow Optimizations
  • Workflow Orchestration
  • Workflow Systems
  • Workflow Tools
  • Workflows
  • Workforce Development
  • Workforce Management
  • Working Capital
  • Workplace Safety
  • Workplace Technologies
  • Workshops
  • Workspaces

Services — Total: 435

  • ADP
  • AWS Lambda
  • Adobe
  • Adobe Acrobat
  • Adobe Analytics
  • Adobe Campaign
  • Adobe Captivate
  • Adobe Creative Cloud
  • Adobe Creative Suite
  • Adobe Experience Cloud
  • Adobe Illustrator
  • Adobe Launch
  • Adobe Photoshop
  • Adobe Premiere Pro
  • Adobe Suite
  • Alteryx
  • Amadeus
  • Amazon API Gateway
  • Amazon ECS
  • Amazon Kinesis
  • Amazon Neptune
  • Amazon Redshift
  • Amazon S3
  • Amazon SNS
  • Amazon SQS
  • Amazon SageMaker
  • Amazon Web Services
  • Ambassador
  • Android
  • Ansible Automation Platform
  • Anthropic
  • Apache Airflow
  • Apache Software Foundation
  • Apigee
  • Appian
  • Apple
  • Apple Keynote
  • Apple Safari
  • Argus Enterprise
  • Ariba
  • Artifactory
  • Aruba
  • Asana
  • Atlassian
  • AutoCAD
  • Autodesk
  • Autodesk Maya
  • Avalara
  • Avaloq
  • Axway
  • Azure Active Directory
  • Azure Arc
  • Azure Blob Storage
  • Azure Data Factory
  • Azure Databricks
  • Azure DevOps
  • Azure Event Hubs
  • Azure Functions
  • Azure Key Vault
  • Azure Kubernetes Service
  • Azure Log Analytics
  • Azure Machine Learning
  • Azure Monitor
  • Azure Networking
  • Azure Pipelines
  • Azure Repo
  • Azure Service Bus
  • Azure Storage
  • Azure Synapse Analytics
  • Azure Virtual Desktop
  • Azure Virtual Machines
  • Backstage
  • BigCommerce
  • Bitbucket
  • Bloomberg
  • Bloomberg AIM
  • Bloomberg Buyside Enterprise Solutions
  • Bloomberg EMSX
  • Bloomberg Economics
  • Bloomberg Enterprise Data
  • Bloomberg Index Solutions Limited (BISL)
  • Bloomberg Intelligence
  • Bloomberg News
  • Bloomberg Professional Service
  • Bloomberg TV
  • Bloomberg Television and Radio
  • Bloomberg Terminal
  • Bloomberg Tradebook
  • Boomi
  • Box
  • BrowserStack
  • Bruno
  • Burp Suite
  • Calypso
  • Camtasia
  • Canva
  • ChatGPT
  • Checkmarx
  • Choreo
  • Circana
  • Cisco
  • Cisco Expressway
  • Cisco Firepower
  • Cisco Nexus
  • Cisco Webex
  • Citrix
  • Citrix NetScaler
  • Claude
  • CloudFormation
  • CloudWatch
  • Cloudflare
  • Cobalt
  • Commvault
  • Concur
  • Conductor
  • Confluence
  • Corma
  • Cortex
  • Coupa
  • Crystal Reports
  • Cvent
  • Cvent Registration
  • Dapr
  • Databricks
  • Databricks Workflows
  • Datadog
  • Dataiku
  • Demandbase
  • DocuSign
  • DynamoDB
  • Dynatrace
  • EC2
  • EMC
  • Everbridge
  • F5 Load Balancer
  • F5 Networks
  • Facebook
  • FactSet
  • Factiva
  • Fargate
  • Fern
  • Figma
  • ForgeRock
  • Fortify
  • Fortinet
  • Fusio
  • G2
  • GCP Cloud Storage
  • Gemini
  • GitHub
  • GitHub Actions
  • GitHub Copilot
  • GitLab
  • Gmail
  • Gong
  • Google
  • Google Ads
  • Google Analytics
  • Google Android
  • Google Apps Script
  • Google Campaign Manager
  • Google Chrome
  • Google Cloud Dataflow
  • Google Cloud Platform
  • Google Data Studio
  • 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
  • Hunter
  • IBM
  • IBM MQ
  • Indeed
  • Informatica
  • Informática
  • Instagram
  • IntelliJ IDEA
  • International Business Machines
  • Intuit
  • Istio
  • JFrog
  • JFrog Artifactory
  • Jira
  • Juniper
  • Juniper Networks
  • Jupyter Notebook
  • Kestra
  • Kinesis
  • Kion
  • Knit
  • Konfig
  • Kong
  • Kuma
  • Lambda
  • Lightroom
  • LinkedIn
  • Linkerd
  • Looker
  • Looker Studio
  • MATLAB
  • MailChimp
  • Make
  • Mastercard
  • Maya
  • McAfee
  • Merge
  • Meta
  • Metasploit
  • Microsoft
  • Microsoft .NET
  • Microsoft 365
  • Microsoft Access
  • Microsoft Azure
  • Microsoft Bicep
  • Microsoft Configuration Manager
  • Microsoft Copilot
  • Microsoft Defender
  • Microsoft Dynamics
  • Microsoft Dynamics 365
  • Microsoft Edge
  • Microsoft Endpoint Configuration Management
  • Microsoft Endpoint Manager
  • Microsoft Entity Framework
  • Microsoft Entra
  • Microsoft Excel
  • Microsoft Exchange
  • Microsoft Graph
  • Microsoft Identity Manager
  • Microsoft Intune
  • Microsoft Office
  • Microsoft Office 365
  • Microsoft Outlook
  • Microsoft Planner
  • Microsoft Power Apps
  • Microsoft Power Automate
  • Microsoft Power Platform
  • Microsoft PowerPoint
  • Microsoft Project
  • Microsoft Purview
  • Microsoft Sentinel
  • Microsoft Teams
  • Microsoft Technologies
  • Microsoft Visio
  • Microsoft Windows
  • Microsoft Windows 10
  • Microsoft Windows Server
  • Microsoft Word
  • Microsoft Xbox
  • Mistral
  • Montran
  • Moody's
  • MuleSoft
  • Murex
  • NASA
  • Nango
  • Navision
  • Nessus
  • NetApp
  • Netreveal
  • New Relic
  • Notion
  • Nutanix
  • OpenAI
  • OpenAI APIs
  • OpenShift
  • Oracle
  • Oracle APEX
  • Oracle Cloud
  • Oracle Database
  • Oracle E-Business Suite
  • Oracle Enterprise Manager
  • Oracle Essbase
  • Oracle Exadata
  • Oracle Financials
  • Oracle Fusion
  • Oracle General Ledger
  • Oracle GoldenGate
  • Oracle Hyperion
  • Oracle Integration
  • Oracle Planning
  • Oracle Procurement
  • Oracle R12
  • Oracle Siebel
  • Oracle Smart View
  • Oracle WebLogic
  • Orbital
  • Orion
  • Palo Alto Networks
  • Panora
  • Paradox
  • Paw
  • PeopleSoft
  • Perforce
  • Perplexity
  • Photoshop
  • Pluralsight
  • Port
  • Postman
  • Power Apps
  • Power BI
  • Power Platform
  • Power Query
  • Prefect
  • Prisma
  • Productiv
  • Prosci
  • Pulse
  • QRadar
  • Qlik
  • Qlik Sense
  • QlikSense
  • QlikView
  • Qube
  • ReadyAPI
  • Red Hat
  • Red Hat Ansible Automation Platform
  • Red Hat Enterprise Linux
  • Red Hat Satellite
  • Refinitiv
  • Refinitiv Eikon
  • Reuters
  • Revert
  • Rundeck
  • Rutter
  • SAP
  • SAP API Management
  • SAP Ariba
  • SAP BI
  • SAP BI Tools
  • SAP BRIM (Billing and Revenue Innovation Management)
  • SAP BW
  • SAP Commerce Cloud
  • SAP Concur
  • SAP HANA
  • SAP Integration Suite
  • SAP S/4HANA
  • SAP Sales and Distribution (SD)
  • SQL Server
  • SailPoint
  • Salesforce
  • Salesforce Automation
  • Salesforce Einstein
  • Salesforce Experience Cloud
  • Salesforce Flow
  • Salesforce Lightning
  • Salesforce Marketing Cloud
  • Salesforce Net Zero Cloud
  • Salesforce Sales Cloud
  • Salesforce Service Cloud
  • Scalar
  • Seismic
  • Service Cloud
  • ServiceNow
  • SharePoint
  • Shell
  • Shopify
  • Siebel
  • SimCorp Dimension
  • Slack
  • SnapLogic
  • Snowflake
  • SolarWinds
  • Solaris
  • Solaris Zones
  • Sparx Enterprise Architect
  • Splunk
  • Splunk Enterprise Security
  • Spot
  • Square
  • Stripe
  • Sybase
  • TIBCO
  • Tableau
  • Tableau Desktop
  • Tagetik
  • Talend
  • Tanium
  • TeamCity
  • Temenos
  • Temenos Transact
  • Temporal
  • Teradata
  • Torii
  • Tradeweb
  • Trellix
  • Triton
  • Tropic
  • Truto
  • Turbonomic
  • Twitter
  • Tyk
  • Unity
  • Unix
  • VMware
  • Vantage
  • Vendr
  • Vercel
  • Veritas Cluster
  • Veritas InfoScale
  • Veritas NetBackup
  • Veritas Volume Manager
  • Vessel
  • Visio
  • Visualforce
  • WebLogic
  • WebSphere
  • WhatsApp
  • Windmill
  • Workday
  • Workday Benefits
  • Workday Extend
  • Workday Finance
  • Workday Financials
  • Workday Integration
  • Workday Integrations
  • Workday Payroll
  • Workday Studio
  • Yardi
  • Youtube
  • Zapier
  • Zendesk
  • Zoom
  • ZoomInfo
  • n8n
  • nOps

Tools — Total: 260

  • Akri
  • Angular
  • Ansible
  • Apache
  • Apache AGE
  • Apache APR
  • Apache ActiveMQ
  • Apache Airflow
  • Apache Ambari
  • Apache Ant
  • Apache Archiva
  • Apache Aries
  • Apache Arrow
  • Apache Atlas
  • Apache Avro
  • Apache Axis
  • Apache Beam
  • Apache BookKeeper
  • Apache Brooklyn
  • Apache CXF
  • Apache Camel
  • Apache Cassandra
  • Apache Cordova
  • Apache CouchDB
  • Apache Curator
  • Apache DB
  • Apache DataFu
  • Apache DolphinScheduler
  • Apache Doris
  • Apache Drill
  • Apache Felix
  • Apache Flex
  • Apache Flink
  • Apache Flume
  • Apache Fluo
  • Apache FreeMarker
  • Apache Gora
  • Apache Griffin
  • Apache Groovy
  • Apache Gump
  • Apache HBase
  • Apache Hadoop
  • Apache Helix
  • Apache Hive
  • Apache Hop
  • Apache Hudi
  • Apache Iceberg
  • Apache Ignite
  • Apache Impala
  • Apache Ivy
  • Apache JMeter
  • Apache Jackrabbit
  • Apache James
  • Apache Jena
  • Apache Kafka
  • Apache Knox
  • Apache Kudu
  • Apache Kylin
  • Apache Logging Services
  • Apache MINA
  • Apache Mahout
  • Apache Maven
  • Apache Mesos
  • Apache NiFi
  • Apache ORC
  • Apache Olingo
  • Apache Oozie
  • Apache OpenJPA
  • Apache OpenOffice
  • Apache OpenWebBeans
  • Apache Ozone
  • Apache POI
  • Apache Parquet
  • Apache Phoenix
  • Apache Pig
  • Apache Pivot
  • Apache Portals
  • Apache Pulsar
  • Apache Ranger
  • Apache Ratis
  • Apache Roller
  • Apache Rya
  • Apache SINGA
  • Apache Samza
  • Apache Serf
  • Apache ShenYu
  • Apache Shiro
  • Apache SkyWalking
  • Apache Sling
  • Apache Solr
  • Apache SpamAssassin
  • Apache Spark
  • Apache Spatial
  • Apache Steve
  • Apache Storm
  • Apache Streams
  • Apache Submarine
  • Apache Subversion
  • Apache Synapse
  • Apache Tapestry
  • Apache Tcl
  • Apache Tez
  • Apache Tika
  • Apache Tomcat
  • Apache Traffic Control
  • Apache Traffic Server
  • Apache Turbine
  • Apache Velocity
  • Apache Web Services
  • Apache XML Graphics
  • Apache Zeppelin
  • Apache ZooKeeper
  • Appium
  • Argo
  • BFE
  • Backstage
  • Blender
  • Buildpacks
  • C#
  • C++
  • CRI-O
  • Capsule
  • Chef
  • ClickHouse
  • Cloud Custodian
  • Consul
  • Contour
  • Copa
  • Cortex
  • Cucumber
  • Debian
  • Dex
  • Django
  • Docker
  • Docker Swarm
  • Eclipse
  • Elastic Stack
  • Elasticsearch
  • Elk
  • Elk Stack
  • Envoy
  • Ethereum
  • Falco
  • FastAPI
  • Fluid
  • Flux
  • Git
  • Grafana
  • HAMI
  • Harbor
  • Hashicorp Vault
  • Helm
  • Hexa
  • Hibernate
  • Hugging Face Transformers
  • Interlink
  • Istio
  • JBoss
  • JUnit
  • Jenkins
  • Jest
  • Jupyter
  • KEDA
  • Kafka Connect
  • Keycloak
  • Kibana
  • Kotlin
  • Kubeflow
  • Kubeflow Pipelines
  • Kubernetes
  • Kubernetes Operators
  • Kubernetes Services
  • Kuma
  • Lean
  • Lightning Web Components
  • Lima
  • Linkerd
  • Linux
  • Litmus
  • Llama
  • Log4j
  • Logstash
  • Matplotlib
  • Maven Central
  • Mockito
  • MongoDB
  • MySQL
  • NATS
  • NUnit
  • Nexus
  • Nginx
  • Node.js
  • NumPy
  • ORAS
  • Open Policy Agent
  • OpenSearch
  • OpenStack
  • OpenTelemetry
  • OpenTofu
  • PHP
  • Packer
  • Pandas
  • Perl
  • Pixie
  • Playwright
  • Podman
  • Porter
  • PostgreSQL
  • PowerShell
  • Prometheus
  • Pulumi
  • Puppet
  • PySpark
  • PyTorch
  • Python
  • R
  • RabbitMQ
  • Radius
  • Ratify
  • React
  • React Native
  • Redis
  • Redux
  • Rook
  • Rundeck
  • SOPS
  • SPIRE
  • SVN
  • Scala
  • Score
  • Selenium
  • Semantic Kernel
  • Sonar
  • SonarQube
  • Spring
  • Spring Boot
  • Spring Boot Admin Console
  • Spring Cloud
  • Spring Cloud Stream
  • Spring Framework
  • Spring Security
  • Swift
  • TensorFlow
  • Terraform
  • Ubuntu
  • Vault
  • Vite
  • Vitess
  • Vue.js
  • Wireshark
  • WordPress
  • YARN
  • Zabbix
  • Zot
  • bootc
  • cURL
  • gRPC
  • jQuery
  • kpt
  • werf

Standards — Total: 239

  • .prompt.md
  • ACID
  • ACKNOWLEDGMENTS.md
  • AIS
  • AUTHORS.md
  • Acceptance Criteria
  • Accessibility Standards
  • Accounting Standards
  • Actor Model
  • Agile
  • Agile Delivery
  • Agile Methodology
  • Agile SDLC
  • ArchiMate
  • Architectural Design Patterns
  • Architecture Pattern
  • BDD
  • BLE
  • Banking Regulation
  • Basel III
  • Big O Notation
  • CCPA
  • CITATION.cff
  • CODE_OF_CONDUCT.md
  • CONTRIBUTING.md
  • CONTRIBUTORS.md
  • CQRS
  • CSS
  • Capital Requirements
  • Certificate Enrolment Protocols
  • Circuit Breaker
  • Communication Protocols
  • Configuration Language
  • Consensus
  • Convention Over Configuration
  • Cybersecurity Standards
  • DHCP
  • DNS
  • DSL
  • Data Flow Diagrams
  • Data Format
  • Data Modeling
  • Data Models
  • Data Privacy Standards
  • Data Quality Standards
  • Data Warehouse Schemas
  • Database Schema Design
  • Defense In Depth
  • Dependency Injection
  • Design Patterns
  • Design Standards
  • DevOps
  • DevSecOps
  • Development Methodology
  • Dimensional Modeling
  • Disclosure Requirements
  • Domain-Driven Design
  • Enterprise Integration Patterns
  • Entity Relationship
  • Equator Principles
  • Event Sourcing
  • Event-driven Architecture
  • Extreme Programming
  • FDA Regulations
  • FTP
  • File Format
  • FinOps
  • Financial Regulation
  • Flowcharts
  • Functional Programming
  • GDPR
  • Gherkin
  • GitOps
  • Good Manufacturing Practices
  • Graph Query Language (GQL)
  • GraphQL
  • HIPAA
  • HTML
  • HTML5
  • HTTP
  • HTTP/2
  • Health Standards
  • IAM
  • IMAP
  • ISO
  • IT Standards
  • ITIL
  • ITSM
  • Integration Patterns
  • Interface Specifications
  • Internal Control Standards
  • Inversion Of Control
  • JCR
  • JDBC
  • JPA
  • JSON
  • Jakarta EE
  • Java EE
  • Kanban
  • Kerberos
  • LDAP
  • LICENSE.md
  • Lakehouse Architecture
  • Lean Management
  • Lean Manufacturing
  • Lean Operations
  • Lean Six Sigma
  • Lean Six Sigma Black Belt
  • MLOps
  • MVC
  • Mandatory Reserves Requirement
  • MapReduce
  • Markup Language
  • Methodology
  • Mockups
  • Modeling Language
  • Modular Monolith
  • Monolithic Architecture
  • NFC
  • NIO
  • NIST
  • Network Protocols
  • Normalization
  • OAuth
  • OCI
  • OData
  • OIDC
  • OSHA
  • OWASP
  • Object-Oriented Programming
  • OpenAPI
  • OpenID Connect
  • PCI Compliance
  • PDF
  • Parquet
  • Partitioning
  • Privacy By Design
  • Process Flow Diagrams
  • Product Backlog
  • Product Backlog Items
  • Product Specifications
  • Programming Paradigm
  • Project Management Methodology
  • Protocol Buffers
  • Prototypes
  • Pub/Sub
  • QoS
  • Quality Of Service
  • Quality Standards
  • RACI
  • RBAC
  • RDF
  • RDP
  • REST
  • RESTful
  • RFID
  • RPC
  • Raft
  • Reactive Programming
  • Regular Expressions
  • Regulation
  • Regulatory
  • Relational Data Modeling
  • Reporting Templates
  • Runbooks
  • SAFe Agile
  • SAML
  • SCADA
  • SDLC
  • SECURITY.md
  • SFTP
  • SMTP
  • SOA
  • SOAP
  • SPA
  • SPARQL
  • SQL
  • SSH
  • SSL/TLS
  • SSO
  • SUPPORT.md
  • Scaled Agile
  • Schema Design
  • Schema Validation
  • Scrum
  • SecOps
  • Secure Software Development Life Cycle
  • Secure Software Development Lifecycle
  • Secure Tunneling Protocols
  • Secure-by-Design
  • Security By Design
  • Security Protocols
  • Security Standards
  • Security Standards And Procedures
  • Serverless Patterns
  • Service Oriented Architecture
  • Services Patterns
  • Six Sigma
  • Sketches
  • Software Design Architectural Patterns
  • Software Design Patterns
  • Software Development Life Cycle
  • Software Development Lifecycle
  • Software-Defined Networking
  • Specification
  • Standard Operating Procedures
  • Standardization
  • Standards
  • Swagger
  • TCP/IP
  • Table Format
  • Technical Specifications
  • Technology Standards
  • Templates
  • Test Cases
  • Test First
  • Test Plans
  • Test Scripts
  • Test Suites
  • Test-driven Development
  • UML
  • Underwriting Standards
  • Use Cases
  • User Stories
  • VPN
  • WCAG
  • WSDL
  • Waterfall
  • Web Standards
  • WebSockets
  • Wireframes
  • Write Ahead Log
  • XML
  • XSLT
  • Zero Trust
  • Zero Trust Architecture
  • Zero Trust Network Access
  • Zero-Trust Security Model
  • openCypher

Why do we do this?

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

Who is this for?

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

Why become a design partner?

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

About This Research

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

About This Guidance

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

What This Means For You

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

01

Where you stand

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

See full report →
02

What to build

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

View capabilities →
03

Where to go next

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

Get your navigation →
04

Control what you build

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

First capability live in 90 days.

Become a design partner →