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.
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
- AccentureA global professional services company providing consulting, technology, and outsourcing services. Serves clients across more...
- Bain & CompanyA global management consulting firm and one of the prestigious Big Three strategy consultancies. Advises...
- Booz AllenA management and technology consulting firm primarily serving the U.S. government in defense, intelligence, and...
- DeloitteThe largest professional services firm in the world by revenue, providing audit, consulting, tax, and...
- EYOne of the Big Four professional services firms providing audit, tax, consulting, and advisory services....
- KPMGOne of the Big Four professional services firms providing audit, tax, and advisory services globally....
- McKinsey & CompanyThe world's most prestigious management consulting firm advising leading businesses, governments, and institutions on strategy,...
- PwCOne 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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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®ion={{jurisdiction}}&taxType={{tax_type}}
inputParameters:
- name: jurisdiction
in: query
- name: tax_type
in: query
operations:
- name: get-rate
method: GET
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Score Breakdown — Total: 11425
Each row links to its full definition on the Naftiko Signal Groups page.
134 28 43 501 488 191 321 245 173 905 212 285 538 109 211 250 92 108 50 356 561 298 64 172 896 1762 274 173 78 135 91 13 119 159 372 96 118 34 96 132 138Areas — 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
- FactSet
- Factiva
- Fargate
- Fern
- Figma
- ForgeRock
- Fortify
- Fortinet
- Fusio
- G2
- GCP Cloud Storage
- Gemini
- GitHub
- GitHub Actions
- GitHub Copilot
- GitLab
- Gmail
- Gong
- Google Ads
- Google Analytics
- Google Android
- Google Apps Script
- Google Campaign Manager
- Google Chrome
- Google Cloud Dataflow
- Google Cloud 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
- 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
- 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
- Tyk
- Unity
- Unix
- VMware
- Vantage
- Vendr
- Vercel
- Veritas Cluster
- Veritas InfoScale
- Veritas NetBackup
- Veritas Volume Manager
- Vessel
- Visio
- Visualforce
- WebLogic
- WebSphere
- 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
- 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.
Where you stand
See your signals
The leads, the gaps, and where AI has shifted the gradient — in numbers from public data, not vendor decks.
See full report →What to build
Translate to capabilities
Capabilities being built across the peer set — tied to the markets you actually serve.
View capabilities →Where to go next
Navigate the next move
A prioritized roadmap grounded in signal data. Not a generic best-practices deck, not a vendor-shaped pitch.
Get your navigation →Control what you build
Integrate with AI
Run it on infrastructure you control. Open source — fork it, audit it, run it on your stack. No vendor lock-in.
First capability live in 90 days.
Become a design partner →