Financial Technology Industry Signals

Companies leveraging technology to innovate and improve financial services, including payments, analytics, trading infrastructure, and risk assessment.

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

Across 55 companies in Financial Technology we detected 2874 areas, 485 services, 285 tools, and 261 standards — producing an aggregate signal score of 35011.

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

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

Financial Technology Industry Technology Investment Report

Prepared by Naftiko May 2026

Executive Summary

The Financial Technology industry stands as one of the most technically mature verticals in Naftiko’s coverage universe, spanning 27 companies across payment networks, market infrastructure, credit analytics, and investment management. The breadth of the sector — from global payment rails operated by Visa and Mastercard to capital markets infrastructure at Nasdaq and Blackrock, to diversified banking technology at Citi, Scotiabank, and Barclays — creates a wide but substantive dispersion in AI readiness scores across all eleven measurement layers. Scotiabank, Citi, and Visa emerge as consistent top-three performers across the Foundational, Retrieval, Efficiency, and Productivity layers, reflecting sustained organizational investment in cloud modernization, open-source adoption, and operational automation that collectively positions them ahead of the peer group on every dimension that matters for production AI deployment.

The industry’s technology investment profile is characterized by exceptional depth in cloud infrastructure and data engineering, with both Scotiabank and Citi posting cloud scores in the 149–155 range and data retrieval scores of 154–166 respectively, numbers that substantially outpace the sector median. What is more notable, however, is the consistency of this leadership: the same institutions appear in the top cohort across Artificial Intelligence, Open-Source, Languages, Code, Automation, Operations, API integration, and Observability, suggesting that the leading Financial Technology firms have built coherent, end-to-end technology stacks rather than isolated pockets of AI capability. The lower tiers of the ranking — Deutsche Bank, ABN AMRO, BNP Paribas, Goldman Sachs in several scoring areas — represent meaningful white space for capability acceleration, particularly in model registry discipline, multimodal infrastructure, and CNCF-aligned container orchestration.


Layer 1: Foundational Layer

The Foundational Layer evaluates core AI and infrastructure readiness across five scoring areas covering Artificial Intelligence, Cloud, Open-Source, Languages, and Code. Financial Technology companies score highest in Cloud, with the sector’s strongest Cloud scores reflecting years of cloud-migration investment that now underpin viable AI workload deployment.

Artificial Intelligence — Top Company: Citi (87)

Citi leads Financial Technology peers in Artificial Intelligence with a score of 87, followed by Visa at 83 and Barclays at 69, with Scotiabank at 68 and Nasdaq and PayPal each at 63. The score dispersion across the 20-company ranked cohort — from Citi’s 87 down to Goldman Sachs at 28 and Deutsche Bank at 29 — indicates that AI foundational capability has not yet democratized evenly across the sector. Services adoption is broad, with 26 companies deploying tools such as Datadog, Microsoft Office, CloudFormation, and Adobe Creative Suite, while tool adoption includes PowerShell, Spring Boot, Elasticsearch, Semantic Kernel, and TensorFlow across 25–26 companies, confirming that the infrastructure layer supporting AI inference and monitoring is in place at scale.

Cloud — Top Company: Scotiabank (155)

Scotiabank leads the Cloud scoring area at 155, with Citi close behind at 149 and Visa at 142; Blackrock posts 135 and Barclays 125. The top decile demonstrates cloud maturity consistent with running production ML workloads, whereas the bottom of the distribution — ING at 63, Deutsche Bank at 70, Goldman Sachs unlisted in the top twenty — suggests meaningful infrastructure debt among legacy European institutions. Twenty-six companies share adoption of foundational cloud services including Azure Functions, CloudFormation, and Cloudflare, while tools such as Terraform (25 companies), Consul (25), and PostgreSQL (25) form the distributed infrastructure backbone.

Open-Source — Top Company: Citi (51)

Citi and Visa are tied at the top of Open-Source scoring at 51, with Scotiabank at 50 and HSBC at 44. Open-source adoption breadth is high — 25 companies utilize TensorFlow, Pandas, NumPy, and PostgreSQL — and the clustering of scores between 27 and 51 across the top twenty suggests a sector-wide commitment to open tooling rather than a winner-take-all pattern. Stripe at 27 and ING at 28, while in the lower tier, are still meaningfully engaged with open-source toolchains.

Languages — Top Company: Citi (53)

Citi leads Languages at 53, with Scotiabank at 51, HSBC at 47, and Barclays and Visa each at 46. The Languages scoring area captures polyglot engineering depth relevant to AI model development and integration; the presence of TypeScript, R, and Python-ecosystem tools (Matplotlib, Pandas, NumPy) across the top 25 companies confirms that Financial Technology engineering teams are equipped to develop and maintain ML-adjacent code at scale.

Code — Top Company: Scotiabank (52)

Scotiabank leads Code at 52 with Mastercard at 50 and Citi at 49. Code scoring reflects toolchain sophistication for software delivery, and the tight cluster of scores in the 30–52 range among the top performers implies that modern developer experience is institutionalized rather than experimental across the leading FinTech players. Angular, React Native, Spring Boot, and Elasticsearch appear across 26 companies, with Terraform and Consul slightly lower at 25.


Layer 2: Retrieval & Grounding

Retrieval & Grounding evaluates how Financial Technology companies invest in the data and infrastructure required to ground AI models in proprietary knowledge, covering Data, Databases, Virtualization, Specifications, and Context Engineering. Data leads all scoring areas within this layer.

Data — Top Company: Citi (166)

Citi leads Data scoring at 166, with Scotiabank at 154 and Visa at 138; Barclays posts 131 and HSBC 125. The Data scores are the highest absolute numbers across any scoring area in the report, reflecting the sector’s inherent data intensity. Bloomberg, whose business model is centered on financial data, scores 111 — notable because it trails Barclays (131) and HSBC (125), institutions whose data infrastructure spending is driven by regulatory and operational necessity rather than product revenue. The 20-company top cohort extends down to American Express at 61, indicating that even smaller or less diversified players have meaningful data management infrastructure.

Databases — Top Company: Citi (45)

Citi leads Databases at 45, followed by Scotiabank at 43, Barclays at 40, and Visa at 39. The tight top-of-cohort range — Citi 45, Scotiabank 43, Barclays 40 — suggests that database modernization is a shared priority among the leading Financial Technology firms, likely driven by real-time transaction processing requirements. ABN AMRO at 17 and BNP Paribas at 18 sit at the bottom of the ranked cohort, consistent with European institutions’ generally slower cloud and database modernization trajectories.

Virtualization — Top Company: HSBC (26)

HSBC leads Virtualization at 26, with Citi and Barclays both at 25, and Visa also at 25. Virtualization scores are compressed in range — HSBC’s 26 versus Deutsche Bank’s 12 at the bottom — reflecting that virtualization capability has become table-stakes infrastructure. The presence of Moodys at 23 and Blackrock at 22 within the top cohort illustrates that even asset management and analytics firms have invested in the container and virtualization layer necessary for flexible AI workload deployment.

Specifications — Top Company: Barclays (17)

Barclays leads Specifications at 17, with Scotiabank at 16, Citi at 15, and Commonwealth Bank at 14. Specifications scores reflect investment in API standards, OpenAPI definitions, and formal data contracts — a capability that directly enables machine-readable AI integration. The low absolute scores across the sector (top score of 17) represent an area where Financial Technology companies broadly have not yet invested at the depth observed in their cloud or data infrastructure.

Context Engineering — Top Company: (collective signal, no ranked companies)

Context Engineering reflects collective patterns across Financial Technology organizations with no company-level scoring in this release, capturing emerging investment in prompt engineering, RAG pipelines, and context window management — technologies the sector is actively piloting but has not yet scored into differentiated individual rankings.


Layer 3: Customization & Adaptation

Customization & Adaptation measures investment in data pipelines, model registry discipline, multimodal infrastructure, and domain specialization — the capabilities required to fine-tune, version, and deploy proprietary AI models. Financial Technology leads in Model Registry & Versioning within this layer.

Data Pipelines — Top Company: Citi (18)

Citi leads Data Pipelines at 18, with Blackrock and Scotiabank each at 17, and Moodys at 15. The low absolute scores indicate that formalized ML data pipeline infrastructure — as distinct from general data warehousing — is still maturing across the sector. Citi, Blackrock, and Scotiabank’s co-leadership reflects their shared need to move model training data through governance-controlled pipelines in regulated environments.

Model Registry & Versioning — Top Company: Scotiabank (22)

Scotiabank and Visa are tied at the top of Model Registry & Versioning at 22, with Citi at 21 and Stripe at 18. Model registry discipline is a leading indicator of production ML operations maturity; Scotiabank and Visa’s co-leadership reinforces their positioning as the sector’s most operationally advanced AI practitioners. Goldman Sachs at 8 represents the weakest score among named institutions in this area, a meaningful gap given the firm’s public commitments to AI-driven trading and advisory.

Multimodal Infrastructure — Top Company: Citi (21)

Citi leads Multimodal Infrastructure at 21, with Visa at 21 and Scotiabank at 19. Charles Schwab at 18 and Stripe at 17 round out the top five, suggesting that payment-adjacent and brokerage platforms are early movers in multimodal capability — likely driven by document processing, customer communication, and compliance-monitoring use cases. Deutsche Bank at 7 sits at the bottom of the cohort.

Domain Specialization — Top Company: Charles Schwab / Mastercard / Nasdaq / multiple (2)

Domain Specialization scores are uniformly low across the sector, with Charles Schwab, Mastercard, Nasdaq, Blackrock, Capital One, Scotiabank, Citi, Commonwealth Bank, Barclays, PayPal, Stripe, Wells Fargo, Moodys, Visa, Standard Chartered, and ING all posting scores of 2. This uniform low-score pattern indicates that domain-specific model customization — training models on proprietary financial data to produce finance-native capabilities — remains an industry-wide frontier rather than a demonstrated investment.


Layer 4: Efficiency & Specialization

Efficiency & Specialization captures operational AI deployment capability through Automation, Containers, Platform, and Operations scoring areas. Operations leads within this layer.

Automation — Top Company: Scotiabank (86)

Scotiabank leads Automation at 86, with Citi at 83, Barclays at 83, and Visa at 78. The Automation scores in the 60–86 range across the top dozen companies reflect substantive workflow automation investment — consistent with the sector’s broad reliance on robotic process automation in back-office functions. American Express at 36 and ING at 41 sit at the lower end of the distribution, suggesting that automation modernization is less complete in consumer-lending and European banking segments.

Containers — Top Company: Citi (39)

Citi leads Containers at 39, with Scotiabank at 38, HSBC at 35, and Blackrock at 32. Container adoption reflects Kubernetes and microservices maturity, a prerequisite for scalable AI inference. The scores span 17 to 39 across the top twenty, with meaningful gaps suggesting that container orchestration is not uniformly advanced even among Financial Technology leaders.

Platform — Top Company: Citi (44)

Citi leads Platform at 44, with Visa at 43, and Nasdaq, Scotiabank, and Barclays all at 41. Platform scoring captures the degree to which organizations have built internal developer platforms that can host and serve AI models at scale. The tight cluster at the top — 41 to 44 across five companies — signals competitive parity in platform capability among the sector’s most sophisticated operators.

Operations — Top Company: Scotiabank (88)

Scotiabank leads Operations at 88, with Visa at 83 and Citi at 82, and HSBC at 74. Operations is the highest-scoring area within the Efficiency layer for the sector, reflecting the Financial Technology industry’s deep investment in SRE, monitoring, incident management, and reliability engineering — all capabilities that transfer directly to AI system operations. BNP Paribas at 39 at the bottom of the ranked cohort represents the widest gap between leader and laggard in this layer.


Layer 5: Productivity

Productivity measures how Financial Technology companies leverage AI and tooling to improve developer and operational productivity across Software As A Service (SaaS), Code, and Services scoring areas. Services leads.

Software As A Service (SaaS) — Top Company: Nasdaq (4)

Nasdaq leads SaaS at 4, with Moodys at 3 and Mastercard, Capital One, Scotiabank, Citi, HSBC, and Visa each at 2. The low absolute scores across the entire sector indicate that SaaS-native productivity tooling adoption — specifically AI coding assistants and copilot-class tools integrated into daily workflows — is still in early deployment phases across Financial Technology. Data and market infrastructure firms’ leadership in this area (Nasdaq, Moodys) suggests that analytical workflow automation is the initial adoption vector.

Code — Top Company: Scotiabank (52)

Scotiabank leads Code productivity at 52 with Mastercard at 50 and Citi at 49. Code scoring in this layer captures developer productivity tooling beyond raw language capability, and the strong top-cohort scores — 14 companies scoring 30 or above — indicate broad adoption of modern developer experience tooling. BNP Paribas at 21 and ABN AMRO at 25 represent meaningful productivity gaps versus the sector leaders.

Services — Top Company: Scotiabank (323)

Scotiabank leads Services at 323, with Citi at 298, Visa at 269, and HSBC at 254. Services scoring captures the breadth and depth of third-party service integrations supporting productivity, and the high absolute scores — Scotiabank 323, Citi 298 — reflect the accumulated service integration complexity of large financial conglomerates. Deutsche Bank at 163 and ABN AMRO not appearing in the top twenty highlight continued infrastructure simplification opportunities.


Layer 6: Integration & Interoperability

Integration & Interoperability evaluates how Financial Technology companies connect AI systems, data sources, and third-party services through API, Integrations, Event-Driven, Patterns, Specifications, Apache, and CNCF scoring areas. Integrations leads.

API — Top Company: Citi (32)

Citi leads API scoring at 32, with Scotiabank and Barclays both at 30, and Visa at 26. API investment reflects the depth of programmatic interface exposure that enables AI agents, data pipelines, and third-party integrations to operate reliably. The 32-to-12 range across the top twenty indicates a healthy but not fully homogeneous API posture — Deutsche Bank and Bank of America at 12 represent the lower boundary.

Integrations — Top Company: Scotiabank (48)

Scotiabank leads Integrations at 48, with Citi at 47, Blackrock at 39, and Visa at 38. Integration depth — the ability to connect disparate systems into cohesive AI workflows — is a critical enabler of enterprise AI deployment, and the Scotiabank-Citi co-leadership in both API and Integrations scoring is consistent with their overall platform maturity thesis.

Event-Driven — Top Company: Citi (33)

Citi and Visa are tied at the top of Event-Driven scoring at 33, with Scotiabank at 32 and Barclays at 31. Event-driven architecture is foundational for real-time AI inference in trading, fraud detection, and payment processing — domains where Financial Technology companies have the strongest business justification for investment. ING at 8 and Nasdaq at 9 sit at the lower end, suggesting that market infrastructure firms’ real-time architecture investment has not fully translated into event-driven AI patterns.

Patterns — Top Company: Citi (25)

Citi leads Patterns at 25, with Blackrock and HSBC both at 21, and Barclays and Visa at 20. Patterns scoring reflects the adoption of established architectural patterns — CQRS, saga, outbox, circuit breaker — that enable reliable AI system composition. The 10–25 range across the top twenty suggests that formal architectural patterns adoption is advancing but not yet universal.

Specifications — Top Company: Barclays (17)

Barclays leads Specifications at 17 in the Integration layer (consistent with the Retrieval layer score), with Scotiabank at 16 and Citi at 15. This scoring area rewards OpenAPI, AsyncAPI, and formal specification adoption — capabilities increasingly important for AI agent integration and governance.

Apache — Top Company: Scotiabank (21)

Scotiabank leads Apache at 21, with Citi at 17, and Barclays and Wells Fargo at 14. Apache ecosystem adoption — Kafka, Spark, Flink, Airflow — is a direct proxy for real-time data processing sophistication, a critical upstream dependency for AI grounding and context delivery.

CNCF — Top Company: HSBC (33)

HSBC leads CNCF scoring at 33, with Blackrock, Scotiabank, and Citi all at 29. CNCF ecosystem adoption — Kubernetes, Prometheus, Envoy, Argo — reflects cloud-native maturity at the infrastructure layer. HSBC’s leadership in CNCF adoption is noteworthy given its position as a global bank navigating complex multi-cloud infrastructure across more than 60 markets.


Layer 7: Statefulness

Statefulness evaluates how Financial Technology companies build the observability, data management, and memory infrastructure required for persistent, context-aware AI systems. Data leads within this layer.

Observability — Top Company: Citi (59)

Citi leads Observability at 59, with Scotiabank at 51, Visa at 49, Mastercard at 47, and Barclays at 46. Observability investment — distributed tracing, metrics, structured logging — is essential for diagnosing AI system behavior in production, and the sector’s strong observability scores reflect financial services’ long-standing SRE culture applied to AI workloads. ABN AMRO at 26 and American Express at 26 sit at the lower boundary of the top cohort.


Layer 8: Measurement & Accountability

Measurement & Accountability captures how Financial Technology companies build testing discipline, observability infrastructure, developer experience investment, and ROI measurement capability. ROI & Business Metrics leads within this layer.

Testing & Quality — Top Company: Scotiabank / Citi (30)

Scotiabank and Citi are tied at the top of Testing & Quality at 30, followed by Visa at 27 and Mastercard at 25. Testing & Quality scores in Financial Technology are elevated relative to many other sectors, reflecting the high cost of production failures in payment systems, trading infrastructure, and credit decisioning where a defect can result in material financial loss or regulatory action. The top cohort’s investment in automated testing, quality gates, and continuous integration pipelines is not a competitive differentiator but rather a minimum standard for operating mission-critical financial infrastructure.

Observability — Top Company: Citi (59)

Citi leads Observability at 59, with Scotiabank at 55 and HSBC at 47. Observability in Financial Technology serves dual purposes: operational monitoring of production systems and the audit infrastructure required to explain AI-driven decisions to regulators. Citi’s leadership at 59 reflects the scale and global scope of its technology footprint — more systems, more integrations, and more regulatory jurisdictions each drive incremental observability investment, creating a scale advantage that compounds with system complexity.

Developer Experience — Top Company: Scotiabank (29)

Scotiabank leads Developer Experience at 29, with Citi at 26 and Visa at 24. Developer experience investment — internal platforms, tooling, documentation, and self-service capability — directly correlates with AI adoption velocity, as higher-quality developer experience reduces the friction of integrating AI models into production workflows. Scotiabank’s leadership is consistent with its Platform and Operations scores and reflects a deliberate internal developer platform strategy.

ROI & Business Metrics — Top Company: Citi (67)

Citi leads ROI & Business Metrics at 67, with Scotiabank at 61 and Visa at 58. ROI measurement capability in Financial Technology is structurally well-developed: the sector’s long history of quantitative performance management, trading attribution, and credit portfolio analytics has produced sophisticated business metrics infrastructure that readily adapts to AI investment measurement. The high absolute scores across the top cohort indicate that Financial Technology is better positioned than most sectors to build the business cases for continued AI investment.


Layer 9: Governance & Risk

Governance & Risk evaluates how Financial Technology companies manage regulatory compliance posture, AI review and approval processes, security infrastructure, governance frameworks, and privacy obligations. Security leads within this layer by a significant margin.

Regulatory Posture — Top Company: HSBC (14)

HSBC leads Regulatory Posture at 14, with Barclays at 12 and Citi at 11. The European and UK-listed institutions’ leadership in Regulatory Posture reflects the more prescriptive regulatory environment they operate in — the EU AI Act, UK FCA requirements, and Basel IV capital framework create compliance pressures that directly drive regulatory posture investment. North American institutions are in the 8–11 range, reflecting a regulatory environment that is consequential but somewhat less prescriptive in its technology requirements.

AI Review & Approval — Top Company: Scotiabank / Citi / Visa (18)

Scotiabank, Citi, and Visa are tied at the top of AI Review & Approval at 18, with HSBC and Barclays at 15. AI review and approval processes — model risk management frameworks, validation gates, and production deployment governance — are well-established at the sector’s leading institutions, consistent with decades of model risk management practice inherited from quantitative finance. The shared top score among three institutions signals that AI governance is becoming a common standard rather than a differentiator at the sector’s leading edge.

Security — Top Company: Scotiabank (98)

Scotiabank leads Security at 98, with Citi at 90 and HSBC at 83. Security scores are by far the highest absolute scores in the Governance & Risk layer and are the most elevated sector-wide relative to other industry verticals, reflecting the financial system’s structural designation as critical infrastructure. The top cohort’s security scores of 83–98 represent years of sustained investment in zero-trust architectures, application security testing, and infrastructure security engineering that form the compliance backbone of regulated financial institutions.

Governance — Top Company: Scotiabank (63)

Scotiabank leads Governance at 63, with Citi at 58 and Mastercard at 52. Governance investment in Financial Technology encompasses data lineage, model risk policy, access control, and AI accountability frameworks — a set of capabilities that the sector’s regulatory obligations have driven at faster maturity pace than most other industries. Scotiabank’s governance leadership is the clearest indication that its AI investment is not merely a technology stack but an institutionalized practice with policy, process, and accountability infrastructure.

Privacy & Data Rights — Top Company: HSBC (6)

HSBC leads Privacy & Data Rights at 6, with Barclays at 5 and Citi at 4. The low absolute scores across the sector — even for the leaders — indicate that formal privacy engineering as a distinct investment category (data subject rights automation, consent management, privacy-by-design tooling) is nascent relative to the sector’s security and governance investments. Financial institutions have historically managed privacy through legal and compliance functions rather than engineering ones; the low scores reflect this structural pattern rather than a disregard for privacy obligations.


Layer 10: Economics & Sustainability

Economics & Sustainability measures how Financial Technology companies manage AI cost economics, cloud provider strategy, ecosystem partnerships, talent and organizational design, and infrastructure sustainability. Partnerships & Ecosystem and Talent & Organizational Design lead within this layer.

AI FinOps — Top Company: Mastercard / Scotiabank / Stripe (9)

Mastercard, Scotiabank, and Stripe are tied at the top of AI FinOps at 9, followed by Citi and Visa at 8. AI FinOps discipline — the formalized management of AI inference and training costs as a distinct operational cost category — is in early stages across Financial Technology. The low absolute scores (maximum 9) across the sector’s leaders indicate that AI cost management is still largely absorbed within cloud cost management frameworks rather than tracked as a separate AI-specific financial control, suggesting that AI spend has not yet reached the scale where dedicated FinOps tooling is justified at most institutions.

Provider Strategy — Top Company: Stripe (18)

Stripe leads Provider Strategy at 18, with Scotiabank at 16 and Mastercard at 14. Stripe’s leadership in Provider Strategy is analytically notable — as a pure-play payments technology company, Stripe’s cloud provider and AI vendor relationship management is more strategically central to its product roadmap than for diversified banking conglomerates where technology is one of many operational domains. The provider strategy score reflects Stripe’s deliberate multi-cloud and AI API vendor management approach.

Partnerships & Ecosystem — Top Company: Citi (24)

Citi leads Partnerships & Ecosystem at 24, with Visa at 22 and Scotiabank at 20. Citi’s ecosystem leadership reflects its role as a global transaction bank with hundreds of corporate and institutional API integrations — a fundamentally more ecosystem-dependent business model than asset managers or credit rating agencies. The high Citi score also reflects its participation in cross-industry financial data consortia, open banking initiatives, and FinTech partnership programs.

Talent & Organizational Design — Top Company: Nasdaq / Citi / PayPal (18)

Nasdaq, Citi, and PayPal are tied at the top of Talent & Organizational Design at 18, with Scotiabank and Mastercard at 16. The talent investment scores are relatively compressed across the top cohort, reflecting the shared talent market dynamics of Financial Technology — all leading firms compete for the same pool of ML engineers, quantitative researchers, and AI product managers, and all have built comparable talent acquisition and retention infrastructure as a result.


Layer 11: Storytelling & Entertainment & Theater

Storytelling & Entertainment & Theater evaluates organizational alignment, standardization discipline, strategic M&A activity, and experimentation capability — the strategic coherence and narrative dimensions of AI investment. Alignment leads within this layer.

Alignment — Top Company: Scotiabank (31)

Scotiabank leads Alignment at 31, with Citi at 28 and Visa at 25. Alignment scores capture how coherently stated AI investment strategy maps to observed technology capability — the degree to which AI narrative and infrastructure investment tell a consistent story. Scotiabank’s leadership in Alignment, combined with its consistent top-tier performance across Automation, Operations, Governance, Security, and Services, confirms that its technology investment is strategically coherent: a multi-year program with institutional commitment rather than a reactive response to the generative AI wave.

Standardization — Top Company: Scotiabank (18)

Scotiabank leads Standardization at 18, with Citi at 16 and Mastercard at 14. Standardization — the adoption of common AI tooling standards, model evaluation frameworks, and infrastructure norms across engineering teams — is more mature at the institutions with the most formalized engineering governance practices, and Scotiabank’s lead here is consistent with its overall governance and operations leadership. High standardization scores signal that AI tools are being deployed organizationally rather than by individual teams, which accelerates the pace at which institutional AI capability accumulates.

Mergers & Acquisitions — Top Company: Scotiabank (22)

Scotiabank leads Mergers & Acquisitions at 22, with Citi at 20 and Mastercard at 18. M&A activity as a dimension of AI strategy reflects the use of acquisitions to accelerate AI capability development and market positioning. The high scores at the top cohort reflect a period of active AI-related acquisition activity across the Financial Technology sector, with institutions acquiring AI model providers, data vendors, and FinTech infrastructure companies to complement organic capability development.

Experimentation & Prototyping — Top Company: (collective signal, no ranked companies)

Experimentation & Prototyping reflects collective sector-level patterns without individual company ranking, indicating that formal AI experimentation infrastructure — dedicated AI sandboxes, structured rapid prototyping programs, and systematic hypothesis-testing at the institutional level — has not yet differentiated individual companies to a measurable degree. The signal is that investment in experimentation is broadly distributed rather than concentrated, consistent with a sector-wide adoption pattern where AI experimentation is underway at most major institutions but has not yet produced scored differentiation.


Industry Strategic Assessment

The Financial Technology industry presents one of the most compelling AI investment narratives in Naftiko’s coverage universe, precisely because the underlying use cases — fraud detection, algorithmic trading, credit risk scoring, regulatory reporting, and real-time payment routing — have been computationally intensive for decades. The sector’s AI readiness is not speculative; it is the product of continuous infrastructure investment that predates the generative AI wave, and the current scoring reflects how deeply that legacy of investment compounds into AI readiness. Scotiabank, Citi, and Visa form a durable top tier across nearly every layer measured, and their advantage is structural: these organizations have invested in cloud, open-source tooling, containerization, event-driven architecture, and observability in coordinated, multi-year programs rather than opportunistic point solutions. The implication for enterprise buyers is that these institutions are ready to receive and operationalize AI products at the pace the market is developing them.

The mid-tier of the industry — PayPal, Mastercard, Blackrock, HSBC, Barclays, Bloomberg, Moodys, Charles Schwab, Wells Fargo — represents the most commercially interesting segment for AI infrastructure vendors and practitioners. These organizations have sufficient foundational capability (Cloud scores of 111–254, Data scores of 97–131) to deploy production AI systems, but they have not yet achieved the integration depth, model registry discipline, or event-driven architecture maturity of the top cohort. The gap between Scotiabank’s Services integration score of 323 and Nasdaq’s 177 is not a capability gap per se — Nasdaq’s market infrastructure mandate is narrower — but it signals that mid-tier firms have not yet built the ecosystem connectivity that enables AI to flow across organizational boundaries at scale.

Domain Specialization remains the most underdeveloped capability across the entire Financial Technology industry, with every scored company posting a maximum of 2 points. This finding is analytically significant because Financial Technology is precisely the sector where domain-specific AI models — trained on proprietary trading data, credit histories, payment graphs, and regulatory filings — should generate the most durable competitive advantage. The absence of differentiated investment in domain specialization at this juncture indicates that the industry is still in the infrastructure-building phase of its AI journey, laying the cloud, data, and integration foundations on which proprietary models will eventually be trained. Analysts and practitioners who are calibrating their investment theses for 2026 and 2027 should treat Domain Specialization and Model Registry & Versioning scores as the leading indicators of which Financial Technology firms will convert infrastructure parity into sustained AI competitive advantage over the next 18 to 24 months.


Companies — Total:55

  • ABN AMRO
    A Dutch banking and financial services group serving retail, private, and corporate clients across Europe....
  • American Express
    A global financial services company best known for its charge and credit card products. Also...
  • Avalara
    Avalara provides cloud-based tax compliance automation for businesses of every size, with services covering sales...
  • Bank of America
    One of the largest financial institutions in the United States offering banking, investing, and wealth...
  • Barclays
    A British multinational bank offering consumer banking, corporate banking, and investment banking services. One of...
  • Blackrock
    The world's largest asset management firm overseeing trillions of dollars in investments. Known for its...
  • Block
    A financial technology company formerly known as Square, providing payment processing, banking, and Bitcoin services....
  • Bloomberg
    A global financial data and media company providing real-time market data, news, and analytics through...
  • BNP Paribas
    A leading European banking group and one of the largest financial institutions in the world....
  • Bread Financial
    Bread Financial is a technology-driven financial services company offering white-label buy now pay later (BNPL),...
  • Broadridge
    Best-in-class API components meet expert support to create the ideal wealth management operations environment. Optimize...
  • Capital One
    A diversified financial services company and one of the largest credit card issuers in the...
  • CBOE
    Fortune 1000 company CBOE. Public API documentation has not yet been catalogued in the API...
  • Charles Schwab
    A leading brokerage and wealth management firm offering investing, trading, and financial advisory services. Serves...
  • Citi
    A global banking and financial services corporation providing consumer banking, credit, and wealth management. Operates...
  • CME Group
    CME Group is the world's largest derivatives exchange and operator of the CME, CBOT, NYMEX,...
  • Coinbase
    Coinbase is a leading cryptocurrency platform providing trading, custody, and payment infrastructure for individuals, businesses,...
  • Commonwealth Bank
    Australia's largest bank by market capitalization providing retail, business, and institutional banking services. Serves millions...
  • Copart
    Fortune 1000 company Copart. Public API documentation has not yet been catalogued in the API...
  • Corpay
    Corpay (formerly FLEETCOR) is a corporate payments company that provides commercial cards, accounts payable automation,...
  • Deutsche Bank
    A German multinational investment bank and financial services company headquartered in Frankfurt. Provides corporate banking,...
  • Dow Jones
    A financial information and publishing company best known for The Wall Street Journal and Dow...
  • Equifax
    Equifax is a consumer credit reporting agency that collects and aggregates information on individuals' credit...
  • Euronet Worldwide
    Profile for Euronet Worldwide in the API Evangelist network. Fortune F1000 (rank 831).
  • Fidelity National Information Services (FIS)
    Fidelity National Information Services (FIS) is a global provider of financial services technology offering solutions...
  • Fiserv
    Fiserv is a global provider of financial services technology solutions, offering a wide range of...
  • Global Payments
    Global Payments is a leading worldwide provider of payment technology and software solutions delivering innovative...
  • Goldman Sachs
    A leading global investment banking, securities, and investment management firm. Provides a wide range of...
  • HSBC
    One of the world's largest banking and financial services organizations headquartered in London. Serves over...
  • ING
    A Dutch multinational banking and financial services corporation headquartered in Amsterdam. Provides retail banking, direct...
  • Interactive Brokers
    Interactive Brokers is an online brokerage firm providing trading access to stocks, options, futures, currencies,...
  • Intercontinental Exchange
    Intercontinental Exchange (ICE) operates global exchanges, clearing houses, and data services for financial and commodity...
  • JP Morgan Chase
    The largest bank in the United States and a global leader in investment banking, financial...
  • Mastercard
    A global payment technology company connecting consumers, financial institutions, merchants, and governments through electronic payments....
  • Moodys
    A global financial intelligence company providing credit ratings, research, and risk analysis. Its ratings and...
  • MSCI
    Fortune 1000 company MSCI. Public API documentation has not yet been catalogued in the API...
  • Nasdaq
    A global technology company operating one of the world's largest stock exchanges and providing market...
  • NCR
    NCR Corporation separated in October 2023 into two independent public companies: NCR Voyix, a global...
  • PayPal
    A global digital payments platform enabling online money transfers, payments, and financial services. Operates PayPal,...
  • S&P Global
    S&P Global is a leading provider of credit ratings, benchmarks, analytics, and workflow solutions in...
  • Scotiabank
    A leading Canadian multinational bank and one of the largest financial institutions in North America....
  • SEI Investments
    An Oaks, PA-based global provider of investment processing, investment management, and investment operations platforms serving...
  • Shift4 Payments
    Shift4 Payments is a leading integrated payments and commerce technology provider and a Fortune 1000...
  • SS AND C Technologies
    Fortune 1000 company SS AND C Technologies. Public API documentation has not yet been catalogued...
  • Standard Chartered
    A British multinational banking and financial services company headquartered in London with a strong focus...
  • Stonex Group
    Fortune 1000 company Stonex Group. Public API documentation has not yet been catalogued in the...
  • Stripe
    A financial infrastructure platform providing payment processing, billing, and financial management tools for internet businesses....
  • TD Bank Group
    One of North America's largest financial institutions, providing a full range of financial products and...
  • Toast
    Toast is a restaurant technology platform providing cloud-based point-of-sale, payment processing, and business management tools...
  • Transunion
    Fortune 1000 company Transunion. Public API documentation has not yet been catalogued in the API...
  • Verisk
    Verisk (formerly ISO) is a leading data analytics and technology company serving the insurance, energy,...
  • Visa
    The world's largest payment processing network facilitating electronic fund transfers across more than 200 countries....
  • Wells Fargo
    One of the largest banks in the United States providing banking, investment, mortgage, and consumer...
  • Western Union
    The Western Union Company is a global leader in cross-border, cross-currency money movement, providing money...
  • WEX
    Fortune 1000 company WEX. Public API documentation has not yet been catalogued in the API...

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

Sort
Expand
2362 capabilities

Queries a SEPA or SWIFT payment transaction status from the core banking system, checks processing SLA compliance against Snowflake benchmarks, and escalates overdue payments via ServiceNow.

naftiko: '0.5'
info:
  label: Payment Transaction Status with SLA Check
  description: Queries a SEPA or SWIFT payment transaction status from the core banking system, checks processing SLA compliance against Snowflake benchmarks, and escalates overdue payments via ServiceNow.
  tags:
  - payments
  - banking
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: payments
    port: 8080
    tools:
    - name: get-payment-status-with-sla
      description: Look up a payment transaction by reference, check SLA compliance, and escalate if overdue.
      inputParameters:
      - name: payment_reference
        in: body
        type: string
        description: The unique payment reference or end-to-end ID.
      - name: expected_sla_hours
        in: body
        type: number
        description: Expected SLA in hours for payment settlement.
      steps:
      - name: get-payment
        type: call
        call: core-banking.get-payment
        with:
          reference: '{{payment_reference}}'
      - name: check-sla
        type: call
        call: snowflake.execute-query
        with:
          warehouse: PAYMENTS_WH
          database: PAYMENTS_DB
          query: SELECT TIMESTAMPDIFF(hour, initiated_at, CURRENT_TIMESTAMP()) as hours_elapsed FROM payment_tracking WHERE reference = '{{payment_reference}}'
      - name: escalate-overdue
        type: call
        call: servicenow.create-record
        with:
          table: u_payment_escalation
          short_description: 'Payment SLA breach: {{payment_reference}}'
          description: 'Payment {{payment_reference}} status: {{get-payment.status}}. Hours elapsed: {{check-sla.hours_elapsed}}. Expected SLA: {{expected_sla_hours}} hours.'
          assigned_group: Payment_Operations
  consumes:
  - type: http
    namespace: core-banking
    baseUri: https://api.abnamro.com/v1/payments
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: transactions
      path: /transactions/{{reference}}
      inputParameters:
      - name: reference
        in: path
      operations:
      - name: get-payment
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://abnamro.eu-west-1.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://abnamro.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → payment-transaction-status-with-sla-check.yml

On AML alert, enriches with customer data from Salesforce, checks sanctions lists, creates investigation case in ServiceNow, and notifies compliance via Teams.

naftiko: '0.5'
info:
  label: AML Alert Investigation Pipeline
  description: On AML alert, enriches with customer data from Salesforce, checks sanctions lists, creates investigation case in ServiceNow, and notifies compliance via Teams.
  tags:
  - aml
  - compliance
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: aml
    port: 8080
    tools:
    - name: aml_alert_investigation_pipeline
      description: Orchestrate aml alert investigation pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-alert
        type: call
        call: aml.get-alert
        with:
          alert_id: '{{resource_id}}'
      - name: get-customer
        type: call
        call: salesforce.get-customer
        with:
          customer_id: '{{get-alert.customer_id}}'
      - name: create-case
        type: call
        call: servicenow.create-case
        with:
          short_description: 'AML investigation: {{resource_id}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: compliance
          text: 'AML alert {{resource_id}} for {{get-customer.name}}. Case: {{create-case.number}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://abn-amro.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://abn-amro.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-op
        method: POST
Open in Framework → View in Fleet → aml-alert-investigation-pipeline.yml

Retrieves real-time market data for a given security from Bloomberg Enterprise Data, checks for significant price movements against Snowflake historical data, and alerts the trading desk in Microsoft Teams if volatility thresholds are breached.

naftiko: '0.5'
info:
  label: Bloomberg Market Data Lookup with Risk Check
  description: Retrieves real-time market data for a given security from Bloomberg Enterprise Data, checks for significant price movements against Snowflake historical data, and alerts the trading desk in Microsoft Teams if volatility thresholds are breached.
  tags:
  - trading
  - market-data
  - bloomberg-enterprise-data
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: trading-data
    port: 8080
    tools:
    - name: get-security-quote-with-check
      description: Look up real-time market data for a security by Bloomberg ticker, compare against historical volatility, and alert if thresholds are breached.
      inputParameters:
      - name: ticker
        in: body
        type: string
        description: Bloomberg ticker symbol (e.g., ABNA NA Equity).
      - name: volatility_threshold
        in: body
        type: number
        description: Percentage threshold for volatility alerts.
      steps:
      - name: get-quote
        type: call
        call: bloomberg.get-quote
        with:
          ticker: '{{ticker}}'
      - name: get-historical
        type: call
        call: snowflake.execute-query
        with:
          warehouse: TRADING_WH
          database: MARKET_DATA_DB
          query: SELECT AVG(close_price) as avg_price, STDDEV(close_price) as std_price FROM price_history WHERE ticker = '{{ticker}}' AND trade_date >= DATEADD(day, -30, CURRENT_DATE())
      - name: alert-desk
        type: call
        call: msteams.send-message
        with:
          channel: trading-desk-alerts
          text: 'Market data alert: {{ticker}} | Last: {{get-quote.last_price}} | 30d avg: {{get-historical.avg_price}} | Std: {{get-historical.std_price}} | Threshold: {{volatility_threshold}}%'
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: quotes
      path: /market/quotes/{{ticker}}
      inputParameters:
      - name: ticker
        in: path
      operations:
      - name: get-quote
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://abnamro.eu-west-1.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}}/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → bloomberg-market-data-lookup-with-risk-check.yml

Receives credit application, runs scoring model in Snowflake, checks exposure limits, generates decision in ServiceNow, and notifies the credit committee.

naftiko: '0.5'
info:
  label: Credit Decision Engine Pipeline
  description: Receives credit application, runs scoring model in Snowflake, checks exposure limits, generates decision in ServiceNow, and notifies the credit committee.
  tags:
  - credit
  - lending
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: credit
    port: 8080
    tools:
    - name: credit_decision_engine_pipeline
      description: Orchestrate credit decision engine pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-application
        type: call
        call: lending.get-credit-app
        with:
          app_id: '{{resource_id}}'
      - name: run-scoring
        type: call
        call: snowflake.run-query
        with:
          sql_query: CALL credit_score('{{resource_id}}')
          warehouse: CREDIT_WH
      - name: create-decision
        type: call
        call: servicenow.create-record
        with:
          table: credit_decisions
          app_id: '{{resource_id}}'
          score: '{{run-scoring.score}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: credit-committee
          text: 'Credit decision for {{resource_id}}: Score {{run-scoring.score}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abn-amro.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://abn-amro.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-op
        method: POST
Open in Framework → View in Fleet → credit-decision-engine-pipeline.yml

Monitors FX hedging positions, calculates effectiveness in Snowflake, generates reports, creates alerts for breaches, and notifies treasury.

naftiko: '0.5'
info:
  label: FX Hedging Position Monitor
  description: Monitors FX hedging positions, calculates effectiveness in Snowflake, generates reports, creates alerts for breaches, and notifies treasury.
  tags:
  - fx
  - hedging
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: fx
    port: 8080
    tools:
    - name: fx_hedging_position_monitor
      description: Orchestrate fx hedging position monitor workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: fetch-data
        type: call
        call: primary.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-data
        type: call
        call: processor.transform
        with:
          input: '{{fetch-data.result}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: records
          data: '{{process-data.output}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: operations
          text: 'Workflow {{resource_id}} complete. Record: {{create-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://co.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/records
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → fx-hedging-position-monitor.yml

Searches Elasticsearch for application logs by service name and time range, returning matching log entries for troubleshooting banking system issues.

naftiko: '0.5'
info:
  label: Elasticsearch Log Search
  description: Searches Elasticsearch for application logs by service name and time range, returning matching log entries for troubleshooting banking system issues.
  tags:
  - observability
  - logging
  - elasticsearch
capability:
  exposes:
  - type: mcp
    namespace: log-search
    port: 8080
    tools:
    - name: search-logs
      description: Search Elasticsearch logs by service name and time range. Returns matching log entries.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The service name to search logs for.
      - name: time_range
        in: body
        type: string
        description: Time range (e.g., 1h, 6h, 24h).
      - name: log_level
        in: body
        type: string
        description: 'Log level filter: ERROR, WARN, INFO, DEBUG.'
      call: elasticsearch.search
      with:
        index: logs-{{service_name}}-*
        query: level:{{log_level}} AND @timestamp:[now-{{time_range}} TO now]
      outputParameters:
      - name: hit_count
        type: string
        mapping: $.hits.total.value
  consumes:
  - type: http
    namespace: elasticsearch
    baseUri: https://es.abnamro.com:9200
    authentication:
      type: basic
      username: $secrets.elasticsearch_user
      password: $secrets.elasticsearch_password
    resources:
    - name: search
      path: /{{index}}/_search
      inputParameters:
      - name: index
        in: path
      operations:
      - name: search
        method: POST
Open in Framework → View in Fleet → elasticsearch-log-search.yml

Retrieves the current on-call schedule for ABN AMRO incident response teams.

naftiko: '0.5'
info:
  label: PagerDuty On-Call Schedule
  description: Retrieves the current on-call schedule for ABN AMRO incident response teams.
  tags:
  - devops
  - pagerduty
  - on-call
capability:
  exposes:
  - type: mcp
    namespace: incident-mgmt
    port: 8080
    tools:
    - name: get-on-call
      description: Get current on-call schedule by policy.
      inputParameters:
      - name: policy_id
        in: body
        type: string
        description: The policy_id to look up.
      call: pagerduty.get-policy_id
      with:
        policy_id: '{{policy_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_on_call_schedule
        method: GET
Open in Framework → View in Fleet → pagerduty-on-call-schedule.yml

On role change in Workday, updates SailPoint access, modifies Okta groups, adjusts ServiceNow assignments, and notifies the employee and manager.

naftiko: '0.5'
info:
  label: Employee Role Transfer Orchestrator
  description: On role change in Workday, updates SailPoint access, modifies Okta groups, adjusts ServiceNow assignments, and notifies the employee and manager.
  tags:
  - hr
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: employee_role_transfer_orchestrator
      description: Orchestrate employee role transfer orchestrator workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-transfer
        type: call
        call: workday.get-transfer
        with:
          transfer_id: '{{resource_id}}'
      - name: update-access
        type: call
        call: sailpoint.update-roles
        with:
          user_id: '{{get-transfer.employee_id}}'
          new_role: '{{get-transfer.new_role}}'
      - name: update-tickets
        type: call
        call: servicenow.update-assignments
        with:
          employee_id: '{{get-transfer.employee_id}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: hr-ops
          text: Transfer {{resource_id}} processed for {{get-transfer.employee_name}}
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/abn-amro
    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://abn-amro.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-op
        method: POST
Open in Framework → View in Fleet → employee-role-transfer-orchestrator.yml

Runs a liquidity stress test scenario by extracting positions from Snowflake, applying shock parameters, computing liquidity coverage ratio via Databricks, and publishing results to Power BI with compliance notification.

naftiko: '0.5'
info:
  label: Liquidity Stress Test Orchestrator
  description: Runs a liquidity stress test scenario by extracting positions from Snowflake, applying shock parameters, computing liquidity coverage ratio via Databricks, and publishing results to Power BI with compliance notification.
  tags:
  - risk-management
  - liquidity
  - stress-testing
  - snowflake
  - databricks
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: risk-liquidity
    port: 8080
    tools:
    - name: run-liquidity-stress-test
      description: Given a scenario name and stress parameters, run liquidity stress test across Snowflake and Databricks, publish results, and notify risk committee.
      inputParameters:
      - name: scenario_name
        in: body
        type: string
        description: Stress scenario name (e.g., market_crash_2008, idiosyncratic_run).
      - name: shock_severity
        in: body
        type: string
        description: 'Shock severity: mild, moderate, or severe.'
      - name: reporting_date
        in: body
        type: string
        description: Reporting date in YYYY-MM-DD format.
      steps:
      - name: extract-positions
        type: call
        call: snowflake.execute-query
        with:
          warehouse: RISK_WH
          database: TREASURY_DB
          query: SELECT * FROM liquidity_positions WHERE report_date = '{{reporting_date}}'
      - name: run-model
        type: call
        call: databricks.run-job
        with:
          job_id: liquidity-stress-model
          parameters:
            scenario: '{{scenario_name}}'
            severity: '{{shock_severity}}'
            position_data: '{{extract-positions.statement_handle}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          group_id: risk-management-workspace
          dataset_id: liquidity-stress-results
      - name: notify-risk-committee
        type: call
        call: msteams.send-message
        with:
          channel: risk-committee
          text: 'Liquidity stress test complete: {{scenario_name}} ({{shock_severity}}) for {{reporting_date}}. Databricks run: {{run-model.run_id}}. Dashboard refreshed. Review results in Power BI.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abnamro.eu-west-1.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: databricks
    baseUri: https://adb-abnamro.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/{{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}}/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → liquidity-stress-test-orchestrator.yml

Loads stress scenario parameters, runs calculations in Snowflake, generates reports in Power BI, submits to regulators via ServiceNow, and notifies risk team.

naftiko: '0.5'
info:
  label: Stress Testing Scenario Runner
  description: Loads stress scenario parameters, runs calculations in Snowflake, generates reports in Power BI, submits to regulators via ServiceNow, and notifies risk team.
  tags:
  - risk
  - stress-testing
  - snowflake
  - power-bi
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: risk
    port: 8080
    tools:
    - name: stress_testing_scenario_runner
      description: Orchestrate stress testing scenario runner workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: load-scenario
        type: call
        call: risk-engine.get-scenario
        with:
          scenario_id: '{{resource_id}}'
      - name: run-calculations
        type: call
        call: snowflake.run-query
        with:
          sql_query: CALL run_stress_test('{{resource_id}}')
          warehouse: RISK_WH
      - name: generate-report
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: stress_testing
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: risk-team
          text: 'Stress test {{resource_id}} complete. Impact: {{run-calculations.pnl_impact}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abn-amro.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: powerbi-op
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-op
        method: POST
Open in Framework → View in Fleet → stress-testing-scenario-runner.yml

Retrieves portfolio positions and valuations from Bloomberg AIM for a given portfolio and valuation date, returning total NAV, position count, and top holdings.

naftiko: '0.5'
info:
  label: Bloomberg AIM Portfolio Valuation
  description: Retrieves portfolio positions and valuations from Bloomberg AIM for a given portfolio and valuation date, returning total NAV, position count, and top holdings.
  tags:
  - asset-management
  - portfolio
  - bloomberg-aim
capability:
  exposes:
  - type: mcp
    namespace: portfolio-management
    port: 8080
    tools:
    - name: get-portfolio-valuation
      description: Look up portfolio valuation from Bloomberg AIM. Returns NAV, position count, and top holdings by weight.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The Bloomberg AIM portfolio identifier.
      - name: valuation_date
        in: body
        type: string
        description: Valuation date in YYYY-MM-DD format.
      call: bloomberg-aim.get-valuation
      with:
        portfolio_id: '{{portfolio_id}}'
        valuation_date: '{{valuation_date}}'
      outputParameters:
      - name: nav
        type: string
        mapping: $.portfolio.nav
      - name: position_count
        type: string
        mapping: $.portfolio.positionCount
      - name: currency
        type: string
        mapping: $.portfolio.baseCurrency
  consumes:
  - type: http
    namespace: bloomberg-aim
    baseUri: https://api.bloomberg.com/aim/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_aim_token
    resources:
    - name: portfolios
      path: /portfolios/{{portfolio_id}}/valuations?date={{valuation_date}}
      inputParameters:
      - name: portfolio_id
        in: path
      - name: valuation_date
        in: query
      operations:
      - name: get-valuation
        method: GET
Open in Framework → View in Fleet → bloomberg-aim-portfolio-valuation.yml

Executes a SQL query against ABN AMRO's Snowflake data warehouse and returns the result set for analytics and reporting purposes.

naftiko: '0.5'
info:
  label: Snowflake Query Execution
  description: Executes a SQL query against ABN AMRO's Snowflake data warehouse and returns the result set for analytics and reporting purposes.
  tags:
  - data
  - analytics
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: data-warehouse
    port: 8080
    tools:
    - name: run-query
      description: Execute a SQL query on Snowflake. Returns the query result set and row count.
      inputParameters:
      - name: warehouse
        in: body
        type: string
        description: The Snowflake warehouse to use.
      - name: database
        in: body
        type: string
        description: The Snowflake database to query.
      - name: query
        in: body
        type: string
        description: The SQL query to execute.
      call: snowflake.execute-query
      with:
        warehouse: '{{warehouse}}'
        database: '{{database}}'
        query: '{{query}}'
      outputParameters:
      - name: statement_handle
        type: string
        mapping: $.statementHandle
      - name: row_count
        type: string
        mapping: $.resultSetMetaData.numRows
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abnamro.eu-west-1.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → snowflake-query-execution.yml

Queries active user sessions in Keycloak, cross-references with Azure AD sign-in logs for anomalous locations, and creates a security incident in ServiceNow when suspicious sessions are detected.

naftiko: '0.5'
info:
  label: Keycloak Suspicious Session Audit
  description: Queries active user sessions in Keycloak, cross-references with Azure AD sign-in logs for anomalous locations, and creates a security incident in ServiceNow when suspicious sessions are detected.
  tags:
  - identity-management
  - authentication
  - keycloak
  - azure-active-directory
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: identity-sessions
    port: 8080
    tools:
    - name: audit-user-sessions
      description: List Keycloak sessions, check Azure AD sign-in logs for anomalies, and create a ServiceNow security incident if suspicious.
      inputParameters:
      - name: realm
        in: body
        type: string
        description: The Keycloak realm name.
      - name: user_id
        in: body
        type: string
        description: The Keycloak user ID.
      - name: user_principal_name
        in: body
        type: string
        description: The user's Azure AD UPN for sign-in log lookup.
      steps:
      - name: get-sessions
        type: call
        call: keycloak.get-sessions
        with:
          realm: '{{realm}}'
          user_id: '{{user_id}}'
      - name: get-signin-logs
        type: call
        call: azuread.get-signin-logs
        with:
          user_principal_name: '{{user_principal_name}}'
      - name: create-security-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: '[Session Audit] Suspicious activity — {{user_principal_name}}'
          description: 'User: {{user_principal_name}}

            Keycloak sessions: {{get-sessions.session_count}}

            Recent sign-in locations: {{get-signin-logs.locations}}

            Review for potential account compromise.'
          assigned_group: Security_Operations_Center
          category: security_audit
  consumes:
  - type: http
    namespace: keycloak
    baseUri: https://auth.abnamro.com/admin/realms
    authentication:
      type: bearer
      token: $secrets.keycloak_admin_token
    resources:
    - name: sessions
      path: /{{realm}}/users/{{user_id}}/sessions
      inputParameters:
      - name: realm
        in: path
      - name: user_id
        in: path
      operations:
      - name: get-sessions
        method: GET
  - type: http
    namespace: azuread
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: signin-logs
      path: /auditLogs/signIns?$filter=userPrincipalName eq '{{user_principal_name}}'&$top=10
      inputParameters:
      - name: user_principal_name
        in: query
      operations:
      - name: get-signin-logs
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://abnamro.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → keycloak-suspicious-session-audit.yml

Validates client identity, screens against sanctions lists, creates client record in Salesforce, provisions ServiceNow access, and notifies relationship manager.

naftiko: '0.5'
info:
  label: Client Onboarding KYC Pipeline
  description: Validates client identity, screens against sanctions lists, creates client record in Salesforce, provisions ServiceNow access, and notifies relationship manager.
  tags:
  - kyc
  - onboarding
  - salesforce
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: kyc
    port: 8080
    tools:
    - name: client_onboarding_kyc_pipeline
      description: Orchestrate client onboarding kyc pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: validate-identity
        type: call
        call: kyc.validate-client
        with:
          client_id: '{{resource_id}}'
      - name: screen-sanctions
        type: call
        call: sanctions.check-lists
        with:
          name: '{{validate-identity.legal_name}}'
      - name: create-client
        type: call
        call: salesforce.create-account
        with:
          name: '{{validate-identity.legal_name}}'
          kyc_status: '{{screen-sanctions.result}}'
      - name: notify
        type: call
        call: slack.send-message
        with:
          channel: client-onboarding
          text: 'KYC complete for {{resource_id}}: {{screen-sanctions.result}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://abn-amro.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://abn-amro.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → client-onboarding-kyc-pipeline.yml

On fraud alert, collects transaction history from core banking, enriches with customer profile from Salesforce, creates investigation in ServiceNow, and escalates via PagerDuty.

naftiko: '0.5'
info:
  label: Fraud Investigation Workflow
  description: On fraud alert, collects transaction history from core banking, enriches with customer profile from Salesforce, creates investigation in ServiceNow, and escalates via PagerDuty.
  tags:
  - fraud
  - investigation
  - salesforce
  - servicenow
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: fraud
    port: 8080
    tools:
    - name: fraud_investigation_workflow
      description: Orchestrate fraud investigation workflow workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-transactions
        type: call
        call: corebanking.get-history
        with:
          account_id: '{{resource_id}}'
      - name: get-profile
        type: call
        call: salesforce.get-customer
        with:
          account_id: '{{resource_id}}'
      - name: create-investigation
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Fraud investigation: {{resource_id}}'
      - name: escalate
        type: call
        call: pagerduty.create-incident
        with:
          title: 'Fraud alert: {{resource_id}} - {{get-profile.name}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://abn-amro.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://abn-amro.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: 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
Open in Framework → View in Fleet → fraud-investigation-workflow.yml

Deploys a Helm chart to Azure Kubernetes Service for banking microservices, triggers a SonarQube quality gate check beforehand, and notifies the platform team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Helm Chart Deployment to AKS
  description: Deploys a Helm chart to Azure Kubernetes Service for banking microservices, triggers a SonarQube quality gate check beforehand, and notifies the platform team in Microsoft Teams.
  tags:
  - devops
  - deployment
  - helm
  - azure-kubernetes-service
  - sonarqube
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: k8s-deploy
    port: 8080
    tools:
    - name: deploy-helm-chart
      description: Given a chart name, version, and target namespace, validate quality gate, deploy to AKS, and notify the team.
      inputParameters:
      - name: chart_name
        in: body
        type: string
        description: The Helm chart name.
      - name: chart_version
        in: body
        type: string
        description: The Helm chart version to deploy.
      - name: k8s_namespace
        in: body
        type: string
        description: The Kubernetes namespace to deploy into.
      - name: project_key
        in: body
        type: string
        description: The SonarQube project key for quality gate verification.
      steps:
      - name: check-quality-gate
        type: call
        call: sonarqube.get-quality-gate
        with:
          project_key: '{{project_key}}'
      - name: deploy-chart
        type: call
        call: azuredevops.run-pipeline
        with:
          project: banking-services
          pipeline_id: helm-deploy
          variables:
            chart: '{{chart_name}}'
            version: '{{chart_version}}'
            namespace: '{{k8s_namespace}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: platform-deployments
          text: 'Helm deploy: {{chart_name}}:{{chart_version}} to {{k8s_namespace}}. Quality gate: {{check-quality-gate.status}}. Pipeline run: {{deploy-chart.run_id}}.'
  consumes:
  - type: http
    namespace: sonarqube
    baseUri: https://sonarqube.abnamro.com/api
    authentication:
      type: bearer
      token: $secrets.sonarqube_token
    resources:
    - name: quality-gates
      path: /qualitygates/project_status?projectKey={{project_key}}
      inputParameters:
      - name: project_key
        in: query
      operations:
      - name: get-quality-gate
        method: GET
  - type: http
    namespace: azuredevops
    baseUri: https://dev.azure.com/abnamro
    authentication:
      type: bearer
      token: $secrets.azuredevops_token
    resources:
    - name: pipelines
      path: /{{project}}/_apis/pipelines/{{pipeline_id}}/runs?api-version=7.1
      inputParameters:
      - name: project
        in: path
      - name: pipeline_id
        in: path
      operations:
      - name: run-pipeline
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel}}/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → helm-chart-deployment-to-aks.yml

Detects digital banking incidents via monitoring, creates war room in Teams, gathers diagnostics from Splunk, and coordinates resolution.

naftiko: '0.5'
info:
  label: Digital Channel Incident Response
  description: Detects digital banking incidents via monitoring, creates war room in Teams, gathers diagnostics from Splunk, and coordinates resolution.
  tags:
  - incident-response
  - digital
  - splunk
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: incident-response
    port: 8080
    tools:
    - name: digital_channel_incident_response
      description: Orchestrate digital channel incident response workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: fetch-data
        type: call
        call: primary.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-data
        type: call
        call: processor.transform
        with:
          input: '{{fetch-data.result}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: records
          data: '{{process-data.output}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: operations
          text: 'Workflow {{resource_id}} complete. Record: {{create-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://co.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/records
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → digital-channel-incident-response.yml

Processes a GDPR data subject access request by searching for personal data across Salesforce, Snowflake, and ServiceNow, compiling results, and creating a Jira task for the DPO team to review and respond.

naftiko: '0.5'
info:
  label: GDPR Data Subject Access Request Pipeline
  description: Processes a GDPR data subject access request by searching for personal data across Salesforce, Snowflake, and ServiceNow, compiling results, and creating a Jira task for the DPO team to review and respond.
  tags:
  - privacy
  - gdpr
  - data-protection
  - salesforce
  - snowflake
  - servicenow
  - jira
capability:
  exposes:
  - type: mcp
    namespace: privacy-gdpr
    port: 8080
    tools:
    - name: process-dsar
      description: Given a data subject email and request type, search for personal data across systems and create a review task.
      inputParameters:
      - name: subject_email
        in: body
        type: string
        description: The email address of the data subject.
      - name: request_type
        in: body
        type: string
        description: 'DSAR type: access, erasure, portability, or rectification.'
      - name: request_reference
        in: body
        type: string
        description: The DSAR reference number.
      steps:
      - name: search-crm
        type: call
        call: salesforce.search-contacts
        with:
          email: '{{subject_email}}'
      - name: search-data-warehouse
        type: call
        call: snowflake.execute-query
        with:
          warehouse: PRIVACY_WH
          database: CUSTOMER_DB
          query: SELECT data_category, record_count, last_updated FROM data_inventory WHERE email = '{{subject_email}}'
      - name: search-itsm
        type: call
        call: servicenow.search-records
        with:
          table: sys_user
          query: email={{subject_email}}
      - name: create-review-task
        type: call
        call: jira.create-issue
        with:
          project_key: PRIVACY
          issuetype: Task
          summary: '[DSAR] {{request_type}} — {{subject_email}} — {{request_reference}}'
          description: 'DSAR {{request_type}} request {{request_reference}}.

            Subject: {{subject_email}}

            Salesforce records: {{search-crm.total_size}}

            Snowflake categories found: {{search-data-warehouse.row_count}}

            ServiceNow records: {{search-itsm.count}}

            Deadline: 30 days from request receipt.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://abnamro.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /parameterizedSearch/?q={{email}}&sobject=Contact&Contact.fields=Id,Name,Email
      inputParameters:
      - name: email
        in: query
      operations:
      - name: search-contacts
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://abnamro.eu-west-1.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://abnamro.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}?sysparm_query={{query}}
      inputParameters:
      - name: table
        in: path
      - name: query
        in: query
      operations:
      - name: search-records
        method: GET
  - type: http
    namespace: jira
    baseUri: https://abnamro.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → gdpr-data-subject-access-request-pipeline.yml

Retrieves a ServiceNow incident by number, returning status, priority, assigned group, and resolution notes for support teams.

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

Retrieves the current status of Grafana alerts for ABN AMRO infrastructure monitoring.

naftiko: '0.5'
info:
  label: Grafana Alert Status
  description: Retrieves the current status of Grafana alerts for ABN AMRO infrastructure monitoring.
  tags:
  - monitoring
  - grafana
  - alerting
capability:
  exposes:
  - type: mcp
    namespace: monitoring
    port: 8080
    tools:
    - name: get-alert-status
      description: Get Grafana alert status by rule ID.
      inputParameters:
      - name: rule_id
        in: body
        type: string
        description: The rule_id to look up.
      call: grafana.get-rule_id
      with:
        rule_id: '{{rule_id}}'
  consumes:
  - type: http
    namespace: grafana
    baseUri: https://abn-amro-grafana.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_api_key
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: grafana_alert_status
        method: GET
Open in Framework → View in Fleet → grafana-alert-status.yml

Collects access control evidence from Okta, change management evidence from ServiceNow, monitoring evidence from Datadog, and compiles in Confluence.

naftiko: '0.5'
info:
  label: SOC2 Evidence Collection Pipeline
  description: Collects access control evidence from Okta, change management evidence from ServiceNow, monitoring evidence from Datadog, and compiles in Confluence.
  tags:
  - compliance
  - audit
  - servicenow
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: soc2_evidence_collection_pipeline
      description: Orchestrate soc2 evidence collection pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-access-evidence
        type: call
        call: okta.get-access-logs
        with:
          period: '{{resource_id}}'
      - name: get-change-evidence
        type: call
        call: servicenow.get-changes
        with:
          period: '{{resource_id}}'
      - name: get-monitoring-evidence
        type: call
        call: datadog.get-alerts-history
        with:
          period: '{{resource_id}}'
      - name: compile-report
        type: call
        call: confluence.create-page
        with:
          space: AUDIT
          title: 'SOC2 Evidence: {{resource_id}}'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://abn-amro.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://abn-amro.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: 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://abn-amro.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: confluence-op
        method: POST
Open in Framework → View in Fleet → soc2-evidence-collection-pipeline.yml

When a periodic access certification is due, pulls user entitlements from SailPoint, cross-references with Workday org data, and creates a Jira review task for the user's manager.

naftiko: '0.5'
info:
  label: SailPoint Access Review Orchestrator
  description: When a periodic access certification is due, pulls user entitlements from SailPoint, cross-references with Workday org data, and creates a Jira review task for the user's manager.
  tags:
  - identity-management
  - access-review
  - sailpoint
  - workday
  - jira
capability:
  exposes:
  - type: mcp
    namespace: identity-access
    port: 8080
    tools:
    - name: initiate-access-review
      description: Given a user identity ID, pull entitlements from SailPoint, get manager info from Workday, and create a Jira access review task.
      inputParameters:
      - name: identity_id
        in: body
        type: string
        description: The SailPoint identity ID.
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      - name: review_campaign
        in: body
        type: string
        description: The access review campaign name.
      steps:
      - name: get-entitlements
        type: call
        call: sailpoint.get-entitlements
        with:
          identity_id: '{{identity_id}}'
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: create-review-task
        type: call
        call: jira.create-issue
        with:
          project_key: IAM
          issuetype: Task
          summary: '[Access Review] {{get-employee.full_name}} — {{review_campaign}}'
          description: 'Review entitlements for {{get-employee.full_name}} ({{identity_id}}).

            Department: {{get-employee.department}}

            Manager: {{get-employee.manager_name}}

            Entitlements count: {{get-entitlements.count}}

            Entitlements: {{get-entitlements.summary}}'
          assignee: '{{get-employee.manager_email}}'
  consumes:
  - type: http
    namespace: sailpoint
    baseUri: https://abnamro.api.identitynow.com/v3
    authentication:
      type: bearer
      token: $secrets.sailpoint_token
    resources:
    - name: identities
      path: /identities/{{identity_id}}/entitlements
      inputParameters:
      - name: identity_id
        in: path
      operations:
      - name: get-entitlements
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd3-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://abnamro.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → sailpoint-access-review-orchestrator.yml

Retrieves SWIFT message details by reference number for ABN AMRO payment operations.

naftiko: '0.5'
info:
  label: SWIFT Message Lookup
  description: Retrieves SWIFT message details by reference number for ABN AMRO payment operations.
  tags:
  - payments
  - swift
  - banking
capability:
  exposes:
  - type: mcp
    namespace: payments
    port: 8080
    tools:
    - name: get-swift-msg
      description: Look up SWIFT message by reference.
      inputParameters:
      - name: message_ref
        in: body
        type: string
        description: The message_ref to look up.
      call: servicenow.get-message_ref
      with:
        message_ref: '{{message_ref}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://abn-amro.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: swift_message_lookup
        method: GET
Open in Framework → View in Fleet → swift-message-lookup.yml

Scans Azure and AWS configurations, validates against CIS benchmarks, creates findings in Jira, and notifies cloud security team.

naftiko: '0.5'
info:
  label: Cloud Security Posture Assessment
  description: Scans Azure and AWS configurations, validates against CIS benchmarks, creates findings in Jira, and notifies cloud security team.
  tags:
  - security
  - cloud
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: security
    port: 8080
    tools:
    - name: cloud_security_posture_assessment
      description: Orchestrate cloud security posture assessment workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: fetch-data
        type: call
        call: primary.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-data
        type: call
        call: processor.transform
        with:
          input: '{{fetch-data.result}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: records
          data: '{{process-data.output}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: operations
          text: 'Workflow {{resource_id}} complete. Record: {{create-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://co.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/records
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → cloud-security-posture-assessment.yml

Extracts regulatory reporting data from Snowflake, transforms via Informatica, and loads into Oracle for DNB (Dutch Central Bank) submission, notifying compliance via Microsoft Teams upon completion.

naftiko: '0.5'
info:
  label: Regulatory Reporting Data Pipeline
  description: Extracts regulatory reporting data from Snowflake, transforms via Informatica, and loads into Oracle for DNB (Dutch Central Bank) submission, notifying compliance via Microsoft Teams upon completion.
  tags:
  - regulatory-compliance
  - reporting
  - snowflake
  - informatica
  - oracle-cloud
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: regulatory-reporting
    port: 8080
    tools:
    - name: run-regulatory-extract
      description: Given a report type and period, extract data from Snowflake, trigger Informatica transformation, and notify compliance team.
      inputParameters:
      - name: report_type
        in: body
        type: string
        description: 'Regulatory report type: corep, finrep, anacredit, or srep.'
      - name: reporting_period
        in: body
        type: string
        description: Reporting period in YYYY-QN format (e.g., 2026-Q1).
      steps:
      - name: extract-data
        type: call
        call: snowflake.execute-query
        with:
          warehouse: REG_REPORTING_WH
          database: REGULATORY_DB
          query: CALL sp_extract_{{report_type}}('{{reporting_period}}')
      - name: trigger-transform
        type: call
        call: informatica.start-task
        with:
          task_name: '{{report_type}}_transform_{{reporting_period}}'
          task_type: mapping
      - name: notify-compliance
        type: call
        call: msteams.send-message
        with:
          channel: regulatory-reporting
          text: 'Regulatory extract complete: {{report_type}} for {{reporting_period}}. Informatica job: {{trigger-transform.run_id}}. Data staged for DNB submission review.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abnamro.eu-west-1.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: informatica
    baseUri: https://dm-eu.informaticacloud.com/saas/api/v2
    authentication:
      type: bearer
      token: $secrets.informatica_token
    resources:
    - name: tasks
      path: /job
      operations:
      - name: start-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}}/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → regulatory-reporting-data-pipeline.yml

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

naftiko: '0.5'
info:
  label: SAP Expense Report Processing
  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-management
  - 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 report details, validate cost center, 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://wd3-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://abnamro.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → sap-expense-report-processing.yml

Computes daily Value-at-Risk across the trading book by pulling positions from Snowflake, running Monte Carlo simulation in Databricks, storing results, and publishing the risk report to Power BI with breach alerts.

naftiko: '0.5'
info:
  label: Market Risk VaR Reporting Pipeline
  description: Computes daily Value-at-Risk across the trading book by pulling positions from Snowflake, running Monte Carlo simulation in Databricks, storing results, and publishing the risk report to Power BI with breach alerts.
  tags:
  - risk-management
  - market-risk
  - var
  - snowflake
  - databricks
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: risk-market
    port: 8080
    tools:
    - name: compute-daily-var
      description: Given a trading book and date, compute VaR using Monte Carlo simulation and publish results.
      inputParameters:
      - name: trading_book
        in: body
        type: string
        description: The trading book identifier.
      - name: valuation_date
        in: body
        type: string
        description: Valuation date in YYYY-MM-DD format.
      - name: simulation_count
        in: body
        type: number
        description: Number of Monte Carlo simulations (e.g., 10000).
      steps:
      - name: extract-positions
        type: call
        call: snowflake.execute-query
        with:
          warehouse: RISK_WH
          database: TRADING_DB
          query: SELECT * FROM trading_positions WHERE book_id = '{{trading_book}}' AND position_date = '{{valuation_date}}'
      - name: run-simulation
        type: call
        call: databricks.run-job
        with:
          job_id: monte-carlo-var
          parameters:
            book_id: '{{trading_book}}'
            date: '{{valuation_date}}'
            simulations: '{{simulation_count}}'
      - name: refresh-report
        type: call
        call: powerbi.refresh-dataset
        with:
          group_id: risk-management-workspace
          dataset_id: market-risk-var-daily
      - name: alert-risk-management
        type: call
        call: msteams.send-message
        with:
          channel: market-risk
          text: 'Daily VaR computed: {{trading_book}} for {{valuation_date}}. VaR(99%): {{run-simulation.var_99}}. VaR(95%): {{run-simulation.var_95}}. Simulations: {{simulation_count}}. Dashboard refreshed.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abnamro.eu-west-1.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: databricks
    baseUri: https://adb-abnamro.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/{{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}}/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → market-risk-var-reporting-pipeline.yml

Tracks digital banking user flows, identifies friction points in Snowflake, creates improvement tasks in Jira, and notifies product.

naftiko: '0.5'
info:
  label: Digital Banking User Journey Analyzer
  description: Tracks digital banking user flows, identifies friction points in Snowflake, creates improvement tasks in Jira, and notifies product.
  tags:
  - digital-banking
  - analytics
  - snowflake
  - jira
capability:
  exposes:
  - type: mcp
    namespace: digital-banking
    port: 8080
    tools:
    - name: digital_banking_user_journey_analyzer
      description: Orchestrate digital banking user journey analyzer workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: fetch-data
        type: call
        call: primary.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-data
        type: call
        call: processor.transform
        with:
          input: '{{fetch-data.result}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: records
          data: '{{process-data.output}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: operations
          text: 'Workflow {{resource_id}} complete. Record: {{create-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://co.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/records
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → digital-banking-user-journey-analyzer.yml

Queries Apache Kafka cluster metadata for a given topic, returning partition count, replication factor, and consumer group lag for banking event streaming.

naftiko: '0.5'
info:
  label: Apache Kafka Topic Lookup
  description: Queries Apache Kafka cluster metadata for a given topic, returning partition count, replication factor, and consumer group lag for banking event streaming.
  tags:
  - messaging
  - event-streaming
  - apache-kafka
capability:
  exposes:
  - type: mcp
    namespace: event-platform
    port: 8080
    tools:
    - name: get-topic-info
      description: Look up Kafka topic metadata. Returns partition count, replication factor, and consumer lag.
      inputParameters:
      - name: topic_name
        in: body
        type: string
        description: The Kafka topic name.
      - name: cluster
        in: body
        type: string
        description: The Kafka cluster identifier.
      call: kafka.get-topic
      with:
        topic_name: '{{topic_name}}'
        cluster: '{{cluster}}'
      outputParameters:
      - name: partition_count
        type: string
        mapping: $.topic.partitions
      - name: replication_factor
        type: string
        mapping: $.topic.replicationFactor
  consumes:
  - type: http
    namespace: kafka
    baseUri: https://kafka-rest.abnamro.com/v3
    authentication:
      type: bearer
      token: $secrets.kafka_rest_token
    resources:
    - name: topics
      path: /clusters/{{cluster}}/topics/{{topic_name}}
      inputParameters:
      - name: cluster
        in: path
      - name: topic_name
        in: path
      operations:
      - name: get-topic
        method: GET
Open in Framework → View in Fleet → apache-kafka-topic-lookup.yml

Receives complaint from Zendesk, enriches with client history from Salesforce, creates resolution workflow in ServiceNow, and sends response via email.

naftiko: '0.5'
info:
  label: Customer Complaint Resolution Pipeline
  description: Receives complaint from Zendesk, enriches with client history from Salesforce, creates resolution workflow in ServiceNow, and sends response via email.
  tags:
  - customer-service
  - zendesk
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: customer-service
    port: 8080
    tools:
    - name: customer_complaint_resolution_pipeline
      description: Orchestrate customer complaint resolution pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-complaint
        type: call
        call: zendesk.get-ticket
        with:
          ticket_id: '{{resource_id}}'
      - name: get-history
        type: call
        call: salesforce.get-client-history
        with:
          client_id: '{{get-complaint.client_id}}'
      - name: create-resolution
        type: call
        call: servicenow.create-request
        with:
          short_description: 'Complaint resolution: {{resource_id}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: client-service
          text: 'Complaint {{resource_id}} resolution started. Client: {{get-history.name}}'
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://abn-amro.zendesk.com/api/v2
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: zendesk-op
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://abn-amro.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://abn-amro.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-op
        method: POST
Open in Framework → View in Fleet → customer-complaint-resolution-pipeline.yml

Initiates a SWIFT payment through the core banking system, validates the BIC code, creates the payment instruction, and tracks the transaction status with Microsoft Teams notifications at each stage.

naftiko: '0.5'
info:
  label: SWIFT Payment Initiation and Tracking
  description: Initiates a SWIFT payment through the core banking system, validates the BIC code, creates the payment instruction, and tracks the transaction status with Microsoft Teams notifications at each stage.
  tags:
  - payments
  - swift
  - banking
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: payments-swift
    port: 8080
    tools:
    - name: initiate-swift-payment
      description: Given payment details, validate BIC, create SWIFT payment instruction, and notify the treasury team of status changes.
      inputParameters:
      - name: debtor_iban
        in: body
        type: string
        description: Debtor IBAN.
      - name: creditor_iban
        in: body
        type: string
        description: Creditor IBAN.
      - name: creditor_bic
        in: body
        type: string
        description: Creditor bank BIC/SWIFT code.
      - name: amount
        in: body
        type: number
        description: Payment amount.
      - name: currency
        in: body
        type: string
        description: Payment currency (ISO 4217).
      - name: reference
        in: body
        type: string
        description: Payment reference for the beneficiary.
      steps:
      - name: validate-bic
        type: call
        call: core-banking.validate-bic
        with:
          bic: '{{creditor_bic}}'
      - name: create-payment
        type: call
        call: core-banking.create-swift-payment
        with:
          debtor_iban: '{{debtor_iban}}'
          creditor_iban: '{{creditor_iban}}'
          creditor_bic: '{{creditor_bic}}'
          amount: '{{amount}}'
          currency: '{{currency}}'
          reference: '{{reference}}'
      - name: notify-treasury
        type: call
        call: msteams.send-message
        with:
          channel: treasury-payments
          text: 'SWIFT payment initiated: {{create-payment.payment_id}} | {{amount}} {{currency}} to {{creditor_iban}} ({{creditor_bic}}) | Reference: {{reference}} | Status: {{create-payment.status}}'
  consumes:
  - type: http
    namespace: core-banking
    baseUri: https://api.abnamro.com/v1/payments
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: bic-validation
      path: /bic/validate
      operations:
      - name: validate-bic
        method: POST
    - name: swift-payments
      path: /swift
      operations:
      - name: create-swift-payment
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel}}/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → swift-payment-initiation-and-tracking.yml

Captures operational risk events, categorizes by Basel taxonomy, calculates capital charges in Snowflake, and notifies risk management.

naftiko: '0.5'
info:
  label: Operational Risk Event Pipeline
  description: Captures operational risk events, categorizes by Basel taxonomy, calculates capital charges in Snowflake, and notifies risk management.
  tags:
  - risk
  - operational-risk
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: risk
    port: 8080
    tools:
    - name: operational_risk_event_pipeline
      description: Orchestrate operational risk event pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: fetch-data
        type: call
        call: primary.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-data
        type: call
        call: processor.transform
        with:
          input: '{{fetch-data.result}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: records
          data: '{{process-data.output}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: operations
          text: 'Workflow {{resource_id}} complete. Record: {{create-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://co.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/records
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → operational-risk-event-pipeline.yml

Orchestrates a new loan application by pulling applicant data from Salesforce, running credit scoring via Snowflake ML models, creating a ServiceNow case for underwriting review, and notifying the relationship manager in Microsoft Teams.

naftiko: '0.5'
info:
  label: Loan Application Processing Pipeline
  description: Orchestrates a new loan application by pulling applicant data from Salesforce, running credit scoring via Snowflake ML models, creating a ServiceNow case for underwriting review, and notifying the relationship manager in Microsoft Teams.
  tags:
  - lending
  - loan-origination
  - salesforce
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: lending
    port: 8080
    tools:
    - name: process-loan-application
      description: Given a loan application ID and applicant Salesforce ID, orchestrate credit scoring and underwriting workflow.
      inputParameters:
      - name: application_id
        in: body
        type: string
        description: The loan application reference number.
      - name: applicant_id
        in: body
        type: string
        description: The Salesforce account ID of the applicant.
      - name: loan_amount
        in: body
        type: number
        description: Requested loan amount in EUR.
      - name: loan_type
        in: body
        type: string
        description: 'Loan type: mortgage, corporate, sme, or consumer.'
      steps:
      - name: get-applicant
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{applicant_id}}'
      - name: run-credit-score
        type: call
        call: snowflake.execute-query
        with:
          warehouse: LENDING_WH
          database: LENDING_DB
          query: SELECT credit_score, pd_estimate, lgd_estimate FROM ml_credit_scores WHERE customer_id = '{{applicant_id}}' ORDER BY scored_at DESC LIMIT 1
      - name: create-case
        type: call
        call: servicenow.create-record
        with:
          table: u_loan_underwriting
          short_description: 'Loan underwriting: {{get-applicant.name}} — EUR {{loan_amount}}'
          description: 'Application: {{application_id}}

            Applicant: {{get-applicant.name}}

            Type: {{loan_type}}

            Amount: EUR {{loan_amount}}

            Credit score: {{run-credit-score.credit_score}}

            PD: {{run-credit-score.pd_estimate}}'
          assigned_group: Underwriting_{{loan_type}}
      - name: notify-rm
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-applicant.owner_email}}'
          text: 'Loan application {{application_id}} for {{get-applicant.name}} (EUR {{loan_amount}}) is now in underwriting. Credit score: {{run-credit-score.credit_score}}. ServiceNow case: {{create-case.number}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://abnamro.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: snowflake
    baseUri: https://abnamro.eu-west-1.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://abnamro.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → loan-application-processing-pipeline.yml

Executes a foreign exchange spot trade through Reuters, validates the rate against Bloomberg market data, books the trade in the core banking system, and confirms execution to the trader via Microsoft Teams.

naftiko: '0.5'
info:
  label: FX Spot Trade Execution
  description: Executes a foreign exchange spot trade through Reuters, validates the rate against Bloomberg market data, books the trade in the core banking system, and confirms execution to the trader via Microsoft Teams.
  tags:
  - trading
  - foreign-exchange
  - reuters
  - bloomberg
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: trading-fx
    port: 8080
    tools:
    - name: execute-fx-spot
      description: Given a currency pair and notional, validate the rate, execute on Reuters, book internally, and confirm to the trader.
      inputParameters:
      - name: currency_pair
        in: body
        type: string
        description: Currency pair (e.g., EUR/USD).
      - name: direction
        in: body
        type: string
        description: 'Trade direction: buy or sell (base currency).'
      - name: notional
        in: body
        type: number
        description: Notional amount in base currency.
      - name: trader_upn
        in: body
        type: string
        description: The UPN of the executing trader.
      steps:
      - name: get-market-rate
        type: call
        call: bloomberg.get-fx-rate
        with:
          currency_pair: '{{currency_pair}}'
      - name: execute-trade
        type: call
        call: reuters.execute-fx-spot
        with:
          currency_pair: '{{currency_pair}}'
          direction: '{{direction}}'
          notional: '{{notional}}'
      - name: book-trade
        type: call
        call: core-banking.book-fx-trade
        with:
          trade_id: '{{execute-trade.trade_id}}'
          currency_pair: '{{currency_pair}}'
          rate: '{{execute-trade.executed_rate}}'
          notional: '{{notional}}'
          direction: '{{direction}}'
      - name: confirm-trader
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{trader_upn}}'
          text: 'FX Spot executed: {{direction}} {{notional}} {{currency_pair}} at {{execute-trade.executed_rate}}. Trade ID: {{execute-trade.trade_id}}. Booked: {{book-trade.booking_ref}}. Settlement: {{execute-trade.value_date}}.'
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: fx-rates
      path: /market/fx/{{currency_pair}}
      inputParameters:
      - name: currency_pair
        in: path
      operations:
      - name: get-fx-rate
        method: GET
  - type: http
    namespace: reuters
    baseUri: https://api.refinitiv.com/trading/fx/v1
    authentication:
      type: bearer
      token: $secrets.reuters_token
    resources:
    - name: spot-orders
      path: /spot/execute
      operations:
      - name: execute-fx-spot
        method: POST
  - type: http
    namespace: core-banking
    baseUri: https://api.abnamro.com/v1/trading
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: fx-bookings
      path: /fx/book
      operations:
      - name: book-fx-trade
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → fx-spot-trade-execution.yml

On P1 incident, creates a Teams channel, pulls recent deployments from GitHub, gathers logs from Splunk, creates a bridge call, and updates StatusPage.

naftiko: '0.5'
info:
  label: Incident War Room Orchestrator
  description: On P1 incident, creates a Teams channel, pulls recent deployments from GitHub, gathers logs from Splunk, creates a bridge call, and updates StatusPage.
  tags:
  - incident-management
  - github
  - splunk
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: incident-management
    port: 8080
    tools:
    - name: incident_war_room_orchestrator
      description: Orchestrate incident war room orchestrator workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-incident
        type: call
        call: pagerduty.get-incident
        with:
          incident_id: '{{resource_id}}'
      - name: get-deployments
        type: call
        call: github.get-recent-deployments
        with:
          repo: '{{get-incident.service}}'
      - name: get-logs
        type: call
        call: splunk.search-logs
        with:
          query: '{{get-incident.service}} error'
          time_range: -1h
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: war-room
          text: 'P1: {{get-incident.title}}. Recent deploys: {{get-deployments.count}}. Errors: {{get-logs.count}}'
  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-op
        method: POST
  - 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: splunk
    baseUri: https://abn-amro-splunk.com/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: splunk-op
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-op
        method: POST
Open in Framework → View in Fleet → incident-war-room-orchestrator.yml

Orchestrates collateral valuation by pulling positions from the core banking system, fetching market prices from Bloomberg, computing haircuts via Databricks, and updating the collateral management system in Snowflake.

naftiko: '0.5'
info:
  label: Collateral Valuation Pipeline
  description: Orchestrates collateral valuation by pulling positions from the core banking system, fetching market prices from Bloomberg, computing haircuts via Databricks, and updating the collateral management system in Snowflake.
  tags:
  - collateral-management
  - risk-management
  - bloomberg
  - databricks
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: collateral
    port: 8080
    tools:
    - name: revalue-collateral
      description: Given a collateral pool ID and valuation date, revalue all positions using market data and apply regulatory haircuts.
      inputParameters:
      - name: pool_id
        in: body
        type: string
        description: The collateral pool identifier.
      - name: valuation_date
        in: body
        type: string
        description: Valuation date in YYYY-MM-DD format.
      steps:
      - name: get-positions
        type: call
        call: snowflake.execute-query
        with:
          warehouse: COLLATERAL_WH
          database: COLLATERAL_DB
          query: SELECT security_id, quantity, collateral_type FROM collateral_positions WHERE pool_id = '{{pool_id}}'
      - name: get-market-prices
        type: call
        call: bloomberg.get-bulk-prices
        with:
          securities: '{{get-positions.security_ids}}'
          date: '{{valuation_date}}'
      - name: compute-haircuts
        type: call
        call: databricks.run-job
        with:
          job_id: collateral-haircut-model
          parameters:
            pool_id: '{{pool_id}}'
            valuation_date: '{{valuation_date}}'
      - name: update-valuations
        type: call
        call: snowflake.execute-query
        with:
          warehouse: COLLATERAL_WH
          database: COLLATERAL_DB
          query: CALL sp_update_collateral_valuations('{{pool_id}}', '{{valuation_date}}')
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abnamro.eu-west-1.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: bloomberg
    baseUri: https://api.bloomberg.com/eap/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: bulk-prices
      path: /market/prices/bulk
      operations:
      - name: get-bulk-prices
        method: POST
  - type: http
    namespace: databricks
    baseUri: https://adb-abnamro.azuredatabricks.net/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
Open in Framework → View in Fleet → collateral-valuation-pipeline.yml

Triggers a Power BI dataset refresh, validates the refresh completed successfully by checking status, and notifies the analytics team in Microsoft Teams with the result.

naftiko: '0.5'
info:
  label: Power BI Dashboard Refresh with Validation
  description: Triggers a Power BI dataset refresh, validates the refresh completed successfully by checking status, and notifies the analytics team in Microsoft Teams with the result.
  tags:
  - analytics
  - reporting
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: refresh-and-validate-powerbi
      description: Trigger a Power BI dataset refresh, check completion status, and notify the analytics team.
      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: report_name
        in: body
        type: string
        description: Human-readable report name for notifications.
      steps:
      - name: trigger-refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          group_id: '{{group_id}}'
          dataset_id: '{{dataset_id}}'
      - name: check-status
        type: call
        call: powerbi.get-refresh-history
        with:
          group_id: '{{group_id}}'
          dataset_id: '{{dataset_id}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: analytics-reports
          text: 'Power BI refresh: {{report_name}} | Status: {{check-status.status}} | Duration: {{check-status.duration}} | Dataset: {{dataset_id}}'
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /groups/{{group_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: group_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
      - name: get-refresh-history
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel}}/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → power-bi-dashboard-refresh-with-validation.yml

Extracts payment batches from SWIFT, reconciles against core banking ledger, identifies breaks, creates Jira tickets, and reports to operations.

naftiko: '0.5'
info:
  label: Payment Processing Reconciliation
  description: Extracts payment batches from SWIFT, reconciles against core banking ledger, identifies breaks, creates Jira tickets, and reports to operations.
  tags:
  - payments
  - reconciliation
  - jira
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: payments
    port: 8080
    tools:
    - name: payment_processing_reconciliation
      description: Orchestrate payment processing reconciliation workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-payments
        type: call
        call: swift.get-batch
        with:
          batch_id: '{{resource_id}}'
      - name: reconcile
        type: call
        call: snowflake.run-query
        with:
          sql_query: CALL reconcile_payments('{{resource_id}}')
          warehouse: PAYMENTS_WH
      - name: create-breaks
        type: call
        call: jira.create-issue
        with:
          project: PAY
          summary: 'Payment breaks: batch {{resource_id}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: payment-ops
          text: 'Reconciliation complete for batch {{resource_id}}. Breaks: {{reconcile.break_count}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abn-amro.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://abn-amro.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-op
        method: POST
Open in Framework → View in Fleet → payment-processing-reconciliation.yml

Validates change request in ServiceNow, runs pre-deployment tests, executes Terraform plan, monitors Datadog health, and sends post-change report.

naftiko: '0.5'
info:
  label: IT Change Management Pipeline
  description: Validates change request in ServiceNow, runs pre-deployment tests, executes Terraform plan, monitors Datadog health, and sends post-change report.
  tags:
  - change-management
  - servicenow
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: change-management
    port: 8080
    tools:
    - name: it_change_management_pipeline
      description: Orchestrate it change management pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-change
        type: call
        call: servicenow.get-change
        with:
          change_id: '{{resource_id}}'
      - name: run-tests
        type: call
        call: postman.run-collection
        with:
          collection_id: pre_change_{{resource_id}}
      - name: check-health
        type: call
        call: datadog.get-monitors
        with:
          tag: change:{{resource_id}}
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: change-mgmt
          text: 'Change {{resource_id}} executed. Health: {{check-health.status}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://abn-amro.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: 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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-op
        method: POST
Open in Framework → View in Fleet → it-change-management-pipeline.yml

Retrieves the service dependency map from Datadog for ABN AMRO microservices.

naftiko: '0.5'
info:
  label: Datadog Service Map Lookup
  description: Retrieves the service dependency map from Datadog for ABN AMRO microservices.
  tags:
  - observability
  - datadog
  - service-map
capability:
  exposes:
  - type: mcp
    namespace: observability
    port: 8080
    tools:
    - name: get-service-map
      description: Get Datadog service map for a service.
      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_service_map_lookup
        method: GET
Open in Framework → View in Fleet → datadog-service-map-lookup.yml

Triggers a Postman collection run for banking API regression tests, logs results to Snowflake for trend analysis, and notifies the QA team in Microsoft Teams with pass/fail summary.

naftiko: '0.5'
info:
  label: Postman API Regression Suite with Reporting
  description: Triggers a Postman collection run for banking API regression tests, logs results to Snowflake for trend analysis, and notifies the QA team in Microsoft Teams with pass/fail summary.
  tags:
  - testing
  - api-testing
  - postman
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: api-testing
    port: 8080
    tools:
    - name: run-api-regression-suite
      description: Run a Postman collection, log results to Snowflake, and notify the QA team.
      inputParameters:
      - name: collection_id
        in: body
        type: string
        description: The Postman collection UID.
      - name: environment_id
        in: body
        type: string
        description: The Postman environment UID.
      - name: suite_name
        in: body
        type: string
        description: Human-readable test suite name.
      steps:
      - name: run-tests
        type: call
        call: postman.run-collection
        with:
          collection: '{{collection_id}}'
          environment: '{{environment_id}}'
      - name: log-results
        type: call
        call: snowflake.execute-query
        with:
          warehouse: QA_WH
          database: QA_DB
          query: INSERT INTO api_test_results (suite_name, run_id, status, executed_at) VALUES ('{{suite_name}}', '{{run-tests.run_id}}', '{{run-tests.status}}', CURRENT_TIMESTAMP())
      - name: notify-qa
        type: call
        call: msteams.send-message
        with:
          channel: qa-api-testing
          text: 'API Regression: {{suite_name}} | Run: {{run-tests.run_id}} | Status: {{run-tests.status}} | Results logged to Snowflake.'
  consumes:
  - type: http
    namespace: postman
    baseUri: https://api.getpostman.com
    authentication:
      type: bearer
      token: $secrets.postman_api_key
    resources:
    - name: collection-runs
      path: /collections/{{collection}}/runs
      inputParameters:
      - name: collection
        in: path
      operations:
      - name: run-collection
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://abnamro.eu-west-1.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}}/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → postman-api-regression-suite-with-reporting.yml

Traces data lineage from Snowflake, identifies downstream dependencies in Alation catalog, assesses impact of schema changes, creates change requests in ServiceNow.

naftiko: '0.5'
info:
  label: Data Lineage Impact Analyzer
  description: Traces data lineage from Snowflake, identifies downstream dependencies in Alation catalog, assesses impact of schema changes, creates change requests in ServiceNow.
  tags:
  - data-governance
  - snowflake
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: data-governance
    port: 8080
    tools:
    - name: data_lineage_impact_analyzer
      description: Orchestrate data lineage impact analyzer workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-lineage
        type: call
        call: snowflake.get-lineage
        with:
          table: '{{resource_id}}'
      - name: get-dependencies
        type: call
        call: alation.get-downstream
        with:
          table: '{{resource_id}}'
      - name: create-change
        type: call
        call: servicenow.create-change
        with:
          short_description: 'Schema change impact: {{resource_id}}'
          downstream_count: '{{get-dependencies.count}}'
      - name: notify
        type: call
        call: slack.send-message
        with:
          channel: data-eng
          text: 'Impact analysis for {{resource_id}}: {{get-dependencies.count}} downstream consumers'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abn-amro.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://abn-amro.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → data-lineage-impact-analyzer.yml

Validates a bond trade against pre-trade compliance limits in Snowflake, submits the order to Tradeweb for execution, books the trade in the core banking system, and confirms to the trader via Microsoft Teams.

naftiko: '0.5'
info:
  label: Tradeweb Bond Execution with Compliance Check
  description: Validates a bond trade against pre-trade compliance limits in Snowflake, submits the order to Tradeweb for execution, books the trade in the core banking system, and confirms to the trader via Microsoft Teams.
  tags:
  - trading
  - fixed-income
  - tradeweb
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: trading-execution
    port: 8080
    tools:
    - name: execute-bond-trade
      description: Validate pre-trade limits, submit a bond trade to Tradeweb, book internally, and confirm to the trader.
      inputParameters:
      - name: isin
        in: body
        type: string
        description: The ISIN of the bond to trade.
      - name: direction
        in: body
        type: string
        description: 'Trade direction: buy or sell.'
      - name: notional
        in: body
        type: number
        description: Notional amount in the bond's denomination currency.
      - name: trader_upn
        in: body
        type: string
        description: The UPN of the executing trader.
      steps:
      - name: check-limits
        type: call
        call: snowflake.execute-query
        with:
          warehouse: TRADING_WH
          database: COMPLIANCE_DB
          query: SELECT remaining_limit FROM pre_trade_limits WHERE isin = '{{isin}}' AND direction = '{{direction}}'
      - name: submit-order
        type: call
        call: tradeweb.submit-order
        with:
          isin: '{{isin}}'
          direction: '{{direction}}'
          notional: '{{notional}}'
      - name: book-trade
        type: call
        call: core-banking.book-trade
        with:
          trade_id: '{{submit-order.trade_id}}'
          isin: '{{isin}}'
          direction: '{{direction}}'
          notional: '{{notional}}'
          price: '{{submit-order.execution_price}}'
      - name: confirm-trader
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{trader_upn}}'
          text: 'Bond trade executed: {{direction}} {{notional}} {{isin}} at {{submit-order.execution_price}}. Yield: {{submit-order.yield}}. Settlement: {{submit-order.settlement_date}}. Trade ID: {{submit-order.trade_id}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abnamro.eu-west-1.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: tradeweb
    baseUri: https://api.tradeweb.com/v2
    authentication:
      type: bearer
      token: $secrets.tradeweb_token
    resources:
    - name: orders
      path: /orders
      operations:
      - name: submit-order
        method: POST
  - type: http
    namespace: core-banking
    baseUri: https://api.abnamro.com/v1/trading
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: bookings
      path: /book
      operations:
      - name: book-trade
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → tradeweb-bond-execution-with-compliance-check.yml

Performs Know Your Customer screening by querying Salesforce for client data, running sanctions checks against Bloomberg Enterprise Data, and logging results in ServiceNow for compliance audit.

naftiko: '0.5'
info:
  label: KYC Customer Screening
  description: Performs Know Your Customer screening by querying Salesforce for client data, running sanctions checks against Bloomberg Enterprise Data, and logging results in ServiceNow for compliance audit.
  tags:
  - compliance
  - kyc
  - salesforce
  - bloomberg-enterprise-data
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: compliance-kyc
    port: 8080
    tools:
    - name: screen-customer
      description: Given a customer ID, retrieve Salesforce profile, check Bloomberg sanctions, and log screening outcome in ServiceNow.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The Salesforce account ID for the customer.
      - name: screening_type
        in: body
        type: string
        description: 'Type of screening: initial, periodic, or event-triggered.'
      steps:
      - name: get-customer
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{customer_id}}'
      - name: check-sanctions
        type: call
        call: bloomberg.search-sanctions
        with:
          entity_name: '{{get-customer.name}}'
          country: '{{get-customer.billing_country}}'
      - name: log-screening
        type: call
        call: servicenow.create-record
        with:
          table: u_kyc_screening
          short_description: 'KYC {{screening_type}} screening: {{get-customer.name}}'
          description: 'Customer: {{get-customer.name}} ({{customer_id}}). Sanctions result: {{check-sanctions.match_status}}. Score: {{check-sanctions.risk_score}}.'
          assigned_group: Compliance_KYC
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://abnamro.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: bloomberg
    baseUri: https://api.bloomberg.com/eap/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: sanctions
      path: /sanctions/screen
      operations:
      - name: search-sanctions
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://abnamro.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → kyc-customer-screening.yml

Downloads updated sanctions lists from Bloomberg, updates the screening database in Snowflake, triggers a batch re-screening of all active clients, and notifies compliance of any new matches via Jira and Microsoft Teams.

naftiko: '0.5'
info:
  label: Sanctions List Update and Screening Refresh
  description: Downloads updated sanctions lists from Bloomberg, updates the screening database in Snowflake, triggers a batch re-screening of all active clients, and notifies compliance of any new matches via Jira and Microsoft Teams.
  tags:
  - compliance
  - sanctions
  - bloomberg
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: compliance-sanctions
    port: 8080
    tools:
    - name: refresh-sanctions-screening
      description: Download latest sanctions lists, update screening database, run batch re-screening, and alert on new matches.
      inputParameters:
      - name: list_type
        in: body
        type: string
        description: 'Sanctions list type: eu, ofac, un, or all.'
      - name: trigger_date
        in: body
        type: string
        description: The date of the list update in YYYY-MM-DD format.
      steps:
      - name: download-lists
        type: call
        call: bloomberg.get-sanctions-lists
        with:
          list_type: '{{list_type}}'
          effective_date: '{{trigger_date}}'
      - name: update-database
        type: call
        call: snowflake.execute-query
        with:
          warehouse: COMPLIANCE_WH
          database: SANCTIONS_DB
          query: CALL sp_update_sanctions_list('{{list_type}}', '{{trigger_date}}')
      - name: run-batch-screening
        type: call
        call: snowflake.execute-query
        with:
          warehouse: COMPLIANCE_WH
          database: SANCTIONS_DB
          query: CALL sp_batch_screen_active_clients('{{list_type}}')
      - name: create-review-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: SANCTIONS
          issuetype: Task
          summary: '[Sanctions Update] {{list_type}} list refresh — {{trigger_date}}'
          description: 'Sanctions list updated: {{list_type}} as of {{trigger_date}}.

            New entries: {{download-lists.new_entries_count}}

            Batch screening complete. Review any new matches.'
      - name: notify-compliance
        type: call
        call: msteams.send-message
        with:
          channel: compliance-sanctions
          text: 'Sanctions list refreshed: {{list_type}} ({{trigger_date}}). New entries: {{download-lists.new_entries_count}}. Batch re-screening complete. Jira: {{create-review-ticket.key}}'
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: sanctions-lists
      path: /sanctions/lists
      operations:
      - name: get-sanctions-lists
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://abnamro.eu-west-1.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://abnamro.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}}/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sanctions-list-update-and-screening-refresh.yml

When a Datadog monitor triggers a critical alert for a banking service, creates a Jira incident ticket and posts a notification to the engineering Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Datadog Alert to Jira Incident
  description: When a Datadog monitor triggers a critical alert for a banking service, creates a Jira incident ticket and posts a notification to the engineering Microsoft Teams channel.
  tags:
  - observability
  - incident-management
  - datadog
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: observability
    port: 8080
    tools:
    - name: handle-datadog-alert
      description: Given a Datadog alert ID, create a Jira incident and notify the engineering team in Microsoft Teams.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The Datadog monitor alert ID.
      - name: service_name
        in: body
        type: string
        description: The affected banking service name.
      - name: severity
        in: body
        type: string
        description: 'Alert severity: critical, warning, or info.'
      steps:
      - name: get-alert-details
        type: call
        call: datadog.get-monitor
        with:
          monitor_id: '{{alert_id}}'
      - name: create-incident
        type: call
        call: jira.create-issue
        with:
          project_key: INC
          issuetype: Incident
          summary: '[{{severity}}] {{service_name}} — {{get-alert-details.name}}'
          description: 'Datadog alert {{alert_id}} triggered.

            Service: {{service_name}}

            Severity: {{severity}}

            Message: {{get-alert-details.message}}

            Monitor URL: {{get-alert-details.url}}'
          priority: '{{severity}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: platform-engineering-alerts
          text: 'Incident Created: {{create-incident.key}} | {{service_name}} | {{severity}} | {{get-alert-details.name}} | Jira: {{create-incident.url}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.eu/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: monitors
      path: /monitor/{{monitor_id}}
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: get-monitor
        method: GET
  - type: http
    namespace: jira
    baseUri: https://abnamro.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}}/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → datadog-alert-to-jira-incident.yml

Queries vendor data from SAP Ariba, runs risk scoring in Snowflake, creates assessment record in ServiceNow, and notifies procurement.

naftiko: '0.5'
info:
  label: Vendor Risk Assessment Pipeline
  description: Queries vendor data from SAP Ariba, runs risk scoring in Snowflake, creates assessment record in ServiceNow, and notifies procurement.
  tags:
  - procurement
  - vendor-risk
  - snowflake
  - servicenow
  - 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-vendor
        type: call
        call: sap.get-vendor
        with:
          vendor_id: '{{resource_id}}'
      - name: score-risk
        type: call
        call: snowflake.run-query
        with:
          sql_query: CALL score_vendor_risk('{{resource_id}}')
          warehouse: PROC_WH
      - name: create-assessment
        type: call
        call: servicenow.create-record
        with:
          table: vendor_assessments
          vendor_id: '{{resource_id}}'
      - name: notify
        type: call
        call: slack.send-message
        with:
          channel: procurement
          text: 'Vendor {{resource_id}} risk score: {{score-risk.risk_level}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://abn-amro-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://abn-amro.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://abn-amro.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → vendor-risk-assessment-pipeline.yml

Aggregates client information from Salesforce CRM, Bloomberg financial data, and Snowflake transaction history to produce a unified 360-degree view for relationship managers.

naftiko: '0.5'
info:
  label: Client Relationship 360 View
  description: Aggregates client information from Salesforce CRM, Bloomberg financial data, and Snowflake transaction history to produce a unified 360-degree view for relationship managers.
  tags:
  - client-management
  - crm
  - salesforce
  - bloomberg
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: client-360
    port: 8080
    tools:
    - name: get-client-360
      description: Given a client Salesforce ID, aggregate CRM data, Bloomberg financials, and transaction history into a unified view.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The Salesforce account ID for the client.
      steps:
      - name: get-crm-data
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{client_id}}'
      - name: get-financials
        type: call
        call: bloomberg.get-company
        with:
          company_name: '{{get-crm-data.name}}'
      - name: get-transactions
        type: call
        call: snowflake.execute-query
        with:
          warehouse: CRM_WH
          database: CLIENT_DB
          query: SELECT product_type, SUM(volume) as total_volume, COUNT(*) as txn_count FROM client_transactions WHERE client_id = '{{client_id}}' AND txn_date >= DATEADD(month, -12, CURRENT_DATE()) GROUP BY product_type
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://abnamro.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: bloomberg
    baseUri: https://api.bloomberg.com/eap/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: companies
      path: /companies/search
      operations:
      - name: get-company
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://abnamro.eu-west-1.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → client-relationship-360-view.yml

Retrieves employee details from Workday by worker ID, returning name, department, manager, cost center, and employment status.

naftiko: '0.5'
info:
  label: Workday Employee Lookup
  description: Retrieves employee details from Workday by worker ID, returning name, department, manager, cost center, and employment status.
  tags:
  - hr
  - employee-data
  - workday
capability:
  exposes:
  - type: mcp
    namespace: hr-data
    port: 8080
    tools:
    - name: get-employee
      description: Look up an employee in Workday by worker ID. Returns full name, department, manager, cost center, and status.
      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: $.worker.fullName
      - name: department
        type: string
        mapping: $.worker.department
      - name: manager
        type: string
        mapping: $.worker.managerName
      - name: cost_center
        type: string
        mapping: $.worker.costCenter
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd3-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
Open in Framework → View in Fleet → workday-employee-lookup.yml

Executes read-only queries against ABN AMRO Azure SQL databases for reporting.

naftiko: '0.5'
info:
  label: Azure SQL Query Runner
  description: Executes read-only queries against ABN AMRO Azure SQL databases for reporting.
  tags:
  - data
  - azure
  - sql
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: run-sql-query
      description: Execute a SQL query and return results.
      inputParameters:
      - name: sql_query
        in: body
        type: string
        description: The sql_query to look up.
      call: snowflake.get-sql_query
      with:
        sql_query: '{{sql_query}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abn-amro.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: azure_sql_query_runner
        method: GET
Open in Framework → View in Fleet → azure-sql-query-runner.yml

Calculates derivatives portfolio risk metrics by extracting positions from Snowflake, computing Greeks and VaR via Databricks ML models, publishing to Power BI, and alerting the risk desk when thresholds are breached.

naftiko: '0.5'
info:
  label: Derivatives Risk Calculation Pipeline
  description: Calculates derivatives portfolio risk metrics by extracting positions from Snowflake, computing Greeks and VaR via Databricks ML models, publishing to Power BI, and alerting the risk desk when thresholds are breached.
  tags:
  - risk-management
  - derivatives
  - trading
  - snowflake
  - databricks
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: risk-derivatives
    port: 8080
    tools:
    - name: calculate-derivatives-risk
      description: Given a portfolio and valuation date, compute Greeks and VaR for the derivatives book and alert on threshold breaches.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The derivatives portfolio identifier.
      - name: valuation_date
        in: body
        type: string
        description: Valuation date in YYYY-MM-DD format.
      - name: var_confidence
        in: body
        type: string
        description: 'VaR confidence level: 95 or 99.'
      steps:
      - name: extract-positions
        type: call
        call: snowflake.execute-query
        with:
          warehouse: RISK_WH
          database: DERIVATIVES_DB
          query: SELECT * FROM derivatives_positions WHERE portfolio_id = '{{portfolio_id}}' AND position_date = '{{valuation_date}}'
      - name: compute-risk
        type: call
        call: databricks.run-job
        with:
          job_id: derivatives-risk-engine
          parameters:
            portfolio_id: '{{portfolio_id}}'
            valuation_date: '{{valuation_date}}'
            confidence: '{{var_confidence}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          group_id: trading-risk-workspace
          dataset_id: derivatives-risk-daily
      - name: alert-risk-desk
        type: call
        call: msteams.send-message
        with:
          channel: trading-risk-alerts
          text: 'Derivatives risk calculation complete: Portfolio {{portfolio_id}} for {{valuation_date}}. VaR({{var_confidence}}%): {{compute-risk.var_amount}}. Delta: {{compute-risk.total_delta}}. Gamma: {{compute-risk.total_gamma}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abnamro.eu-west-1.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: databricks
    baseUri: https://adb-abnamro.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/{{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}}/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → derivatives-risk-calculation-pipeline.yml

When a transaction monitoring alert fires, retrieves alert details from the AML system, enriches with customer data from Salesforce, checks Bloomberg sanctions, and creates a Jira investigation ticket for the financial crime team.

naftiko: '0.5'
info:
  label: AML Transaction Monitoring Alert Triage
  description: When a transaction monitoring alert fires, retrieves alert details from the AML system, enriches with customer data from Salesforce, checks Bloomberg sanctions, and creates a Jira investigation ticket for the financial crime team.
  tags:
  - compliance
  - aml
  - transaction-monitoring
  - salesforce
  - bloomberg
  - jira
capability:
  exposes:
  - type: mcp
    namespace: compliance-aml
    port: 8080
    tools:
    - name: triage-aml-alert
      description: Given an AML alert ID, enrich with customer data, run sanctions check, and open a Jira investigation case.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The AML system alert identifier.
      - name: customer_id
        in: body
        type: string
        description: The Salesforce account ID associated with the flagged transaction.
      steps:
      - name: get-alert
        type: call
        call: core-banking.get-aml-alert
        with:
          alert_id: '{{alert_id}}'
      - name: get-customer
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{customer_id}}'
      - name: sanctions-check
        type: call
        call: bloomberg.search-sanctions
        with:
          entity_name: '{{get-customer.name}}'
          country: '{{get-customer.billing_country}}'
      - name: create-investigation
        type: call
        call: jira.create-issue
        with:
          project_key: FINCRIME
          issuetype: Investigation
          summary: '[AML Alert] {{get-alert.rule_name}} — {{get-customer.name}}'
          description: 'Alert: {{alert_id}}

            Rule: {{get-alert.rule_name}}

            Amount: {{get-alert.amount}} {{get-alert.currency}}

            Customer: {{get-customer.name}}

            Sanctions match: {{sanctions-check.match_status}}

            Risk score: {{sanctions-check.risk_score}}'
  consumes:
  - type: http
    namespace: core-banking
    baseUri: https://api.abnamro.com/v1/aml
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: alerts
      path: /alerts/{{alert_id}}
      inputParameters:
      - name: alert_id
        in: path
      operations:
      - name: get-aml-alert
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://abnamro.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: bloomberg
    baseUri: https://api.bloomberg.com/eap/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: sanctions
      path: /sanctions/screen
      operations:
      - name: search-sanctions
        method: POST
  - type: http
    namespace: jira
    baseUri: https://abnamro.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → aml-transaction-monitoring-alert-triage.yml

Triggers an Informatica data quality profiling job, stores quality scores in Snowflake for trend analysis, and alerts the data governance team in Microsoft Teams when quality thresholds are breached.

naftiko: '0.5'
info:
  label: Informatica Data Quality Pipeline with Reporting
  description: Triggers an Informatica data quality profiling job, stores quality scores in Snowflake for trend analysis, and alerts the data governance team in Microsoft Teams when quality thresholds are breached.
  tags:
  - data-quality
  - data-management
  - informatica
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: run-quality-profile-with-reporting
      description: Trigger Informatica quality profiling, store scores in Snowflake, and alert on threshold breaches.
      inputParameters:
      - name: task_name
        in: body
        type: string
        description: The Informatica data quality task name.
      - name: data_domain
        in: body
        type: string
        description: The data domain to profile (e.g., customer, transaction, risk).
      - name: quality_threshold
        in: body
        type: number
        description: Minimum acceptable quality score percentage.
      steps:
      - name: run-profiling
        type: call
        call: informatica.start-quality-task
        with:
          task_name: '{{task_name}}'
          data_domain: '{{data_domain}}'
      - name: store-results
        type: call
        call: snowflake.execute-query
        with:
          warehouse: DQ_WH
          database: DATA_QUALITY_DB
          query: INSERT INTO dq_scores (domain, task_name, run_id, score, profiled_at) VALUES ('{{data_domain}}', '{{task_name}}', '{{run-profiling.run_id}}', '{{run-profiling.quality_score}}', CURRENT_TIMESTAMP())
      - name: notify-governance
        type: call
        call: msteams.send-message
        with:
          channel: data-governance
          text: 'Data Quality: {{data_domain}} ({{task_name}}) | Run: {{run-profiling.run_id}} | Score: {{run-profiling.quality_score}}% | Threshold: {{quality_threshold}}%'
  consumes:
  - type: http
    namespace: informatica
    baseUri: https://dm-eu.informaticacloud.com/saas/api/v2
    authentication:
      type: bearer
      token: $secrets.informatica_token
    resources:
    - name: jobs
      path: /job
      operations:
      - name: start-quality-task
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://abnamro.eu-west-1.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}}/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → informatica-data-quality-pipeline-with-reporting.yml

Retrieves a secret value from Azure Key Vault for secure credential injection in downstream banking system integrations.

naftiko: '0.5'
info:
  label: Azure Key Vault Secret Retrieval
  description: Retrieves a secret value from Azure Key Vault for secure credential injection in downstream banking system integrations.
  tags:
  - security
  - secrets-management
  - azure-key-vault
capability:
  exposes:
  - type: mcp
    namespace: security
    port: 8080
    tools:
    - name: get-secret
      description: Retrieve a secret from Azure Key Vault by name. Returns the secret value and version.
      inputParameters:
      - name: secret_name
        in: body
        type: string
        description: The name of the secret in Azure Key Vault.
      call: keyvault.get-secret
      with:
        secret_name: '{{secret_name}}'
      outputParameters:
      - name: value
        type: string
        mapping: $.value
      - name: version
        type: string
        mapping: $.id
  consumes:
  - type: http
    namespace: keyvault
    baseUri: https://abnamro-vault.vault.azure.net
    authentication:
      type: bearer
      token: $secrets.azure_keyvault_token
    resources:
    - name: secrets
      path: /secrets/{{secret_name}}?api-version=7.4
      inputParameters:
      - name: secret_name
        in: path
      operations:
      - name: get-secret
        method: GET
Open in Framework → View in Fleet → azure-key-vault-secret-retrieval.yml

Pulls credit exposure data from Snowflake, aggregates by counterparty, and publishes a summary dashboard refresh to Power BI for the risk management team.

naftiko: '0.5'
info:
  label: Credit Risk Exposure Report
  description: Pulls credit exposure data from Snowflake, aggregates by counterparty, and publishes a summary dashboard refresh to Power BI for the risk management team.
  tags:
  - risk-management
  - credit-risk
  - snowflake
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: risk-credit
    port: 8080
    tools:
    - name: refresh-credit-exposure
      description: Given a reporting date and portfolio segment, query Snowflake for exposure data and trigger a Power BI dataset refresh.
      inputParameters:
      - name: reporting_date
        in: body
        type: string
        description: The reporting date in YYYY-MM-DD format.
      - name: portfolio_segment
        in: body
        type: string
        description: 'Portfolio segment: corporate, retail, or sme.'
      steps:
      - name: query-exposures
        type: call
        call: snowflake.execute-query
        with:
          warehouse: RISK_WH
          database: RISK_DB
          query: SELECT counterparty, SUM(exposure) as total_exposure, MAX(pd) as max_pd FROM credit_exposures WHERE report_date = '{{reporting_date}}' AND segment = '{{portfolio_segment}}' GROUP BY counterparty ORDER BY total_exposure DESC
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          group_id: risk-management-workspace
          dataset_id: credit-exposure-daily
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abnamro.eu-west-1.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /groups/{{group_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: group_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → credit-risk-exposure-report.yml

Retrieves the status of a GitHub pull request including checks, review status, and merge readiness for banking application repositories.

naftiko: '0.5'
info:
  label: GitHub Pull Request Status
  description: Retrieves the status of a GitHub pull request including checks, review status, and merge readiness for banking application repositories.
  tags:
  - devops
  - code-review
  - github
capability:
  exposes:
  - type: mcp
    namespace: source-control
    port: 8080
    tools:
    - name: get-pr-status
      description: Look up a GitHub pull request by repo and PR number. Returns status, checks, and review state.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository in owner/repo format.
      - name: pr_number
        in: body
        type: string
        description: The pull request number.
      call: github.get-pull-request
      with:
        repo: '{{repo}}'
        pr_number: '{{pr_number}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.state
      - name: mergeable
        type: string
        mapping: $.mergeable
      - name: title
        type: string
        mapping: $.title
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: pull-requests
      path: /repos/{{repo}}/pulls/{{pr_number}}
      inputParameters:
      - name: repo
        in: path
      - name: pr_number
        in: path
      operations:
      - name: get-pull-request
        method: GET
Open in Framework → View in Fleet → github-pull-request-status.yml

Processes corporate actions for portfolio adjustments, updates positions in trading systems, reconciles in Snowflake, and notifies portfolio managers.

naftiko: '0.5'
info:
  label: Corporate Action Processing Pipeline
  description: Processes corporate actions for portfolio adjustments, updates positions in trading systems, reconciles in Snowflake, and notifies portfolio managers.
  tags:
  - trading
  - corporate-actions
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: trading
    port: 8080
    tools:
    - name: corporate_action_processing_pipeline
      description: Orchestrate corporate action processing pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: fetch-data
        type: call
        call: primary.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-data
        type: call
        call: processor.transform
        with:
          input: '{{fetch-data.result}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: records
          data: '{{process-data.output}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: operations
          text: 'Workflow {{resource_id}} complete. Record: {{create-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://co.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/records
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → corporate-action-processing-pipeline.yml

Retrieves employee compensation details from Workday for ABN AMRO HR operations.

naftiko: '0.5'
info:
  label: Workday Compensation Lookup
  description: Retrieves employee compensation details from Workday for ABN AMRO HR operations.
  tags:
  - hr
  - workday
  - compensation
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: get-compensation
      description: Look up employee compensation by 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/abn-amro
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: workday_compensation_lookup
        method: GET
Open in Framework → View in Fleet → workday-compensation-lookup.yml

When Microsoft Defender raises a security alert, enriches with Azure AD user context, creates a ServiceNow security incident, and notifies the SOC team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Microsoft Defender Threat Alert Triage
  description: When Microsoft Defender raises a security alert, enriches with Azure AD user context, creates a ServiceNow security incident, and notifies the SOC team in Microsoft Teams.
  tags:
  - security
  - threat-detection
  - microsoft-defender
  - azure-active-directory
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: security-ops
    port: 8080
    tools:
    - name: triage-defender-alert
      description: Given a Defender alert ID, enrich with user context, create a security incident, and notify the SOC.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The Microsoft Defender alert ID.
      - name: user_principal_name
        in: body
        type: string
        description: The UPN of the affected user.
      steps:
      - name: get-alert
        type: call
        call: defender.get-alert
        with:
          alert_id: '{{alert_id}}'
      - name: get-user-context
        type: call
        call: azuread.get-user
        with:
          user_principal_name: '{{user_principal_name}}'
      - name: create-security-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: '[Security] {{get-alert.title}} — {{get-user-context.display_name}}'
          description: 'Defender Alert: {{alert_id}}

            Severity: {{get-alert.severity}}

            Category: {{get-alert.category}}

            User: {{get-user-context.display_name}} ({{user_principal_name}})

            Department: {{get-user-context.department}}

            Description: {{get-alert.description}}'
          assigned_group: Security_Operations_Center
          impact: '2'
      - name: notify-soc
        type: call
        call: msteams.send-message
        with:
          channel: soc-alerts
          text: 'Security Alert: {{get-alert.title}} | Severity: {{get-alert.severity}} | User: {{get-user-context.display_name}} | ServiceNow: {{create-security-incident.number}}'
  consumes:
  - type: http
    namespace: defender
    baseUri: https://api.security.microsoft.com/api
    authentication:
      type: bearer
      token: $secrets.defender_token
    resources:
    - name: alerts
      path: /alerts/{{alert_id}}
      inputParameters:
      - name: alert_id
        in: path
      operations:
      - name: get-alert
        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: get-user
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://abnamro.service-now.com/api/now
    authentication:
      type: 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}}/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → microsoft-defender-threat-alert-triage.yml

Monitors employee personal trading activity, validates against restricted lists, creates compliance cases, and notifies compliance officer.

naftiko: '0.5'
info:
  label: Employee Trading Compliance Monitor
  description: Monitors employee personal trading activity, validates against restricted lists, creates compliance cases, and notifies compliance officer.
  tags:
  - compliance
  - employee-trading
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: employee_trading_compliance_monitor
      description: Orchestrate employee trading compliance monitor workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: fetch-data
        type: call
        call: primary.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-data
        type: call
        call: processor.transform
        with:
          input: '{{fetch-data.result}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: records
          data: '{{process-data.output}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: operations
          text: 'Workflow {{resource_id}} complete. Record: {{create-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://co.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/records
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → employee-trading-compliance-monitor.yml

Extracts position data from trading systems, calculates RWA in Snowflake, generates Basel III reports, files with DNB via API, and notifies risk management.

naftiko: '0.5'
info:
  label: Regulatory Capital Reporting Pipeline
  description: Extracts position data from trading systems, calculates RWA in Snowflake, generates Basel III reports, files with DNB via API, and notifies risk management.
  tags:
  - regulatory
  - capital
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: regulatory
    port: 8080
    tools:
    - name: regulatory_capital_reporting_pipeline
      description: Orchestrate regulatory capital reporting pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-positions
        type: call
        call: trading.get-positions
        with:
          date: '{{resource_id}}'
      - name: calculate-rwa
        type: call
        call: snowflake.run-query
        with:
          sql_query: CALL calculate_rwa('{{resource_id}}')
          warehouse: CAPITAL_WH
      - name: file-report
        type: call
        call: servicenow.create-record
        with:
          table: regulatory_filings
          report_date: '{{resource_id}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: risk-management
          text: 'Capital report filed for {{resource_id}}. RWA: {{calculate-rwa.total_rwa}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abn-amro.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://abn-amro.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-op
        method: POST
Open in Framework → View in Fleet → regulatory-capital-reporting-pipeline.yml

Retrieves a Jira issue by key, returning summary, status, assignee, and priority for project tracking.

naftiko: '0.5'
info:
  label: Jira Issue Lookup
  description: Retrieves a Jira issue by key, returning summary, status, assignee, and priority for project tracking.
  tags:
  - project-management
  - jira
capability:
  exposes:
  - type: mcp
    namespace: project-tracking
    port: 8080
    tools:
    - name: get-jira-issue
      description: Look up a Jira issue by key. Returns summary, status, assignee, priority, and created date.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: The Jira issue key (e.g., RISK-1234).
      call: jira.get-issue
      with:
        issue_key: '{{issue_key}}'
      outputParameters:
      - name: summary
        type: string
        mapping: $.fields.summary
      - name: status
        type: string
        mapping: $.fields.status.name
      - name: assignee
        type: string
        mapping: $.fields.assignee.displayName
  consumes:
  - type: http
    namespace: jira
    baseUri: https://abnamro.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-issue-lookup.yml

Monitors corporate lending covenant compliance by pulling financial ratios from Snowflake, comparing against covenant thresholds, and alerting the credit team via Jira and Microsoft Teams when breaches are detected.

naftiko: '0.5'
info:
  label: Corporate Lending Covenant Monitoring
  description: Monitors corporate lending covenant compliance by pulling financial ratios from Snowflake, comparing against covenant thresholds, and alerting the credit team via Jira and Microsoft Teams when breaches are detected.
  tags:
  - lending
  - credit-risk
  - covenant-monitoring
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: lending-covenants
    port: 8080
    tools:
    - name: check-covenant-compliance
      description: Given a facility ID and reporting date, check covenant compliance and alert on breaches.
      inputParameters:
      - name: facility_id
        in: body
        type: string
        description: The lending facility identifier.
      - name: reporting_date
        in: body
        type: string
        description: The covenant test date in YYYY-MM-DD format.
      - name: borrower_name
        in: body
        type: string
        description: The borrower legal entity name.
      steps:
      - name: get-financial-ratios
        type: call
        call: snowflake.execute-query
        with:
          warehouse: LENDING_WH
          database: LENDING_DB
          query: SELECT covenant_type, actual_value, threshold_value, CASE WHEN actual_value > threshold_value THEN 'BREACH' ELSE 'COMPLIANT' END as status FROM covenant_monitoring WHERE facility_id = '{{facility_id}}' AND test_date = '{{reporting_date}}'
      - name: create-breach-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: CREDIT
          issuetype: Task
          summary: '[Covenant Check] {{borrower_name}} — {{facility_id}} — {{reporting_date}}'
          description: 'Covenant compliance check for {{borrower_name}} ({{facility_id}}) as of {{reporting_date}}.

            Results: {{get-financial-ratios.row_count}} covenants tested.

            Review financial ratios and escalate any breaches.'
      - name: notify-credit-team
        type: call
        call: msteams.send-message
        with:
          channel: credit-monitoring
          text: 'Covenant check complete: {{borrower_name}} ({{facility_id}}) — {{reporting_date}}. Jira: {{create-breach-ticket.key}}. Review results for potential breaches.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abnamro.eu-west-1.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://abnamro.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}}/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → corporate-lending-covenant-monitoring.yml

Reconciles ADP payroll data with Workday employee records and Snowflake cost center budgets, creating ServiceNow tasks for discrepancies found during the monthly payroll cycle.

naftiko: '0.5'
info:
  label: ADP Payroll Reconciliation
  description: Reconciles ADP payroll data with Workday employee records and Snowflake cost center budgets, creating ServiceNow tasks for discrepancies found during the monthly payroll cycle.
  tags:
  - hr
  - payroll
  - adp
  - workday
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: hr-payroll
    port: 8080
    tools:
    - name: reconcile-payroll
      description: Given a pay period, reconcile ADP payroll with Workday and Snowflake budget data, flagging discrepancies.
      inputParameters:
      - name: pay_period
        in: body
        type: string
        description: The pay period in YYYY-MM format.
      - name: business_unit
        in: body
        type: string
        description: The business unit to reconcile.
      steps:
      - name: get-payroll-data
        type: call
        call: adp.get-payroll-summary
        with:
          pay_period: '{{pay_period}}'
          business_unit: '{{business_unit}}'
      - name: get-headcount
        type: call
        call: snowflake.execute-query
        with:
          warehouse: HR_WH
          database: HR_DB
          query: SELECT department, COUNT(*) as headcount, SUM(budgeted_salary) as budget_total FROM employee_budget WHERE business_unit = '{{business_unit}}' AND period = '{{pay_period}}' GROUP BY department
      - name: create-reconciliation-task
        type: call
        call: servicenow.create-record
        with:
          table: u_payroll_reconciliation
          short_description: 'Payroll reconciliation: {{business_unit}} — {{pay_period}}'
          description: 'ADP total: {{get-payroll-data.total_gross}}. Budget total from Snowflake. Review and resolve discrepancies.'
          assigned_group: HR_Payroll
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: payroll
      path: /workers/payroll-summary?payPeriod={{pay_period}}&businessUnit={{business_unit}}
      inputParameters:
      - name: pay_period
        in: query
      - name: business_unit
        in: query
      operations:
      - name: get-payroll-summary
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://abnamro.eu-west-1.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://abnamro.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → adp-payroll-reconciliation.yml

Triggers portfolio rebalancing based on drift analysis, executes trades, updates positions, generates client reports, and notifies advisors.

naftiko: '0.5'
info:
  label: Client Portfolio Rebalancing Pipeline
  description: Triggers portfolio rebalancing based on drift analysis, executes trades, updates positions, generates client reports, and notifies advisors.
  tags:
  - wealth-management
  - portfolio
  - snowflake
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: wealth-management
    port: 8080
    tools:
    - name: client_portfolio_rebalancing_pipeline
      description: Orchestrate client portfolio rebalancing pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: fetch-data
        type: call
        call: primary.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-data
        type: call
        call: processor.transform
        with:
          input: '{{fetch-data.result}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: records
          data: '{{process-data.output}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: operations
          text: 'Workflow {{resource_id}} complete. Record: {{create-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://co.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/records
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → client-portfolio-rebalancing-pipeline.yml

Reconciles trade settlement data between Bloomberg Tradebook and the core banking system, identifies breaks, and creates Jira tickets for operations to investigate discrepancies.

naftiko: '0.5'
info:
  label: Trade Settlement Reconciliation
  description: Reconciles trade settlement data between Bloomberg Tradebook and the core banking system, identifies breaks, and creates Jira tickets for operations to investigate discrepancies.
  tags:
  - operations
  - settlement
  - reconciliation
  - bloomberg-tradebook
  - snowflake
  - jira
capability:
  exposes:
  - type: mcp
    namespace: trade-ops
    port: 8080
    tools:
    - name: reconcile-settlements
      description: Given a trade date, compare Tradebook and core banking settlement records, identify breaks, and create Jira tickets.
      inputParameters:
      - name: trade_date
        in: body
        type: string
        description: The trade date to reconcile in YYYY-MM-DD format.
      - name: asset_class
        in: body
        type: string
        description: 'Asset class: equities, fixed_income, fx, or derivatives.'
      steps:
      - name: get-tradebook-settlements
        type: call
        call: bloomberg-tradebook.get-settlements
        with:
          trade_date: '{{trade_date}}'
          asset_class: '{{asset_class}}'
      - name: get-internal-settlements
        type: call
        call: snowflake.execute-query
        with:
          warehouse: OPS_WH
          database: SETTLEMENTS_DB
          query: SELECT trade_id, counterparty, amount, currency, status FROM settlements WHERE trade_date = '{{trade_date}}' AND asset_class = '{{asset_class}}'
      - name: create-break-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: TRADEOPS
          issuetype: Task
          summary: '[Settlement Break] {{asset_class}} — {{trade_date}}'
          description: 'Reconciliation results for {{trade_date}} ({{asset_class}}).

            Tradebook records: {{get-tradebook-settlements.count}}

            Internal records: {{get-internal-settlements.row_count}}

            Review breaks and resolve.'
  consumes:
  - type: http
    namespace: bloomberg-tradebook
    baseUri: https://api.bloomberg.com/tradebook/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_tradebook_token
    resources:
    - name: settlements
      path: /settlements?tradeDate={{trade_date}}&assetClass={{asset_class}}
      inputParameters:
      - name: trade_date
        in: query
      - name: asset_class
        in: query
      operations:
      - name: get-settlements
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://abnamro.eu-west-1.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://abnamro.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → trade-settlement-reconciliation.yml

Validates proposed trades against investment guidelines, checks exposure limits in Snowflake, approves or blocks, and logs decisions.

naftiko: '0.5'
info:
  label: Investment Compliance Pre-Trade Check
  description: Validates proposed trades against investment guidelines, checks exposure limits in Snowflake, approves or blocks, and logs decisions.
  tags:
  - compliance
  - trading
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: investment_compliance_pre_trade_check
      description: Orchestrate investment compliance pre-trade check workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: fetch-data
        type: call
        call: primary.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-data
        type: call
        call: processor.transform
        with:
          input: '{{fetch-data.result}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: records
          data: '{{process-data.output}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: operations
          text: 'Workflow {{resource_id}} complete. Record: {{create-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://co.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/records
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → investment-compliance-pre-trade-check.yml

Fetches yield curve data from Bloomberg, runs VaR calculations in Snowflake, generates risk report in Power BI, and notifies treasury via Teams.

naftiko: '0.5'
info:
  label: Interest Rate Risk Calculator
  description: Fetches yield curve data from Bloomberg, runs VaR calculations in Snowflake, generates risk report in Power BI, and notifies treasury via Teams.
  tags:
  - risk
  - treasury
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: risk
    port: 8080
    tools:
    - name: interest_rate_risk_calculator
      description: Orchestrate interest rate risk calculator workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-yield-curve
        type: call
        call: bloomberg.get-yield-curve
        with:
          currency: '{{resource_id}}'
      - name: calculate-var
        type: call
        call: snowflake.run-query
        with:
          sql_query: CALL calculate_var('{{resource_id}}')
          warehouse: RISK_WH
      - name: refresh-report
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: interest_rate_risk
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: treasury
          text: 'IR risk report updated for {{resource_id}}. VaR: {{calculate-var.var_amount}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abn-amro.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: powerbi-op
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-op
        method: POST
Open in Framework → View in Fleet → interest-rate-risk-calculator.yml

Queries Microsoft Entra for conditional access policies applied to a user, returning policy names, grant controls, and session controls for security audit.

naftiko: '0.5'
info:
  label: Microsoft Entra Conditional Access Policy Check
  description: Queries Microsoft Entra for conditional access policies applied to a user, returning policy names, grant controls, and session controls for security audit.
  tags:
  - security
  - identity-management
  - microsoft-entra
capability:
  exposes:
  - type: mcp
    namespace: identity-security
    port: 8080
    tools:
    - name: get-conditional-access
      description: List conditional access policies affecting a user. Returns policy names, states, and grant conditions.
      inputParameters:
      - name: user_principal_name
        in: body
        type: string
        description: The user principal name (UPN) to check policies for.
      call: entra.get-policies
      with:
        user_principal_name: '{{user_principal_name}}'
      outputParameters:
      - name: policy_count
        type: string
        mapping: $.value.length
  consumes:
  - type: http
    namespace: entra
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: policies
      path: /identity/conditionalAccess/policies?$filter=conditions/users/includeUsers/any(u:u eq '{{user_principal_name}}')
      inputParameters:
      - name: user_principal_name
        in: query
      operations:
      - name: get-policies
        method: GET
Open in Framework → View in Fleet → microsoft-entra-conditional-access-policy-check.yml

Collects cash positions from multiple bank accounts, aggregates in Snowflake, updates treasury dashboard in Power BI, and sends morning report to CFO.

naftiko: '0.5'
info:
  label: Treasury Cash Position Aggregator
  description: Collects cash positions from multiple bank accounts, aggregates in Snowflake, updates treasury dashboard in Power BI, and sends morning report to CFO.
  tags:
  - treasury
  - cash-management
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: treasury
    port: 8080
    tools:
    - name: treasury_cash_position_aggregator
      description: Orchestrate treasury cash position aggregator workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-positions
        type: call
        call: swift.get-mt940
        with:
          date: '{{resource_id}}'
      - name: aggregate
        type: call
        call: snowflake.run-query
        with:
          sql_query: CALL aggregate_cash('{{resource_id}}')
          warehouse: TREASURY_WH
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: cash_positions
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: treasury-mgmt
          text: 'Cash position report for {{resource_id}}: Total: {{aggregate.total_balance}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abn-amro.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: powerbi-op
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-op
        method: POST
Open in Framework → View in Fleet → treasury-cash-position-aggregator.yml

Searches ABN AMRO transaction logs in Elasticsearch by criteria.

naftiko: '0.5'
info:
  label: Elasticsearch Transaction Search
  description: Searches ABN AMRO transaction logs in Elasticsearch by criteria.
  tags:
  - data
  - elasticsearch
  - transactions
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: search-transactions
      description: Search transactions by query.
      inputParameters:
      - name: search_query
        in: body
        type: string
        description: The search_query to look up.
      call: elasticsearch.get-search_query
      with:
        search_query: '{{search_query}}'
  consumes:
  - type: http
    namespace: elasticsearch
    baseUri: https://abn-amro-es.com:9200
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: elasticsearch_transaction_sear
        method: GET
Open in Framework → View in Fleet → elasticsearch-transaction-search.yml

On PR merge, runs SAST scan via SonarQube, checks dependency vulnerabilities, validates container image, approves or blocks deployment, and notifies dev team.

naftiko: '0.5'
info:
  label: CI/CD Security Gate Pipeline
  description: On PR merge, runs SAST scan via SonarQube, checks dependency vulnerabilities, validates container image, approves or blocks deployment, and notifies dev team.
  tags:
  - devops
  - security
  - github
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: devops
    port: 8080
    tools:
    - name: cicd_security_gate_pipeline
      description: Orchestrate ci/cd security gate pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-pr
        type: call
        call: github.get-pull-request
        with:
          pr_id: '{{resource_id}}'
      - name: run-sast
        type: call
        call: sonarqube.analyze-project
        with:
          project_key: '{{get-pr.repo}}'
      - name: check-deps
        type: call
        call: snyk.test-project
        with:
          project_id: '{{get-pr.repo}}'
      - name: notify
        type: call
        call: slack.send-message
        with:
          channel: security-reviews
          text: 'Security gate for {{resource_id}}: SAST {{run-sast.status}}, Deps {{check-deps.issues}}'
  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://abn-amro.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → ci-cd-security-gate-pipeline.yml

Retrieves change request details by number from ABN AMRO ServiceNow instance.

naftiko: '0.5'
info:
  label: ServiceNow Change Request Lookup
  description: Retrieves change request details by number from ABN AMRO ServiceNow instance.
  tags:
  - itsm
  - servicenow
  - change-management
capability:
  exposes:
  - type: mcp
    namespace: itsm
    port: 8080
    tools:
    - name: get-change-request
      description: Look up a change request by number.
      inputParameters:
      - name: change_number
        in: body
        type: string
        description: The change_number to look up.
      call: servicenow.get-change_number
      with:
        change_number: '{{change_number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://abn-amro.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_change_request_look
        method: GET
Open in Framework → View in Fleet → servicenow-change-request-lookup.yml

Scans API gateway for deprecated endpoints, identifies consuming applications, sends deprecation notices via email, creates migration tasks in Jira, and updates Confluence docs.

naftiko: '0.5'
info:
  label: API Deprecation Notification Pipeline
  description: Scans API gateway for deprecated endpoints, identifies consuming applications, sends deprecation notices via email, creates migration tasks in Jira, and updates Confluence docs.
  tags:
  - api-management
  - jira
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: api-management
    port: 8080
    tools:
    - name: api_deprecation_notification_pipeline
      description: Orchestrate api deprecation notification pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: scan-apis
        type: call
        call: kong.get-deprecated-routes
        with:
          gateway_id: '{{resource_id}}'
      - name: identify-consumers
        type: call
        call: apigee.get-consumers
        with:
          route_id: '{{scan-apis.route_id}}'
      - name: create-migration
        type: call
        call: jira.create-issue
        with:
          project: API
          summary: 'Migrate from deprecated API: {{resource_id}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: api-platform
          text: 'API deprecation: {{resource_id}}. Migration ticket: {{create-migration.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://abn-amro.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://abn-amro.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: confluence-op
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-op
        method: POST
Open in Framework → View in Fleet → api-deprecation-notification-pipeline.yml

Validates incoming market data feeds against expected patterns, identifies anomalies in Snowflake, creates alerts in PagerDuty, and logs quality metrics in Grafana.

naftiko: '0.5'
info:
  label: Market Data Quality Monitor
  description: Validates incoming market data feeds against expected patterns, identifies anomalies in Snowflake, creates alerts in PagerDuty, and logs quality metrics in Grafana.
  tags:
  - market-data
  - quality
  - snowflake
  - pagerduty
  - grafana
capability:
  exposes:
  - type: mcp
    namespace: market-data
    port: 8080
    tools:
    - name: market_data_quality_monitor
      description: Orchestrate market data quality monitor workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: validate-feeds
        type: call
        call: bloomberg.validate-feed
        with:
          feed_id: '{{resource_id}}'
      - name: check-anomalies
        type: call
        call: snowflake.run-query
        with:
          sql_query: CALL check_market_data_quality('{{resource_id}}')
          warehouse: MARKET_WH
      - name: create-alert
        type: call
        call: pagerduty.create-incident
        with:
          title: 'Market data quality: {{resource_id}}'
          severity: '{{check-anomalies.severity}}'
      - name: log-metrics
        type: call
        call: grafana.push-metrics
        with:
          dashboard_uid: market-data-quality
          quality_score: '{{check-anomalies.score}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abn-amro.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: 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: grafana
    baseUri: https://abn-amro-grafana.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_api_key
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: grafana-op
        method: POST
Open in Framework → View in Fleet → market-data-quality-monitor.yml

Triggers a Microsoft Purview data classification scan on a specified data source and returns scan status and discovered sensitive data types for data governance compliance.

naftiko: '0.5'
info:
  label: Microsoft Purview Data Classification Scan
  description: Triggers a Microsoft Purview data classification scan on a specified data source and returns scan status and discovered sensitive data types for data governance compliance.
  tags:
  - data-governance
  - classification
  - microsoft-purview
capability:
  exposes:
  - type: mcp
    namespace: data-governance
    port: 8080
    tools:
    - name: trigger-classification-scan
      description: Trigger a Purview classification scan on a data source. Returns scan run ID and status.
      inputParameters:
      - name: data_source_name
        in: body
        type: string
        description: The Purview registered data source name.
      - name: scan_name
        in: body
        type: string
        description: The scan definition name.
      call: purview.run-scan
      with:
        data_source_name: '{{data_source_name}}'
        scan_name: '{{scan_name}}'
      outputParameters:
      - name: run_id
        type: string
        mapping: $.scanRunId
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: purview
    baseUri: https://abnamro-purview.purview.azure.com
    authentication:
      type: bearer
      token: $secrets.purview_token
    resources:
    - name: scans
      path: /scan/datasources/{{data_source_name}}/scans/{{scan_name}}/runs?api-version=2023-09-01
      inputParameters:
      - name: data_source_name
        in: path
      - name: scan_name
        in: path
      operations:
      - name: run-scan
        method: POST
Open in Framework → View in Fleet → microsoft-purview-data-classification-scan.yml

Identifies incomplete client records, creates remediation tasks, tracks completion progress, and reports to client data management.

naftiko: '0.5'
info:
  label: Client Data Remediation Pipeline
  description: Identifies incomplete client records, creates remediation tasks, tracks completion progress, and reports to client data management.
  tags:
  - data-quality
  - client-data
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: client_data_remediation_pipeline
      description: Orchestrate client data remediation pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: fetch-data
        type: call
        call: primary.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-data
        type: call
        call: processor.transform
        with:
          input: '{{fetch-data.result}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: records
          data: '{{process-data.output}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: operations
          text: 'Workflow {{resource_id}} complete. Record: {{create-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://co.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/records
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → client-data-remediation-pipeline.yml

On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions Azure Active Directory account, and sends a Microsoft Teams welcome message.

naftiko: '0.5'
info:
  label: Employee Onboarding Orchestrator
  description: On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions Azure Active Directory account, and sends a Microsoft Teams welcome message.
  tags:
  - hr
  - onboarding
  - workday
  - servicenow
  - azure-active-directory
  - 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 onboarding across ServiceNow, Azure AD, and Microsoft Teams.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: The Workday worker ID for the new hire.
      - name: start_date
        in: body
        type: string
        description: The employee start date in YYYY-MM-DD format.
      - name: department
        in: body
        type: string
        description: The department the new hire is joining.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: open-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'New hire onboarding: {{get-employee.full_name}}'
          category: hr_onboarding
          assigned_group: IT_Onboarding
          description: Onboarding for {{get-employee.full_name}} starting {{start_date}} in {{department}}.
      - name: provision-account
        type: call
        call: azuread.create-user
        with:
          display_name: '{{get-employee.full_name}}'
          user_principal_name: '{{get-employee.work_email}}'
          department: '{{department}}'
      - name: send-welcome
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.work_email}}'
          text: Welcome to ABN AMRO, {{get-employee.first_name}}! Your IT onboarding ticket is {{open-ticket.number}}. Your Azure AD account has been provisioned.
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd3-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://abnamro.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: azuread
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users
      operations:
      - name: create-user
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → employee-onboarding-orchestrator.yml

Retrieves the current sprint status and velocity for an ABN AMRO engineering team board.

naftiko: '0.5'
info:
  label: Jira Sprint Status
  description: Retrieves the current sprint status and velocity for an ABN AMRO engineering team board.
  tags:
  - devops
  - jira
  - agile
capability:
  exposes:
  - type: mcp
    namespace: engineering
    port: 8080
    tools:
    - name: get-sprint
      description: Get current sprint status by board ID.
      inputParameters:
      - name: board_id
        in: body
        type: string
        description: The board_id to look up.
      call: jira.get-board_id
      with:
        board_id: '{{board_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://abn-amro.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_sprint_status
        method: GET
Open in Framework → View in Fleet → jira-sprint-status.yml

Checks if a user has access to a specific Okta application at ABN AMRO.

naftiko: '0.5'
info:
  label: Okta Application Assignment Check
  description: Checks if a user has access to a specific Okta application at ABN AMRO.
  tags:
  - security
  - okta
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: identity
    port: 8080
    tools:
    - name: check-app-access
      description: Check user application access in Okta.
      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://abn-amro.okta.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.okta_api_token
      header: Authorization
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: okta_application_assignment_ch
        method: GET
Open in Framework → View in Fleet → okta-application-assignment-check.yml

Searches Splunk SIEM for security events matching a query pattern at ABN AMRO.

naftiko: '0.5'
info:
  label: Splunk Security Log Search
  description: Searches Splunk SIEM for security events matching a query pattern at ABN AMRO.
  tags:
  - security
  - splunk
  - siem
capability:
  exposes:
  - type: mcp
    namespace: security
    port: 8080
    tools:
    - name: search-security-logs
      description: Search security logs by query.
      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://abn-amro-splunk.com/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: splunk_security_log_search
        method: GET
Open in Framework → View in Fleet → splunk-security-log-search.yml

Audits data catalog completeness, validates data classifications, creates remediation tasks, and notifies data stewards.

naftiko: '0.5'
info:
  label: Data Catalog Governance Pipeline
  description: Audits data catalog completeness, validates data classifications, creates remediation tasks, and notifies data stewards.
  tags:
  - data-governance
  - catalog
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: data-governance
    port: 8080
    tools:
    - name: data_catalog_governance_pipeline
      description: Orchestrate data catalog governance pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: fetch-data
        type: call
        call: primary.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-data
        type: call
        call: processor.transform
        with:
          input: '{{fetch-data.result}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: records
          data: '{{process-data.output}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: operations
          text: 'Workflow {{resource_id}} complete. Record: {{create-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://co.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/records
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → data-catalog-governance-pipeline.yml

Retrieves a Salesforce opportunity by ID, returning stage, amount, close date, and owner for the sales team.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Lookup
  description: Retrieves a Salesforce opportunity by ID, returning stage, amount, close date, and owner for the sales team.
  tags:
  - sales
  - crm
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: sales-crm
    port: 8080
    tools:
    - name: get-opportunity
      description: Look up a Salesforce opportunity by ID. Returns name, stage, amount, close date, and owner.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID.
      call: salesforce.get-opportunity
      with:
        opportunity_id: '{{opportunity_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.Name
      - name: stage
        type: string
        mapping: $.StageName
      - name: amount
        type: string
        mapping: $.Amount
      - name: close_date
        type: string
        mapping: $.CloseDate
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://abnamro.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
Open in Framework → View in Fleet → salesforce-opportunity-lookup.yml

Analyzes trade execution quality metrics, compares against benchmarks in Snowflake, identifies improvements, and reports to trading desk.

naftiko: '0.5'
info:
  label: Trade Execution Quality Analyzer
  description: Analyzes trade execution quality metrics, compares against benchmarks in Snowflake, identifies improvements, and reports to trading desk.
  tags:
  - trading
  - analytics
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: trading
    port: 8080
    tools:
    - name: trade_execution_quality_analyzer
      description: Orchestrate trade execution quality analyzer workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: fetch-data
        type: call
        call: primary.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-data
        type: call
        call: processor.transform
        with:
          input: '{{fetch-data.result}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: records
          data: '{{process-data.output}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: operations
          text: 'Workflow {{resource_id}} complete. Record: {{create-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://co.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/records
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → trade-execution-quality-analyzer.yml

Queries Dynatrace for application performance metrics, compares against historical baselines in Snowflake, and creates a Jira performance ticket when degradation is detected.

naftiko: '0.5'
info:
  label: Dynatrace Performance Baseline Comparison
  description: Queries Dynatrace for application performance metrics, compares against historical baselines in Snowflake, and creates a Jira performance ticket when degradation is detected.
  tags:
  - observability
  - performance
  - dynatrace
  - snowflake
  - jira
capability:
  exposes:
  - type: mcp
    namespace: observability-metrics
    port: 8080
    tools:
    - name: check-performance-baseline
      description: Query Dynatrace for metrics, compare against Snowflake baselines, and create a Jira ticket on degradation.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The Dynatrace entity ID of the service.
      - name: service_name
        in: body
        type: string
        description: Human-readable service name.
      - name: time_range
        in: body
        type: string
        description: Time range for metrics (e.g., last2h, last24h, last7d).
      steps:
      - name: get-current-metrics
        type: call
        call: dynatrace.get-metrics
        with:
          entity_id: '{{entity_id}}'
          time_range: '{{time_range}}'
      - name: get-baseline
        type: call
        call: snowflake.execute-query
        with:
          warehouse: OPS_WH
          database: OBSERVABILITY_DB
          query: SELECT avg_response_time, avg_error_rate, p95_response_time FROM service_baselines WHERE entity_id = '{{entity_id}}'
      - name: create-perf-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: PERF
          issuetype: Task
          summary: '[Performance] {{service_name}} — baseline deviation'
          description: 'Service: {{service_name}} ({{entity_id}})

            Current response time: {{get-current-metrics.response_time_ms}}ms

            Baseline: {{get-baseline.avg_response_time}}ms

            Current error rate: {{get-current-metrics.error_rate}}%

            Baseline error rate: {{get-baseline.avg_error_rate}}%'
  consumes:
  - type: http
    namespace: dynatrace
    baseUri: https://abnamro.live.dynatrace.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: metrics
      path: /metrics/query?entityId={{entity_id}}&from={{time_range}}
      inputParameters:
      - name: entity_id
        in: query
      - name: time_range
        in: query
      operations:
      - name: get-metrics
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://abnamro.eu-west-1.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://abnamro.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → dynatrace-performance-baseline-comparison.yml

Triggers a Terraform deployment through Azure DevOps pipelines for banking infrastructure changes, with approval gating and Teams notification.

naftiko: '0.5'
info:
  label: Terraform Infrastructure Deployment
  description: Triggers a Terraform deployment through Azure DevOps pipelines for banking infrastructure changes, with approval gating and Teams notification.
  tags:
  - infrastructure
  - devops
  - terraform
  - azure-devops
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: infra-deploy
    port: 8080
    tools:
    - name: deploy-infrastructure
      description: Given a Terraform workspace and environment, trigger an Azure DevOps pipeline run and notify the platform team.
      inputParameters:
      - name: workspace
        in: body
        type: string
        description: The Terraform workspace name.
      - name: environment
        in: body
        type: string
        description: 'Target environment: dev, staging, or production.'
      - name: change_ticket
        in: body
        type: string
        description: The ServiceNow change request number for audit trail.
      steps:
      - name: trigger-pipeline
        type: call
        call: azuredevops.run-pipeline
        with:
          project: banking-infra
          pipeline_id: terraform-apply
          variables:
            workspace: '{{workspace}}'
            environment: '{{environment}}'
            change_ticket: '{{change_ticket}}'
      - name: notify-platform
        type: call
        call: msteams.send-message
        with:
          channel: platform-deployments
          text: 'Infrastructure deployment triggered: {{workspace}} to {{environment}}. Pipeline run: {{trigger-pipeline.run_id}}. Change ticket: {{change_ticket}}.'
  consumes:
  - type: http
    namespace: azuredevops
    baseUri: https://dev.azure.com/abnamro
    authentication:
      type: bearer
      token: $secrets.azuredevops_token
    resources:
    - name: pipelines
      path: /{{project}}/_apis/pipelines/{{pipeline_id}}/runs?api-version=7.1
      inputParameters:
      - name: project
        in: path
      - name: pipeline_id
        in: path
      operations:
      - name: run-pipeline
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel}}/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → terraform-infrastructure-deployment.yml

Retrieves a document from SharePoint by site and document path, returning the download URL, modified date, and author for banking document management.

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

Reconciles nostro accounts with correspondent banks, identifies breaks in Snowflake, creates resolution tickets, and notifies operations.

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

When a critical banking service goes down, sends mass notifications via Everbridge to affected stakeholders and creates a ServiceNow major incident record.

naftiko: '0.5'
info:
  label: Everbridge Mass Notification for IT Incidents
  description: When a critical banking service goes down, sends mass notifications via Everbridge to affected stakeholders and creates a ServiceNow major incident record.
  tags:
  - incident-management
  - business-continuity
  - everbridge
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: crisis-management
    port: 8080
    tools:
    - name: trigger-mass-notification
      description: Given an incident description and impacted service, send Everbridge notifications, create a ServiceNow major incident, and post to Teams.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The name of the impacted banking service.
      - name: incident_summary
        in: body
        type: string
        description: Brief description of the incident.
      - name: severity
        in: body
        type: string
        description: 'Incident severity: P1, P2, P3.'
      - name: contact_group
        in: body
        type: string
        description: The Everbridge contact group to notify.
      steps:
      - name: send-notification
        type: call
        call: everbridge.send-notification
        with:
          notification_type: Standard
          subject: '[{{severity}}] {{service_name}} — Service Disruption'
          body: '{{incident_summary}}'
          contact_group: '{{contact_group}}'
      - name: create-major-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: '[{{severity}}] {{service_name}} — {{incident_summary}}'
          impact: '1'
          urgency: '1'
          assigned_group: Major_Incident_Management
          category: service_disruption
      - name: post-to-teams
        type: call
        call: msteams.send-message
        with:
          channel: major-incidents
          text: 'MAJOR INCIDENT: {{severity}} | {{service_name}} | {{incident_summary}} | ServiceNow: {{create-major-incident.number}} | Everbridge notification sent to {{contact_group}}'
  consumes:
  - type: http
    namespace: everbridge
    baseUri: https://api.everbridge.net/rest
    authentication:
      type: bearer
      token: $secrets.everbridge_token
    resources:
    - name: notifications
      path: /notifications
      operations:
      - name: send-notification
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://abnamro.service-now.com/api/now
    authentication:
      type: 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}}/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → everbridge-mass-notification-for-it-incidents.yml

Checks the last refresh status of a Power BI dataset used for ABN AMRO reporting.

naftiko: '0.5'
info:
  label: Power BI Dataset Refresh Status
  description: Checks the last refresh status of a Power BI dataset used for ABN AMRO reporting.
  tags:
  - analytics
  - power-bi
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: get-refresh-status
      description: Get Power BI dataset refresh status.
      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_dataset_refresh_statu
        method: GET
Open in Framework → View in Fleet → power-bi-dataset-refresh-status.yml

Receives mortgage application, runs credit check, validates documents in SharePoint, creates workflow in ServiceNow, and notifies the applicant via email.

naftiko: '0.5'
info:
  label: Mortgage Application Processor
  description: Receives mortgage application, runs credit check, validates documents in SharePoint, creates workflow in ServiceNow, and notifies the applicant via email.
  tags:
  - lending
  - mortgage
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: lending
    port: 8080
    tools:
    - name: mortgage_application_processor
      description: Orchestrate mortgage application processor workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-application
        type: call
        call: lending.get-application
        with:
          app_id: '{{resource_id}}'
      - name: run-credit-check
        type: call
        call: creditbureau.check-score
        with:
          ssn: '{{get-application.ssn}}'
      - name: create-workflow
        type: call
        call: servicenow.create-request
        with:
          short_description: 'Mortgage: {{resource_id}}'
          credit_score: '{{run-credit-check.score}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: lending-ops
          text: 'Mortgage {{resource_id}} processed. Score: {{run-credit-check.score}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://abn-amro.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-op
        method: POST
Open in Framework → View in Fleet → mortgage-application-processor.yml

Searches ABN AMRO Confluence knowledge base for articles matching a query.

naftiko: '0.5'
info:
  label: Confluence Knowledge Search
  description: Searches ABN AMRO Confluence knowledge base for articles matching a query.
  tags:
  - collaboration
  - confluence
  - knowledge-base
capability:
  exposes:
  - type: mcp
    namespace: collaboration
    port: 8080
    tools:
    - name: search-articles
      description: Search Confluence articles by query.
      inputParameters:
      - name: search_query
        in: body
        type: string
        description: The search_query to look up.
      call: confluence.get-search_query
      with:
        search_query: '{{search_query}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://abn-amro.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_knowledge_search
        method: GET
Open in Framework → View in Fleet → confluence-knowledge-search.yml

When a real-time fraud detection model flags a suspicious transaction in Snowflake, enriches the alert with customer data from Salesforce, blocks the card via Mastercard API, and notifies the fraud operations team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Fraud Detection Alert Pipeline
  description: When a real-time fraud detection model flags a suspicious transaction in Snowflake, enriches the alert with customer data from Salesforce, blocks the card via Mastercard API, and notifies the fraud operations team in Microsoft Teams.
  tags:
  - fraud-detection
  - security
  - snowflake
  - salesforce
  - mastercard
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: fraud-ops
    port: 8080
    tools:
    - name: handle-fraud-alert
      description: Given a fraud alert ID, enrich with customer data, optionally block the card, and notify fraud ops.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The fraud detection alert ID from the ML pipeline.
      - name: customer_id
        in: body
        type: string
        description: The Salesforce customer account ID.
      - name: card_number_token
        in: body
        type: string
        description: Tokenized card number for Mastercard API.
      - name: block_card
        in: body
        type: string
        description: 'Whether to block the card: true or false.'
      steps:
      - name: get-alert-data
        type: call
        call: snowflake.execute-query
        with:
          warehouse: FRAUD_WH
          database: FRAUD_DB
          query: SELECT * FROM fraud_alerts WHERE alert_id = '{{alert_id}}'
      - name: get-customer
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{customer_id}}'
      - name: block-card
        type: call
        call: mastercard.block-card
        with:
          card_token: '{{card_number_token}}'
          reason: fraud_suspected
      - name: notify-fraud-ops
        type: call
        call: msteams.send-message
        with:
          channel: fraud-operations
          text: 'Fraud Alert: {{alert_id}} | Customer: {{get-customer.name}} | Card blocked: {{block_card}} | Transaction details from Snowflake query. Review immediately.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abnamro.eu-west-1.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://abnamro.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: mastercard
    baseUri: https://api.mastercard.com/fraud/v1
    authentication:
      type: bearer
      token: $secrets.mastercard_token
    resources:
    - name: cards
      path: /cards/block
      operations:
      - name: block-card
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel}}/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → fraud-detection-alert-pipeline.yml

Checks the review status and approval state of a GitHub pull request.

naftiko: '0.5'
info:
  label: GitHub PR Review Status
  description: Checks the review status and approval state of a GitHub pull request.
  tags:
  - devops
  - github
  - code-review
capability:
  exposes:
  - type: mcp
    namespace: engineering
    port: 8080
    tools:
    - name: get-pr-status
      description: Get PR review status by number.
      inputParameters:
      - name: pr_number
        in: body
        type: string
        description: The pr_number to look up.
      call: github.get-pr_number
      with:
        pr_number: '{{pr_number}}'
  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_pr_review_status
        method: GET
Open in Framework → View in Fleet → github-pr-review-status.yml

Queries the MuleSoft Anypoint Platform for API deployment status and health metrics, compares against SLA thresholds in Datadog, and creates a ServiceNow incident when error rates exceed acceptable levels.

naftiko: '0.5'
info:
  label: MuleSoft API Health Check with Incident Creation
  description: Queries the MuleSoft Anypoint Platform for API deployment status and health metrics, compares against SLA thresholds in Datadog, and creates a ServiceNow incident when error rates exceed acceptable levels.
  tags:
  - api-management
  - integration
  - mulesoft
  - datadog
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: api-gateway
    port: 8080
    tools:
    - name: check-api-health-with-escalation
      description: Check MuleSoft API health, compare against Datadog SLA metrics, and create a ServiceNow incident on degradation.
      inputParameters:
      - name: api_id
        in: body
        type: string
        description: The MuleSoft Anypoint API instance ID.
      - name: environment
        in: body
        type: string
        description: 'Deployment environment: sandbox or production.'
      - name: error_rate_threshold
        in: body
        type: number
        description: Error rate threshold percentage for escalation.
      steps:
      - name: get-api-status
        type: call
        call: mulesoft.get-api-status
        with:
          api_id: '{{api_id}}'
          environment: '{{environment}}'
      - name: get-datadog-metrics
        type: call
        call: datadog.get-metrics
        with:
          query: avg:mulesoft.api.error_rate{api_id:{{api_id}},env:{{environment}}}
          time_range: 1h
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'API degradation: {{api_id}} in {{environment}}'
          description: 'MuleSoft API {{api_id}} ({{environment}}) is degraded.

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

            Error rate: {{get-datadog-metrics.error_rate}}%

            Threshold: {{error_rate_threshold}}%'
          assigned_group: API_Platform
          category: api_degradation
  consumes:
  - type: http
    namespace: mulesoft
    baseUri: https://anypoint.mulesoft.com/apimanager/api/v1
    authentication:
      type: bearer
      token: $secrets.mulesoft_token
    resources:
    - name: apis
      path: /organizations/{{org_id}}/environments/{{environment}}/apis/{{api_id}}
      inputParameters:
      - name: api_id
        in: path
      - name: environment
        in: path
      operations:
      - name: get-api-status
        method: GET
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.eu/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /query
      operations:
      - name: get-metrics
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://abnamro.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → mulesoft-api-health-check-with-incident-creation.yml

Queries Prometheus for active alerts on Kubernetes-hosted banking microservices, enriches with Datadog APM trace data, and creates Jira incident tickets for critical alerts.

naftiko: '0.5'
info:
  label: Prometheus Alert Triage and Escalation
  description: Queries Prometheus for active alerts on Kubernetes-hosted banking microservices, enriches with Datadog APM trace data, and creates Jira incident tickets for critical alerts.
  tags:
  - observability
  - alerting
  - prometheus
  - datadog
  - jira
capability:
  exposes:
  - type: mcp
    namespace: monitoring
    port: 8080
    tools:
    - name: triage-prometheus-alerts
      description: Query Prometheus alerts, enrich with Datadog traces, and create Jira incidents for critical ones.
      inputParameters:
      - name: namespace
        in: body
        type: string
        description: The Kubernetes namespace to filter alerts.
      - name: severity_filter
        in: body
        type: string
        description: 'Minimum severity to triage: critical, warning, or info.'
      steps:
      - name: get-alerts
        type: call
        call: prometheus.query-alerts
        with:
          namespace: '{{namespace}}'
      - name: get-traces
        type: call
        call: datadog.get-traces
        with:
          service: '{{namespace}}'
          time_range: 1h
      - name: create-incident
        type: call
        call: jira.create-issue
        with:
          project_key: INC
          issuetype: Incident
          summary: '[Prometheus] {{namespace}} — {{get-alerts.alert_count}} active alerts'
          description: 'Namespace: {{namespace}}

            Active alerts: {{get-alerts.alert_count}}

            Severity filter: {{severity_filter}}

            Datadog traces available for correlation.'
  consumes:
  - type: http
    namespace: prometheus
    baseUri: https://prometheus.abnamro.com/api/v1
    authentication:
      type: bearer
      token: $secrets.prometheus_token
    resources:
    - name: alerts
      path: /alerts?filter=namespace%3D{{namespace}}
      inputParameters:
      - name: namespace
        in: query
      operations:
      - name: query-alerts
        method: GET
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.eu/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: traces
      path: /traces?service={{service}}&timeRange={{time_range}}
      inputParameters:
      - name: service
        in: query
      - name: time_range
        in: query
      operations:
      - name: get-traces
        method: GET
  - type: http
    namespace: jira
    baseUri: https://abnamro.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → prometheus-alert-triage-and-escalation.yml

Validates wire transfers against AML rules, screens beneficiaries, creates compliance records, and notifies compliance team.

naftiko: '0.5'
info:
  label: Wire Transfer Compliance Pipeline
  description: Validates wire transfers against AML rules, screens beneficiaries, creates compliance records, and notifies compliance team.
  tags:
  - payments
  - compliance
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: payments
    port: 8080
    tools:
    - name: wire_transfer_compliance_pipeline
      description: Orchestrate wire transfer compliance pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: fetch-data
        type: call
        call: primary.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-data
        type: call
        call: processor.transform
        with:
          input: '{{fetch-data.result}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: records
          data: '{{process-data.output}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: operations
          text: 'Workflow {{resource_id}} complete. Record: {{create-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://co.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/records
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → wire-transfer-compliance-pipeline.yml

Generates annual client review documents from portfolio data, compliance records, and performance metrics, and sends to advisors.

naftiko: '0.5'
info:
  label: Annual Review Document Generator
  description: Generates annual client review documents from portfolio data, compliance records, and performance metrics, and sends to advisors.
  tags:
  - client-management
  - documents
  - snowflake
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: client-management
    port: 8080
    tools:
    - name: annual_review_document_generator
      description: Orchestrate annual review document generator workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: fetch-data
        type: call
        call: primary.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-data
        type: call
        call: processor.transform
        with:
          input: '{{fetch-data.result}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: records
          data: '{{process-data.output}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: operations
          text: 'Workflow {{resource_id}} complete. Record: {{create-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://co.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/records
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → annual-review-document-generator.yml

Fetches real-time market data from Bloomberg Terminal API for ABN AMRO trading desks.

naftiko: '0.5'
info:
  label: Bloomberg Terminal Data Fetch
  description: Fetches real-time market data from Bloomberg Terminal API for ABN AMRO trading desks.
  tags:
  - trading
  - bloomberg
  - market-data
capability:
  exposes:
  - type: mcp
    namespace: trading
    port: 8080
    tools:
    - name: get-market-data
      description: Fetch Bloomberg market data by ticker.
      inputParameters:
      - name: ticker
        in: body
        type: string
        description: The ticker to look up.
      call: salesforce.get-ticker
      with:
        ticker: '{{ticker}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://abn-amro.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: bloomberg_terminal_data_fetch
        method: GET
Open in Framework → View in Fleet → bloomberg-terminal-data-fetch.yml

Queries distributed traces from the OpenTelemetry-backed tracing backend for a given trace ID, returning span details and latency breakdown for banking microservice debugging.

naftiko: '0.5'
info:
  label: OpenTelemetry Trace Lookup
  description: Queries distributed traces from the OpenTelemetry-backed tracing backend for a given trace ID, returning span details and latency breakdown for banking microservice debugging.
  tags:
  - observability
  - tracing
  - opentelemetry
capability:
  exposes:
  - type: mcp
    namespace: distributed-tracing
    port: 8080
    tools:
    - name: get-trace
      description: Look up a distributed trace by trace ID. Returns span tree, total duration, and error spans.
      inputParameters:
      - name: trace_id
        in: body
        type: string
        description: The OpenTelemetry trace ID (32-char hex).
      call: otel.get-trace
      with:
        trace_id: '{{trace_id}}'
      outputParameters:
      - name: span_count
        type: string
        mapping: $.spans.length
      - name: total_duration_ms
        type: string
        mapping: $.duration
  consumes:
  - type: http
    namespace: otel
    baseUri: https://tracing.abnamro.com/api/v2
    authentication:
      type: bearer
      token: $secrets.otel_token
    resources:
    - name: traces
      path: /traces/{{trace_id}}
      inputParameters:
      - name: trace_id
        in: path
      operations:
      - name: get-trace
        method: GET
Open in Framework → View in Fleet → opentelemetry-trace-lookup.yml

Retrieves the current discount rate and fee structure for a merchant enrolled in the Amex network.

naftiko: '0.5'
info:
  label: Merchant Fee Rate Lookup
  description: Retrieves the current discount rate and fee structure for a merchant enrolled in the Amex network.
  tags:
  - merchants
  - payments
  - fees
capability:
  exposes:
  - type: mcp
    namespace: amex-merchant-data
    port: 8080
    tools:
    - name: get-fee-rate
      description: Given a merchant ID, return the discount rate, transaction fee, and effective date. Use when reviewing merchant fee arrangements.
      inputParameters:
      - name: merchant_id
        in: body
        type: string
        description: The merchant identifier.
      call: amex-merchant-data.get-fee-rate
      with:
        merchant_id: '{{merchant_id}}'
      outputParameters:
      - name: discount_rate
        type: number
        mapping: $.discount_rate
      - name: transaction_fee
        type: number
        mapping: $.transaction_fee
      - name: effective_date
        type: string
        mapping: $.effective_date
  consumes:
  - namespace: amex-merchant-data
    type: http
    baseUri: https://api.americanexpress.com/v1/merchants
    authentication:
      type: bearer
      token: $secrets.amex_merchant_token
    resources:
    - name: fees
      path: /merchants/{merchant_id}/fees
      inputParameters:
      - name: merchant_id
        in: path
      operations:
      - name: get-fee-rate
        method: GET
Open in Framework → View in Fleet → merchant-fee-rate-lookup.yml

Escalates high-priority Zendesk support tickets by fetching ticket details, creating a Jira issue for the product team, and alerting the support lead via Slack.

naftiko: '0.5'
info:
  label: Zendesk Ticket Escalation Workflow
  description: Escalates high-priority Zendesk support tickets by fetching ticket details, creating a Jira issue for the product team, and alerting the support lead via Slack.
  tags:
  - zendesk
  - customer-support
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: ticket-escalation
    port: 8080
    tools:
    - name: escalate-ticket
      description: Escalate a Zendesk ticket to the product team via Jira and notify the support lead. Use when a support ticket requires product team intervention.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: Zendesk ticket ID.
      steps:
      - name: get-ticket
        type: call
        call: zendesk.get-ticket
        with:
          ticket_id: '{{ticket_id}}'
      - name: create-jira
        type: call
        call: jira.create-issue
        with:
          project_key: SUP
          issuetype: Bug
          summary: 'Escalation: {{get-ticket.subject}}'
          description: 'Zendesk #{{ticket_id}}: {{get-ticket.description}}. Priority: {{get-ticket.priority}}.'
      - name: alert-lead
        type: call
        call: slack.post-message
        with:
          channel: support-escalations
          text: 'Ticket escalated: #{{ticket_id}} — {{get-ticket.subject}} | Priority: {{get-ticket.priority}} | Jira: {{create-jira.key}}'
  consumes:
  - namespace: zendesk
    type: http
    baseUri: https://americanexpress.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
  - namespace: jira
    type: http
    baseUri: https://americanexpress.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issue
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - namespace: slack
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → zendesk-ticket-escalation-workflow.yml

Triggers a Tableau workbook refresh for monthly financial reporting dashboards and posts the refresh status to the Finance Slack channel.

naftiko: '0.5'
info:
  label: Tableau Financial Dashboard Refresh
  description: Triggers a Tableau workbook refresh for monthly financial reporting dashboards and posts the refresh status to the Finance Slack channel.
  tags:
  - data
  - analytics
  - tableau
  - slack
  - finance
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: finance-reporting
    port: 8080
    tools:
    - name: refresh-financial-dashboard
      description: Given a Tableau workbook ID, trigger a datasource refresh and post the job status to the finance Slack channel once complete. Use at month-end or quarter-end to refresh executive financial dashboards.
      inputParameters:
      - name: workbook_id
        in: body
        type: string
        description: The Tableau workbook ID to refresh.
      - name: site_id
        in: body
        type: string
        description: The Tableau site ID where the workbook is hosted.
      steps:
      - name: trigger-refresh
        type: call
        call: tableau.refresh-workbook
        with:
          site_id: '{{site_id}}'
          workbook_id: '{{workbook_id}}'
      - name: post-status
        type: call
        call: slack-finance.post-message
        with:
          channel: finance-reporting
          text: 'Tableau dashboard refresh triggered | Workbook: {{workbook_id}} | Job ID: {{trigger-refresh.job_id}} | Status: {{trigger-refresh.status}}'
  consumes:
  - namespace: tableau
    type: http
    baseUri: https://americanexpress.tableau.com/api/2.8
    authentication:
      type: apikey
      key: X-Tableau-Auth
      value: $secrets.tableau_auth_token
      placement: header
    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
  - namespace: slack-finance
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → tableau-financial-dashboard-refresh.yml

Processes a chargeback by retrieving the original transaction, filing the chargeback with the merchant acquirer, updating the cardholder ledger, and sending status notification.

naftiko: '0.5'
info:
  label: Cardholder Chargeback Processing
  description: Processes a chargeback by retrieving the original transaction, filing the chargeback with the merchant acquirer, updating the cardholder ledger, and sending status notification.
  tags:
  - chargebacks
  - payments
  - cardholder
  - settlements
capability:
  exposes:
  - type: mcp
    namespace: chargeback-ops
    port: 8080
    tools:
    - name: process-chargeback
      description: File a chargeback, issue provisional credit, and notify the cardholder. Use when a cardholder disputes a transaction and a chargeback is warranted.
      inputParameters:
      - name: transaction_id
        in: body
        type: string
        description: Original transaction ID.
      - name: reason_code
        in: body
        type: string
        description: Chargeback reason code.
      - name: cardholder_email
        in: body
        type: string
        description: Cardholder email address.
      steps:
      - name: get-txn
        type: call
        call: amex-transactions.get-transaction
        with:
          txn_id: '{{transaction_id}}'
      - name: file-cb
        type: call
        call: amex-chargebacks.file-chargeback
        with:
          transaction_id: '{{transaction_id}}'
          reason_code: '{{reason_code}}'
          amount: '{{get-txn.amount}}'
      - name: credit-ledger
        type: call
        call: amex-ledger.create-entry
        with:
          account_id: '{{get-txn.account_id}}'
          amount: '{{get-txn.amount}}'
          type: provisional_credit
          reference: '{{file-cb.chargeback_id}}'
      - name: notify
        type: call
        call: email.send-email
        with:
          to: '{{cardholder_email}}'
          subject: Chargeback filed — provisional credit issued
          body: 'A provisional credit of ${{get-txn.amount}} has been applied. Chargeback ID: {{file-cb.chargeback_id}}'
  consumes:
  - namespace: amex-transactions
    type: http
    baseUri: https://api.americanexpress.com/v1/transactions
    authentication:
      type: bearer
      token: $secrets.amex_transactions_token
    resources:
    - name: transaction
      path: /transactions/{txn_id}
      inputParameters:
      - name: txn_id
        in: path
      operations:
      - name: get-transaction
        method: GET
  - namespace: amex-chargebacks
    type: http
    baseUri: https://api.americanexpress.com/v1/chargebacks
    authentication:
      type: bearer
      token: $secrets.amex_chargebacks_token
    resources:
    - name: chargeback
      path: /chargebacks
      operations:
      - name: file-chargeback
        method: POST
  - namespace: amex-ledger
    type: http
    baseUri: https://api.americanexpress.com/v1/ledger
    authentication:
      type: bearer
      token: $secrets.amex_ledger_token
    resources:
    - name: entries
      path: /entries
      operations:
      - name: create-entry
        method: POST
  - namespace: email
    type: http
    baseUri: https://api.americanexpress.com/v1/notifications
    authentication:
      type: bearer
      token: $secrets.amex_notifications_token
    resources:
    - name: messages
      path: /email/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → cardholder-chargeback-processing.yml

When a Snowflake data quality check fails for a critical financial dataset, logs the failure details and creates a Jira data engineering issue for remediation.

naftiko: '0.5'
info:
  label: Snowflake Data Quality Monitoring Alert
  description: When a Snowflake data quality check fails for a critical financial dataset, logs the failure details and creates a Jira data engineering issue for remediation.
  tags:
  - data
  - analytics
  - snowflake
  - jira
  - data-quality
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: handle-data-quality-failure
      description: Given a Snowflake table name, failed check name, and failure details, create a Jira issue for the data engineering team and post a Slack notification to the data ops channel. Use when automated data quality checks fail on financial or compliance datasets.
      inputParameters:
      - name: table_name
        in: body
        type: string
        description: The fully-qualified Snowflake table name (database.schema.table) where the quality check failed.
      - name: check_name
        in: body
        type: string
        description: The name of the data quality check that failed (e.g., null_count_check, row_count_threshold).
      - name: failure_details
        in: body
        type: string
        description: A description of why the check failed and what values were observed.
      steps:
      - name: create-dq-issue
        type: call
        call: jira-data.create-issue
        with:
          project_key: DATA
          issuetype: Bug
          summary: 'Data quality failure: {{check_name}} on {{table_name}}'
          description: 'Table: {{table_name}}

            Check: {{check_name}}

            Details: {{failure_details}}'
          priority: High
      - name: post-data-alert
        type: call
        call: slack-data.post-message
        with:
          channel: data-ops
          text: 'Data Quality Failure | Table: {{table_name}} | Check: {{check_name}} | Jira: {{create-dq-issue.key}}'
  consumes:
  - namespace: jira-data
    type: http
    baseUri: https://americanexpress.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issue
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - namespace: slack-data
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → snowflake-data-quality-monitoring-alert.yml

Responds to DDoS attacks by activating Cloudflare under-attack mode, creating a security incident in ServiceNow, alerting via PagerDuty, and posting status to Slack.

naftiko: '0.5'
info:
  label: Cloudflare DDoS Mitigation Response
  description: Responds to DDoS attacks by activating Cloudflare under-attack mode, creating a security incident in ServiceNow, alerting via PagerDuty, and posting status to Slack.
  tags:
  - cloudflare
  - security
  - servicenow
  - pagerduty
  - slack
capability:
  exposes:
  - type: mcp
    namespace: ddos-response
    port: 8080
    tools:
    - name: mitigate-ddos
      description: Activate DDoS mitigation and alert security teams. Use when a DDoS attack is detected.
      inputParameters:
      - name: zone_id
        in: body
        type: string
        description: Cloudflare zone ID.
      steps:
      - name: activate-uam
        type: call
        call: cloudflare.set-security-level
        with:
          zone_id: '{{zone_id}}'
          value: under_attack
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: DDoS attack — {{zone_id}}
          category: security
          priority: '1'
      - name: page-security
        type: call
        call: pagerduty.create-incident
        with:
          title: 'DDoS attack: zone {{zone_id}}'
          service_id: $secrets.pd_security_service_id
          urgency: high
      - name: post-status
        type: call
        call: slack.post-message
        with:
          channel: security-ops
          text: 'DDoS mitigation active: {{zone_id}} | SNOW: {{create-incident.number}} | PD: {{page-security.incident_number}}'
  consumes:
  - namespace: cloudflare
    type: http
    baseUri: https://api.cloudflare.com/client/v4
    authentication:
      type: bearer
      token: $secrets.cloudflare_token
    resources:
    - name: zones
      path: /zones/{zone_id}/settings/security_level
      inputParameters:
      - name: zone_id
        in: path
      operations:
      - name: set-security-level
        method: PATCH
  - namespace: servicenow
    type: http
    baseUri: https://americanexpress.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - namespace: pagerduty
    type: http
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
  - namespace: slack
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → cloudflare-ddos-mitigation-response.yml

Responds to Dynatrace application slowdown alerts by fetching problem details, creating a PagerDuty incident, and opening a Jira issue for the responsible team.

naftiko: '0.5'
info:
  label: Dynatrace Application Slowdown Response
  description: Responds to Dynatrace application slowdown alerts by fetching problem details, creating a PagerDuty incident, and opening a Jira issue for the responsible team.
  tags:
  - dynatrace
  - monitoring
  - pagerduty
  - jira
capability:
  exposes:
  - type: mcp
    namespace: dt-response
    port: 8080
    tools:
    - name: handle-slowdown
      description: Respond to a Dynatrace slowdown by paging on-call and creating a tracking issue. Use when Dynatrace detects application performance degradation.
      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: page-team
        type: call
        call: pagerduty.create-incident
        with:
          title: 'App slowdown: {{get-problem.title}}'
          service_id: $secrets.pd_app_service_id
          urgency: high
          body: 'Impact: {{get-problem.impactLevel}}. Root cause: {{get-problem.rootCauseEntity}}.'
      - name: create-issue
        type: call
        call: jira.create-issue
        with:
          project_key: OPS
          issuetype: Bug
          summary: 'Dynatrace: {{get-problem.title}}'
          description: 'Problem ID: {{problem_id}}. Impact: {{get-problem.impactLevel}}. PagerDuty: {{page-team.incident_number}}.'
  consumes:
  - namespace: dynatrace
    type: http
    baseUri: https://americanexpress.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
  - namespace: pagerduty
    type: http
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
  - namespace: jira
    type: http
    baseUri: https://americanexpress.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issue
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → dynatrace-application-slowdown-response.yml

When a role change is recorded in Workday, updates the employee's Okta group memberships and notifies the employee via Microsoft Teams of their new access.

naftiko: '0.5'
info:
  label: Okta Access Provisioning for New Role
  description: When a role change is recorded in Workday, updates the employee's Okta group memberships and notifies the employee via Microsoft Teams of their new access.
  tags:
  - identity
  - security
  - okta
  - workday
  - microsoft-teams
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: identity-provisioning
    port: 8080
    tools:
    - name: provision-role-access
      description: Given a Workday employee ID and new role, retrieve the employee's Okta user ID, update their group memberships to reflect the new role, and notify them via Teams. Use when an employee changes roles and needs updated system access.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: The Workday worker ID of the employee whose role is changing.
      - name: new_role
        in: body
        type: string
        description: The new role or job title as defined in Workday.
      - name: okta_group_id
        in: body
        type: string
        description: The Okta group ID corresponding to the new role's access profile.
      steps:
      - name: get-employee
        type: call
        call: workday-iam.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: get-okta-user
        type: call
        call: okta.get-user-by-login
        with:
          login: '{{get-employee.work_email}}'
      - name: add-to-group
        type: call
        call: okta-groups.add-user-to-group
        with:
          group_id: '{{okta_group_id}}'
          user_id: '{{get-okta-user.id}}'
      - name: notify-employee
        type: call
        call: msteams-iam.send-message
        with:
          recipient_upn: '{{get-employee.work_email}}'
          text: 'Your access has been updated for your new role: {{new_role}}. If you have questions, contact the IT help desk.'
  consumes:
  - namespace: workday-iam
    type: http
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_access_token
    resources:
    - name: worker
      path: /workers/{worker_id}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - namespace: okta
    type: http
    baseUri: https://americanexpress.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: user
      path: /users/{login}
      inputParameters:
      - name: login
        in: path
      operations:
      - name: get-user-by-login
        method: GET
  - namespace: okta-groups
    type: http
    baseUri: https://americanexpress.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: group-membership
      path: /groups/{group_id}/users/{user_id}
      inputParameters:
      - name: group_id
        in: path
      - name: user_id
        in: path
      operations:
      - name: add-user-to-group
        method: PUT
  - namespace: msteams-iam
    type: http
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/{recipient_upn}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → okta-access-provisioning-for-new-role.yml

Retrieves the latest settlement status and payout details for a merchant from the settlements service.

naftiko: '0.5'
info:
  label: Merchant Settlement Status Lookup
  description: Retrieves the latest settlement status and payout details for a merchant from the settlements service.
  tags:
  - merchants
  - payments
  - settlements
capability:
  exposes:
  - type: mcp
    namespace: amex-settlements
    port: 8080
    tools:
    - name: get-settlement-status
      description: Given a merchant ID, return the latest settlement amount, status, and payout date. Use when a merchant inquires about payment settlement.
      inputParameters:
      - name: merchant_id
        in: body
        type: string
        description: The merchant identifier.
      call: amex-settlements.get-settlement-status
      with:
        merchant_id: '{{merchant_id}}'
      outputParameters:
      - name: settlement_amount
        type: number
        mapping: $.amount
      - name: status
        type: string
        mapping: $.status
      - name: payout_date
        type: string
        mapping: $.payout_date
  consumes:
  - namespace: amex-settlements
    type: http
    baseUri: https://api.americanexpress.com/v1/settlements
    authentication:
      type: bearer
      token: $secrets.amex_settlements_token
    resources:
    - name: settlement
      path: /merchants/{merchant_id}/settlements/latest
      inputParameters:
      - name: merchant_id
        in: path
      operations:
      - name: get-settlement-status
        method: GET
Open in Framework → View in Fleet → merchant-settlement-status-lookup.yml

When a new lead is created in Salesforce for a card product, enriches the lead with firmographic data from ZoomInfo and updates the Salesforce record with company and contact details.

naftiko: '0.5'
info:
  label: Salesforce Lead to Card Applicant Enrichment
  description: When a new lead is created in Salesforce for a card product, enriches the lead with firmographic data from ZoomInfo and updates the Salesforce record with company and contact details.
  tags:
  - sales
  - crm
  - salesforce
  - zoominfo
  - lead-enrichment
capability:
  exposes:
  - type: mcp
    namespace: lead-enrichment
    port: 8080
    tools:
    - name: enrich-card-lead
      description: Given a Salesforce lead ID, retrieve lead details, search ZoomInfo for matching company and contact data, and update the Salesforce lead record with enriched firmographic information. Use when new B2B card product leads are created.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: The Salesforce lead ID to enrich.
      steps:
      - name: get-lead
        type: call
        call: salesforce-leads.get-lead
        with:
          lead_id: '{{lead_id}}'
      - name: search-zoominfo
        type: call
        call: zoominfo.search-contact
        with:
          first_name: '{{get-lead.first_name}}'
          last_name: '{{get-lead.last_name}}'
          company_name: '{{get-lead.company}}'
      - name: update-lead
        type: call
        call: salesforce-leads-update.update-lead
        with:
          lead_id: '{{lead_id}}'
          company_revenue: '{{search-zoominfo.company_revenue}}'
          employee_count: '{{search-zoominfo.employee_count}}'
          industry: '{{search-zoominfo.industry}}'
          linkedin_url: '{{search-zoominfo.linkedin_url}}'
  consumes:
  - namespace: salesforce-leads
    type: http
    baseUri: https://americanexpress.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: lead
      path: /sobjects/Lead/{lead_id}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: get-lead
        method: GET
  - namespace: zoominfo
    type: http
    baseUri: https://api.zoominfo.com/search
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: contact
      path: /contact
      operations:
      - name: search-contact
        method: POST
  - namespace: salesforce-leads-update
    type: http
    baseUri: https://americanexpress.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: lead
      path: /sobjects/Lead/{lead_id}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: update-lead
        method: PATCH
Open in Framework → View in Fleet → salesforce-lead-to-card-applicant-enrichment.yml

Generates a sprint retrospective digest by pulling completed stories from Jira, calculating velocity metrics, and posting the summary to Confluence and Slack.

naftiko: '0.5'
info:
  label: Jira Sprint Retrospective Digest
  description: Generates a sprint retrospective digest by pulling completed stories from Jira, calculating velocity metrics, and posting the summary to Confluence and Slack.
  tags:
  - jira
  - engineering
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: sprint-retro
    port: 8080
    tools:
    - name: generate-retro-digest
      description: Generate a sprint retrospective by summarizing completed work and posting to Confluence and Slack. Use at the end of each sprint.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: Jira project key.
      - name: sprint_id
        in: body
        type: string
        description: Sprint ID.
      - name: confluence_space
        in: body
        type: string
        description: Confluence space key.
      - name: team_channel
        in: body
        type: string
        description: Team Slack channel.
      steps:
      - name: get-completed
        type: call
        call: jira.search-issues
        with:
          jql: project={{project_key}} AND sprint={{sprint_id}} AND status=Done
      - name: create-retro
        type: call
        call: confluence.create-page
        with:
          spaceKey: '{{confluence_space}}'
          title: Sprint {{sprint_id}} Retrospective
          body: 'Completed: {{get-completed.total}} stories. Story points: {{get-completed.total_points}}.'
      - name: post-digest
        type: call
        call: slack.post-message
        with:
          channel: '{{team_channel}}'
          text: 'Sprint {{sprint_id}} complete: {{get-completed.total}} stories ({{get-completed.total_points}} pts). Retro: {{create-retro.url}}'
  consumes:
  - namespace: jira
    type: http
    baseUri: https://americanexpress.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
  - namespace: confluence
    type: http
    baseUri: https://americanexpress.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
  - namespace: slack
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → jira-sprint-retrospective-digest.yml

Retrieves a cardholder's current Membership Rewards point balance and tier status from the rewards platform and returns a structured summary.

naftiko: '0.5'
info:
  label: Cardholder Rewards Balance Lookup
  description: Retrieves a cardholder's current Membership Rewards point balance and tier status from the rewards platform and returns a structured summary.
  tags:
  - rewards
  - payments
  - cardholder
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: rewards
    port: 8080
    tools:
    - name: get-rewards-balance
      description: Given a cardholder account ID, return the current Membership Rewards point balance, tier, and expiry date. Use when an agent or representative needs to check a cardholder's rewards standing.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The cardholder account ID for which to retrieve rewards balance.
      call: amex-rewards.get-balance
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: points_balance
        type: number
        mapping: $.points_balance
      - name: tier
        type: string
        mapping: $.tier
      - name: expiry_date
        type: string
        mapping: $.expiry_date
  consumes:
  - namespace: amex-rewards
    type: http
    baseUri: https://api.americanexpress.com/v1/rewards
    authentication:
      type: bearer
      token: $secrets.amex_rewards_token
    resources:
    - name: balance
      path: /accounts/{account_id}/balance
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-balance
        method: GET
Open in Framework → View in Fleet → cardholder-rewards-balance-lookup.yml

Provisions a cardholder's card into a digital wallet by verifying identity, generating a token, registering with the wallet provider, and confirming via push notification.

naftiko: '0.5'
info:
  label: Cardholder Digital Wallet Provisioning
  description: Provisions a cardholder's card into a digital wallet by verifying identity, generating a token, registering with the wallet provider, and confirming via push notification.
  tags:
  - cardholder
  - digital-wallets
  - payments
  - security
capability:
  exposes:
  - type: mcp
    namespace: wallet-provision
    port: 8080
    tools:
    - name: provision-wallet
      description: Provision a card into a digital wallet with identity verification and token generation. Use when a cardholder adds their card to Apple Pay or Google Pay.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Cardholder account ID.
      - name: card_id
        in: body
        type: string
        description: Card ID to provision.
      - name: wallet_type
        in: body
        type: string
        description: Wallet type (apple-pay, google-pay).
      - name: device_id
        in: body
        type: string
        description: Device identifier.
      - name: verification_method
        in: body
        type: string
        description: Verification method (sms, email).
      steps:
      - name: verify
        type: call
        call: amex-identity.verify-identity
        with:
          account_id: '{{account_id}}'
          verification_method: '{{verification_method}}'
      - name: tokenize
        type: call
        call: amex-tokens.generate-token
        with:
          card_id: '{{card_id}}'
          wallet_type: '{{wallet_type}}'
      - name: register
        type: call
        call: amex-wallets.register-wallet
        with:
          token_id: '{{tokenize.token_id}}'
          wallet_type: '{{wallet_type}}'
          device_id: '{{device_id}}'
      - name: confirm
        type: call
        call: amex-push.send-push
        with:
          account_id: '{{account_id}}'
          title: Card added to {{wallet_type}}
          body: Your card ending in {{tokenize.last_four}} is now available in {{wallet_type}}.
  consumes:
  - namespace: amex-identity
    type: http
    baseUri: https://api.americanexpress.com/v1/identity
    authentication:
      type: bearer
      token: $secrets.amex_identity_token
    resources:
    - name: verify
      path: /verify
      operations:
      - name: verify-identity
        method: POST
  - namespace: amex-tokens
    type: http
    baseUri: https://api.americanexpress.com/v1/tokens
    authentication:
      type: bearer
      token: $secrets.amex_tokens_token
    resources:
    - name: tokens
      path: /tokens
      operations:
      - name: generate-token
        method: POST
  - namespace: amex-wallets
    type: http
    baseUri: https://api.americanexpress.com/v1/wallets
    authentication:
      type: bearer
      token: $secrets.amex_wallets_token
    resources:
    - name: registrations
      path: /registrations
      operations:
      - name: register-wallet
        method: POST
  - namespace: amex-push
    type: http
    baseUri: https://api.americanexpress.com/v1/notifications
    authentication:
      type: bearer
      token: $secrets.amex_notifications_token
    resources:
    - name: push
      path: /push/send
      operations:
      - name: send-push
        method: POST
Open in Framework → View in Fleet → cardholder-digital-wallet-provisioning.yml

Queries Datadog for the current health status and error rate of a specified American Express microservice.

naftiko: '0.5'
info:
  label: Datadog Service Health Check
  description: Queries Datadog for the current health status and error rate of a specified American Express microservice.
  tags:
  - datadog
  - monitoring
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: datadog
    port: 8080
    tools:
    - name: get-service-health
      description: Given a service name, return the current monitor status and error rate from Datadog. Use when checking the health of a production service.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The microservice name to check.
      call: datadog.get-service-health
      with:
        service_name: '{{service_name}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.monitors[0].overall_state
      - name: error_rate
        type: number
        mapping: $.monitors[0].error_rate
      - name: name
        type: string
        mapping: $.monitors[0].name
  consumes:
  - namespace: datadog
    type: http
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: monitors
      path: /monitor/search
      operations:
      - name: get-service-health
        method: GET
Open in Framework → View in Fleet → datadog-service-health-check.yml

Checks whether a cardholder is eligible for a specific Amex Offer based on account profile and spending history.

naftiko: '0.5'
info:
  label: Cardholder Offer Eligibility Check
  description: Checks whether a cardholder is eligible for a specific Amex Offer based on account profile and spending history.
  tags:
  - offers
  - cardholder
  - marketing
capability:
  exposes:
  - type: mcp
    namespace: amex-offers
    port: 8080
    tools:
    - name: check-eligibility
      description: Given an offer ID and account ID, return eligibility status, reason, and offer name. Use when verifying if a cardholder qualifies for a specific Amex Offer.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The cardholder account ID.
      - name: offer_id
        in: body
        type: string
        description: The Amex Offer identifier.
      call: amex-offers.check-eligibility
      with:
        account_id: '{{account_id}}'
        offer_id: '{{offer_id}}'
      outputParameters:
      - name: eligible
        type: boolean
        mapping: $.eligible
      - name: reason
        type: string
        mapping: $.reason
      - name: offer_name
        type: string
        mapping: $.offer_name
  consumes:
  - namespace: amex-offers
    type: http
    baseUri: https://api.americanexpress.com/v1/offers
    authentication:
      type: bearer
      token: $secrets.amex_offers_token
    resources:
    - name: eligibility
      path: /offers/{offer_id}/eligibility/{account_id}
      inputParameters:
      - name: account_id
        in: path
      - name: offer_id
        in: path
      operations:
      - name: check-eligibility
        method: GET
Open in Framework → View in Fleet → cardholder-offer-eligibility-check.yml

Retrieves the current status, credit limit, and outstanding balance for a cardholder account from the American Express accounts platform.

naftiko: '0.5'
info:
  label: Cardholder Account Status Lookup
  description: Retrieves the current status, credit limit, and outstanding balance for a cardholder account from the American Express accounts platform.
  tags:
  - payments
  - cardholder
  - lookup
  - account-management
capability:
  exposes:
  - type: mcp
    namespace: account-lookup
    port: 8080
    tools:
    - name: get-account-status
      description: Given a cardholder account ID, return the account status, credit limit, current balance, and payment due date. Use when a customer service representative or agent needs to check account standing before processing a request.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The cardholder account ID to look up.
      call: amex-accounts.get-account
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.account_status
      - name: credit_limit
        type: number
        mapping: $.credit_limit
      - name: current_balance
        type: number
        mapping: $.current_balance
      - name: payment_due_date
        type: string
        mapping: $.payment_due_date
  consumes:
  - namespace: amex-accounts
    type: http
    baseUri: https://api.americanexpress.com/v1/accounts
    authentication:
      type: bearer
      token: $secrets.amex_accounts_token
    resources:
    - name: account
      path: /{account_id}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
Open in Framework → View in Fleet → cardholder-account-status-lookup.yml

Deprovisions a terminated employee by deactivating their Okta account, revoking all app assignments, creating a ServiceNow closure ticket, and notifying security via Slack.

naftiko: '0.5'
info:
  label: Okta User Deprovisioning Workflow
  description: Deprovisions a terminated employee by deactivating their Okta account, revoking all app assignments, creating a ServiceNow closure ticket, and notifying security via Slack.
  tags:
  - identity
  - okta
  - servicenow
  - security
  - offboarding
capability:
  exposes:
  - type: mcp
    namespace: okta-deprovision
    port: 8080
    tools:
    - name: deprovision-user
      description: Deactivate an Okta user, revoke app assignments, create a closure ticket, and notify security. Use when an employee is terminated.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: Okta user ID of the terminated employee.
      steps:
      - name: deactivate
        type: call
        call: okta.deactivate-user
        with:
          user_id: '{{user_id}}'
      - name: revoke-apps
        type: call
        call: okta.list-apps
        with:
          user_id: '{{user_id}}'
      - name: create-ticket
        type: call
        call: servicenow.create-request
        with:
          short_description: User deprovisioned — {{user_id}}
          description: 'Okta account deactivated. App assignments revoked: {{revoke-apps.app_count}}.'
      - name: notify-security
        type: call
        call: slack.post-message
        with:
          channel: security-ops
          text: 'User deprovisioned: {{user_id}}. {{revoke-apps.app_count}} app assignments revoked. SNOW: {{create-ticket.number}}'
  consumes:
  - namespace: okta
    type: http
    baseUri: https://americanexpress.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_token
    resources:
    - name: users
      path: /users/{user_id}
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: deactivate-user
        method: POST
      - name: list-apps
        method: GET
  - namespace: servicenow
    type: http
    baseUri: https://americanexpress.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
  - namespace: slack
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → okta-user-deprovisioning-workflow.yml

Detects corporate card expense policy violations, creates a compliance case in Jira, notifies the employee's manager via email, and flags the expense in the expense management system.

naftiko: '0.5'
info:
  label: Corporate Expense Policy Violation Handler
  description: Detects corporate card expense policy violations, creates a compliance case in Jira, notifies the employee's manager via email, and flags the expense in the expense management system.
  tags:
  - corporate
  - compliance
  - jira
  - expense-management
capability:
  exposes:
  - type: mcp
    namespace: expense-compliance
    port: 8080
    tools:
    - name: handle-policy-violation
      description: Flag a policy-violating expense, create a compliance case, and notify the manager. Use when an expense policy violation is detected.
      inputParameters:
      - name: expense_id
        in: body
        type: string
        description: Expense record ID.
      - name: violation_reason
        in: body
        type: string
        description: Reason for the policy violation.
      steps:
      - name: get-expense
        type: call
        call: amex-expenses.get-expense
        with:
          expense_id: '{{expense_id}}'
      - name: flag-violation
        type: call
        call: amex-expenses.flag-expense
        with:
          expense_id: '{{expense_id}}'
          flag: policy-violation
          reason: '{{violation_reason}}'
      - name: create-case
        type: call
        call: jira.create-issue
        with:
          project_key: COMP
          issuetype: Task
          summary: Expense policy violation — {{get-expense.employee_name}}
          description: 'Expense: ${{get-expense.amount}} at {{get-expense.merchant}}. Violation: {{violation_reason}}.'
      - name: notify-manager
        type: call
        call: email.send-email
        with:
          to: '{{get-expense.manager_email}}'
          subject: Expense policy violation flagged
          body: 'An expense by {{get-expense.employee_name}} for ${{get-expense.amount}} has been flagged. Jira: {{create-case.key}}'
  consumes:
  - namespace: amex-expenses
    type: http
    baseUri: https://api.americanexpress.com/v1/expenses
    authentication:
      type: bearer
      token: $secrets.amex_expenses_token
    resources:
    - name: expense
      path: /expenses/{expense_id}
      inputParameters:
      - name: expense_id
        in: path
      operations:
      - name: get-expense
        method: GET
      - name: flag-expense
        method: PUT
  - namespace: jira
    type: http
    baseUri: https://americanexpress.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issue
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - namespace: email
    type: http
    baseUri: https://api.americanexpress.com/v1/notifications
    authentication:
      type: bearer
      token: $secrets.amex_notifications_token
    resources:
    - name: messages
      path: /email/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → corporate-expense-policy-violation-handler.yml

Generates a postmortem for a PagerDuty incident by fetching incident timeline, creating a Confluence postmortem page, and notifying stakeholders via Slack.

naftiko: '0.5'
info:
  label: PagerDuty Incident Postmortem Generator
  description: Generates a postmortem for a PagerDuty incident by fetching incident timeline, creating a Confluence postmortem page, and notifying stakeholders via Slack.
  tags:
  - pagerduty
  - incident-management
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: postmortem-gen
    port: 8080
    tools:
    - name: generate-postmortem
      description: Generate a postmortem document from a PagerDuty incident and share it. Use after an incident is resolved.
      inputParameters:
      - name: incident_id
        in: body
        type: string
        description: PagerDuty incident ID.
      steps:
      - name: get-incident
        type: call
        call: pagerduty.get-incident
        with:
          incident_id: '{{incident_id}}'
      - name: get-timeline
        type: call
        call: pagerduty.get-timeline
        with:
          incident_id: '{{incident_id}}'
      - name: create-postmortem
        type: call
        call: confluence.create-page
        with:
          spaceKey: ENG
          title: 'Postmortem: {{get-incident.title}}'
          body: 'Severity: {{get-incident.urgency}}. Duration: {{get-incident.duration}}. Timeline entries: {{get-timeline.total}}.'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: engineering
          text: 'Postmortem ready: {{get-incident.title}} | Severity: {{get-incident.urgency}} | Doc: {{create-postmortem.url}}'
  consumes:
  - namespace: pagerduty
    type: http
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: incidents
      path: /incidents/{incident_id}
      inputParameters:
      - name: incident_id
        in: path
      operations:
      - name: get-incident
        method: GET
    - name: logs
      path: /incidents/{incident_id}/log_entries
      inputParameters:
      - name: incident_id
        in: path
      operations:
      - name: get-timeline
        method: GET
  - namespace: confluence
    type: http
    baseUri: https://americanexpress.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
  - namespace: slack
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → pagerduty-incident-postmortem-generator.yml

Screens high-value transactions for anti-money laundering by running sanctions checks, creating a compliance review case, and filing a suspicious activity report if needed.

naftiko: '0.5'
info:
  label: AML Transaction Screening Workflow
  description: Screens high-value transactions for anti-money laundering by running sanctions checks, creating a compliance review case, and filing a suspicious activity report if needed.
  tags:
  - compliance
  - aml
  - security
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: aml-screening
    port: 8080
    tools:
    - name: screen-transaction
      description: Screen a transaction for AML, create a compliance case, and file a SAR if warranted. Use when a high-value transaction triggers AML rules.
      inputParameters:
      - name: transaction_id
        in: body
        type: string
        description: Transaction ID to screen.
      - name: amount
        in: body
        type: string
        description: Transaction amount.
      - name: parties
        in: body
        type: string
        description: Comma-separated party names.
      steps:
      - name: screen
        type: call
        call: amex-sanctions.screen-transaction
        with:
          transaction_id: '{{transaction_id}}'
          amount: '{{amount}}'
          parties: '{{parties}}'
      - name: create-review
        type: call
        call: servicenow.create-case
        with:
          short_description: AML screening — txn {{transaction_id}}
          category: aml
          priority: '{{screen.risk_level}}'
          description: 'Screening result: {{screen.result}}. Hit count: {{screen.hit_count}}.'
      - name: file-report
        type: call
        call: amex-sar.file-sar
        with:
          transaction_id: '{{transaction_id}}'
          case_id: '{{create-review.sys_id}}'
          screening_result: '{{screen.result}}'
  consumes:
  - namespace: amex-sanctions
    type: http
    baseUri: https://api.americanexpress.com/v1/sanctions
    authentication:
      type: bearer
      token: $secrets.amex_sanctions_token
    resources:
    - name: screening
      path: /screen
      operations:
      - name: screen-transaction
        method: POST
  - namespace: servicenow
    type: http
    baseUri: https://americanexpress.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cases
      path: /table/sn_compliance_case
      operations:
      - name: create-case
        method: POST
  - namespace: amex-sar
    type: http
    baseUri: https://api.americanexpress.com/v1/sar
    authentication:
      type: bearer
      token: $secrets.amex_sar_token
    resources:
    - name: reports
      path: /reports
      operations:
      - name: file-sar
        method: POST
Open in Framework → View in Fleet → aml-transaction-screening-workflow.yml

Orchestrates employee termination by updating Workday, deactivating Okta, revoking corporate card, and creating a ServiceNow offboarding ticket.

naftiko: '0.5'
info:
  label: Workday Employee Termination Orchestration
  description: Orchestrates employee termination by updating Workday, deactivating Okta, revoking corporate card, and creating a ServiceNow offboarding ticket.
  tags:
  - hr
  - workday
  - okta
  - offboarding
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: termination-ops
    port: 8080
    tools:
    - name: orchestrate-termination
      description: Process an employee termination across all systems. Use when HR initiates an employee separation.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: Workday worker ID.
      - name: okta_user_id
        in: body
        type: string
        description: Okta user ID.
      - name: card_id
        in: body
        type: string
        description: Corporate card ID.
      - name: termination_date
        in: body
        type: string
        description: Last day of employment.
      - name: reason
        in: body
        type: string
        description: Termination reason.
      steps:
      - name: terminate-wd
        type: call
        call: workday.terminate-worker
        with:
          worker_id: '{{worker_id}}'
          termination_date: '{{termination_date}}'
          reason: '{{reason}}'
      - name: deactivate-okta
        type: call
        call: okta.deactivate-user
        with:
          user_id: '{{okta_user_id}}'
      - name: cancel-card
        type: call
        call: amex-corporate.cancel-card
        with:
          card_id: '{{card_id}}'
      - name: create-ticket
        type: call
        call: servicenow.create-request
        with:
          short_description: Offboarding — {{worker_id}}
          description: 'Workday terminated. Okta deactivated. Corporate card cancelled. Termination date: {{termination_date}}.'
  consumes:
  - namespace: workday
    type: http
    baseUri: https://wd3-impl-services1.workday.com/ccx/service/amex
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{worker_id}/terminate
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: terminate-worker
        method: POST
  - namespace: okta
    type: http
    baseUri: https://americanexpress.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_token
    resources:
    - name: users
      path: /users/{user_id}/lifecycle/deactivate
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: deactivate-user
        method: POST
  - namespace: amex-corporate
    type: http
    baseUri: https://api.americanexpress.com/v1/corporate
    authentication:
      type: bearer
      token: $secrets.amex_corporate_token
    resources:
    - name: cards
      path: /cards/{card_id}/cancel
      inputParameters:
      - name: card_id
        in: path
      operations:
      - name: cancel-card
        method: POST
  - namespace: servicenow
    type: http
    baseUri: https://americanexpress.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
Open in Framework → View in Fleet → workday-employee-termination-orchestration.yml

When AWS Cost Explorer detects a spend anomaly above threshold, retrieves the anomaly details, opens a ServiceNow change request, and notifies the cloud FinOps Slack channel.

naftiko: '0.5'
info:
  label: Cloud Cost Anomaly Response
  description: When AWS Cost Explorer detects a spend anomaly above threshold, retrieves the anomaly details, opens a ServiceNow change request, and notifies the cloud FinOps Slack channel.
  tags:
  - cloud
  - finops
  - aws
  - servicenow
  - slack
  - cost-management
capability:
  exposes:
  - type: mcp
    namespace: cloud-finops
    port: 8080
    tools:
    - name: handle-cost-anomaly
      description: Given an AWS cost anomaly ID and the affected service/account, retrieve anomaly details from AWS Cost Explorer, open a ServiceNow change request for cost investigation, and alert the FinOps Slack channel. Invoke when a cost spike exceeds defined thresholds.
      inputParameters:
      - name: anomaly_id
        in: body
        type: string
        description: The AWS Cost Explorer anomaly ID.
      - name: aws_account_id
        in: body
        type: string
        description: The AWS account ID where the anomaly was detected.
      - name: estimated_overage_usd
        in: body
        type: number
        description: Estimated cost overage in USD.
      steps:
      - name: get-anomaly
        type: call
        call: aws-cost.get-anomaly
        with:
          anomaly_id: '{{anomaly_id}}'
      - name: open-change-request
        type: call
        call: servicenow-cloud.create-change
        with:
          category: cloud_cost
          short_description: Cost anomaly on AWS account {{aws_account_id}} — est. overage ${{estimated_overage_usd}}
          description: 'Anomaly ID: {{anomaly_id}}

            Service: {{get-anomaly.service}}

            Root cause hypothesis: {{get-anomaly.root_cause}}

            Impact period: {{get-anomaly.start_date}} to {{get-anomaly.end_date}}'
      - name: post-alert
        type: call
        call: slack-finops.post-message
        with:
          channel: cloud-finops
          text: 'AWS Cost Anomaly | Account: {{aws_account_id}} | Service: {{get-anomaly.service}} | Overage: ${{estimated_overage_usd}} | ServiceNow: {{open-change-request.number}}'
  consumes:
  - namespace: aws-cost
    type: http
    baseUri: https://ce.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_sigv4_auth
      placement: header
    resources:
    - name: anomaly
      path: /GetAnomalies
      operations:
      - name: get-anomaly
        method: POST
  - namespace: servicenow-cloud
    type: http
    baseUri: https://americanexpress.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - namespace: slack-finops
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → cloud-cost-anomaly-response.yml

Rotates TLS certificates for payment gateway endpoints by generating a new certificate, deploying it via Terraform, validating connectivity, and notifying the infrastructure team via Slack.

naftiko: '0.5'
info:
  label: Payment Gateway Certificate Rotation
  description: Rotates TLS certificates for payment gateway endpoints by generating a new certificate, deploying it via Terraform, validating connectivity, and notifying the infrastructure team via Slack.
  tags:
  - security
  - infrastructure
  - terraform
  - slack
capability:
  exposes:
  - type: mcp
    namespace: cert-rotation
    port: 8080
    tools:
    - name: rotate-gateway-cert
      description: Generate a new TLS certificate, deploy via Terraform, validate, and notify the team. Use during scheduled certificate rotation windows.
      inputParameters: []
      steps:
      - name: generate-cert
        type: call
        call: amex-pki.generate-cert
        with:
          domain: gateway.americanexpress.com
          validity_days: '365'
      - name: deploy-cert
        type: call
        call: terraform-cloud.trigger-apply
        with:
          workspace_id: $secrets.tf_gateway_workspace
          message: Cert rotation — {{generate-cert.serial_number}}
      - name: validate
        type: call
        call: amex-gateway.check-health
        with: {}
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: infra-ops
          text: 'TLS cert rotated for gateway.americanexpress.com. Serial: {{generate-cert.serial_number}}. Health: {{validate.status}}'
  consumes:
  - namespace: amex-pki
    type: http
    baseUri: https://api.americanexpress.com/v1/pki
    authentication:
      type: bearer
      token: $secrets.amex_pki_token
    resources:
    - name: certificates
      path: /certificates
      operations:
      - name: generate-cert
        method: POST
  - namespace: terraform-cloud
    type: http
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: runs
      path: /runs
      operations:
      - name: trigger-apply
        method: POST
  - namespace: amex-gateway
    type: http
    baseUri: https://api.americanexpress.com/v1/gateway
    authentication:
      type: bearer
      token: $secrets.amex_gateway_token
    resources:
    - name: health
      path: /health
      operations:
      - name: check-health
        method: GET
  - namespace: slack
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → payment-gateway-certificate-rotation.yml

Routes a vendor invoice through approval by validating the PO in SAP, creating an approval task in ServiceNow, and notifying the approver via Slack.

naftiko: '0.5'
info:
  label: Vendor Invoice Approval Workflow
  description: Routes a vendor invoice through approval by validating the PO in SAP, creating an approval task in ServiceNow, and notifying the approver via Slack.
  tags:
  - finance
  - procurement
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: invoice-approval
    port: 8080
    tools:
    - name: route-invoice-approval
      description: Validate a purchase order, create an approval task, and notify the approver. Use when a vendor invoice requires approval routing.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: Purchase order number.
      - name: vendor_name
        in: body
        type: string
        description: Vendor name.
      - name: invoice_amount
        in: body
        type: string
        description: Invoice amount.
      steps:
      - name: validate-po
        type: call
        call: sap.get-po
        with:
          po_number: '{{po_number}}'
      - name: create-approval
        type: call
        call: servicenow.create-approval
        with:
          source_table: ap_invoice
          approver: '{{validate-po.budget_owner}}'
          state: requested
      - name: notify-approver
        type: call
        call: slack.post-message
        with:
          channel: '{{validate-po.budget_owner_slack}}'
          text: 'Invoice approval needed: PO {{po_number}} | Vendor: {{vendor_name}} | Amount: ${{invoice_amount}} | Approval: {{create-approval.sys_id}}'
  consumes:
  - namespace: sap
    type: http
    baseUri: https://api.americanexpress.com/v1/sap
    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
  - namespace: servicenow
    type: http
    baseUri: https://americanexpress.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: approvals
      path: /table/sysapproval_approver
      operations:
      - name: create-approval
        method: POST
  - namespace: slack
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → vendor-invoice-approval-workflow.yml

Checks the PCI-DSS compliance status of a merchant from the compliance registry.

naftiko: '0.5'
info:
  label: PCI Compliance Status Lookup
  description: Checks the PCI-DSS compliance status of a merchant from the compliance registry.
  tags:
  - compliance
  - merchants
  - security
capability:
  exposes:
  - type: mcp
    namespace: amex-compliance
    port: 8080
    tools:
    - name: get-pci-status
      description: Given a merchant ID, return the PCI-DSS compliance status, last assessment date, and compliance level. Use when verifying merchant security compliance.
      inputParameters:
      - name: merchant_id
        in: body
        type: string
        description: The merchant identifier.
      call: amex-compliance.get-pci-status
      with:
        merchant_id: '{{merchant_id}}'
      outputParameters:
      - name: compliant
        type: boolean
        mapping: $.compliant
      - name: last_assessment
        type: string
        mapping: $.last_assessment
      - name: level
        type: string
        mapping: $.level
  consumes:
  - namespace: amex-compliance
    type: http
    baseUri: https://api.americanexpress.com/v1/compliance
    authentication:
      type: bearer
      token: $secrets.amex_compliance_token
    resources:
    - name: pci-status
      path: /merchants/{merchant_id}/pci-status
      inputParameters:
      - name: merchant_id
        in: path
      operations:
      - name: get-pci-status
        method: GET
Open in Framework → View in Fleet → pci-compliance-status-lookup.yml

Provisions Tableau dashboard access for a user by verifying their role in Okta, adding them to the Tableau site, and confirming via email.

naftiko: '0.5'
info:
  label: Tableau Dashboard Access Provisioning
  description: Provisions Tableau dashboard access for a user by verifying their role in Okta, adding them to the Tableau site, and confirming via email.
  tags:
  - tableau
  - okta
  - access-management
  - email
capability:
  exposes:
  - type: mcp
    namespace: tableau-access
    port: 8080
    tools:
    - name: provision-tableau-access
      description: Verify a user's role and provision Tableau access. Use when a user requests dashboard access.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: Okta user ID.
      - name: tableau_role
        in: body
        type: string
        description: Tableau site role (Viewer, Explorer, Creator).
      steps:
      - name: verify-role
        type: call
        call: okta.get-user
        with:
          user_id: '{{user_id}}'
      - name: add-to-tableau
        type: call
        call: tableau.add-user
        with:
          site_id: $secrets.tableau_site_id
          email: '{{verify-role.profile.email}}'
          role: '{{tableau_role}}'
      - name: confirm
        type: call
        call: email.send-email
        with:
          to: '{{verify-role.profile.email}}'
          subject: Tableau access granted
          body: You now have {{tableau_role}} access to the Tableau site. Login at https://americanexpress.online.tableau.com
  consumes:
  - namespace: okta
    type: http
    baseUri: https://americanexpress.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_token
    resources:
    - name: users
      path: /users/{user_id}
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: get-user
        method: GET
  - namespace: tableau
    type: http
    baseUri: https://americanexpress.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: users
      path: /sites/{site_id}/users
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: add-user
        method: POST
  - namespace: email
    type: http
    baseUri: https://api.americanexpress.com/v1/notifications
    authentication:
      type: bearer
      token: $secrets.amex_notifications_token
    resources:
    - name: messages
      path: /email/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → tableau-dashboard-access-provisioning.yml

Retrieves weekly campaign performance metrics from Adobe Analytics and posts a formatted digest to the marketing Slack channel and Microsoft Teams marketing hub.

naftiko: '0.5'
info:
  label: Marketing Campaign Performance Digest
  description: Retrieves weekly campaign performance metrics from Adobe Analytics and posts a formatted digest to the marketing Slack channel and Microsoft Teams marketing hub.
  tags:
  - marketing
  - adobe-analytics
  - slack
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: marketing-reporting
    port: 8080
    tools:
    - name: digest-campaign-performance
      description: Given an Adobe Analytics report suite ID and date range, retrieve campaign performance metrics (impressions, clicks, conversions) and post a summary digest to the marketing Slack channel and Teams. Use for weekly or monthly campaign performance reviews.
      inputParameters:
      - name: report_suite_id
        in: body
        type: string
        description: The Adobe Analytics report suite ID to query.
      - name: from_date
        in: body
        type: string
        description: Start date for the performance period in YYYY-MM-DD format.
      - name: to_date
        in: body
        type: string
        description: End date for the performance period in YYYY-MM-DD format.
      steps:
      - name: get-metrics
        type: call
        call: adobe-analytics.get-report
        with:
          report_suite_id: '{{report_suite_id}}'
          date_from: '{{from_date}}'
          date_to: '{{to_date}}'
          metrics: pageviews,visits,orders,revenue
      - name: post-slack-digest
        type: call
        call: slack-marketing.post-message
        with:
          channel: marketing-performance
          text: 'Campaign Performance {{from_date}} to {{to_date}} | Visits: {{get-metrics.visits}} | Conversions: {{get-metrics.orders}} | Revenue: ${{get-metrics.revenue}}'
      - name: post-teams-digest
        type: call
        call: msteams-marketing.post-channel-message
        with:
          channel_id: $secrets.teams_marketing_channel_id
          content: 'Weekly Campaign Summary ({{from_date}} — {{to_date}})

            Visits: {{get-metrics.visits}}

            Orders: {{get-metrics.orders}}

            Revenue: ${{get-metrics.revenue}}'
  consumes:
  - namespace: adobe-analytics
    type: http
    baseUri: https://analytics.adobe.io/api
    authentication:
      type: bearer
      token: $secrets.adobe_analytics_token
    resources:
    - name: report
      path: /{global_company_id}/reports
      inputParameters:
      - name: global_company_id
        in: path
      operations:
      - name: get-report
        method: POST
  - namespace: slack-marketing
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
  - namespace: msteams-marketing
    type: http
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-message
      path: /teams/{team_id}/channels/{channel_id}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → marketing-campaign-performance-digest.yml

Retrieves the current status of a merchant onboarding application from the merchant services platform and returns structured status details.

naftiko: '0.5'
info:
  label: Merchant Onboarding Application Status Check
  description: Retrieves the current status of a merchant onboarding application from the merchant services platform and returns structured status details.
  tags:
  - merchant-services
  - onboarding
  - payments
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: merchant-onboarding
    port: 8080
    tools:
    - name: get-merchant-application-status
      description: Given a merchant application ID, return the current onboarding status, review stage, and any pending requirements. Use when a merchant services agent needs to check where an application stands.
      inputParameters:
      - name: application_id
        in: body
        type: string
        description: The merchant onboarding application ID issued at submission.
      call: amex-merchant.get-application
      with:
        application_id: '{{application_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: review_stage
        type: string
        mapping: $.review_stage
      - name: pending_items
        type: array
        mapping: $.pending_items
  consumes:
  - namespace: amex-merchant
    type: http
    baseUri: https://api.americanexpress.com/v1/merchant-services
    authentication:
      type: bearer
      token: $secrets.amex_merchant_token
    resources:
    - name: application
      path: /applications/{application_id}
      inputParameters:
      - name: application_id
        in: path
      operations:
      - name: get-application
        method: GET
Open in Framework → View in Fleet → merchant-onboarding-application-status-check.yml

Generates a merchant renewal pipeline digest by querying Salesforce opportunities, summarizing in Snowflake, and distributing via Slack.

naftiko: '0.5'
info:
  label: Salesforce Renewal Pipeline Digest
  description: Generates a merchant renewal pipeline digest by querying Salesforce opportunities, summarizing in Snowflake, and distributing via Slack.
  tags:
  - salesforce
  - renewals
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: renewal-digest
    port: 8080
    tools:
    - name: generate-renewal-digest
      description: Summarize the renewal pipeline and share with the team. Use for weekly pipeline reviews.
      inputParameters: []
      steps:
      - name: get-renewals
        type: call
        call: salesforce.run-soql
        with:
          q: SELECT Name, Amount, CloseDate FROM Opportunity WHERE StageName='Renewal' AND CloseDate=THIS_QUARTER
      - name: summarize
        type: call
        call: snowflake.run-query
        with:
          query: SELECT COUNT(*) as total, SUM(amount) as pipeline_value FROM SALES_DB.PUBLIC.RENEWAL_PIPELINE WHERE quarter=CURRENT_QUARTER()
      - name: post-digest
        type: call
        call: slack.post-message
        with:
          channel: merchant-renewals
          text: 'Renewal pipeline: {{summarize.total}} renewals | ${{summarize.pipeline_value}} | Details in Salesforce'
  consumes:
  - namespace: salesforce
    type: http
    baseUri: https://americanexpress.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query
      operations:
      - name: run-soql
        method: GET
  - namespace: snowflake
    type: http
    baseUri: https://americanexpress.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - namespace: slack
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-renewal-pipeline-digest.yml

Triggers the annual performance review cycle in Workday for a specified business unit and sends a Microsoft Teams notification to all managers in that unit.

naftiko: '0.5'
info:
  label: Employee Performance Review Cycle Initiation
  description: Triggers the annual performance review cycle in Workday for a specified business unit and sends a Microsoft Teams notification to all managers in that unit.
  tags:
  - hr
  - performance-management
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: performance-hr
    port: 8080
    tools:
    - name: initiate-performance-review
      description: Given a Workday business unit ID and review period, trigger the performance review process in Workday and send a Teams notification to all managers in the unit with instructions. Use at the start of annual or mid-year review cycles.
      inputParameters:
      - name: business_unit_id
        in: body
        type: string
        description: The Workday business unit ID for which to initiate the review cycle.
      - name: review_period
        in: body
        type: string
        description: The review period label (e.g., 2026-Annual, 2026-MidYear).
      - name: due_date
        in: body
        type: string
        description: The deadline for review completion in YYYY-MM-DD format.
      steps:
      - name: start-review-process
        type: call
        call: workday-perf.initiate-review
        with:
          business_unit_id: '{{business_unit_id}}'
          review_period: '{{review_period}}'
          due_date: '{{due_date}}'
      - name: notify-managers
        type: call
        call: msteams-hr.post-channel-message
        with:
          channel_id: $secrets.teams_managers_channel_id
          content: 'The {{review_period}} performance review cycle has been initiated. Please complete reviews for your direct reports by {{due_date}}. Process ID: {{start-review-process.process_id}}'
  consumes:
  - namespace: workday-perf
    type: http
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_access_token
    resources:
    - name: review
      path: /performanceReviews
      operations:
      - name: initiate-review
        method: POST
  - namespace: msteams-hr
    type: http
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-message
      path: /teams/{team_id}/channels/{channel_id}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → employee-performance-review-cycle-initiation.yml

Responds to CloudWatch alarms for Lambda error spikes by fetching error logs, creating a PagerDuty incident, and posting diagnostics to Slack.

naftiko: '0.5'
info:
  label: CloudWatch Lambda Error Spike Response
  description: Responds to CloudWatch alarms for Lambda error spikes by fetching error logs, creating a PagerDuty incident, and posting diagnostics to Slack.
  tags:
  - aws
  - cloudwatch
  - lambda
  - pagerduty
  - slack
capability:
  exposes:
  - type: mcp
    namespace: lambda-errors
    port: 8080
    tools:
    - name: respond-lambda-errors
      description: Fetch Lambda error logs, page on-call, and post diagnostics. Use when CloudWatch detects an error spike in a Lambda function.
      inputParameters:
      - name: function_name
        in: body
        type: string
        description: AWS Lambda function name.
      steps:
      - name: get-errors
        type: call
        call: cloudwatch.get-log-events
        with:
          logGroupName: /aws/lambda/{{function_name}}
          filterPattern: ERROR
          limit: '25'
      - name: page-team
        type: call
        call: pagerduty.create-incident
        with:
          title: 'Lambda error spike: {{function_name}}'
          service_id: $secrets.pd_lambda_service_id
          urgency: high
      - name: post-diagnostics
        type: call
        call: slack.post-message
        with:
          channel: serverless-ops
          text: 'Lambda error spike: {{function_name}} | Errors: {{get-errors.event_count}} | PD: {{page-team.incident_number}} | Latest: {{get-errors.events[0].message}}'
  consumes:
  - namespace: cloudwatch
    type: http
    baseUri: https://logs.us-east-1.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_token
    resources:
    - name: logs
      path: /
      operations:
      - name: get-log-events
        method: POST
  - namespace: pagerduty
    type: http
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
  - namespace: slack
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → cloudwatch-lambda-error-spike-response.yml

When CrowdStrike detects a suspicious login event for a privileged account, suspends the Okta user session, opens a ServiceNow security incident, and alerts the SOC Slack channel.

naftiko: '0.5'
info:
  label: Suspicious Login Threat Response
  description: When CrowdStrike detects a suspicious login event for a privileged account, suspends the Okta user session, opens a ServiceNow security incident, and alerts the SOC Slack channel.
  tags:
  - security
  - crowdstrike
  - okta
  - servicenow
  - slack
  - identity
  - threat-response
capability:
  exposes:
  - type: mcp
    namespace: soc-response
    port: 8080
    tools:
    - name: respond-to-suspicious-login
      description: Given a CrowdStrike detection ID and the affected user's email, retrieve detection details, suspend the user's Okta sessions, open a ServiceNow security incident, and alert the SOC Slack channel. Use for privileged account compromise response.
      inputParameters:
      - name: detection_id
        in: body
        type: string
        description: The CrowdStrike Falcon detection ID for the suspicious login event.
      - name: user_email
        in: body
        type: string
        description: The email address of the account flagged in the detection.
      steps:
      - name: get-detection
        type: call
        call: crowdstrike.get-detection
        with:
          detection_id: '{{detection_id}}'
      - name: get-okta-user
        type: call
        call: okta-soc.get-user-by-login
        with:
          login: '{{user_email}}'
      - name: clear-sessions
        type: call
        call: okta-sessions.clear-user-sessions
        with:
          user_id: '{{get-okta-user.id}}'
      - name: create-sec-incident
        type: call
        call: servicenow-soc.create-incident
        with:
          category: security
          subcategory: suspicious_login
          short_description: Suspicious login detected for {{user_email}}
          description: 'CrowdStrike Detection: {{detection_id}}

            User: {{user_email}}

            Okta sessions cleared: true

            Detection details: {{get-detection.description}}'
          urgency: '1'
          impact: '2'
      - name: alert-soc
        type: call
        call: slack-soc.post-message
        with:
          channel: soc-alerts
          text: 'Suspicious Login Response | User: {{user_email}} | Detection: {{detection_id}} | Okta sessions cleared | SNOW: {{create-sec-incident.number}}'
  consumes:
  - namespace: crowdstrike
    type: http
    baseUri: https://api.crowdstrike.com
    authentication:
      type: bearer
      token: $secrets.crowdstrike_access_token
    resources:
    - name: detection
      path: /detects/entities/detect/v2
      operations:
      - name: get-detection
        method: GET
  - namespace: okta-soc
    type: http
    baseUri: https://americanexpress.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: user
      path: /users/{login}
      inputParameters:
      - name: login
        in: path
      operations:
      - name: get-user-by-login
        method: GET
  - namespace: okta-sessions
    type: http
    baseUri: https://americanexpress.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: user-sessions
      path: /users/{user_id}/sessions
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: clear-user-sessions
        method: DELETE
  - namespace: servicenow-soc
    type: http
    baseUri: https://americanexpress.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incident
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - namespace: slack-soc
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → suspicious-login-threat-response.yml

Looks up a merchant category code and returns its description and risk classification from the merchant data service.

naftiko: '0.5'
info:
  label: Merchant Category Code Lookup
  description: Looks up a merchant category code and returns its description and risk classification from the merchant data service.
  tags:
  - merchants
  - payments
  - data
capability:
  exposes:
  - type: mcp
    namespace: amex-merchant-data
    port: 8080
    tools:
    - name: get-mcc
      description: Given a merchant category code, return its description, risk level, and category. Use when classifying merchant transactions.
      inputParameters:
      - name: mcc_code
        in: body
        type: string
        description: The merchant category code to look up.
      call: amex-merchant-data.get-mcc
      with:
        mcc_code: '{{mcc_code}}'
      outputParameters:
      - name: description
        type: string
        mapping: $.description
      - name: risk_level
        type: string
        mapping: $.risk_level
      - name: category
        type: string
        mapping: $.category
  consumes:
  - namespace: amex-merchant-data
    type: http
    baseUri: https://api.americanexpress.com/v1/merchants
    authentication:
      type: bearer
      token: $secrets.amex_merchant_token
    resources:
    - name: mcc
      path: /mcc/{mcc_code}
      inputParameters:
      - name: mcc_code
        in: path
      operations:
      - name: get-mcc
        method: GET
Open in Framework → View in Fleet → merchant-category-code-lookup.yml

Checks whether a cardholder has active travel notifications on file and returns destination and date ranges.

naftiko: '0.5'
info:
  label: Cardholder Travel Notification Status
  description: Checks whether a cardholder has active travel notifications on file and returns destination and date ranges.
  tags:
  - cardholder
  - travel
  - notifications
capability:
  exposes:
  - type: mcp
    namespace: amex-travel
    port: 8080
    tools:
    - name: get-travel-notifications
      description: Given a cardholder account ID, return active travel notifications including destinations and dates. Use when verifying travel alerts before flagging foreign transactions.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The cardholder account ID.
      call: amex-travel.get-travel-notifications
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: notifications
        type: array
        mapping: $.notifications
      - name: active_count
        type: number
        mapping: $.active_count
  consumes:
  - namespace: amex-travel
    type: http
    baseUri: https://api.americanexpress.com/v1/travel
    authentication:
      type: bearer
      token: $secrets.amex_travel_token
    resources:
    - name: notifications
      path: /accounts/{account_id}/travel-notifications
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-travel-notifications
        method: GET
Open in Framework → View in Fleet → cardholder-travel-notification-status.yml

Pulls a headcount snapshot from Workday by department and pushes the data to Snowflake for aggregation in workforce analytics dashboards.

naftiko: '0.5'
info:
  label: Headcount Reporting Snapshot
  description: Pulls a headcount snapshot from Workday by department and pushes the data to Snowflake for aggregation in workforce analytics dashboards.
  tags:
  - hr
  - workforce-analytics
  - workday
  - snowflake
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: hr-reporting
    port: 8080
    tools:
    - name: publish-headcount-snapshot
      description: Given a department ID and reporting period, retrieve headcount data from Workday and insert a snapshot record into the Snowflake workforce analytics table. Use for monthly headcount reporting and workforce planning.
      inputParameters:
      - name: department_id
        in: body
        type: string
        description: The Workday department ID to pull headcount data for.
      - name: reporting_period
        in: body
        type: string
        description: The reporting period in YYYY-MM format (e.g., 2026-03).
      steps:
      - name: get-headcount
        type: call
        call: workday-hr.get-headcount
        with:
          department_id: '{{department_id}}'
          as_of_date: '{{reporting_period}}'
      - name: insert-snapshot
        type: call
        call: snowflake-hr.insert-headcount
        with:
          department_id: '{{department_id}}'
          period: '{{reporting_period}}'
          headcount: '{{get-headcount.total_headcount}}'
          fte_count: '{{get-headcount.fte_count}}'
          contractor_count: '{{get-headcount.contractor_count}}'
  consumes:
  - namespace: workday-hr
    type: http
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_access_token
    resources:
    - name: headcount
      path: /organizations/{department_id}/headcount
      inputParameters:
      - name: department_id
        in: path
      operations:
      - name: get-headcount
        method: GET
  - namespace: snowflake-hr
    type: http
    baseUri: https://americanexpress.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: headcount
      path: /statements
      operations:
      - name: insert-headcount
        method: POST
Open in Framework → View in Fleet → headcount-reporting-snapshot.yml

Launches a targeted Amex Offers campaign by querying eligible cardholders in Snowflake, creating the offer in the offers platform, and triggering email notifications via Adobe Campaign.

naftiko: '0.5'
info:
  label: Amex Offer Activation Campaign
  description: Launches a targeted Amex Offers campaign by querying eligible cardholders in Snowflake, creating the offer in the offers platform, and triggering email notifications via Adobe Campaign.
  tags:
  - offers
  - marketing
  - snowflake
  - adobe-campaign
capability:
  exposes:
  - type: mcp
    namespace: offer-campaigns
    port: 8080
    tools:
    - name: launch-offer-campaign
      description: Find eligible cardholders, create an offer, and trigger the email campaign. Use when launching a new Amex Offers promotion.
      inputParameters:
      - name: offer_name
        in: body
        type: string
        description: Name of the Amex Offer.
      - name: merchant_id
        in: body
        type: string
        description: Participating merchant ID.
      - name: discount_percent
        in: body
        type: string
        description: Discount percentage.
      - name: target_segment
        in: body
        type: string
        description: Target cardholder segment.
      - name: campaign_template_id
        in: body
        type: string
        description: Adobe Campaign template ID.
      steps:
      - name: find-eligible
        type: call
        call: snowflake.run-query
        with:
          query: SELECT account_id FROM MARKETING_DB.PUBLIC.CARDHOLDER_SEGMENTS WHERE segment='{{target_segment}}' AND eligible=TRUE
      - name: create-offer
        type: call
        call: amex-offers.create-offer
        with:
          name: '{{offer_name}}'
          merchant_id: '{{merchant_id}}'
          discount: '{{discount_percent}}'
          segment: '{{target_segment}}'
      - name: trigger-emails
        type: call
        call: adobe-campaign.trigger-campaign
        with:
          campaign_id: '{{campaign_template_id}}'
          offer_id: '{{create-offer.offer_id}}'
          audience_count: '{{find-eligible.row_count}}'
  consumes:
  - namespace: snowflake
    type: http
    baseUri: https://americanexpress.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - namespace: amex-offers
    type: http
    baseUri: https://api.americanexpress.com/v1/offers
    authentication:
      type: bearer
      token: $secrets.amex_offers_token
    resources:
    - name: offers
      path: /offers
      operations:
      - name: create-offer
        method: POST
  - namespace: adobe-campaign
    type: http
    baseUri: https://mc.adobe.io/americanexpress/campaign
    authentication:
      type: bearer
      token: $secrets.adobe_campaign_token
    resources:
    - name: campaigns
      path: /campaigns
      operations:
      - name: trigger-campaign
        method: POST
Open in Framework → View in Fleet → amex-offer-activation-campaign.yml

Generates a campaign ROI report by pulling performance data from Google Analytics, enriching with spend data from Snowflake, and distributing via email.

naftiko: '0.5'
info:
  label: Google Analytics Campaign ROI Report
  description: Generates a campaign ROI report by pulling performance data from Google Analytics, enriching with spend data from Snowflake, and distributing via email.
  tags:
  - google-analytics
  - marketing
  - snowflake
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: campaign-roi
    port: 8080
    tools:
    - name: generate-roi-report
      description: Pull campaign performance, enrich with spend data, and distribute. Use for periodic campaign reporting.
      inputParameters:
      - name: ga_property_id
        in: body
        type: string
        description: Google Analytics property ID.
      - name: date_range
        in: body
        type: string
        description: Date range for the report.
      steps:
      - name: get-performance
        type: call
        call: google-analytics.run-report
        with:
          property_id: '{{ga_property_id}}'
          dateRange: '{{date_range}}'
      - name: get-spend
        type: call
        call: snowflake.run-query
        with:
          query: SELECT SUM(spend) as total_spend FROM MARKETING_DB.PUBLIC.CAMPAIGN_SPEND WHERE date_range='{{date_range}}'
      - name: distribute
        type: call
        call: email.send-email
        with:
          to: marketing-leadership@americanexpress.com
          subject: Campaign ROI Report — {{date_range}}
          body: 'Sessions: {{get-performance.totals.sessions}}. Conversions: {{get-performance.totals.conversions}}. Revenue: ${{get-performance.totals.revenue}}. Spend: ${{get-spend.total_spend}}.'
  consumes:
  - namespace: google-analytics
    type: http
    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
  - namespace: snowflake
    type: http
    baseUri: https://americanexpress.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - namespace: email
    type: http
    baseUri: https://api.americanexpress.com/v1/notifications
    authentication:
      type: bearer
      token: $secrets.amex_notifications_token
    resources:
    - name: messages
      path: /email/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → google-analytics-campaign-roi-report.yml

Pulls approved corporate card transactions from SAP Concur and posts summarized expense entries to SAP S/4HANA for financial reconciliation.

naftiko: '0.5'
info:
  label: Corporate Card Expense Report Sync
  description: Pulls approved corporate card transactions from SAP Concur and posts summarized expense entries to SAP S/4HANA for financial reconciliation.
  tags:
  - finance
  - expense-management
  - sap-concur
  - sap-s4hana
  - reconciliation
capability:
  exposes:
  - type: mcp
    namespace: expense-finance
    port: 8080
    tools:
    - name: sync-expense-report
      description: Given a Concur expense report ID, fetch the approved report and post each line item as a journal entry in SAP S/4HANA. Use when corporate card expenses need to be reconciled in the general ledger.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The SAP Concur expense report ID to sync.
      - name: company_code
        in: body
        type: string
        description: The SAP S/4HANA company code for posting journal entries (e.g., 1000).
      steps:
      - name: get-report
        type: call
        call: concur.get-expense-report
        with:
          report_id: '{{report_id}}'
      - name: post-journal
        type: call
        call: s4hana.post-journal-entry
        with:
          company_code: '{{company_code}}'
          amount: '{{get-report.total_amount}}'
          currency: '{{get-report.currency_code}}'
          cost_center: '{{get-report.cost_center}}'
          reference: '{{report_id}}'
  consumes:
  - namespace: concur
    type: http
    baseUri: https://www.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_access_token
    resources:
    - name: expense-report
      path: /expense/reports/{report_id}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-expense-report
        method: GET
  - namespace: s4hana
    type: http
    baseUri: https://americanexpress-s4.sap.com/sap/opu/odata/sap/API_JOURNALENTRYITEMBASIC_SRV
    authentication:
      type: basic
      username: $secrets.s4hana_user
      password: $secrets.s4hana_password
    resources:
    - name: journal-entry
      path: /JournalEntryItemBasic
      operations:
      - name: post-journal-entry
        method: POST
Open in Framework → View in Fleet → corporate-card-expense-report-sync.yml

Retrieves a compliance document from SharePoint, submits it to Anthropic Claude for key obligation extraction, and posts the summary to the Legal & Compliance Teams channel.

naftiko: '0.5'
info:
  label: Regulatory Compliance Document Summarization
  description: Retrieves a compliance document from SharePoint, submits it to Anthropic Claude for key obligation extraction, and posts the summary to the Legal & Compliance Teams channel.
  tags:
  - compliance
  - legal
  - sharepoint
  - anthropic
  - ai
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: compliance-ai
    port: 8080
    tools:
    - name: summarize-compliance-doc
      description: Given a SharePoint document site ID and file path, retrieve the document, send it to Anthropic Claude to extract key regulatory obligations and risk items, and post the summary to a Teams channel. Use when legal or compliance teams need rapid document triage.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: The SharePoint site ID where the compliance document is stored.
      - name: file_path
        in: body
        type: string
        description: The relative file path of the document within the SharePoint site.
      - name: teams_channel_id
        in: body
        type: string
        description: The Microsoft Teams channel ID to post the summary to.
      steps:
      - name: get-document
        type: call
        call: sharepoint.get-file-content
        with:
          site_id: '{{site_id}}'
          file_path: '{{file_path}}'
      - name: extract-obligations
        type: call
        call: anthropic.create-message
        with:
          model: claude-opus-4-5
          prompt: 'You are a regulatory compliance analyst. Extract and list: (1) key obligations, (2) compliance deadlines, (3) risk areas from this document. Be concise. Document: {{get-document.content}}'
      - name: post-to-teams
        type: call
        call: msteams-compliance.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          content: 'Compliance Summary for {{file_path}}:


            {{extract-obligations.content}}'
  consumes:
  - namespace: sharepoint
    type: http
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: file-content
      path: /sites/{site_id}/drive/root:/{file_path}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: get-file-content
        method: GET
  - namespace: anthropic
    type: http
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: message
      path: /messages
      operations:
      - name: create-message
        method: POST
  - namespace: msteams-compliance
    type: http
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-message
      path: /teams/{team_id}/channels/{channel_id}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → regulatory-compliance-document-summarization.yml

Provisions corporate cards in bulk by reading employee data from Workday, creating card accounts, and sending activation instructions via email.

naftiko: '0.5'
info:
  label: Corporate Card Bulk Provisioning
  description: Provisions corporate cards in bulk by reading employee data from Workday, creating card accounts, and sending activation instructions via email.
  tags:
  - corporate
  - cards
  - workday
  - onboarding
capability:
  exposes:
  - type: mcp
    namespace: bulk-provision
    port: 8080
    tools:
    - name: bulk-provision-cards
      description: Provision corporate cards for a department by pulling employees from Workday and creating card accounts. Use during new department onboarding.
      inputParameters:
      - name: department
        in: body
        type: string
        description: Department name.
      - name: card_program
        in: body
        type: string
        description: Corporate card program ID.
      - name: spending_limit
        in: body
        type: string
        description: Default spending limit.
      - name: distribution_list
        in: body
        type: string
        description: Distribution list email.
      steps:
      - name: get-employees
        type: call
        call: workday.get-workers
        with:
          department: '{{department}}'
          status: active
      - name: provision-cards
        type: call
        call: amex-corporate.bulk-provision
        with:
          employees: '{{get-employees.workers}}'
          card_program: '{{card_program}}'
          spending_limit: '{{spending_limit}}'
      - name: send-instructions
        type: call
        call: email.send-email
        with:
          to: '{{distribution_list}}'
          subject: Corporate Amex cards provisioned
          body: '{{provision-cards.provisioned_count}} cards provisioned for {{department}}. Employees will receive activation instructions individually.'
  consumes:
  - namespace: workday
    type: http
    baseUri: https://wd3-impl-services1.workday.com/ccx/service/amex
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers
      operations:
      - name: get-workers
        method: GET
  - namespace: amex-corporate
    type: http
    baseUri: https://api.americanexpress.com/v1/corporate
    authentication:
      type: bearer
      token: $secrets.amex_corporate_token
    resources:
    - name: cards
      path: /cards/bulk-provision
      operations:
      - name: bulk-provision
        method: POST
  - namespace: email
    type: http
    baseUri: https://api.americanexpress.com/v1/notifications
    authentication:
      type: bearer
      token: $secrets.amex_notifications_token
    resources:
    - name: messages
      path: /email/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → corporate-card-bulk-provisioning.yml

Monitors Bloomberg market data feeds for significant movements, creates an alert in ServiceNow, and notifies the trading desk via Slack with context from Snowflake analytics.

naftiko: '0.5'
info:
  label: Bloomberg Market Data Alert Workflow
  description: Monitors Bloomberg market data feeds for significant movements, creates an alert in ServiceNow, and notifies the trading desk via Slack with context from Snowflake analytics.
  tags:
  - bloomberg
  - market-data
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: market-alerts
    port: 8080
    tools:
    - name: process-market-alert
      description: Process a market data movement by calculating exposure, creating an incident, and alerting the desk. Use when Bloomberg detects significant price movements.
      inputParameters:
      - name: dataset
        in: body
        type: string
        description: Bloomberg dataset identifier.
      - name: securities
        in: body
        type: string
        description: Comma-separated security identifiers.
      steps:
      - name: get-data
        type: call
        call: bloomberg.get-market-data
        with:
          dataset: '{{dataset}}'
          securities: '{{securities}}'
      - name: get-exposure
        type: call
        call: snowflake.run-query
        with:
          query: SELECT SUM(notional) as exposure FROM TREASURY_DB.PUBLIC.POSITIONS WHERE security IN ('{{securities}}')
      - name: create-alert
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Market movement alert: {{securities}}'
          category: market-risk
          description: 'Movement: {{get-data.change_pct}}%. Exposure: ${{get-exposure.exposure}}.'
      - name: notify-desk
        type: call
        call: slack.post-message
        with:
          channel: trading-desk
          text: 'Market alert: {{securities}} moved {{get-data.change_pct}}%. Our exposure: ${{get-exposure.exposure}}. SNOW: {{create-alert.number}}'
  consumes:
  - namespace: bloomberg
    type: http
    baseUri: https://api.bloomberg.com/eap/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: data
      path: /data/{dataset}
      inputParameters:
      - name: dataset
        in: path
      operations:
      - name: get-market-data
        method: GET
  - namespace: snowflake
    type: http
    baseUri: https://americanexpress.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - namespace: servicenow
    type: http
    baseUri: https://americanexpress.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - namespace: slack
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → bloomberg-market-data-alert-workflow.yml

When a Salesforce opportunity for a new corporate card program is marked Closed-Won, creates the program account in the corporate card platform and sends confirmation to the sales rep via email.

naftiko: '0.5'
info:
  label: Salesforce Opportunity to Card Program Sync
  description: When a Salesforce opportunity for a new corporate card program is marked Closed-Won, creates the program account in the corporate card platform and sends confirmation to the sales rep via email.
  tags:
  - sales
  - crm
  - salesforce
  - payments
  - corporate-cards
capability:
  exposes:
  - type: mcp
    namespace: sales-card-sync
    port: 8080
    tools:
    - name: activate-card-program
      description: Given a Salesforce opportunity ID for a closed-won corporate card program deal, retrieve opportunity details, create the card program account, and notify the responsible sales representative. Use when a B2B card program deal is won and needs activation.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID for the closed-won card program.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce-crm.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: create-program
        type: call
        call: amex-programs.create-program
        with:
          company_name: '{{get-opportunity.account_name}}'
          credit_limit: '{{get-opportunity.amount}}'
          billing_contact_email: '{{get-opportunity.billing_email}}'
          program_type: corporate_card
      - name: notify-rep
        type: call
        call: salesforce-email.send-email
        with:
          to: '{{get-opportunity.owner_email}}'
          subject: Card program activated for {{get-opportunity.account_name}}
          body: 'The corporate card program for {{get-opportunity.account_name}} has been activated. Program ID: {{create-program.program_id}}.'
  consumes:
  - namespace: salesforce-crm
    type: http
    baseUri: https://americanexpress.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: opportunity
      path: /sobjects/Opportunity/{opportunity_id}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
  - namespace: amex-programs
    type: http
    baseUri: https://api.americanexpress.com/v1/corporate
    authentication:
      type: bearer
      token: $secrets.amex_corp_token
    resources:
    - name: program
      path: /programs
      operations:
      - name: create-program
        method: POST
  - namespace: salesforce-email
    type: http
    baseUri: https://americanexpress.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: email
      path: /actions/standard/emailSimple
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → salesforce-opportunity-to-card-program-sync.yml

Recovers from a Snowflake data pipeline failure by checking pipeline status, retrying the failed task, creating a ServiceNow incident, and notifying the data engineering team via Slack.

naftiko: '0.5'
info:
  label: Snowflake Data Pipeline Failure Recovery
  description: Recovers from a Snowflake data pipeline failure by checking pipeline status, retrying the failed task, creating a ServiceNow incident, and notifying the data engineering team via Slack.
  tags:
  - snowflake
  - data-engineering
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: pipeline-recovery
    port: 8080
    tools:
    - name: recover-pipeline
      description: Check a failed Snowflake pipeline, retry execution, create an incident, and notify the team. Use when a data pipeline task fails.
      inputParameters:
      - name: task_name
        in: body
        type: string
        description: Snowflake task name.
      steps:
      - name: check-status
        type: call
        call: snowflake.run-query
        with:
          query: SELECT * FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY()) WHERE NAME='{{task_name}}' AND STATE='FAILED' ORDER BY SCHEDULED_TIME DESC LIMIT 1
      - name: retry-task
        type: call
        call: snowflake.run-query
        with:
          query: EXECUTE TASK {{task_name}}
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Snowflake pipeline failure: {{task_name}}'
          category: data-engineering
          priority: '2'
          description: 'Task {{task_name}} failed. Error: {{check-status.error_message}}. Retry initiated.'
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: data-engineering
          text: 'Pipeline failure: {{task_name}}. Error: {{check-status.error_message}}. Retry initiated. SNOW: {{create-incident.number}}'
  consumes:
  - namespace: snowflake
    type: http
    baseUri: https://americanexpress.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - namespace: servicenow
    type: http
    baseUri: https://americanexpress.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - namespace: slack
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → snowflake-data-pipeline-failure-recovery.yml

Performs merchant risk assessment by aggregating transaction data from Snowflake, running a risk model, updating the merchant profile in Salesforce, and filing findings in ServiceNow.

naftiko: '0.5'
info:
  label: Merchant Risk Assessment Workflow
  description: Performs merchant risk assessment by aggregating transaction data from Snowflake, running a risk model, updating the merchant profile in Salesforce, and filing findings in ServiceNow.
  tags:
  - merchants
  - risk
  - snowflake
  - salesforce
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: merchant-risk
    port: 8080
    tools:
    - name: assess-merchant-risk
      description: Assess merchant risk by analyzing transaction patterns and scoring. Use during periodic merchant risk reviews.
      inputParameters:
      - name: merchant_id
        in: body
        type: string
        description: Merchant ID.
      - name: sf_account_id
        in: body
        type: string
        description: Salesforce account ID.
      steps:
      - name: get-txn-data
        type: call
        call: snowflake.run-query
        with:
          query: SELECT AVG(amount) as avg_txn, COUNT(*) as txn_count, SUM(chargeback_amount) as cb_total FROM MERCHANT_DB.PUBLIC.TRANSACTIONS WHERE merchant_id='{{merchant_id}}' AND date >= DATEADD(month, -6, CURRENT_DATE())
      - name: score
        type: call
        call: amex-risk.score-merchant
        with:
          merchant_id: '{{merchant_id}}'
          avg_transaction: '{{get-txn-data.avg_txn}}'
          chargeback_total: '{{get-txn-data.cb_total}}'
      - name: update-sf
        type: call
        call: salesforce.update-account
        with:
          account_id: '{{sf_account_id}}'
          Risk_Score__c: '{{score.risk_score}}'
          Last_Assessment__c: '{{score.assessment_date}}'
      - name: file-findings
        type: call
        call: servicenow.create-case
        with:
          short_description: Merchant risk assessment — {{merchant_id}}
          description: 'Risk score: {{score.risk_score}}. Avg txn: ${{get-txn-data.avg_txn}}. Chargeback total: ${{get-txn-data.cb_total}}.'
  consumes:
  - namespace: snowflake
    type: http
    baseUri: https://americanexpress.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - namespace: amex-risk
    type: http
    baseUri: https://api.americanexpress.com/v1/risk
    authentication:
      type: bearer
      token: $secrets.amex_risk_token
    resources:
    - name: merchant-risk
      path: /merchants/score
      operations:
      - name: score-merchant
        method: POST
  - namespace: salesforce
    type: http
    baseUri: https://americanexpress.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{account_id}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: update-account
        method: PATCH
  - namespace: servicenow
    type: http
    baseUri: https://americanexpress.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cases
      path: /table/sn_risk_case
      operations:
      - name: create-case
        method: POST
Open in Framework → View in Fleet → merchant-risk-assessment-workflow.yml

Generates personalized spending insights for a cardholder by analyzing spend categories in Snowflake, creating a visual in Tableau, and delivering via email.

naftiko: '0.5'
info:
  label: Cardholder Spend Category Insights Digest
  description: Generates personalized spending insights for a cardholder by analyzing spend categories in Snowflake, creating a visual in Tableau, and delivering via email.
  tags:
  - cardholder
  - analytics
  - snowflake
  - tableau
  - personalization
capability:
  exposes:
  - type: mcp
    namespace: spend-insights
    port: 8080
    tools:
    - name: generate-spend-insights
      description: Analyze spending patterns and deliver a personalized insights digest. Use for monthly cardholder engagement.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Cardholder account ID.
      - name: month
        in: body
        type: string
        description: Month for insights (e.g. 2026-03).
      - name: cardholder_email
        in: body
        type: string
        description: Cardholder email.
      steps:
      - name: analyze-spend
        type: call
        call: snowflake.run-query
        with:
          query: SELECT category, SUM(amount) as total FROM CARDHOLDER_DB.PUBLIC.TRANSACTIONS WHERE account_id='{{account_id}}' AND month='{{month}}' GROUP BY category ORDER BY total DESC LIMIT 5
      - name: generate-visual
        type: call
        call: tableau.get-view-image
        with:
          site_id: $secrets.tableau_site_id
          view_id: $secrets.spend_insights_view_id
      - name: deliver
        type: call
        call: email.send-email
        with:
          to: '{{cardholder_email}}'
          subject: Your {{month}} Spending Insights
          body: Your top category was {{analyze-spend.results[0].category}} at ${{analyze-spend.results[0].total}}.
  consumes:
  - namespace: snowflake
    type: http
    baseUri: https://americanexpress.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - namespace: tableau
    type: http
    baseUri: https://americanexpress.online.tableau.com/api/3.19
    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: get-view-image
        method: GET
  - namespace: email
    type: http
    baseUri: https://api.americanexpress.com/v1/notifications
    authentication:
      type: bearer
      token: $secrets.amex_notifications_token
    resources:
    - name: messages
      path: /email/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → cardholder-spend-category-insights-digest.yml

Fetches real-time currency exchange rates from the Amex FX service for a given currency pair.

naftiko: '0.5'
info:
  label: Currency Exchange Rate Lookup
  description: Fetches real-time currency exchange rates from the Amex FX service for a given currency pair.
  tags:
  - payments
  - forex
  - data
capability:
  exposes:
  - type: mcp
    namespace: amex-fx
    port: 8080
    tools:
    - name: get-exchange-rate
      description: Given base and target currencies, return the current exchange rate, spread, and timestamp. Use when processing international transactions or quoting FX rates.
      inputParameters:
      - name: base_currency
        in: body
        type: string
        description: The base currency code (e.g. USD).
      - name: target_currency
        in: body
        type: string
        description: The target currency code (e.g. EUR).
      call: amex-fx.get-exchange-rate
      with:
        base_currency: '{{base_currency}}'
        target_currency: '{{target_currency}}'
      outputParameters:
      - name: rate
        type: number
        mapping: $.rate
      - name: spread
        type: number
        mapping: $.spread
      - name: timestamp
        type: string
        mapping: $.timestamp
  consumes:
  - namespace: amex-fx
    type: http
    baseUri: https://api.americanexpress.com/v1/fx
    authentication:
      type: bearer
      token: $secrets.amex_fx_token
    resources:
    - name: rates
      path: /rates/{base_currency}/{target_currency}
      inputParameters:
      - name: base_currency
        in: path
      - name: target_currency
        in: path
      operations:
      - name: get-exchange-rate
        method: GET
Open in Framework → View in Fleet → currency-exchange-rate-lookup.yml

Verifies a cardholder's lounge access entitlement based on card product and returns nearby eligible lounges for a given airport.

naftiko: '0.5'
info:
  label: Global Lounge Access Lookup
  description: Verifies a cardholder's lounge access entitlement based on card product and returns nearby eligible lounges for a given airport.
  tags:
  - travel
  - cardholder
  - lounges
capability:
  exposes:
  - type: mcp
    namespace: amex-lounges
    port: 8080
    tools:
    - name: get-lounge-access
      description: Given a card product and airport code, return lounge eligibility and available lounges. Use when a cardholder asks about airport lounge access.
      inputParameters:
      - name: airport_code
        in: body
        type: string
        description: The IATA airport code.
      - name: card_product
        in: body
        type: string
        description: The card product identifier.
      call: amex-lounges.get-lounge-access
      with:
        airport_code: '{{airport_code}}'
        card_product: '{{card_product}}'
      outputParameters:
      - name: eligible
        type: boolean
        mapping: $.eligible
      - name: lounges
        type: array
        mapping: $.lounges
      - name: pass_type
        type: string
        mapping: $.pass_type
  consumes:
  - namespace: amex-lounges
    type: http
    baseUri: https://api.americanexpress.com/v1/lounges
    authentication:
      type: bearer
      token: $secrets.amex_lounges_token
    resources:
    - name: access
      path: /cards/{card_product}/airports/{airport_code}/lounges
      inputParameters:
      - name: airport_code
        in: path
      - name: card_product
        in: path
      operations:
      - name: get-lounge-access
        method: GET
Open in Framework → View in Fleet → global-lounge-access-lookup.yml

Retrieves the spending limits and current utilization for a corporate card account.

naftiko: '0.5'
info:
  label: Corporate Card Spending Limit Lookup
  description: Retrieves the spending limits and current utilization for a corporate card account.
  tags:
  - corporate
  - payments
  - accounts
capability:
  exposes:
  - type: mcp
    namespace: amex-corporate
    port: 8080
    tools:
    - name: get-spending-limit
      description: Given a corporate card ID, return the monthly spending limit, current utilization, and remaining balance. Use when checking corporate card spending capacity.
      inputParameters:
      - name: card_id
        in: body
        type: string
        description: The corporate card ID.
      call: amex-corporate.get-spending-limit
      with:
        card_id: '{{card_id}}'
      outputParameters:
      - name: monthly_limit
        type: number
        mapping: $.monthly_limit
      - name: utilized
        type: number
        mapping: $.utilized
      - name: remaining
        type: number
        mapping: $.remaining
  consumes:
  - namespace: amex-corporate
    type: http
    baseUri: https://api.americanexpress.com/v1/corporate
    authentication:
      type: bearer
      token: $secrets.amex_corporate_token
    resources:
    - name: spending-limits
      path: /cards/{card_id}/spending-limits
      inputParameters:
      - name: card_id
        in: path
      operations:
      - name: get-spending-limit
        method: GET
Open in Framework → View in Fleet → corporate-card-spending-limit-lookup.yml

Generates a conversion funnel report from Adobe Analytics, stores results in Snowflake, and distributes findings via Slack and email to the product team.

naftiko: '0.5'
info:
  label: Adobe Analytics Conversion Funnel Report
  description: Generates a conversion funnel report from Adobe Analytics, stores results in Snowflake, and distributes findings via Slack and email to the product team.
  tags:
  - adobe-analytics
  - analytics
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: funnel-report
    port: 8080
    tools:
    - name: generate-funnel-report
      description: Generate a conversion funnel report and distribute to stakeholders. Use for periodic product analytics reviews.
      inputParameters:
      - name: report_suite_id
        in: body
        type: string
        description: Adobe Analytics report suite ID.
      steps:
      - name: run-funnel
        type: call
        call: adobe-analytics.run-report
        with:
          rsid: '{{report_suite_id}}'
          dimension: evar1
          metrics: visits,applications,approvals
      - name: store-results
        type: call
        call: snowflake.run-query
        with:
          query: INSERT INTO ANALYTICS_DB.PUBLIC.FUNNEL_REPORTS VALUES ('{{report_suite_id}}', {{run-funnel.visits}}, {{run-funnel.applications}}, {{run-funnel.approvals}}, CURRENT_TIMESTAMP())
      - name: post-summary
        type: call
        call: slack.post-message
        with:
          channel: product-analytics
          text: 'Funnel: Visits={{run-funnel.visits}} > Applications={{run-funnel.applications}} > Approvals={{run-funnel.approvals}}'
  consumes:
  - namespace: adobe-analytics
    type: http
    baseUri: https://analytics.adobe.io/api/americanexpress/reports
    authentication:
      type: bearer
      token: $secrets.adobe_analytics_token
    resources:
    - name: reports
      path: /ranked
      operations:
      - name: run-report
        method: POST
  - namespace: snowflake
    type: http
    baseUri: https://americanexpress.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - namespace: slack
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → adobe-analytics-conversion-funnel-report.yml

Retrieves the list of supplementary cards associated with a primary cardholder account.

naftiko: '0.5'
info:
  label: Supplementary Card List Lookup
  description: Retrieves the list of supplementary cards associated with a primary cardholder account.
  tags:
  - cardholder
  - accounts
  - cards
capability:
  exposes:
  - type: mcp
    namespace: amex-accounts
    port: 8080
    tools:
    - name: get-supplementary-cards
      description: Given a primary cardholder account ID, return all supplementary cards with their status and holder names. Use when managing additional cards on an account.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The primary cardholder account ID.
      call: amex-accounts.get-supplementary-cards
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: cards
        type: array
        mapping: $.cards
      - name: total_count
        type: number
        mapping: $.total_count
  consumes:
  - namespace: amex-accounts
    type: http
    baseUri: https://api.americanexpress.com/v1/accounts
    authentication:
      type: bearer
      token: $secrets.amex_accounts_token
    resources:
    - name: supplementary-cards
      path: /accounts/{account_id}/supplementary-cards
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-supplementary-cards
        method: GET
Open in Framework → View in Fleet → supplementary-card-list-lookup.yml

Identifies underutilized Azure resources by querying cost data, creates a Jira ticket for the cloud team, and posts a summary to Slack.

naftiko: '0.5'
info:
  label: Azure Resource Cost Optimization Alert
  description: Identifies underutilized Azure resources by querying cost data, creates a Jira ticket for the cloud team, and posts a summary to Slack.
  tags:
  - cloud
  - azure
  - finops
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: azure-finops
    port: 8080
    tools:
    - name: alert-cost-optimization
      description: Query Azure costs, create a remediation ticket, and alert the FinOps team. Use when Azure cost thresholds are breached.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID.
      steps:
      - name: query-costs
        type: call
        call: azure.query-costs
        with:
          subscription_id: '{{subscription_id}}'
          timeframe: MonthToDate
          type: Usage
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: CLOUD
          issuetype: Task
          summary: Azure cost optimization — ${{query-costs.total_cost}}
          description: 'Subscription: {{subscription_id}}. Total MTD: ${{query-costs.total_cost}}. Top resource: {{query-costs.top_resource}}.'
      - name: post-summary
        type: call
        call: slack.post-message
        with:
          channel: cloud-finops
          text: 'Azure cost alert: ${{query-costs.total_cost}} MTD for subscription {{subscription_id}}. Top resource: {{query-costs.top_resource}}. Jira: {{create-ticket.key}}'
  consumes:
  - namespace: azure
    type: http
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: cost
      path: /subscriptions/{subscription_id}/providers/Microsoft.CostManagement/query
      inputParameters:
      - name: subscription_id
        in: path
      operations:
      - name: query-costs
        method: POST
  - namespace: jira
    type: http
    baseUri: https://americanexpress.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issue
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - namespace: slack
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → azure-resource-cost-optimization-alert.yml

Evaluates a cardholder's spend history to determine annual fee waiver eligibility, creates a decision record, and sends the outcome notification.

naftiko: '0.5'
info:
  label: Cardholder Annual Fee Waiver Evaluation
  description: Evaluates a cardholder's spend history to determine annual fee waiver eligibility, creates a decision record, and sends the outcome notification.
  tags:
  - cardholder
  - billing
  - retention
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: fee-waiver
    port: 8080
    tools:
    - name: evaluate-fee-waiver
      description: Evaluate fee waiver eligibility based on spend history, record the decision, and notify the cardholder. Use when a cardholder requests an annual fee waiver.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Cardholder account ID.
      - name: cardholder_email
        in: body
        type: string
        description: Cardholder email.
      steps:
      - name: get-spend
        type: call
        call: amex-accounts.get-spend-summary
        with:
          account_id: '{{account_id}}'
      - name: create-decision
        type: call
        call: salesforce.create-case
        with:
          Subject: Fee waiver evaluation — {{account_id}}
          Description: 'Annual spend: ${{get-spend.annual_spend}}. Tenure: {{get-spend.tenure_years}} years.'
          Type: Fee Waiver
      - name: send-outcome
        type: call
        call: email.send-email
        with:
          to: '{{cardholder_email}}'
          subject: Annual Fee Review Complete
          body: 'Based on your ${{get-spend.annual_spend}} annual spend and {{get-spend.tenure_years}} year membership, your fee waiver decision has been recorded. Reference: {{create-decision.id}}'
  consumes:
  - namespace: amex-accounts
    type: http
    baseUri: https://api.americanexpress.com/v1/accounts
    authentication:
      type: bearer
      token: $secrets.amex_accounts_token
    resources:
    - name: spend-summary
      path: /accounts/{account_id}/spend-summary
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-spend-summary
        method: GET
  - namespace: salesforce
    type: http
    baseUri: https://americanexpress.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
  - namespace: email
    type: http
    baseUri: https://api.americanexpress.com/v1/notifications
    authentication:
      type: bearer
      token: $secrets.amex_notifications_token
    resources:
    - name: messages
      path: /email/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → cardholder-annual-fee-waiver-evaluation.yml

When a Datadog monitor detects payment network latency breaching SLA thresholds, creates a PagerDuty critical incident, updates a ServiceNow major incident, and posts a status update to the executive Slack channel.

naftiko: '0.5'
info:
  label: Payment Network Incident Escalation
  description: When a Datadog monitor detects payment network latency breaching SLA thresholds, creates a PagerDuty critical incident, updates a ServiceNow major incident, and posts a status update to the executive Slack channel.
  tags:
  - payments
  - sla
  - datadog
  - pagerduty
  - servicenow
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: network-incident
    port: 8080
    tools:
    - name: escalate-network-incident
      description: Given a Datadog monitor ID and affected payment network segment, retrieve monitor state, create a critical PagerDuty incident, open a ServiceNow major incident, and post an executive Slack alert. Use when payment network SLAs are breached.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: The Datadog monitor ID for the payment network SLA check.
      - name: network_segment
        in: body
        type: string
        description: The affected payment network segment (e.g., card-auth, settlement).
      - name: latency_p99_ms
        in: body
        type: number
        description: The measured P99 latency in milliseconds that breached SLA.
      steps:
      - name: get-monitor-state
        type: call
        call: datadog-network.get-monitor
        with:
          monitor_id: '{{monitor_id}}'
      - name: create-pd-critical
        type: call
        call: pagerduty-network.create-incident
        with:
          title: 'CRITICAL: Payment network SLA breach — {{network_segment}}'
          service_id: $secrets.pagerduty_network_service_id
          urgency: high
          body: 'Segment: {{network_segment}} | P99: {{latency_p99_ms}}ms | Monitor: {{monitor_id}}'
      - name: open-major-incident
        type: call
        call: servicenow-network.create-incident
        with:
          category: network
          subcategory: payment_processing
          short_description: 'Payment network SLA breach: {{network_segment}} P99={{latency_p99_ms}}ms'
          urgency: '1'
          impact: '1'
          severity: '1'
      - name: post-executive-alert
        type: call
        call: slack-executive.post-message
        with:
          channel: exec-alerts
          text: 'CRITICAL | Payment Network | Segment: {{network_segment}} | P99 Latency: {{latency_p99_ms}}ms | PagerDuty: {{create-pd-critical.incident_number}} | SNOW: {{open-major-incident.number}}'
  consumes:
  - namespace: datadog-network
    type: http
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitor
      path: /monitor/{monitor_id}
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: get-monitor
        method: GET
  - namespace: pagerduty-network
    type: http
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_api_key
      placement: header
    resources:
    - name: incident
      path: /incidents
      operations:
      - name: create-incident
        method: POST
  - namespace: servicenow-network
    type: http
    baseUri: https://americanexpress.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incident
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - namespace: slack-executive
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → payment-network-incident-escalation.yml

When GitHub Dependabot raises a critical vulnerability alert on an American Express repository, opens a Jira security issue and sends a Slack notification to the AppSec team.

naftiko: '0.5'
info:
  label: GitHub Security Vulnerability Triage
  description: When GitHub Dependabot raises a critical vulnerability alert on an American Express repository, opens a Jira security issue and sends a Slack notification to the AppSec team.
  tags:
  - security
  - devops
  - github
  - jira
  - slack
  - vulnerability-management
capability:
  exposes:
  - type: mcp
    namespace: appsec-triage
    port: 8080
    tools:
    - name: triage-vulnerability-alert
      description: Given a GitHub repository and Dependabot alert number, retrieve alert details, open a Jira security issue, and notify the AppSec Slack channel. Use when a critical or high severity Dependabot alert is raised.
      inputParameters:
      - name: repo_owner
        in: body
        type: string
        description: The GitHub organization or owner of the repository (e.g., americanexpress).
      - name: repo_name
        in: body
        type: string
        description: The name of the GitHub repository with the vulnerability.
      - name: alert_number
        in: body
        type: integer
        description: The Dependabot alert number from GitHub.
      steps:
      - name: get-alert
        type: call
        call: github.get-dependabot-alert
        with:
          owner: '{{repo_owner}}'
          repo: '{{repo_name}}'
          alert_number: '{{alert_number}}'
      - name: create-security-issue
        type: call
        call: jira-security.create-issue
        with:
          project_key: SEC
          issuetype: Security Vulnerability
          summary: '[Dependabot] {{get-alert.dependency_name}} {{get-alert.severity}} in {{repo_name}}'
          description: 'CVE: {{get-alert.cve_id}}

            Package: {{get-alert.dependency_name}}

            Severity: {{get-alert.severity}}

            Repo: {{repo_owner}}/{{repo_name}}

            Alert: {{alert_number}}

            Fixed version: {{get-alert.fixed_version}}'
      - name: notify-appsec
        type: call
        call: slack-appsec.post-message
        with:
          channel: appsec-alerts
          text: 'Vulnerability Alert | Repo: {{repo_owner}}/{{repo_name}} | Package: {{get-alert.dependency_name}} | Severity: {{get-alert.severity}} | CVE: {{get-alert.cve_id}} | Jira: {{create-security-issue.key}}'
  consumes:
  - namespace: github
    type: http
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: dependabot-alert
      path: /repos/{owner}/{repo}/dependabot/alerts/{alert_number}
      inputParameters:
      - name: owner
        in: path
      - name: repo
        in: path
      - name: alert_number
        in: path
      operations:
      - name: get-dependabot-alert
        method: GET
  - namespace: jira-security
    type: http
    baseUri: https://americanexpress.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issue
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - namespace: slack-appsec
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → github-security-vulnerability-triage.yml

Evaluates a cardholder's credit limit increase request by pulling account history, running a risk score, creating a Jira review task, and notifying the cardholder via SMS.

naftiko: '0.5'
info:
  label: Cardholder Credit Limit Increase Review
  description: Evaluates a cardholder's credit limit increase request by pulling account history, running a risk score, creating a Jira review task, and notifying the cardholder via SMS.
  tags:
  - cardholder
  - credit
  - risk
  - jira
capability:
  exposes:
  - type: mcp
    namespace: cli-review
    port: 8080
    tools:
    - name: review-cli-request
      description: Evaluate a credit limit increase request by checking account history, scoring risk, and creating a review task. Use when a cardholder requests a credit limit increase.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Cardholder account ID.
      - name: requested_amount
        in: body
        type: string
        description: Requested credit limit increase amount.
      steps:
      - name: get-account
        type: call
        call: amex-accounts.get-account
        with:
          account_id: '{{account_id}}'
      - name: risk-score
        type: call
        call: amex-risk.get-risk-score
        with:
          account_id: '{{account_id}}'
          requested_increase: '{{requested_amount}}'
      - name: create-review
        type: call
        call: jira.create-issue
        with:
          project_key: CLR
          issuetype: Task
          summary: CLI review — {{account_id}} risk={{risk-score.score}}
          description: 'Requested: ${{requested_amount}}. Current limit: ${{get-account.credit_limit}}. Risk score: {{risk-score.score}}.'
      - name: notify-cardholder
        type: call
        call: amex-sms.send-sms
        with:
          phone: '{{get-account.phone}}'
          message: 'Your credit limit increase request is under review. Reference: {{create-review.key}}'
  consumes:
  - namespace: amex-accounts
    type: http
    baseUri: https://api.americanexpress.com/v1/accounts
    authentication:
      type: bearer
      token: $secrets.amex_accounts_token
    resources:
    - name: account
      path: /accounts/{account_id}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
  - namespace: amex-risk
    type: http
    baseUri: https://api.americanexpress.com/v1/risk
    authentication:
      type: bearer
      token: $secrets.amex_risk_token
    resources:
    - name: scoring
      path: /score
      operations:
      - name: get-risk-score
        method: POST
  - namespace: jira
    type: http
    baseUri: https://americanexpress.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issue
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - namespace: amex-sms
    type: http
    baseUri: https://api.americanexpress.com/v1/notifications
    authentication:
      type: bearer
      token: $secrets.amex_notifications_token
    resources:
    - name: sms
      path: /sms/send
      operations:
      - name: send-sms
        method: POST
Open in Framework → View in Fleet → cardholder-credit-limit-increase-review.yml

Synchronizes cardholder benefits enrollment by fetching card product details, enrolling the cardholder in benefits, and confirming via push notification.

naftiko: '0.5'
info:
  label: Cardholder Benefits Enrollment Sync
  description: Synchronizes cardholder benefits enrollment by fetching card product details, enrolling the cardholder in benefits, and confirming via push notification.
  tags:
  - cardholder
  - benefits
  - enrollment
  - notifications
capability:
  exposes:
  - type: mcp
    namespace: benefits-sync
    port: 8080
    tools:
    - name: sync-benefits
      description: Enroll a cardholder in their card product benefits and confirm activation. Use when a new card is activated or a product upgrade occurs.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Cardholder account ID.
      - name: product_id
        in: body
        type: string
        description: Card product ID.
      steps:
      - name: get-product
        type: call
        call: amex-products.get-product
        with:
          product_id: '{{product_id}}'
      - name: enroll-benefits
        type: call
        call: amex-benefits.enroll
        with:
          account_id: '{{account_id}}'
          benefits: '{{get-product.included_benefits}}'
      - name: confirm
        type: call
        call: amex-push.send-push
        with:
          account_id: '{{account_id}}'
          title: Benefits activated
          body: Your {{get-product.name}} benefits are now active. {{enroll-benefits.benefit_count}} benefits enrolled.
  consumes:
  - namespace: amex-products
    type: http
    baseUri: https://api.americanexpress.com/v1/products
    authentication:
      type: bearer
      token: $secrets.amex_products_token
    resources:
    - name: products
      path: /products/{product_id}
      inputParameters:
      - name: product_id
        in: path
      operations:
      - name: get-product
        method: GET
  - namespace: amex-benefits
    type: http
    baseUri: https://api.americanexpress.com/v1/benefits
    authentication:
      type: bearer
      token: $secrets.amex_benefits_token
    resources:
    - name: enrollment
      path: /enrollment
      operations:
      - name: enroll
        method: POST
  - namespace: amex-push
    type: http
    baseUri: https://api.americanexpress.com/v1/notifications
    authentication:
      type: bearer
      token: $secrets.amex_notifications_token
    resources:
    - name: push
      path: /push/send
      operations:
      - name: send-push
        method: POST
Open in Framework → View in Fleet → cardholder-benefits-enrollment-sync.yml

Processes a cardholder account closure by verifying zero balance, closing the account, archiving data to S3, and sending a confirmation letter via DocuSign.

naftiko: '0.5'
info:
  label: Cardholder Account Closure Workflow
  description: Processes a cardholder account closure by verifying zero balance, closing the account, archiving data to S3, and sending a confirmation letter via DocuSign.
  tags:
  - cardholder
  - accounts
  - s3
  - docusign
capability:
  exposes:
  - type: mcp
    namespace: account-closure
    port: 8080
    tools:
    - name: close-account
      description: Close a cardholder account, archive data, and send confirmation. Use when a cardholder requests account closure.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Cardholder account ID.
      - name: closure_reason
        in: body
        type: string
        description: Reason for closure.
      - name: cardholder_email
        in: body
        type: string
        description: Cardholder email.
      steps:
      - name: verify-balance
        type: call
        call: amex-accounts.get-account
        with:
          account_id: '{{account_id}}'
      - name: close
        type: call
        call: amex-accounts.close-account
        with:
          account_id: '{{account_id}}'
          reason: '{{closure_reason}}'
      - name: archive
        type: call
        call: s3.upload-archive
        with:
          account_id: '{{account_id}}'
          data: '{{close.archive_payload}}'
      - name: send-letter
        type: call
        call: docusign.send-envelope
        with:
          ds_account_id: $secrets.docusign_account_id
          recipient_email: '{{cardholder_email}}'
          template_id: $secrets.closure_template_id
  consumes:
  - namespace: amex-accounts
    type: http
    baseUri: https://api.americanexpress.com/v1/accounts
    authentication:
      type: bearer
      token: $secrets.amex_accounts_token
    resources:
    - name: account
      path: /accounts/{account_id}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
      - name: close-account
        method: POST
  - namespace: s3
    type: http
    baseUri: https://s3.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_token
    resources:
    - name: objects
      path: /amex-archive/{account_id}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: upload-archive
        method: PUT
  - namespace: docusign
    type: http
    baseUri: https://na4.docusign.net/restapi/v2.1
    authentication:
      type: bearer
      token: $secrets.docusign_token
    resources:
    - name: envelopes
      path: /accounts/{ds_account_id}/envelopes
      inputParameters:
      - name: ds_account_id
        in: path
      operations:
      - name: send-envelope
        method: POST
Open in Framework → View in Fleet → cardholder-account-closure-workflow.yml

When a ServiceNow change request reaches the Approval state, retrieves the change details and notifies all relevant stakeholders via Microsoft Teams.

naftiko: '0.5'
info:
  label: ServiceNow Change Management Notification
  description: When a ServiceNow change request reaches the Approval state, retrieves the change details and notifies all relevant stakeholders via Microsoft Teams.
  tags:
  - itsm
  - servicenow
  - microsoft-teams
  - change-management
capability:
  exposes:
  - type: mcp
    namespace: change-management
    port: 8080
    tools:
    - name: notify-change-approvers
      description: Given a ServiceNow change request number, retrieve change details and send a Teams notification to all listed approvers with context and an approval link. Use when change requests require stakeholder awareness and sign-off.
      inputParameters:
      - name: change_number
        in: body
        type: string
        description: The ServiceNow change request number (e.g., CHG0012345).
      - name: approver_upns
        in: body
        type: string
        description: Comma-separated list of approver UPNs (email addresses) to notify.
      steps:
      - name: get-change
        type: call
        call: servicenow-chg.get-change
        with:
          number: '{{change_number}}'
      - name: notify-team
        type: call
        call: msteams-change.post-channel-message
        with:
          channel_id: $secrets.teams_change_mgmt_channel_id
          content: 'Change Request Pending Approval

            CHG: {{change_number}}

            Summary: {{get-change.short_description}}

            Scheduled: {{get-change.start_date}}

            Risk: {{get-change.risk}}

            Approvers: {{approver_upns}}'
  consumes:
  - namespace: servicenow-chg
    type: http
    baseUri: https://americanexpress.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change
      path: /table/change_request
      inputParameters:
      - name: number
        in: query
      operations:
      - name: get-change
        method: GET
  - namespace: msteams-change
    type: http
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-message
      path: /teams/{team_id}/channels/{channel_id}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → servicenow-change-management-notification.yml

When a fraud alert triggers, retrieves transaction details, creates a case in the fraud investigation system, suspends the card, and notifies the cardholder via push notification.

naftiko: '0.5'
info:
  label: Fraud Alert Investigation Workflow
  description: When a fraud alert triggers, retrieves transaction details, creates a case in the fraud investigation system, suspends the card, and notifies the cardholder via push notification.
  tags:
  - fraud
  - security
  - cardholder
  - investigations
capability:
  exposes:
  - type: mcp
    namespace: fraud-ops
    port: 8080
    tools:
    - name: investigate-fraud-alert
      description: Investigate a fraud alert by fetching details, creating a case, suspending the card, and notifying the cardholder. Use when a fraud detection alert fires.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The fraud alert identifier.
      steps:
      - name: get-alert
        type: call
        call: amex-fraud.get-alert
        with:
          alert_id: '{{alert_id}}'
      - name: create-case
        type: call
        call: amex-fraud.create-case
        with:
          alert_id: '{{alert_id}}'
          amount: '{{get-alert.amount}}'
          merchant: '{{get-alert.merchant_name}}'
          card_id: '{{get-alert.card_id}}'
      - name: suspend-card
        type: call
        call: amex-cards.suspend-card
        with:
          card_id: '{{get-alert.card_id}}'
      - name: notify-cardholder
        type: call
        call: amex-push.send-push
        with:
          account_id: '{{get-alert.account_id}}'
          title: Suspicious activity detected
          body: 'A ${{get-alert.amount}} charge at {{get-alert.merchant_name}} was flagged. Your card has been temporarily suspended. Case: {{create-case.case_id}}'
  consumes:
  - namespace: amex-fraud
    type: http
    baseUri: https://api.americanexpress.com/v1/fraud
    authentication:
      type: bearer
      token: $secrets.amex_fraud_token
    resources:
    - name: alerts
      path: /alerts/{alert_id}
      inputParameters:
      - name: alert_id
        in: path
      operations:
      - name: get-alert
        method: GET
    - name: cases
      path: /cases
      operations:
      - name: create-case
        method: POST
  - namespace: amex-cards
    type: http
    baseUri: https://api.americanexpress.com/v1/cards
    authentication:
      type: bearer
      token: $secrets.amex_cards_token
    resources:
    - name: card
      path: /cards/{card_id}/suspend
      inputParameters:
      - name: card_id
        in: path
      operations:
      - name: suspend-card
        method: POST
  - namespace: amex-push
    type: http
    baseUri: https://api.americanexpress.com/v1/notifications
    authentication:
      type: bearer
      token: $secrets.amex_notifications_token
    resources:
    - name: push
      path: /push/send
      operations:
      - name: send-push
        method: POST
Open in Framework → View in Fleet → fraud-alert-investigation-workflow.yml

Retrieves the latest statement balance and minimum payment due for a cardholder account.

naftiko: '0.5'
info:
  label: Cardholder Statement Balance Lookup
  description: Retrieves the latest statement balance and minimum payment due for a cardholder account.
  tags:
  - payments
  - cardholder
  - billing
capability:
  exposes:
  - type: mcp
    namespace: amex-billing
    port: 8080
    tools:
    - name: get-statement-balance
      description: Given a cardholder account ID, return the current statement balance, minimum payment due, and due date. Use when a representative needs billing information.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The cardholder account ID.
      call: amex-billing.get-statement-balance
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: statement_balance
        type: number
        mapping: $.statement_balance
      - name: minimum_payment
        type: number
        mapping: $.minimum_payment
      - name: due_date
        type: string
        mapping: $.due_date
  consumes:
  - namespace: amex-billing
    type: http
    baseUri: https://api.americanexpress.com/v1/billing
    authentication:
      type: bearer
      token: $secrets.amex_billing_token
    resources:
    - name: statement
      path: /accounts/{account_id}/statement
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-statement-balance
        method: GET
Open in Framework → View in Fleet → cardholder-statement-balance-lookup.yml

When Palo Alto Networks detects a blocked threat on the corporate network, retrieves the threat log entry and creates a ServiceNow security incident for the SOC team to review.

naftiko: '0.5'
info:
  label: Palo Alto Networks Threat Block and Incident Log
  description: When Palo Alto Networks detects a blocked threat on the corporate network, retrieves the threat log entry and creates a ServiceNow security incident for the SOC team to review.
  tags:
  - security
  - palo-alto-networks
  - servicenow
  - threat-response
  - network-security
capability:
  exposes:
  - type: mcp
    namespace: network-security
    port: 8080
    tools:
    - name: log-network-threat
      description: Given a Palo Alto Networks threat log entry ID, retrieve the threat details and create a ServiceNow security incident for SOC review. Use when automated threat blocking events require case tracking and analyst review.
      inputParameters:
      - name: threat_log_id
        in: body
        type: string
        description: The Palo Alto Networks threat log entry ID.
      - name: firewall_hostname
        in: body
        type: string
        description: The hostname of the Palo Alto firewall that generated the log.
      steps:
      - name: get-threat-log
        type: call
        call: paloalto.get-threat-log
        with:
          log_id: '{{threat_log_id}}'
      - name: create-soc-incident
        type: call
        call: servicenow-netsec.create-incident
        with:
          category: security
          subcategory: network_threat
          short_description: 'Network threat blocked by {{firewall_hostname}}: {{get-threat-log.threat_name}}'
          description: 'Firewall: {{firewall_hostname}}

            Threat: {{get-threat-log.threat_name}}

            Severity: {{get-threat-log.severity}}

            Source IP: {{get-threat-log.source_ip}}

            Destination: {{get-threat-log.destination_ip}}

            Action: {{get-threat-log.action}}'
          urgency: '2'
  consumes:
  - namespace: paloalto
    type: http
    baseUri: https://panorama.americanexpress.com/restapi/v10.1
    authentication:
      type: apikey
      key: X-PAN-KEY
      value: $secrets.paloalto_api_key
      placement: header
    resources:
    - name: threat-log
      path: /Objects/Threats/{log_id}
      inputParameters:
      - name: log_id
        in: path
      operations:
      - name: get-threat-log
        method: GET
  - namespace: servicenow-netsec
    type: http
    baseUri: https://americanexpress.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incident
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → palo-alto-networks-threat-block-and-incident-log.yml

Generates a quarterly revenue report for a merchant by querying Snowflake analytics, creating a Tableau extract refresh, and distributing the report via email.

naftiko: '0.5'
info:
  label: Quarterly Merchant Revenue Report
  description: Generates a quarterly revenue report for a merchant by querying Snowflake analytics, creating a Tableau extract refresh, and distributing the report via email.
  tags:
  - merchants
  - analytics
  - snowflake
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: merchant-reports
    port: 8080
    tools:
    - name: generate-revenue-report
      description: Generate a quarterly revenue report for a merchant using Snowflake data and Tableau visualization. Use at quarter end for merchant reporting.
      inputParameters:
      - name: merchant_id
        in: body
        type: string
        description: Merchant ID for the report.
      - name: quarter
        in: body
        type: string
        description: Quarter identifier (e.g. Q1-2026).
      - name: merchant_email
        in: body
        type: string
        description: Merchant contact email.
      - name: datasource_id
        in: body
        type: string
        description: Tableau datasource ID.
      steps:
      - name: run-revenue-query
        type: call
        call: snowflake.run-query
        with:
          query: SELECT SUM(amount) as total_revenue, COUNT(*) as txn_count FROM MERCHANT_DB.PUBLIC.TRANSACTIONS WHERE merchant_id='{{merchant_id}}' AND quarter='{{quarter}}'
      - name: refresh-tableau
        type: call
        call: tableau.refresh-extract
        with:
          site_id: $secrets.tableau_site_id
          datasource_id: '{{datasource_id}}'
      - name: send-report
        type: call
        call: email.send-email
        with:
          to: '{{merchant_email}}'
          subject: Q{{quarter}} Revenue Report
          body: 'Total revenue: ${{run-revenue-query.total_revenue}}. Transaction count: {{run-revenue-query.txn_count}}. Your Tableau dashboard has been refreshed.'
  consumes:
  - namespace: snowflake
    type: http
    baseUri: https://americanexpress.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - namespace: tableau
    type: http
    baseUri: https://americanexpress.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: extracts
      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
  - namespace: email
    type: http
    baseUri: https://api.americanexpress.com/v1/notifications
    authentication:
      type: bearer
      token: $secrets.amex_notifications_token
    resources:
    - name: messages
      path: /email/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → quarterly-merchant-revenue-report.yml

When a purchase order is submitted in SAP Ariba, retrieves PO details and creates a ServiceNow approval task for the appropriate budget owner.

naftiko: '0.5'
info:
  label: Purchase Order Approval Workflow
  description: When a purchase order is submitted in SAP Ariba, retrieves PO details and creates a ServiceNow approval task for the appropriate budget owner.
  tags:
  - procurement
  - finance
  - sap-ariba
  - servicenow
  - approval
capability:
  exposes:
  - type: mcp
    namespace: procurement-approval
    port: 8080
    tools:
    - name: route-po-for-approval
      description: Given an SAP Ariba purchase order ID, retrieve PO details including amount and vendor, and create a ServiceNow approval task for the budget owner. Use when purchase orders above threshold require additional approval routing.
      inputParameters:
      - name: po_id
        in: body
        type: string
        description: The SAP Ariba purchase order ID to route for approval.
      - name: approver_email
        in: body
        type: string
        description: The email address of the designated budget approver.
      steps:
      - name: get-po
        type: call
        call: ariba.get-purchase-order
        with:
          po_id: '{{po_id}}'
      - name: create-approval
        type: call
        call: servicenow-procurement.create-task
        with:
          category: procurement_approval
          short_description: 'PO approval required: {{po_id}} — ${{get-po.total_amount}} {{get-po.currency}}'
          description: 'PO: {{po_id}}

            Vendor: {{get-po.vendor_name}}

            Amount: ${{get-po.total_amount}} {{get-po.currency}}

            Line items: {{get-po.line_item_count}}

            Requested by: {{get-po.requester_name}}'
          assigned_to: '{{approver_email}}'
  consumes:
  - namespace: ariba
    type: http
    baseUri: https://openapi.ariba.com/api/purchase-orders/v1
    authentication:
      type: bearer
      token: $secrets.ariba_access_token
    resources:
    - name: purchase-order
      path: /purchaseOrders/{po_id}
      inputParameters:
      - name: po_id
        in: path
      operations:
      - name: get-purchase-order
        method: GET
  - namespace: servicenow-procurement
    type: http
    baseUri: https://americanexpress.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: task
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → purchase-order-approval-workflow.yml

Retrieves the weekly SLO compliance summary from Datadog across all payment processing services and posts a structured digest to the engineering Slack channel.

naftiko: '0.5'
info:
  label: Datadog SLO Breach Weekly Digest
  description: Retrieves the weekly SLO compliance summary from Datadog across all payment processing services and posts a structured digest to the engineering Slack channel.
  tags:
  - observability
  - datadog
  - slo
  - slack
  - payments
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: slo-reporting
    port: 8080
    tools:
    - name: digest-slo-compliance
      description: Given a list of Datadog SLO IDs and a reporting week, retrieve SLO compliance data for all payment services and post a digest to Slack. Use every Monday to review the prior week's SLO performance.
      inputParameters:
      - name: slo_ids
        in: body
        type: string
        description: Comma-separated list of Datadog SLO IDs to include in the digest.
      - name: week_start
        in: body
        type: string
        description: Start date of the reporting week in YYYY-MM-DD format.
      steps:
      - name: get-slo-history
        type: call
        call: datadog-slo.get-slo-history
        with:
          slo_ids: '{{slo_ids}}'
          from_ts: '{{week_start}}'
      - name: post-digest
        type: call
        call: slack-slo.post-message
        with:
          channel: engineering-slo
          text: 'SLO Compliance Digest | Week of {{week_start}} | Overall: {{get-slo-history.overall_compliance}}% | Breaches: {{get-slo-history.breach_count}} | Details in Datadog.'
  consumes:
  - namespace: datadog-slo
    type: http
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: slo-history
      path: /slo/history
      operations:
      - name: get-slo-history
        method: GET
  - namespace: slack-slo
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → datadog-slo-breach-weekly-digest.yml

Checks the current AutoPay enrollment status and payment method for a cardholder account.

naftiko: '0.5'
info:
  label: Cardholder AutoPay Status Lookup
  description: Checks the current AutoPay enrollment status and payment method for a cardholder account.
  tags:
  - payments
  - cardholder
  - autopay
capability:
  exposes:
  - type: mcp
    namespace: amex-payments
    port: 8080
    tools:
    - name: get-autopay-status
      description: Given a cardholder account ID, return the AutoPay enrollment status, payment method, and amount type. Use when verifying automatic payment settings.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The cardholder account ID.
      call: amex-payments.get-autopay-status
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: enrolled
        type: boolean
        mapping: $.enrolled
      - name: payment_method
        type: string
        mapping: $.payment_method
      - name: amount_type
        type: string
        mapping: $.amount_type
  consumes:
  - namespace: amex-payments
    type: http
    baseUri: https://api.americanexpress.com/v1/payments
    authentication:
      type: bearer
      token: $secrets.amex_payments_token
    resources:
    - name: autopay
      path: /accounts/{account_id}/autopay
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-autopay-status
        method: GET
Open in Framework → View in Fleet → cardholder-autopay-status-lookup.yml

Retrieves the current credit limit and available credit for a cardholder account from the accounts platform.

naftiko: '0.5'
info:
  label: Cardholder Credit Limit Lookup
  description: Retrieves the current credit limit and available credit for a cardholder account from the accounts platform.
  tags:
  - payments
  - cardholder
  - accounts
capability:
  exposes:
  - type: mcp
    namespace: amex-accounts
    port: 8080
    tools:
    - name: get-credit-limit
      description: Given a cardholder account ID, return the current credit limit, available credit, and currency. Use when an agent needs to check a cardholder's credit availability.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The cardholder account ID.
      call: amex-accounts.get-credit-limit
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: credit_limit
        type: number
        mapping: $.credit_limit
      - name: available_credit
        type: number
        mapping: $.available_credit
      - name: currency
        type: string
        mapping: $.currency
  consumes:
  - namespace: amex-accounts
    type: http
    baseUri: https://api.americanexpress.com/v1/accounts
    authentication:
      type: bearer
      token: $secrets.amex_accounts_token
    resources:
    - name: credit-limit
      path: /accounts/{account_id}/credit-limit
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-credit-limit
        method: GET
Open in Framework → View in Fleet → cardholder-credit-limit-lookup.yml

Synchronizes new contacts from HubSpot to Salesforce by fetching contact details, creating the Salesforce record, and logging the sync in Snowflake.

naftiko: '0.5'
info:
  label: HubSpot to Salesforce Contact Sync
  description: Synchronizes new contacts from HubSpot to Salesforce by fetching contact details, creating the Salesforce record, and logging the sync in Snowflake.
  tags:
  - hubspot
  - salesforce
  - data-sync
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: contact-sync
    port: 8080
    tools:
    - name: sync-contact
      description: Sync a HubSpot contact to Salesforce and log the operation. Use when a new contact is created in HubSpot.
      inputParameters:
      - name: contact_id
        in: body
        type: string
        description: HubSpot contact ID.
      steps:
      - name: get-hs-contact
        type: call
        call: hubspot.get-contact
        with:
          contact_id: '{{contact_id}}'
      - name: create-sf-contact
        type: call
        call: salesforce.create-contact
        with:
          FirstName: '{{get-hs-contact.properties.firstname}}'
          LastName: '{{get-hs-contact.properties.lastname}}'
          Email: '{{get-hs-contact.properties.email}}'
          Company: '{{get-hs-contact.properties.company}}'
      - name: log-sync
        type: call
        call: snowflake.run-query
        with:
          query: INSERT INTO SYNC_DB.PUBLIC.CONTACT_SYNC_LOG VALUES ('{{contact_id}}', '{{create-sf-contact.id}}', CURRENT_TIMESTAMP())
  consumes:
  - namespace: hubspot
    type: http
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /crm/v3/objects/contacts/{contact_id}
      inputParameters:
      - name: contact_id
        in: path
      operations:
      - name: get-contact
        method: GET
  - namespace: salesforce
    type: http
    baseUri: https://americanexpress.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /sobjects/Contact
      operations:
      - name: create-contact
        method: POST
  - namespace: snowflake
    type: http
    baseUri: https://americanexpress.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → hubspot-to-salesforce-contact-sync.yml

Prepares quarterly compliance audit materials by extracting control evidence from ServiceNow, generating a summary from Snowflake, and distributing the report via SharePoint and email.

naftiko: '0.5'
info:
  label: Quarterly Compliance Audit Preparation
  description: Prepares quarterly compliance audit materials by extracting control evidence from ServiceNow, generating a summary from Snowflake, and distributing the report via SharePoint and email.
  tags:
  - compliance
  - audit
  - servicenow
  - snowflake
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: audit-prep
    port: 8080
    tools:
    - name: prepare-audit
      description: Gather compliance evidence, generate a summary, upload to SharePoint, and distribute. Use at quarter end for audit preparation.
      inputParameters:
      - name: quarter
        in: body
        type: string
        description: Quarter identifier (e.g. Q1-2026).
      steps:
      - name: get-controls
        type: call
        call: servicenow.list-controls
        with:
          state: active
          quarter: '{{quarter}}'
      - name: generate-summary
        type: call
        call: snowflake.run-query
        with:
          query: SELECT control_id, status, evidence_count FROM COMPLIANCE_DB.PUBLIC.AUDIT_EVIDENCE WHERE quarter='{{quarter}}'
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          drive_id: $secrets.compliance_drive_id
          name: Q{{quarter}}_audit_report.pdf
          content: '{{generate-summary.results}}'
      - name: distribute
        type: call
        call: email.send-email
        with:
          to: compliance-team@americanexpress.com
          subject: Q{{quarter}} Compliance Audit Materials Ready
          body: 'Audit materials uploaded to SharePoint. Controls reviewed: {{get-controls.count}}. Evidence items: {{generate-summary.row_count}}.'
  consumes:
  - namespace: servicenow
    type: http
    baseUri: https://americanexpress.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: controls
      path: /table/sn_compliance_control
      operations:
      - name: list-controls
        method: GET
  - namespace: snowflake
    type: http
    baseUri: https://americanexpress.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - namespace: sharepoint
    type: http
    baseUri: https://americanexpress.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: files
      path: /drives/{drive_id}/items
      inputParameters:
      - name: drive_id
        in: path
      operations:
      - name: upload-file
        method: POST
  - namespace: email
    type: http
    baseUri: https://api.americanexpress.com/v1/notifications
    authentication:
      type: bearer
      token: $secrets.amex_notifications_token
    resources:
    - name: messages
      path: /email/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → quarterly-compliance-audit-preparation.yml

Retrieves the paperless statement enrollment status for a cardholder account.

naftiko: '0.5'
info:
  label: Cardholder Paperless Preference Lookup
  description: Retrieves the paperless statement enrollment status for a cardholder account.
  tags:
  - cardholder
  - accounts
  - preferences
capability:
  exposes:
  - type: mcp
    namespace: amex-preferences
    port: 8080
    tools:
    - name: get-paperless-status
      description: Given a cardholder account ID, return the paperless enrollment status and notification email. Use when verifying statement delivery preferences.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The cardholder account ID.
      call: amex-preferences.get-paperless-status
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: enrolled
        type: boolean
        mapping: $.enrolled
      - name: email
        type: string
        mapping: $.notification_email
      - name: enrollment_date
        type: string
        mapping: $.enrollment_date
  consumes:
  - namespace: amex-preferences
    type: http
    baseUri: https://api.americanexpress.com/v1/preferences
    authentication:
      type: bearer
      token: $secrets.amex_preferences_token
    resources:
    - name: paperless
      path: /accounts/{account_id}/paperless
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-paperless-status
        method: GET
Open in Framework → View in Fleet → cardholder-paperless-preference-lookup.yml

When a cardholder dispute is filed, retrieves dispute details from the disputes platform, creates a Jira case for the disputes team, and posts a Slack notification to the resolution channel.

naftiko: '0.5'
info:
  label: Merchant Dispute Resolution Workflow
  description: When a cardholder dispute is filed, retrieves dispute details from the disputes platform, creates a Jira case for the disputes team, and posts a Slack notification to the resolution channel.
  tags:
  - disputes
  - payments
  - jira
  - slack
  - customer-support
capability:
  exposes:
  - type: mcp
    namespace: disputes-ops
    port: 8080
    tools:
    - name: open-dispute-case
      description: Given a dispute ID, fetch dispute details and open a Jira issue for the disputes resolution team. Post a Slack alert to the disputes channel with key context. Use when a new cardholder dispute requires case management.
      inputParameters:
      - name: dispute_id
        in: body
        type: string
        description: The unique dispute identifier from the disputes platform.
      - name: jira_project_key
        in: body
        type: string
        description: The Jira project key for dispute cases (e.g., DISP).
      steps:
      - name: get-dispute
        type: call
        call: amex-disputes.get-dispute
        with:
          dispute_id: '{{dispute_id}}'
      - name: create-jira-issue
        type: call
        call: jira.create-issue
        with:
          project_key: '{{jira_project_key}}'
          issuetype: Task
          summary: Dispute {{dispute_id}} — {{get-dispute.merchant_name}} ${{get-dispute.amount}}
          description: 'Cardholder: {{get-dispute.cardholder_name}}

            Merchant: {{get-dispute.merchant_name}}

            Amount: {{get-dispute.amount}} {{get-dispute.currency}}

            Date: {{get-dispute.transaction_date}}'
      - name: post-slack-alert
        type: call
        call: slack.post-message
        with:
          channel: disputes-team
          text: 'New dispute opened: {{dispute_id}} | Merchant: {{get-dispute.merchant_name}} | Amount: ${{get-dispute.amount}} | Jira: {{create-jira-issue.key}}'
  consumes:
  - namespace: amex-disputes
    type: http
    baseUri: https://api.americanexpress.com/v1/disputes
    authentication:
      type: bearer
      token: $secrets.amex_disputes_token
    resources:
    - name: dispute
      path: /disputes/{dispute_id}
      inputParameters:
      - name: dispute_id
        in: path
      operations:
      - name: get-dispute
        method: GET
  - namespace: jira
    type: http
    baseUri: https://americanexpress.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issue
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - namespace: slack
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → merchant-dispute-resolution-workflow.yml

Launches a customer retention campaign by identifying at-risk cardholders in Snowflake, creating a Mailchimp campaign, and logging results in Salesforce.

naftiko: '0.5'
info:
  label: Mailchimp Customer Retention Campaign
  description: Launches a customer retention campaign by identifying at-risk cardholders in Snowflake, creating a Mailchimp campaign, and logging results in Salesforce.
  tags:
  - marketing
  - mailchimp
  - snowflake
  - salesforce
  - retention
capability:
  exposes:
  - type: mcp
    namespace: retention-campaign
    port: 8080
    tools:
    - name: launch-retention-campaign
      description: Identify at-risk cardholders and launch a retention email campaign. Use for periodic retention outreach.
      inputParameters: []
      steps:
      - name: find-at-risk
        type: call
        call: snowflake.run-query
        with:
          query: SELECT account_id, email FROM RETENTION_DB.PUBLIC.AT_RISK_CARDHOLDERS WHERE churn_score > 0.7
      - name: create-campaign
        type: call
        call: mailchimp.create-campaign
        with:
          type: regular
          subject_line: We miss you — exclusive offer inside
          from_name: American Express
      - name: send
        type: call
        call: mailchimp.send-campaign
        with:
          campaign_id: '{{create-campaign.id}}'
      - name: log-campaign
        type: call
        call: salesforce.create-campaign
        with:
          Name: Retention — {{create-campaign.id}}
          Type: Email
          Status: Sent
  consumes:
  - namespace: snowflake
    type: http
    baseUri: https://americanexpress.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - namespace: mailchimp
    type: http
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: basic
      username: apikey
      password: $secrets.mailchimp_api_key
    resources:
    - name: campaigns
      path: /campaigns
      operations:
      - name: create-campaign
        method: POST
      - name: send-campaign
        method: POST
  - namespace: salesforce
    type: http
    baseUri: https://americanexpress.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign
      operations:
      - name: create-campaign
        method: POST
Open in Framework → View in Fleet → mailchimp-customer-retention-campaign.yml

Retrieves the primary mailing address on file for a cardholder account.

naftiko: '0.5'
info:
  label: Cardholder Address on File Lookup
  description: Retrieves the primary mailing address on file for a cardholder account.
  tags:
  - cardholder
  - accounts
  - data
capability:
  exposes:
  - type: mcp
    namespace: amex-accounts
    port: 8080
    tools:
    - name: get-address
      description: Given a cardholder account ID, return the primary mailing address on file. Use when verifying cardholder address information.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The cardholder account ID.
      call: amex-accounts.get-address
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: street
        type: string
        mapping: $.street
      - name: city
        type: string
        mapping: $.city
      - name: state
        type: string
        mapping: $.state
      - name: zip
        type: string
        mapping: $.zip
      - name: country
        type: string
        mapping: $.country
  consumes:
  - namespace: amex-accounts
    type: http
    baseUri: https://api.americanexpress.com/v1/accounts
    authentication:
      type: bearer
      token: $secrets.amex_accounts_token
    resources:
    - name: address
      path: /accounts/{account_id}/address
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-address
        method: GET
Open in Framework → View in Fleet → cardholder-address-on-file-lookup.yml

Synchronizes employer brand campaign data from LinkedIn to Snowflake analytics, refreshes the Tableau dashboard, and sends a performance summary to the recruitment marketing team via Slack.

naftiko: '0.5'
info:
  label: LinkedIn Employer Brand Campaign Sync
  description: Synchronizes employer brand campaign data from LinkedIn to Snowflake analytics, refreshes the Tableau dashboard, and sends a performance summary to the recruitment marketing team via Slack.
  tags:
  - linkedin
  - marketing
  - snowflake
  - tableau
  - slack
capability:
  exposes:
  - type: mcp
    namespace: linkedin-sync
    port: 8080
    tools:
    - name: sync-linkedin-campaign
      description: Sync LinkedIn campaign data to analytics and notify the team. Use after a campaign period ends.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: LinkedIn campaign ID.
      steps:
      - name: get-campaign
        type: call
        call: linkedin.get-campaign
        with:
          campaign_id: '{{campaign_id}}'
      - name: sync-data
        type: call
        call: snowflake.run-query
        with:
          query: INSERT INTO MARKETING_DB.PUBLIC.LINKEDIN_CAMPAIGNS VALUES ('{{campaign_id}}', '{{get-campaign.name}}', {{get-campaign.impressions}}, {{get-campaign.clicks}}, {{get-campaign.spend}})
      - name: refresh-dash
        type: call
        call: tableau.refresh-extract
        with:
          site_id: $secrets.tableau_site_id
          datasource_id: $secrets.linkedin_datasource_id
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: recruitment-marketing
          text: 'LinkedIn campaign synced: {{get-campaign.name}} | Impressions: {{get-campaign.impressions}} | Clicks: {{get-campaign.clicks}} | Spend: ${{get-campaign.spend}}'
  consumes:
  - namespace: linkedin
    type: http
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: campaigns
      path: /adCampaignsV2/{campaign_id}
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-campaign
        method: GET
  - namespace: snowflake
    type: http
    baseUri: https://americanexpress.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - namespace: tableau
    type: http
    baseUri: https://americanexpress.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: extracts
      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
  - namespace: slack
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → linkedin-employer-brand-campaign-sync.yml

When an employee termination is recorded in Workday, cancels the employee's corporate card account and opens a ServiceNow offboarding task.

naftiko: '0.5'
info:
  label: Employee Offboarding Card Cancellation
  description: When an employee termination is recorded in Workday, cancels the employee's corporate card account and opens a ServiceNow offboarding task.
  tags:
  - hr
  - offboarding
  - workday
  - payments
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: cancel-employee-card
      description: Given a Workday employee ID and termination date, retrieve the employee's corporate card account ID, cancel the card, and open a ServiceNow offboarding task. Invoke on confirmed employee termination.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: The Workday worker ID of the departing employee.
      - name: termination_date
        in: body
        type: string
        description: The effective termination date in YYYY-MM-DD format.
      - name: card_account_id
        in: body
        type: string
        description: The corporate card account ID to cancel.
      steps:
      - name: get-employee
        type: call
        call: workday-offboard.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: cancel-card
        type: call
        call: amex-corp-offboard.cancel-account
        with:
          account_id: '{{card_account_id}}'
          reason: employee_termination
          effective_date: '{{termination_date}}'
      - name: open-offboarding-task
        type: call
        call: servicenow-offboard.create-task
        with:
          category: hr_offboarding
          short_description: Corporate card cancelled for {{get-employee.full_name}} ({{workday_employee_id}})
          description: 'Card account {{card_account_id}} cancelled effective {{termination_date}}. Cancel ref: {{cancel-card.confirmation_id}}'
  consumes:
  - namespace: workday-offboard
    type: http
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_access_token
    resources:
    - name: worker
      path: /workers/{worker_id}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - namespace: amex-corp-offboard
    type: http
    baseUri: https://api.americanexpress.com/v1/corporate
    authentication:
      type: bearer
      token: $secrets.amex_corp_token
    resources:
    - name: account
      path: /accounts/{account_id}/cancel
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: cancel-account
        method: POST
  - namespace: servicenow-offboard
    type: http
    baseUri: https://americanexpress.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: task
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → employee-offboarding-card-cancellation.yml

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

naftiko: '0.5'
info:
  label: GitHub Repository Status Check
  description: Retrieves the latest commit status and open issue count for a given GitHub repository.
  tags:
  - github
  - engineering
  - development
capability:
  exposes:
  - type: mcp
    namespace: github
    port: 8080
    tools:
    - name: get-repo-status
      description: Given a repository name, return the default branch, open issues count, and last updated timestamp. Use when checking repository health.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: The GitHub repository name.
      call: github.get-repo-status
      with:
        repo_name: '{{repo_name}}'
      outputParameters:
      - name: default_branch
        type: string
        mapping: $.default_branch
      - name: open_issues_count
        type: number
        mapping: $.open_issues_count
      - name: updated_at
        type: string
        mapping: $.updated_at
  consumes:
  - namespace: github
    type: http
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: repo
      path: /repos/americanexpress/{repo_name}
      inputParameters:
      - name: repo_name
        in: path
      operations:
      - name: get-repo-status
        method: GET
Open in Framework → View in Fleet → github-repository-status-check.yml

Retrieves the current list of open job requisitions from Workday for a specified organization and returns structured data for workforce planning analysis.

naftiko: '0.5'
info:
  label: Workday Open Requisition Report
  description: Retrieves the current list of open job requisitions from Workday for a specified organization and returns structured data for workforce planning analysis.
  tags:
  - hr
  - recruiting
  - workday
  - workforce-planning
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: recruiting
    port: 8080
    tools:
    - name: get-open-requisitions
      description: Given a Workday organization ID, return all open job requisitions including job title, department, level, and days open. Use when HR business partners or talent acquisition teams need visibility into open headcount.
      inputParameters:
      - name: organization_id
        in: body
        type: string
        description: The Workday organization ID to retrieve open requisitions for.
      call: workday-recruiting.get-requisitions
      with:
        organization_id: '{{organization_id}}'
      outputParameters:
      - name: requisitions
        type: array
        mapping: $.data
      - name: total_open
        type: number
        mapping: $.total
  consumes:
  - namespace: workday-recruiting
    type: http
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_access_token
    resources:
    - name: requisitions
      path: /jobRequisitions
      inputParameters:
      - name: organization_id
        in: query
      operations:
      - name: get-requisitions
        method: GET
Open in Framework → View in Fleet → workday-open-requisition-report.yml

Automatically remediates common ServiceNow incidents by identifying the issue type, executing a remediation runbook, updating the incident, and notifying the on-call engineer via PagerDuty.

naftiko: '0.5'
info:
  label: ServiceNow Incident Auto-Remediation
  description: Automatically remediates common ServiceNow incidents by identifying the issue type, executing a remediation runbook, updating the incident, and notifying the on-call engineer via PagerDuty.
  tags:
  - servicenow
  - automation
  - pagerduty
  - incident-management
capability:
  exposes:
  - type: mcp
    namespace: auto-remediation
    port: 8080
    tools:
    - name: auto-remediate-incident
      description: Auto-remediate a ServiceNow incident by executing a runbook and notifying on-call. Use when an incident matches an auto-remediation pattern.
      inputParameters:
      - name: incident_id
        in: body
        type: string
        description: ServiceNow incident ID.
      steps:
      - name: get-incident
        type: call
        call: servicenow.get-incident
        with:
          incident_id: '{{incident_id}}'
      - name: run-remediation
        type: call
        call: amex-runbooks.execute-runbook
        with:
          runbook_id: '{{get-incident.category}}-auto-fix'
          incident_id: '{{incident_id}}'
          ci: '{{get-incident.cmdb_ci}}'
      - name: update-incident
        type: call
        call: servicenow.update-incident
        with:
          incident_id: '{{incident_id}}'
          state: resolved
          work_notes: 'Auto-remediated via runbook. Result: {{run-remediation.status}}'
      - name: notify-oncall
        type: call
        call: pagerduty.create-incident
        with:
          title: 'Auto-remediation completed: {{incident_id}}'
          body: 'Incident {{incident_id}} was auto-remediated. Status: {{run-remediation.status}}'
  consumes:
  - namespace: servicenow
    type: http
    baseUri: https://americanexpress.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident/{incident_id}
      inputParameters:
      - name: incident_id
        in: path
      operations:
      - name: get-incident
        method: GET
      - name: update-incident
        method: PATCH
  - namespace: amex-runbooks
    type: http
    baseUri: https://api.americanexpress.com/v1/automation
    authentication:
      type: bearer
      token: $secrets.amex_automation_token
    resources:
    - name: runbooks
      path: /runbooks/{runbook_id}/execute
      inputParameters:
      - name: runbook_id
        in: path
      operations:
      - name: execute-runbook
        method: POST
  - namespace: pagerduty
    type: http
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → servicenow-incident-auto-remediation.yml

Returns the most recent transactions for a cardholder account from the transaction history API.

naftiko: '0.5'
info:
  label: Cardholder Recent Transactions Lookup
  description: Returns the most recent transactions for a cardholder account from the transaction history API.
  tags:
  - payments
  - cardholder
  - transactions
capability:
  exposes:
  - type: mcp
    namespace: amex-transactions
    port: 8080
    tools:
    - name: get-recent-transactions
      description: Given a cardholder account ID, return the most recent transactions including merchant, amount, and date. Use when reviewing recent account activity.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The cardholder account ID.
      call: amex-transactions.get-recent-transactions
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: transactions
        type: array
        mapping: $.transactions
      - name: count
        type: number
        mapping: $.count
  consumes:
  - namespace: amex-transactions
    type: http
    baseUri: https://api.americanexpress.com/v1/transactions
    authentication:
      type: bearer
      token: $secrets.amex_transactions_token
    resources:
    - name: transactions
      path: /accounts/{account_id}/transactions
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-recent-transactions
        method: GET
Open in Framework → View in Fleet → cardholder-recent-transactions-lookup.yml

Generates and delivers international fee disclosures for cardholders traveling abroad by fetching fee schedules, generating the disclosure document, and emailing it to the cardholder.

naftiko: '0.5'
info:
  label: Cardholder International Fee Disclosure
  description: Generates and delivers international fee disclosures for cardholders traveling abroad by fetching fee schedules, generating the disclosure document, and emailing it to the cardholder.
  tags:
  - cardholder
  - compliance
  - travel
  - notifications
capability:
  exposes:
  - type: mcp
    namespace: fee-disclosure
    port: 8080
    tools:
    - name: send-fee-disclosure
      description: Generate and deliver an international fee disclosure. Use when a cardholder sets a travel notification for an international destination.
      inputParameters:
      - name: product_id
        in: body
        type: string
        description: Card product ID.
      - name: destination
        in: body
        type: string
        description: Destination country.
      - name: cardholder_email
        in: body
        type: string
        description: Cardholder email.
      steps:
      - name: get-fees
        type: call
        call: amex-fees.get-fee-schedule
        with:
          product_id: '{{product_id}}'
          destination_country: '{{destination}}'
      - name: generate-doc
        type: call
        call: amex-docs.generate-disclosure
        with:
          template: international-fee-disclosure
          fee_schedule: '{{get-fees.schedule}}'
          destination: '{{destination}}'
      - name: deliver
        type: call
        call: email.send-email
        with:
          to: '{{cardholder_email}}'
          subject: International Fee Disclosure for {{destination}}
          body: 'Attached is your fee disclosure for travel to {{destination}}. Foreign transaction fee: {{get-fees.fx_fee_pct}}%.'
  consumes:
  - namespace: amex-fees
    type: http
    baseUri: https://api.americanexpress.com/v1/fees
    authentication:
      type: bearer
      token: $secrets.amex_fees_token
    resources:
    - name: schedules
      path: /products/{product_id}/international-fees
      inputParameters:
      - name: product_id
        in: path
      operations:
      - name: get-fee-schedule
        method: GET
  - namespace: amex-docs
    type: http
    baseUri: https://api.americanexpress.com/v1/documents
    authentication:
      type: bearer
      token: $secrets.amex_docs_token
    resources:
    - name: disclosures
      path: /generate
      operations:
      - name: generate-disclosure
        method: POST
  - namespace: email
    type: http
    baseUri: https://api.americanexpress.com/v1/notifications
    authentication:
      type: bearer
      token: $secrets.amex_notifications_token
    resources:
    - name: messages
      path: /email/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → cardholder-international-fee-disclosure.yml

On a CI/CD pipeline failure in GitHub Actions, creates a Datadog event marker, opens a Jira bug, and posts an alert to the engineering Slack channel.

naftiko: '0.5'
info:
  label: Application Pipeline Failure Response
  description: On a CI/CD pipeline failure in GitHub Actions, creates a Datadog event marker, opens a Jira bug, and posts an alert to the engineering Slack channel.
  tags:
  - devops
  - github-actions
  - datadog
  - jira
  - slack
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: devops-ops
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a GitHub Actions workflow failure, create a Datadog event, open a Jira bug, and alert Slack. Invoke when a protected-branch pipeline fails in any American Express engineering repository.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: The GitHub repository name where the failure occurred.
      - name: workflow_name
        in: body
        type: string
        description: The name of the failed GitHub Actions workflow.
      - name: run_id
        in: body
        type: string
        description: The GitHub Actions run ID for the failed workflow.
      - name: commit_sha
        in: body
        type: string
        description: The commit SHA that triggered the failed run.
      - name: branch
        in: body
        type: string
        description: The branch on which the failure occurred.
      steps:
      - name: create-datadog-event
        type: call
        call: datadog.create-event
        with:
          title: 'Pipeline failure: {{repo_name}} / {{workflow_name}}'
          text: Run {{run_id}} failed on branch {{branch}} at commit {{commit_sha}}
          alert_type: error
          tags: repo:{{repo_name}},env:ci
      - name: open-jira-bug
        type: call
        call: jira-eng.create-issue
        with:
          project_key: ENG
          issuetype: Bug
          summary: '[CI Failure] {{repo_name}} — {{workflow_name}} on {{branch}}'
          description: 'Workflow: {{workflow_name}}

            Run ID: {{run_id}}

            Branch: {{branch}}

            Commit: {{commit_sha}}

            Datadog event: {{create-datadog-event.id}}'
      - name: post-alert
        type: call
        call: slack-eng.post-message
        with:
          channel: engineering-alerts
          text: 'Pipeline Failure | Repo: {{repo_name}} | Workflow: {{workflow_name}} | Branch: {{branch}} | Jira: {{open-jira-bug.key}}'
  consumes:
  - namespace: datadog
    type: http
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: event
      path: /events
      operations:
      - name: create-event
        method: POST
  - namespace: jira-eng
    type: http
    baseUri: https://americanexpress.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issue
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - namespace: slack-eng
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → application-pipeline-failure-response.yml

Verifies whether a specific merchant is enrolled in the American Express acceptance network.

naftiko: '0.5'
info:
  label: Merchant Acceptance Verification
  description: Verifies whether a specific merchant is enrolled in the American Express acceptance network.
  tags:
  - merchants
  - payments
  - network
capability:
  exposes:
  - type: mcp
    namespace: amex-network
    port: 8080
    tools:
    - name: verify-acceptance
      description: Given a merchant ID, verify their enrollment in the Amex acceptance network and return network status and enrollment date. Use when confirming merchant acceptance.
      inputParameters:
      - name: merchant_id
        in: body
        type: string
        description: The merchant identifier.
      call: amex-network.verify-acceptance
      with:
        merchant_id: '{{merchant_id}}'
      outputParameters:
      - name: accepted
        type: boolean
        mapping: $.accepted
      - name: network_status
        type: string
        mapping: $.network_status
      - name: enrollment_date
        type: string
        mapping: $.enrollment_date
  consumes:
  - namespace: amex-network
    type: http
    baseUri: https://api.americanexpress.com/v1/network
    authentication:
      type: bearer
      token: $secrets.amex_network_token
    resources:
    - name: acceptance
      path: /merchants/{merchant_id}/acceptance
      inputParameters:
      - name: merchant_id
        in: path
      operations:
      - name: verify-acceptance
        method: GET
Open in Framework → View in Fleet → merchant-acceptance-verification.yml

Enriches Salesforce leads with ZoomInfo company data, calculates a lead score, updates the lead record, and notifies the assigned sales rep via Slack.

naftiko: '0.5'
info:
  label: Salesforce Lead Scoring Enrichment
  description: Enriches Salesforce leads with ZoomInfo company data, calculates a lead score, updates the lead record, and notifies the assigned sales rep via Slack.
  tags:
  - salesforce
  - zoominfo
  - sales
  - slack
capability:
  exposes:
  - type: mcp
    namespace: lead-enrichment
    port: 8080
    tools:
    - name: enrich-lead
      description: Enrich a Salesforce lead with ZoomInfo data and notify the sales rep. Use when a new high-potential lead enters the pipeline.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: Salesforce lead ID.
      - name: company_name
        in: body
        type: string
        description: Company name to enrich.
      - name: sales_rep_channel
        in: body
        type: string
        description: Sales rep Slack channel.
      steps:
      - name: enrich
        type: call
        call: zoominfo.search-company
        with:
          company_name: '{{company_name}}'
      - name: update-lead
        type: call
        call: salesforce.update-lead
        with:
          lead_id: '{{lead_id}}'
          Company_Size__c: '{{enrich.employee_count}}'
          Revenue__c: '{{enrich.revenue}}'
          Lead_Score__c: '{{enrich.score}}'
      - name: notify-rep
        type: call
        call: slack.post-message
        with:
          channel: '{{sales_rep_channel}}'
          text: 'Lead enriched: {{company_name}} | Revenue: ${{enrich.revenue}} | Score: {{enrich.score}} | Employees: {{enrich.employee_count}}'
  consumes:
  - namespace: zoominfo
    type: http
    baseUri: https://api.zoominfo.com
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: companies
      path: /search/company
      operations:
      - name: search-company
        method: POST
  - namespace: salesforce
    type: http
    baseUri: https://americanexpress.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
  - namespace: slack
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-lead-scoring-enrichment.yml

Sets up a payment plan for a cardholder by evaluating eligibility, creating the plan, updating the billing system, and confirming via email.

naftiko: '0.5'
info:
  label: Cardholder Payment Plan Setup
  description: Sets up a payment plan for a cardholder by evaluating eligibility, creating the plan, updating the billing system, and confirming via email.
  tags:
  - cardholder
  - billing
  - payments
  - customer-support
capability:
  exposes:
  - type: mcp
    namespace: payment-plans
    port: 8080
    tools:
    - name: setup-payment-plan
      description: Create a payment plan for a cardholder and confirm enrollment. Use when a cardholder requests to pay a balance in installments.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Cardholder account ID.
      - name: amount
        in: body
        type: string
        description: Plan amount.
      - name: term_months
        in: body
        type: string
        description: Number of months for the plan.
      steps:
      - name: get-account
        type: call
        call: amex-accounts.get-account
        with:
          account_id: '{{account_id}}'
      - name: create-plan
        type: call
        call: amex-plans.create-plan
        with:
          account_id: '{{account_id}}'
          amount: '{{amount}}'
          term_months: '{{term_months}}'
          interest_rate: '{{get-account.plan_rate}}'
      - name: confirm
        type: call
        call: email.send-email
        with:
          to: '{{get-account.email}}'
          subject: Payment plan confirmed
          body: 'Your payment plan of ${{amount}} over {{term_months}} months has been set up. Monthly payment: ${{create-plan.monthly_payment}}. Plan ID: {{create-plan.plan_id}}'
  consumes:
  - namespace: amex-accounts
    type: http
    baseUri: https://api.americanexpress.com/v1/accounts
    authentication:
      type: bearer
      token: $secrets.amex_accounts_token
    resources:
    - name: account
      path: /accounts/{account_id}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
  - namespace: amex-plans
    type: http
    baseUri: https://api.americanexpress.com/v1/payment-plans
    authentication:
      type: bearer
      token: $secrets.amex_plans_token
    resources:
    - name: plans
      path: /plans
      operations:
      - name: create-plan
        method: POST
  - namespace: email
    type: http
    baseUri: https://api.americanexpress.com/v1/notifications
    authentication:
      type: bearer
      token: $secrets.amex_notifications_token
    resources:
    - name: messages
      path: /email/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → cardholder-payment-plan-setup.yml

Manages vendor contract renewals by fetching contract details from DocuSign, creating a review task in Jira, and notifying procurement via Slack and email.

naftiko: '0.5'
info:
  label: Vendor Contract Renewal Workflow
  description: Manages vendor contract renewals by fetching contract details from DocuSign, creating a review task in Jira, and notifying procurement via Slack and email.
  tags:
  - procurement
  - docusign
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: contract-renewal
    port: 8080
    tools:
    - name: process-renewal
      description: Fetch contract details, create a review task, and notify stakeholders. Use when a vendor contract approaches its renewal date.
      inputParameters:
      - name: envelope_id
        in: body
        type: string
        description: DocuSign envelope ID.
      - name: vendor_name
        in: body
        type: string
        description: Vendor name.
      - name: contract_value
        in: body
        type: string
        description: Contract value.
      - name: vendor_email
        in: body
        type: string
        description: Vendor contact email.
      steps:
      - name: get-contract
        type: call
        call: docusign.get-envelope
        with:
          ds_account_id: $secrets.docusign_account_id
          envelope_id: '{{envelope_id}}'
      - name: create-review
        type: call
        call: jira.create-issue
        with:
          project_key: PROC
          issuetype: Task
          summary: 'Contract renewal: {{get-contract.emailSubject}}'
          description: 'Vendor: {{vendor_name}}. Expiry: {{get-contract.expireAfter}}. Value: ${{contract_value}}.'
      - name: notify-procurement
        type: call
        call: slack.post-message
        with:
          channel: procurement
          text: 'Contract renewal due: {{vendor_name}} | Expiry: {{get-contract.expireAfter}} | Value: ${{contract_value}} | Jira: {{create-review.key}}'
      - name: notify-vendor
        type: call
        call: email.send-email
        with:
          to: '{{vendor_email}}'
          subject: Contract renewal notice
          body: Your contract with American Express is approaching renewal. Our procurement team will be in touch.
  consumes:
  - namespace: docusign
    type: http
    baseUri: https://na4.docusign.net/restapi/v2.1
    authentication:
      type: bearer
      token: $secrets.docusign_token
    resources:
    - name: envelopes
      path: /accounts/{ds_account_id}/envelopes/{envelope_id}
      inputParameters:
      - name: ds_account_id
        in: path
      - name: envelope_id
        in: path
      operations:
      - name: get-envelope
        method: GET
  - namespace: jira
    type: http
    baseUri: https://americanexpress.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issue
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - namespace: slack
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
  - namespace: email
    type: http
    baseUri: https://api.americanexpress.com/v1/notifications
    authentication:
      type: bearer
      token: $secrets.amex_notifications_token
    resources:
    - name: messages
      path: /email/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → vendor-contract-renewal-workflow.yml

When a Terraform Cloud plan is created for a production workspace, retrieves plan details, posts a summary to the engineering Slack channel, and creates a ServiceNow change request for approval.

naftiko: '0.5'
info:
  label: Terraform Infrastructure Provisioning Approval
  description: When a Terraform Cloud plan is created for a production workspace, retrieves plan details, posts a summary to the engineering Slack channel, and creates a ServiceNow change request for approval.
  tags:
  - cloud
  - infrastructure
  - terraform
  - servicenow
  - slack
  - devops
capability:
  exposes:
  - type: mcp
    namespace: infra-provisioning
    port: 8080
    tools:
    - name: request-infra-change-approval
      description: Given a Terraform Cloud workspace ID and run ID, fetch the plan summary, open a ServiceNow change request for the infrastructure change, and post a Slack notification to the engineering channel with plan details. Use when production Terraform plans need change management approval.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: The Terraform Cloud workspace ID where the plan was created.
      - name: run_id
        in: body
        type: string
        description: The Terraform Cloud run ID for the plan.
      steps:
      - name: get-plan
        type: call
        call: terraform.get-run
        with:
          run_id: '{{run_id}}'
      - name: create-change
        type: call
        call: servicenow-infra.create-change
        with:
          category: infrastructure
          short_description: 'Terraform plan requires approval: workspace {{workspace_id}}'
          description: 'Run ID: {{run_id}}

            Workspace: {{workspace_id}}

            Add: {{get-plan.resource_additions}}

            Change: {{get-plan.resource_changes}}

            Destroy: {{get-plan.resource_destructions}}'
          risk: moderate
      - name: post-notification
        type: call
        call: slack-infra.post-message
        with:
          channel: infra-changes
          text: 'Terraform Plan Pending Approval | Workspace: {{workspace_id}} | Run: {{run_id}} | +{{get-plan.resource_additions}} ~{{get-plan.resource_changes}} -{{get-plan.resource_destructions}} | SNOW: {{create-change.number}}'
  consumes:
  - namespace: terraform
    type: http
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: run
      path: /runs/{run_id}
      inputParameters:
      - name: run_id
        in: path
      operations:
      - name: get-run
        method: GET
  - namespace: servicenow-infra
    type: http
    baseUri: https://americanexpress.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - namespace: slack-infra
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → terraform-infrastructure-provisioning-approval.yml

Retrieves the current status of an open dispute for a cardholder from the disputes platform.

naftiko: '0.5'
info:
  label: Cardholder Dispute Status Lookup
  description: Retrieves the current status of an open dispute for a cardholder from the disputes platform.
  tags:
  - disputes
  - cardholder
  - customer-support
capability:
  exposes:
  - type: mcp
    namespace: amex-disputes
    port: 8080
    tools:
    - name: get-dispute-status
      description: Given a dispute ID, return the current status, resolution ETA, and last update timestamp. Use when a cardholder inquires about an ongoing dispute.
      inputParameters:
      - name: dispute_id
        in: body
        type: string
        description: The dispute identifier.
      call: amex-disputes.get-dispute-status
      with:
        dispute_id: '{{dispute_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: resolution_eta
        type: string
        mapping: $.resolution_eta
      - name: last_update
        type: string
        mapping: $.last_update
  consumes:
  - namespace: amex-disputes
    type: http
    baseUri: https://api.americanexpress.com/v1/disputes
    authentication:
      type: bearer
      token: $secrets.amex_disputes_token
    resources:
    - name: status
      path: /disputes/{dispute_id}/status
      inputParameters:
      - name: dispute_id
        in: path
      operations:
      - name: get-dispute-status
        method: GET
Open in Framework → View in Fleet → cardholder-dispute-status-lookup.yml

Orchestrates new merchant onboarding by creating the merchant record, provisioning payment gateway credentials, assigning a relationship manager in Salesforce, and sending a welcome kit email.

naftiko: '0.5'
info:
  label: New Merchant Onboarding Orchestration
  description: Orchestrates new merchant onboarding by creating the merchant record, provisioning payment gateway credentials, assigning a relationship manager in Salesforce, and sending a welcome kit email.
  tags:
  - merchants
  - onboarding
  - salesforce
  - payments
capability:
  exposes:
  - type: mcp
    namespace: merchant-onboard
    port: 8080
    tools:
    - name: onboard-merchant
      description: Onboard a new merchant by creating their record, provisioning gateway credentials, creating a Salesforce account, and sending a welcome email. Use when a new merchant is approved for the network.
      inputParameters:
      - name: merchant_name
        in: body
        type: string
        description: Legal name of the merchant.
      - name: mcc_code
        in: body
        type: string
        description: Merchant category code.
      - name: contact_email
        in: body
        type: string
        description: Primary contact email.
      steps:
      - name: create-merchant
        type: call
        call: amex-merchants.create-merchant
        with:
          name: '{{merchant_name}}'
          mcc: '{{mcc_code}}'
          contact_email: '{{contact_email}}'
      - name: provision-gateway
        type: call
        call: amex-gateway.provision-credentials
        with:
          merchant_id: '{{create-merchant.merchant_id}}'
      - name: create-sf-account
        type: call
        call: salesforce.create-account
        with:
          Name: '{{merchant_name}}'
          Type: Merchant
          AmexMerchantId__c: '{{create-merchant.merchant_id}}'
      - name: send-welcome
        type: call
        call: email.send-email
        with:
          to: '{{contact_email}}'
          subject: Welcome to the American Express Network
          body: Your merchant ID is {{create-merchant.merchant_id}}. Gateway credentials have been provisioned. Your account manager will reach out shortly.
  consumes:
  - namespace: amex-merchants
    type: http
    baseUri: https://api.americanexpress.com/v1/merchants
    authentication:
      type: bearer
      token: $secrets.amex_merchant_token
    resources:
    - name: merchant
      path: /merchants
      operations:
      - name: create-merchant
        method: POST
  - namespace: amex-gateway
    type: http
    baseUri: https://api.americanexpress.com/v1/gateway
    authentication:
      type: bearer
      token: $secrets.amex_gateway_token
    resources:
    - name: credentials
      path: /merchants/{merchant_id}/credentials
      inputParameters:
      - name: merchant_id
        in: path
      operations:
      - name: provision-credentials
        method: POST
  - namespace: salesforce
    type: http
    baseUri: https://americanexpress.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
  - namespace: email
    type: http
    baseUri: https://api.americanexpress.com/v1/notifications
    authentication:
      type: bearer
      token: $secrets.amex_notifications_token
    resources:
    - name: messages
      path: /email/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → new-merchant-onboarding-orchestration.yml

When a cardholder account triggers a KYC review flag, generates a document request via the customer communications platform and creates a Salesforce case for the KYC team to track.

naftiko: '0.5'
info:
  label: Cardholder KYC Document Request
  description: When a cardholder account triggers a KYC review flag, generates a document request via the customer communications platform and creates a Salesforce case for the KYC team to track.
  tags:
  - kyc
  - compliance
  - payments
  - salesforce
  - customer-support
capability:
  exposes:
  - type: mcp
    namespace: kyc-ops
    port: 8080
    tools:
    - name: initiate-kyc-review
      description: Given a cardholder account ID and KYC flag reason, create a Salesforce KYC case and send a document request notification to the cardholder. Use when account activity triggers a Know Your Customer review requirement.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The cardholder account ID that triggered the KYC flag.
      - name: flag_reason
        in: body
        type: string
        description: The reason the KYC review was triggered (e.g., high_transaction_volume, new_market).
      - name: cardholder_email
        in: body
        type: string
        description: The cardholder's email address for document request communications.
      steps:
      - name: create-kyc-case
        type: call
        call: salesforce-kyc.create-case
        with:
          account_id: '{{account_id}}'
          subject: KYC Review Required — Account {{account_id}}
          description: 'KYC flag reason: {{flag_reason}}'
          type: KYC Review
          priority: High
      - name: send-doc-request
        type: call
        call: amex-comms.send-email
        with:
          to: '{{cardholder_email}}'
          template_id: kyc_document_request
          account_id: '{{account_id}}'
          case_number: '{{create-kyc-case.case_number}}'
  consumes:
  - namespace: salesforce-kyc
    type: http
    baseUri: https://americanexpress.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: case
      path: /sobjects/Case
      operations:
      - name: create-case
        method: POST
  - namespace: amex-comms
    type: http
    baseUri: https://api.americanexpress.com/v1/communications
    authentication:
      type: bearer
      token: $secrets.amex_comms_token
    resources:
    - name: email
      path: /email/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → cardholder-kyc-document-request.yml

Classifies documents uploaded to Box by extracting metadata, running classification, updating Box metadata, and logging results in ServiceNow.

naftiko: '0.5'
info:
  label: Box Document Classification Workflow
  description: Classifies documents uploaded to Box by extracting metadata, running classification, updating Box metadata, and logging results in ServiceNow.
  tags:
  - box
  - document-management
  - classification
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: doc-classify
    port: 8080
    tools:
    - name: classify-document
      description: Classify a Box document and update its metadata. Use when a new document is uploaded to a monitored Box folder.
      inputParameters:
      - name: file_id
        in: body
        type: string
        description: Box file ID.
      steps:
      - name: get-file
        type: call
        call: box.get-file
        with:
          file_id: '{{file_id}}'
      - name: classify
        type: call
        call: amex-classify.classify-document
        with:
          file_name: '{{get-file.name}}'
          file_type: '{{get-file.extension}}'
      - name: update-meta
        type: call
        call: box.update-metadata
        with:
          file_id: '{{file_id}}'
          classification: '{{classify.classification}}'
      - name: log-result
        type: call
        call: servicenow.create-record
        with:
          file_id: '{{file_id}}'
          classification: '{{classify.classification}}'
  consumes:
  - namespace: box
    type: http
    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
      - name: update-metadata
        method: POST
  - namespace: amex-classify
    type: http
    baseUri: https://api.americanexpress.com/v1/ai
    authentication:
      type: bearer
      token: $secrets.amex_ai_token
    resources:
    - name: classify
      path: /classify
      operations:
      - name: classify-document
        method: POST
  - namespace: servicenow
    type: http
    baseUri: https://americanexpress.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/u_document_classification
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → box-document-classification-workflow.yml

Detects Terraform infrastructure drift by triggering a plan, comparing state, creating a Jira remediation ticket, and alerting the platform team via Slack.

naftiko: '0.5'
info:
  label: Terraform Infrastructure Drift Detection
  description: Detects Terraform infrastructure drift by triggering a plan, comparing state, creating a Jira remediation ticket, and alerting the platform team via Slack.
  tags:
  - terraform
  - infrastructure
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: drift-detection
    port: 8080
    tools:
    - name: detect-drift
      description: Trigger a Terraform plan to detect drift and report findings. Use during scheduled drift detection runs.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: Terraform Cloud workspace ID.
      steps:
      - name: trigger-plan
        type: call
        call: terraform-cloud.create-run
        with:
          workspace_id: '{{workspace_id}}'
          is_destroy: 'false'
          message: Drift detection run
      - name: check-plan
        type: call
        call: terraform-cloud.get-run
        with:
          run_id: '{{trigger-plan.id}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: PLAT
          issuetype: Task
          summary: 'Terraform drift detected: {{workspace_id}}'
          description: 'Resources to add: {{check-plan.resource_additions}}. To change: {{check-plan.resource_changes}}. To destroy: {{check-plan.resource_destructions}}.'
      - name: alert-team
        type: call
        call: slack.post-message
        with:
          channel: platform-engineering
          text: 'Drift detected in {{workspace_id}} | +{{check-plan.resource_additions}} ~{{check-plan.resource_changes}} -{{check-plan.resource_destructions}} | Jira: {{create-ticket.key}}'
  consumes:
  - namespace: terraform-cloud
    type: http
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: runs
      path: /runs
      operations:
      - name: create-run
        method: POST
    - name: run-detail
      path: /runs/{run_id}
      inputParameters:
      - name: run_id
        in: path
      operations:
      - name: get-run
        method: GET
  - namespace: jira
    type: http
    baseUri: https://americanexpress.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issue
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - namespace: slack
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → terraform-infrastructure-drift-detection.yml

Scans GitHub pull requests for security vulnerabilities using SonarQube, posts findings as PR comments, and creates a Jira security issue if critical vulnerabilities are found.

naftiko: '0.5'
info:
  label: GitHub Pull Request Security Scan
  description: Scans GitHub pull requests for security vulnerabilities using SonarQube, posts findings as PR comments, and creates a Jira security issue if critical vulnerabilities are found.
  tags:
  - github
  - security
  - sonarqube
  - jira
capability:
  exposes:
  - type: mcp
    namespace: pr-security
    port: 8080
    tools:
    - name: scan-pr-security
      description: Scan a pull request for vulnerabilities and report findings. Use when a PR is opened against a protected branch.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository name.
      - name: pr_number
        in: body
        type: string
        description: Pull request number.
      steps:
      - name: get-pr
        type: call
        call: github.get-pr
        with:
          repo: '{{repo}}'
          pr_number: '{{pr_number}}'
      - name: scan
        type: call
        call: sonarqube.get-analysis
        with:
          projectKey: '{{repo}}-pr-{{pr_number}}'
      - name: comment
        type: call
        call: github.post-comment
        with:
          repo: '{{repo}}'
          pr_number: '{{pr_number}}'
          body: 'Security scan: {{scan.projectStatus.status}}. Vulnerabilities: {{scan.projectStatus.conditions}}'
      - name: create-sec-issue
        type: call
        call: jira.create-issue
        with:
          project_key: SEC
          issuetype: Bug
          summary: 'Security scan findings: {{repo}} PR#{{pr_number}}'
          description: 'Status: {{scan.projectStatus.status}}. PR: {{get-pr.html_url}}'
  consumes:
  - namespace: github
    type: http
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: pulls
      path: /repos/americanexpress/{repo}/pulls/{pr_number}
      inputParameters:
      - name: repo
        in: path
      - name: pr_number
        in: path
      operations:
      - name: get-pr
        method: GET
      - name: post-comment
        method: POST
  - namespace: sonarqube
    type: http
    baseUri: https://sonarqube.americanexpress.com/api
    authentication:
      type: bearer
      token: $secrets.sonarqube_token
    resources:
    - name: analysis
      path: /qualitygates/project_status
      operations:
      - name: get-analysis
        method: GET
  - namespace: jira
    type: http
    baseUri: https://americanexpress.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issue
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → github-pull-request-security-scan.yml

Routes compensation change requests through approval by fetching the proposal from Workday, creating a Jira approval task, and notifying HR leadership via Slack.

naftiko: '0.5'
info:
  label: Workday Compensation Change Approval
  description: Routes compensation change requests through approval by fetching the proposal from Workday, creating a Jira approval task, and notifying HR leadership via Slack.
  tags:
  - hr
  - workday
  - jira
  - slack
  - compensation
capability:
  exposes:
  - type: mcp
    namespace: comp-approval
    port: 8080
    tools:
    - name: route-comp-approval
      description: Route a compensation change through the approval workflow. Use when a manager submits a salary adjustment proposal.
      inputParameters:
      - name: proposal_id
        in: body
        type: string
        description: Workday compensation proposal ID.
      steps:
      - name: get-proposal
        type: call
        call: workday.get-proposal
        with:
          proposal_id: '{{proposal_id}}'
      - name: create-approval
        type: call
        call: jira.create-issue
        with:
          project_key: HRA
          issuetype: Task
          summary: Comp change approval — {{get-proposal.employee_name}}
          description: 'Current: ${{get-proposal.current_salary}}. Proposed: ${{get-proposal.proposed_salary}}. Reason: {{get-proposal.reason}}.'
      - name: notify-hr
        type: call
        call: slack.post-message
        with:
          channel: hr-leadership
          text: 'Comp change pending: {{get-proposal.employee_name}} | ${{get-proposal.current_salary}} → ${{get-proposal.proposed_salary}} | Jira: {{create-approval.key}}'
  consumes:
  - namespace: workday
    type: http
    baseUri: https://wd3-impl-services1.workday.com/ccx/service/amex
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: compensation
      path: /compensation/proposals/{proposal_id}
      inputParameters:
      - name: proposal_id
        in: path
      operations:
      - name: get-proposal
        method: GET
  - namespace: jira
    type: http
    baseUri: https://americanexpress.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issue
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - namespace: slack
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → workday-compensation-change-approval.yml

When a new employee is created in Workday, provisions a corporate card account and sends onboarding instructions via Microsoft Teams.

naftiko: '0.5'
info:
  label: New Employee Card Provisioning
  description: When a new employee is created in Workday, provisions a corporate card account and sends onboarding instructions via Microsoft Teams.
  tags:
  - hr
  - onboarding
  - workday
  - payments
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-provisioning
    port: 8080
    tools:
    - name: provision-employee-card
      description: Given a Workday employee ID, retrieve employee details, create a corporate card account, and send the cardholder a Teams message with activation instructions. Invoke during new hire onboarding.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: The Workday worker ID for the new hire.
      - name: cost_center
        in: body
        type: string
        description: The cost center code to associate with the new corporate card.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: create-card-account
        type: call
        call: amex-corp.create-card-account
        with:
          first_name: '{{get-employee.first_name}}'
          last_name: '{{get-employee.last_name}}'
          email: '{{get-employee.work_email}}'
          cost_center: '{{cost_center}}'
      - name: send-instructions
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.work_email}}'
          text: 'Welcome! Your American Express corporate card has been provisioned. Account reference: {{create-card-account.account_id}}. Activate at amex.com/activate.'
  consumes:
  - namespace: workday
    type: http
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_access_token
    resources:
    - name: worker
      path: /workers/{worker_id}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - namespace: amex-corp
    type: http
    baseUri: https://api.americanexpress.com/v1/corporate
    authentication:
      type: bearer
      token: $secrets.amex_corp_token
    resources:
    - name: card-account
      path: /accounts
      operations:
      - name: create-card-account
        method: POST
  - namespace: msteams
    type: http
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chat-message
      path: /users/{recipient_upn}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → new-employee-card-provisioning.yml

Monitors Oracle database health by querying performance metrics, creating a ServiceNow incident if thresholds are breached, and notifying the DBA team via Slack.

naftiko: '0.5'
info:
  label: Oracle Database Health Monitoring
  description: Monitors Oracle database health by querying performance metrics, creating a ServiceNow incident if thresholds are breached, and notifying the DBA team via Slack.
  tags:
  - oracle
  - database
  - servicenow
  - slack
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: oracle-health
    port: 8080
    tools:
    - name: monitor-oracle-health
      description: Check Oracle database health, create an incident if degraded, and notify DBAs. Use when scheduled health checks run or alerts trigger.
      inputParameters:
      - name: database_name
        in: body
        type: string
        description: Oracle database name.
      steps:
      - name: check-health
        type: call
        call: oracle-cloud.get-health
        with: {}
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: Oracle DB health alert — {{database_name}}
          category: database
          priority: '2'
          description: 'CPU: {{check-health.cpu_pct}}%. Sessions: {{check-health.active_sessions}}. Tablespace: {{check-health.tablespace_pct}}%.'
      - name: notify-dba
        type: call
        call: slack.post-message
        with:
          channel: dba-ops
          text: 'Oracle DB alert: {{database_name}} | CPU: {{check-health.cpu_pct}}% | Sessions: {{check-health.active_sessions}} | SNOW: {{create-incident.number}}'
  consumes:
  - namespace: oracle-cloud
    type: http
    baseUri: https://database.americanexpress.oraclecloud.com/ords
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: metrics
      path: /admin/health
      operations:
      - name: get-health
        method: GET
  - namespace: servicenow
    type: http
    baseUri: https://americanexpress.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - namespace: slack
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → oracle-database-health-monitoring.yml

Responds to New Relic performance alerts by fetching violation details, creating a PagerDuty incident, opening a Jira bug, and posting to the engineering Slack channel.

naftiko: '0.5'
info:
  label: New Relic Performance Degradation Handler
  description: Responds to New Relic performance alerts by fetching violation details, creating a PagerDuty incident, opening a Jira bug, and posting to the engineering Slack channel.
  tags:
  - new-relic
  - monitoring
  - pagerduty
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: perf-handler
    port: 8080
    tools:
    - name: handle-perf-degradation
      description: Respond to a performance degradation alert by paging on-call, creating a bug, and notifying engineering. Use when New Relic detects performance issues.
      inputParameters:
      - name: policy_id
        in: body
        type: string
        description: New Relic alert policy ID.
      steps:
      - name: get-violations
        type: call
        call: newrelic.get-violations
        with:
          policy_id: '{{policy_id}}'
      - name: page-oncall
        type: call
        call: pagerduty.create-incident
        with:
          title: 'Perf degradation: {{get-violations.condition_name}}'
          service_id: $secrets.pd_service_id
          urgency: high
      - name: create-bug
        type: call
        call: jira.create-issue
        with:
          project_key: ENG
          issuetype: Bug
          summary: 'Perf degradation: {{get-violations.condition_name}}'
          description: 'Violation: {{get-violations.condition_name}}. Threshold: {{get-violations.threshold}}. Value: {{get-violations.value}}.'
      - name: alert-eng
        type: call
        call: slack.post-message
        with:
          channel: engineering-alerts
          text: 'Performance degradation: {{get-violations.condition_name}} | PD: {{page-oncall.incident_number}} | Jira: {{create-bug.key}}'
  consumes:
  - namespace: newrelic
    type: http
    baseUri: https://api.newrelic.com/v2
    authentication:
      type: bearer
      token: $secrets.newrelic_token
    resources:
    - name: alerts
      path: /alerts_violations.json
      operations:
      - name: get-violations
        method: GET
  - namespace: pagerduty
    type: http
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
  - namespace: jira
    type: http
    baseUri: https://americanexpress.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issue
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - namespace: slack
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → new-relic-performance-degradation-handler.yml

When a cardholder reports a lost card, cancels the existing card, orders a replacement, creates a ServiceNow case, and sends a confirmation via email.

naftiko: '0.5'
info:
  label: Cardholder Lost Card Replacement Workflow
  description: When a cardholder reports a lost card, cancels the existing card, orders a replacement, creates a ServiceNow case, and sends a confirmation via email.
  tags:
  - cardholder
  - cards
  - servicenow
  - customer-support
capability:
  exposes:
  - type: mcp
    namespace: card-replace
    port: 8080
    tools:
    - name: replace-lost-card
      description: Cancel a lost card, order a replacement, create a support case, and confirm with the cardholder. Use when a cardholder reports a lost or stolen card.
      inputParameters:
      - name: card_id
        in: body
        type: string
        description: The card ID to replace.
      - name: cardholder_email
        in: body
        type: string
        description: Cardholder email address for confirmation.
      steps:
      - name: cancel-card
        type: call
        call: amex-cards.cancel-card
        with:
          card_id: '{{card_id}}'
      - name: order-replacement
        type: call
        call: amex-cards.order-replacement
        with:
          card_id: '{{card_id}}'
          shipping: expedited
      - name: create-case
        type: call
        call: servicenow.create-case
        with:
          short_description: Lost card replacement — {{card_id}}
          category: card-services
          priority: '2'
      - name: send-confirmation
        type: call
        call: email.send-email
        with:
          to: '{{cardholder_email}}'
          subject: Your replacement card is on its way
          body: 'Your card ending in {{cancel-card.last_four}} has been cancelled. A replacement will arrive within 2 business days. Case: {{create-case.number}}'
  consumes:
  - namespace: amex-cards
    type: http
    baseUri: https://api.americanexpress.com/v1/cards
    authentication:
      type: bearer
      token: $secrets.amex_cards_token
    resources:
    - name: card
      path: /cards/{card_id}
      inputParameters:
      - name: card_id
        in: path
      operations:
      - name: cancel-card
        method: POST
      - name: order-replacement
        method: POST
  - namespace: servicenow
    type: http
    baseUri: https://americanexpress.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cases
      path: /table/sn_customerservice_case
      operations:
      - name: create-case
        method: POST
  - namespace: email
    type: http
    baseUri: https://api.americanexpress.com/v1/notifications
    authentication:
      type: bearer
      token: $secrets.amex_notifications_token
    resources:
    - name: messages
      path: /email/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → cardholder-lost-card-replacement-workflow.yml

Retrieves recent resolved Salesforce Service Cloud cases, submits case notes to OpenAI for sentiment and theme extraction, and posts a digest to a Slack channel for the customer experience team.

naftiko: '0.5'
info:
  label: Customer Sentiment Analysis from Support Cases
  description: Retrieves recent resolved Salesforce Service Cloud cases, submits case notes to OpenAI for sentiment and theme extraction, and posts a digest to a Slack channel for the customer experience team.
  tags:
  - customer-support
  - salesforce
  - openai
  - slack
  - ai
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: cx-intelligence
    port: 8080
    tools:
    - name: digest-support-sentiment
      description: Given a Salesforce queue name and date range, retrieve closed cases, send transcripts to OpenAI for sentiment analysis, and post a summary digest to Slack. Use when the CX team needs a weekly support sentiment report.
      inputParameters:
      - name: queue_name
        in: body
        type: string
        description: The Salesforce Service Cloud queue name to analyze (e.g., AmexCardholderSupport).
      - name: from_date
        in: body
        type: string
        description: Start date for case retrieval in YYYY-MM-DD format.
      - name: to_date
        in: body
        type: string
        description: End date for case retrieval in YYYY-MM-DD format.
      steps:
      - name: get-cases
        type: call
        call: salesforce.query-cases
        with:
          queue: '{{queue_name}}'
          closed_from: '{{from_date}}'
          closed_to: '{{to_date}}'
      - name: analyze-sentiment
        type: call
        call: openai.create-completion
        with:
          model: gpt-4o
          prompt: 'Analyze the following support case summaries and return a JSON object with: overall_sentiment (positive/neutral/negative), top_themes (array of strings), and recommended_actions (array of strings). Cases: {{get-cases.summaries}}'
      - name: post-digest
        type: call
        call: slack-cx.post-message
        with:
          channel: cx-insights
          text: 'CX Sentiment Digest ({{from_date}} to {{to_date}}) | Queue: {{queue_name}} | Sentiment: {{analyze-sentiment.overall_sentiment}} | Top themes: {{analyze-sentiment.top_themes}}'
  consumes:
  - namespace: salesforce
    type: http
    baseUri: https://americanexpress.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: cases
      path: /query
      inputParameters:
      - name: q
        in: query
      operations:
      - name: query-cases
        method: GET
  - namespace: openai
    type: http
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_api_key
    resources:
    - name: completion
      path: /chat/completions
      operations:
      - name: create-completion
        method: POST
  - namespace: slack-cx
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → customer-sentiment-analysis-from-support-cases.yml

Monitors Datadog for transaction volume anomaly alerts and, when triggered, creates a PagerDuty incident and posts to the payments operations Slack channel.

naftiko: '0.5'
info:
  label: Transaction Anomaly Monitoring Alert
  description: Monitors Datadog for transaction volume anomaly alerts and, when triggered, creates a PagerDuty incident and posts to the payments operations Slack channel.
  tags:
  - observability
  - datadog
  - pagerduty
  - slack
  - payments
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: payments-observability
    port: 8080
    tools:
    - name: handle-transaction-anomaly
      description: Given a Datadog anomaly alert ID and severity, retrieve alert details, create a PagerDuty incident for the on-call payments team, and post a Slack notification. Use when transaction processing anomalies are detected.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The Datadog monitor alert ID for the transaction anomaly.
      - name: severity
        in: body
        type: string
        description: 'Alert severity level: critical, high, medium, or low.'
      - name: affected_service
        in: body
        type: string
        description: The name of the affected payments service or pipeline.
      steps:
      - name: get-alert
        type: call
        call: datadog-monitor.get-monitor
        with:
          monitor_id: '{{alert_id}}'
      - name: create-pd-incident
        type: call
        call: pagerduty.create-incident
        with:
          title: Transaction anomaly on {{affected_service}} — severity {{severity}}
          service_id: $secrets.pagerduty_payments_service_id
          urgency: '{{severity}}'
          body: 'Datadog alert {{alert_id}}: {{get-alert.message}}'
      - name: post-slack
        type: call
        call: slack-payments.post-message
        with:
          channel: payments-ops
          text: 'Transaction Anomaly Detected | Service: {{affected_service}} | Severity: {{severity}} | PagerDuty: {{create-pd-incident.incident_number}} | Alert: {{alert_id}}'
  consumes:
  - namespace: datadog-monitor
    type: http
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitor
      path: /monitor/{monitor_id}
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: get-monitor
        method: GET
  - namespace: pagerduty
    type: http
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_api_key
      placement: header
    resources:
    - name: incident
      path: /incidents
      operations:
      - name: create-incident
        method: POST
  - namespace: slack-payments
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → transaction-anomaly-monitoring-alert.yml

When a fraud signal is raised on a cardholder account, retrieves transaction details from the core payments platform, opens a ServiceNow incident, and sends a Twilio SMS alert to the cardholder.

naftiko: '0.5'
info:
  label: Cardholder Fraud Alert Triage
  description: When a fraud signal is raised on a cardholder account, retrieves transaction details from the core payments platform, opens a ServiceNow incident, and sends a Twilio SMS alert to the cardholder.
  tags:
  - fraud
  - payments
  - servicenow
  - twilio
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: fraud-ops
    port: 8080
    tools:
    - name: handle-fraud-alert
      description: Given a card account ID and transaction ID, fetch transaction details, open a ServiceNow fraud incident, and send an SMS alert to the cardholder. Invoke when a fraud signal is detected on a cardholder account.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The cardholder account identifier from the payments platform.
      - name: transaction_id
        in: body
        type: string
        description: The transaction ID flagged as potentially fraudulent.
      - name: cardholder_phone
        in: body
        type: string
        description: The cardholder's mobile phone number in E.164 format for SMS notification.
      steps:
      - name: get-transaction
        type: call
        call: amex-payments.get-transaction
        with:
          account_id: '{{account_id}}'
          transaction_id: '{{transaction_id}}'
      - name: open-incident
        type: call
        call: servicenow.create-incident
        with:
          category: fraud
          short_description: Fraud alert on account {{account_id}} — txn {{transaction_id}}
          urgency: '1'
          impact: '1'
      - name: send-sms
        type: call
        call: twilio.send-sms
        with:
          to: '{{cardholder_phone}}'
          body: 'American Express Alert: Suspicious activity detected on your account ending {{get-transaction.last_four}}. If unrecognized, call 1-800-528-4800. Ref: {{open-incident.number}}'
  consumes:
  - namespace: amex-payments
    type: http
    baseUri: https://api.americanexpress.com/v1/payments
    authentication:
      type: bearer
      token: $secrets.amex_payments_token
    resources:
    - name: transaction
      path: /accounts/{account_id}/transactions/{transaction_id}
      inputParameters:
      - name: account_id
        in: path
      - name: transaction_id
        in: path
      operations:
      - name: get-transaction
        method: GET
  - namespace: servicenow
    type: http
    baseUri: https://americanexpress.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incident
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - namespace: twilio
    type: http
    baseUri: https://api.twilio.com/2010-04-01
    authentication:
      type: basic
      username: $secrets.twilio_account_sid
      password: $secrets.twilio_auth_token
    resources:
    - name: messages
      path: /Accounts/{account_sid}/Messages.json
      inputParameters:
      - name: account_sid
        in: path
      operations:
      - name: send-sms
        method: POST
Open in Framework → View in Fleet → cardholder-fraud-alert-triage.yml

When a SAP Concur travel booking is submitted, validates it against the American Express travel policy and flags non-compliant bookings by creating a ServiceNow task for manager review.

naftiko: '0.5'
info:
  label: Corporate Travel Booking Policy Compliance Check
  description: When a SAP Concur travel booking is submitted, validates it against the American Express travel policy and flags non-compliant bookings by creating a ServiceNow task for manager review.
  tags:
  - travel
  - expense-management
  - sap-concur
  - servicenow
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: travel-compliance
    port: 8080
    tools:
    - name: check-travel-booking-compliance
      description: Given a Concur travel booking ID, retrieve booking details and validate against policy rules. If non-compliant, create a ServiceNow approval task for the employee's manager. Use when travel bookings are submitted for pre-trip approval.
      inputParameters:
      - name: booking_id
        in: body
        type: string
        description: The SAP Concur travel booking ID to validate.
      - name: employee_id
        in: body
        type: string
        description: The employee ID of the traveler.
      steps:
      - name: get-booking
        type: call
        call: concur-travel.get-booking
        with:
          booking_id: '{{booking_id}}'
      - name: create-approval-task
        type: call
        call: servicenow-travel.create-task
        with:
          category: travel_compliance
          short_description: 'Travel booking policy review required: {{booking_id}}'
          description: 'Employee: {{employee_id}}

            Destination: {{get-booking.destination}}

            Cost: ${{get-booking.total_cost}}

            Dates: {{get-booking.travel_dates}}

            Booking: {{booking_id}}'
  consumes:
  - namespace: concur-travel
    type: http
    baseUri: https://www.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_access_token
    resources:
    - name: booking
      path: /travel/trips/{booking_id}
      inputParameters:
      - name: booking_id
        in: path
      operations:
      - name: get-booking
        method: GET
  - namespace: servicenow-travel
    type: http
    baseUri: https://americanexpress.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: task
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → corporate-travel-booking-policy-compliance-check.yml

When a critical Datadog alert fires for a banking platform, creates a ServiceNow P1 incident, pages the on-call engineer via PagerDuty, and posts a war-room message to Microsoft Teams.

naftiko: '0.5'
info:
  label: Critical IT Incident Response and Escalation
  description: When a critical Datadog alert fires for a banking platform, creates a ServiceNow P1 incident, pages the on-call engineer via PagerDuty, and posts a war-room message to Microsoft Teams.
  tags:
  - itsm
  - incident-response
  - datadog
  - servicenow
  - pagerduty
  - microsoft-teams
  - operations
capability:
  exposes:
  - type: mcp
    namespace: incident-ops
    port: 8080
    tools:
    - name: handle-critical-incident
      description: Given a Datadog alert with monitor ID, severity, and affected banking service, create a ServiceNow P1 incident, page PagerDuty on-call, and post a war-room alert to Teams.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: The Datadog monitor ID that triggered the critical alert.
      - name: affected_service
        in: body
        type: string
        description: The affected banking service name, e.g. 'Online Banking Portal', 'ACH Processing'.
      - name: alert_message
        in: body
        type: string
        description: The Datadog alert message describing the failure condition.
      - name: severity
        in: body
        type: string
        description: 'Alert severity: ''critical'' or ''warning''.'
      steps:
      - name: create-p1-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'P1: {{affected_service}} — {{alert_message}}'
          urgency: '1'
          impact: '1'
          category: infrastructure
      - name: page-oncall
        type: call
        call: pagerduty.create-incident
        with:
          title: 'CRITICAL: {{affected_service}} — {{alert_message}}'
          service_id: $secrets.pagerduty_banking_service_id
          severity: critical
          body: 'Monitor: {{monitor_id}} | SNOW: {{create-p1-incident.number}}'
      - name: open-war-room
        type: call
        call: msteams.post-channel-message
        with:
          channel: incident-war-room
          message: 'P1 INCIDENT: {{affected_service}} | {{alert_message}} | SNOW: {{create-p1-incident.number}} | PD: {{page-oncall.id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bankofamerica.service-now.com/api/now
    authentication:
      type: 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: post-channel-message
        method: POST
Open in Framework → View in Fleet → critical-it-incident-response-and-escalation.yml

When an employee undergoes a role change in Workday, updates their Okta group memberships to match the new role profile and creates a ServiceNow task to confirm access provisioning.

naftiko: '0.5'
info:
  label: Workday Role Change Access Provisioning
  description: When an employee undergoes a role change in Workday, updates their Okta group memberships to match the new role profile and creates a ServiceNow task to confirm access provisioning.
  tags:
  - hr
  - identity
  - workday
  - okta
  - servicenow
  - role-change
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: hr-access
    port: 8080
    tools:
    - name: sync-role-change-access
      description: Given a Workday worker ID, new role, and old role, update Okta group memberships for the employee and create a ServiceNow provisioning confirmation task.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: Workday worker ID for the employee with the role change.
      - name: new_role
        in: body
        type: string
        description: The new job role from the BofA role catalogue.
      - name: old_role
        in: body
        type: string
        description: The previous job role for de-provisioning reference.
      steps:
      - name: get-worker
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: update-okta-groups
        type: call
        call: okta.update-user-groups
        with:
          user_login: '{{get-worker.work_email}}'
          add_group: '{{new_role}}'
          remove_group: '{{old_role}}'
      - name: create-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Role change access update: {{get-worker.full_name}} — {{old_role}} to {{new_role}}'
          assignment_group: IT_Access_Management
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /bankofamerica/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: okta
    baseUri: https://bankofamerica.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: user-groups
      path: /users/{{user_login}}/groups
      inputParameters:
      - name: user_login
        in: path
      operations:
      - name: update-user-groups
        method: PUT
  - type: http
    namespace: servicenow
    baseUri: https://bankofamerica.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → workday-role-change-access-provisioning.yml

Triggers a Power BI dataset refresh for the Bank of America executive financial dashboard and posts status to the Finance Reporting Teams channel.

naftiko: '0.5'
info:
  label: Power BI Executive Dashboard Refresh
  description: Triggers a Power BI dataset refresh for the Bank of America executive financial dashboard and posts status to the Finance Reporting Teams channel.
  tags:
  - analytics
  - power-bi
  - microsoft-teams
  - reporting
  - finance
capability:
  exposes:
  - type: mcp
    namespace: bi-reporting
    port: 8080
    tools:
    - name: trigger-executive-dashboard-refresh
      description: Given a Power BI workspace ID and dataset ID, trigger a dataset refresh and notify the Finance Reporting Teams channel with the status and completion time.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: The Power BI workspace ID containing the dataset.
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID to refresh.
      steps:
      - name: trigger-refresh
        type: call
        call: powerbi.trigger-refresh
        with:
          workspace_id: '{{workspace_id}}'
          dataset_id: '{{dataset_id}}'
      - name: notify-finance
        type: call
        call: msteams.post-channel-message
        with:
          channel: finance-reporting
          message: 'Power BI refresh triggered for 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: dataset-refreshes
      path: /groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: workspace_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → power-bi-executive-dashboard-refresh.yml

Retrieves current market price for a security from Bloomberg Enterprise Data.

naftiko: '0.5'
info:
  label: Bloomberg Security Price Lookup
  description: Retrieves current market price for a security from Bloomberg Enterprise Data.
  tags:
  - banking
  - bloomberg
  - market-data
  - trading
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: market-ops
    port: 8080
    tools:
    - name: get-security-price
      description: Given a Bloomberg security identifier, return the last price, change, and volume.
      inputParameters:
      - name: security_id
        in: body
        type: string
        description: Bloomberg security identifier.
      call: bloomberg.get-quote
      with:
        securities: '{{security_id}}'
      outputParameters:
      - name: last_price
        type: number
        mapping: $.data[0].last_price
      - name: change_pct
        type: number
        mapping: $.data[0].change_pct
  consumes:
  - namespace: bloomberg
    type: http
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/datasets
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: quotes
      path: /quotes?securities={{securities}}
      operations:
      - name: get-quote
        method: GET
Open in Framework → View in Fleet → bloomberg-security-price-lookup.yml

Fetches a Jira issue by key and returns the summary, status, assignee, and priority.

naftiko: '0.5'
info:
  label: Jira Issue Detail Lookup
  description: Fetches a Jira issue by key and returns the summary, status, assignee, and priority.
  tags:
  - banking
  - engineering
  - jira
  - project-management
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: eng-ops
    port: 8080
    tools:
    - name: get-jira-issue
      description: Given a Jira issue key, return the issue summary, status, assignee, and priority.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: Jira issue key.
      call: jira.get-issue
      with:
        issueKey: '{{issue_key}}'
      outputParameters:
      - name: summary
        type: string
        mapping: $.fields.summary
      - name: status
        type: string
        mapping: $.fields.status.name
      - name: assignee
        type: string
        mapping: $.fields.assignee.displayName
  consumes:
  - namespace: jira
    type: http
    baseUri: https://bofa.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_api_token
    resources:
    - name: eng-ops
      path: /{{id}}
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-issue-detail-lookup.yml

Audits MFA enrollment by querying Okta for unenrolled users, creating compliance tasks in ServiceNow, and notifying IT security via Teams.

naftiko: '0.5'
info:
  label: Okta MFA Enrollment Compliance Audit
  description: Audits MFA enrollment by querying Okta for unenrolled users, creating compliance tasks in ServiceNow, and notifying IT security via Teams.
  tags:
  - banking
  - security
  - okta
  - mfa
  - servicenow
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: mfa-ops
    port: 8080
    tools:
    - name: audit-mfa-compliance
      description: Query Okta for users without MFA, create a compliance task in ServiceNow, and notify IT security in Teams.
      inputParameters:
      - name: department
        in: body
        type: string
        description: Department to audit.
      - name: security_lead_upn
        in: body
        type: string
        description: UPN of security lead.
      steps:
      - name: get-unenrolled
        type: call
        call: okta.list-unenrolled
        with:
          department: '{{department}}'
      - name: create-task
        type: call
        call: snow.create-task
        with:
          short_description: 'MFA non-compliance: {{department}}'
          description: 'Unenrolled: {{get-unenrolled.count}}'
      - name: notify-lead
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{security_lead_upn}}'
          text: 'MFA audit: {{department}} — {{get-unenrolled.count}} unenrolled. Task: {{create-task.number}}'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://bofa.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_api_token
    resources:
    - name: users
      path: /users?filter=profile.department eq "{{department}}"
      inputParameters:
      - name: department
        in: query
      operations:
      - name: list-unenrolled
        method: GET
  - type: http
    namespace: snow
    baseUri: https://bofa.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/u_compliance_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → okta-mfa-enrollment-compliance-audit.yml

Retrieves the assigned relationship manager for a client account from Salesforce.

naftiko: '0.5'
info:
  label: Salesforce Relationship Manager Assignment Lookup
  description: Retrieves the assigned relationship manager for a client account from Salesforce.
  tags:
  - banking
  - salesforce
  - relationship-management
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: rm-ops
    port: 8080
    tools:
    - name: get-rm-assignment
      description: Given a client account ID, return the relationship manager name, email, and last contact date.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Salesforce account ID.
      call: sf.get-rm
      with:
        accountId: '{{account_id}}'
      outputParameters:
      - name: rm_name
        type: string
        mapping: $.Owner.Name
      - name: rm_email
        type: string
        mapping: $.Owner.Email
      - name: last_contact
        type: string
        mapping: $.Last_Contact_Date__c
  consumes:
  - namespace: sf
    type: http
    baseUri: https://bofa.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{accountId}}
      operations:
      - name: get-rm
        method: GET
Open in Framework → View in Fleet → salesforce-relationship-manager-assignment-lookup.yml

Screens wire transfers by checking patterns in Snowflake, creating a hold in SAP, and alerting the fraud team.

naftiko: '0.5'
info:
  label: Wire Transfer Fraud Screening Workflow
  description: Screens wire transfers by checking patterns in Snowflake, creating a hold in SAP, and alerting the fraud team.
  tags:
  - banking
  - fraud-detection
  - payments
  - snowflake
  - sap
capability:
  exposes:
  - type: mcp
    namespace: fraud-ops
    port: 8080
    tools:
    - name: screen-wire-transfer
      description: Given a wire transfer ID and amount, check patterns in Snowflake, hold in SAP, and alert fraud team.
      inputParameters:
      - name: transfer_id
        in: body
        type: string
        description: Transfer ID.
      - name: amount
        in: body
        type: number
        description: Amount.
      - name: fraud_channel_id
        in: body
        type: string
        description: Fraud channel.
      steps:
      - name: check
        type: call
        call: snowflake.check-wire
        with:
          transfer_id: '{{transfer_id}}'
          amount: '{{amount}}'
      - name: hold
        type: call
        call: sap-fi.create-hold
        with:
          transfer_id: '{{transfer_id}}'
          reason: 'Screening: {{check.risk_level}}'
      - name: alert
        type: call
        call: msteams.post-channel
        with:
          channel_id: '{{fraud_channel_id}}'
          text: 'Wire screening: {{transfer_id}} — ${{amount}}. Risk: {{check.risk_level}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bofa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: check-wire
        method: POST
  - type: http
    namespace: sap-fi
    baseUri: https://bofa-s4.sap.com/sap/opu/odata/sap/API_JOURNAL_ENTRY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: holds
      path: /A_JournalEntry
      operations:
      - name: create-hold
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channels
      path: /teams/channels/{{channel_id}}/messages
      operations:
      - name: post-channel
        method: POST
Open in Framework → View in Fleet → wire-transfer-fraud-screening-workflow.yml

Coordinates BC drills by pulling participant lists from Workday, creating tasks in ServiceNow, and distributing instructions via Teams.

naftiko: '0.5'
info:
  label: Business Continuity Drill Coordinator
  description: Coordinates BC drills by pulling participant lists from Workday, creating tasks in ServiceNow, and distributing instructions via Teams.
  tags:
  - banking
  - operations
  - business-continuity
  - workday
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: bcp-ops
    port: 8080
    tools:
    - name: coordinate-bc-drill
      description: Given a drill scenario and date, pull department staff from Workday, create drill tasks in ServiceNow, and post instructions to Teams.
      inputParameters:
      - name: drill_scenario
        in: body
        type: string
        description: Drill scenario.
      - name: drill_date
        in: body
        type: string
        description: Drill date.
      - name: bcp_channel_id
        in: body
        type: string
        description: Teams channel ID.
      steps:
      - name: get-participants
        type: call
        call: workday.get-staff
        with:
          scenario: '{{drill_scenario}}'
      - name: create-task
        type: call
        call: snow.create-task
        with:
          short_description: 'BC Drill: {{drill_scenario}} — {{drill_date}}'
          description: 'Participants: {{get-participants.count}}'
      - name: notify-channel
        type: call
        call: msteams.post-channel
        with:
          channel_id: '{{bcp_channel_id}}'
          text: 'BC Drill: {{drill_scenario}} on {{drill_date}}. Participants: {{get-participants.count}}. Task: {{create-task.number}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/service/bofa/Human_Resources/v40.1
    authentication:
      type: basic
      username: $secrets.workday_user
      password: $secrets.workday_password
    resources:
    - name: staff
      path: /workers
      operations:
      - name: get-staff
        method: GET
  - type: http
    namespace: snow
    baseUri: https://bofa.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/u_bc_drill
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channels
      path: /teams/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel
        method: POST
Open in Framework → View in Fleet → business-continuity-drill-coordinator.yml

Validates period-end journal entries by pulling entries from SAP, cross-checking balances in Snowflake, and notifying the controller via Teams.

naftiko: '0.5'
info:
  label: SAP Period-End Journal Entry Validation
  description: Validates period-end journal entries by pulling entries from SAP, cross-checking balances in Snowflake, and notifying the controller via Teams.
  tags:
  - banking
  - finance
  - accounting
  - sap
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: gl-ops
    port: 8080
    tools:
    - name: validate-journal-entries
      description: Given a company code and posting period, retrieve journal entries from SAP, validate against Snowflake, and notify the controller of discrepancies.
      inputParameters:
      - name: company_code
        in: body
        type: string
        description: SAP company code.
      - name: posting_period
        in: body
        type: string
        description: Posting period.
      - name: controller_upn
        in: body
        type: string
        description: UPN of controller.
      steps:
      - name: get-entries
        type: call
        call: sap-fi.get-journal-entries
        with:
          company_code: '{{company_code}}'
          period: '{{posting_period}}'
      - name: validate-balances
        type: call
        call: snowflake.check-recon
        with:
          company_code: '{{company_code}}'
          period: '{{posting_period}}'
      - name: notify-controller
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{controller_upn}}'
          text: 'Period-end validation: {{company_code}} — {{posting_period}}. Entries: {{get-entries.count}} | Status: {{validate-balances.status}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://bofa-s4.sap.com/sap/opu/odata/sap/API_JOURNAL_ENTRY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: entries
      path: /A_JournalEntry?$filter=CompanyCode eq '{{company_code}}'
      inputParameters:
      - name: company_code
        in: query
      operations:
      - name: get-journal-entries
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://bofa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: check-recon
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-period-end-journal-entry-validation.yml

Queries Dynatrace for the response time and failure rate of a specified application.

naftiko: '0.5'
info:
  label: Dynatrace Application Metrics Lookup
  description: Queries Dynatrace for the response time and failure rate of a specified application.
  tags:
  - banking
  - it-operations
  - dynatrace
  - monitoring
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: apm-ops
    port: 8080
    tools:
    - name: get-app-metrics
      description: Given a Dynatrace entity ID, return the median response time and failure rate.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Dynatrace application entity ID.
      call: dynatrace.get-metrics
      with:
        entityId: '{{entity_id}}'
      outputParameters:
      - name: response_time_ms
        type: number
        mapping: $.result[0].data[0].values.median
      - name: failure_rate
        type: number
        mapping: $.result[1].data[0].values.avg
  consumes:
  - namespace: dynatrace
    type: http
    baseUri: https://bofa.live.dynatrace.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: apm-ops
      path: /{{id}}
      operations:
      - name: get-metrics
        method: GET
Open in Framework → View in Fleet → dynatrace-application-metrics-lookup.yml

Generates a daily VaR report by pulling positions from Snowflake, computing VaR, and posting to Teams.

naftiko: '0.5'
info:
  label: Market Risk Daily VaR Reporter
  description: Generates a daily VaR report by pulling positions from Snowflake, computing VaR, and posting to Teams.
  tags:
  - banking
  - market-risk
  - trading
  - snowflake
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: risk-ops
    port: 8080
    tools:
    - name: generate-var-report
      description: Given a trading desk and date, pull positions, compute VaR, and post to the risk channel.
      inputParameters:
      - name: trading_desk
        in: body
        type: string
        description: Trading desk.
      - name: report_date
        in: body
        type: string
        description: Report date.
      - name: risk_channel_id
        in: body
        type: string
        description: Risk channel.
      steps:
      - name: get-positions
        type: call
        call: snowflake.query-positions
        with:
          desk: '{{trading_desk}}'
          date: '{{report_date}}'
      - name: compute-var
        type: call
        call: snowflake.compute-var
        with:
          desk: '{{trading_desk}}'
      - name: post-report
        type: call
        call: msteams.post-channel
        with:
          channel_id: '{{risk_channel_id}}'
          text: 'VaR: {{trading_desk}} — {{report_date}}. VaR(95): ${{compute-var.var_95}} | VaR(99): ${{compute-var.var_99}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bofa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: query-positions
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channels
      path: /teams/channels/{{channel_id}}/messages
      operations:
      - name: post-channel
        method: POST
Open in Framework → View in Fleet → market-risk-daily-var-reporter.yml

Checks capital adequacy by pulling RWA from Snowflake, comparing SAP capital, and reporting to compliance.

naftiko: '0.5'
info:
  label: Regulatory Capital Adequacy Reporter
  description: Checks capital adequacy by pulling RWA from Snowflake, comparing SAP capital, and reporting to compliance.
  tags:
  - banking
  - regulatory
  - capital
  - snowflake
  - sap
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: capital-ops
    port: 8080
    tools:
    - name: check-capital
      description: Given a report date, pull RWA from Snowflake, compare with SAP capital, and notify compliance.
      inputParameters:
      - name: report_date
        in: body
        type: string
        description: Report date.
      - name: compliance_channel_id
        in: body
        type: string
        description: Compliance channel.
      steps:
      - name: get-rwa
        type: call
        call: snowflake.query-rwa
        with:
          date: '{{report_date}}'
      - name: get-capital
        type: call
        call: sap-fi.get-capital
        with:
          date: '{{report_date}}'
      - name: notify
        type: call
        call: msteams.post-channel
        with:
          channel_id: '{{compliance_channel_id}}'
          text: 'Capital adequacy: RWA: ${{get-rwa.total}} | Capital: ${{get-capital.total}} | Ratio: {{get-capital.ratio}}%'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bofa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: query-rwa
        method: POST
  - type: http
    namespace: sap-fi
    baseUri: https://bofa-s4.sap.com/sap/opu/odata/sap/API_JOURNAL_ENTRY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: capital
      path: /A_JournalEntry
      operations:
      - name: get-capital
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channels
      path: /teams/channels/{{channel_id}}/messages
      operations:
      - name: post-channel
        method: POST
Open in Framework → View in Fleet → regulatory-capital-adequacy-reporter.yml

Fetches LinkedIn Talent Solutions job posting performance metrics and combines them with Workday recruiting pipeline data to produce a weekly talent acquisition digest for the Recruiting Teams channel.

naftiko: '0.5'
info:
  label: LinkedIn Talent Acquisition Campaign Report
  description: Fetches LinkedIn Talent Solutions job posting performance metrics and combines them with Workday recruiting pipeline data to produce a weekly talent acquisition digest for the Recruiting Teams channel.
  tags:
  - hr
  - recruiting
  - linkedin
  - workday
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: talent-acquisition
    port: 8080
    tools:
    - name: digest-recruiting-pipeline
      description: Given a LinkedIn organization URN and date range, fetch job posting metrics and merge with Workday open requisition counts, then post a weekly recruiting digest to the Talent Acquisition Teams channel.
      inputParameters:
      - name: org_urn
        in: body
        type: string
        description: The LinkedIn organization URN for Bank of America.
      - name: start_date
        in: body
        type: string
        description: Report start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: Report end date in YYYY-MM-DD format.
      steps:
      - name: get-linkedin-job-metrics
        type: call
        call: linkedin.get-job-postings
        with:
          organizationalEntity: '{{org_urn}}'
      - name: get-workday-requisitions
        type: call
        call: workday.list-open-requisitions
        with:
          asOfDate: '{{end_date}}'
      - name: post-recruiting-digest
        type: call
        call: msteams.post-channel-message
        with:
          channel: talent-acquisition
          message: 'Recruiting digest ({{start_date}} to {{end_date}}): LinkedIn job views {{get-linkedin-job-metrics.views}}, Applications {{get-linkedin-job-metrics.applications}}, Workday open reqs: {{get-workday-requisitions.count}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: job-postings
      path: /jobPostings
      operations:
      - name: get-job-postings
        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: requisitions
      path: /bankofamerica/recruitingJobRequisitions
      operations:
      - name: list-open-requisitions
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → linkedin-talent-acquisition-campaign-report.yml

Looks up a ServiceNow incident by number and returns current state, priority, and assigned group.

naftiko: '0.5'
info:
  label: ServiceNow Incident Status Check
  description: Looks up a ServiceNow incident by number and returns current state, priority, and assigned group.
  tags:
  - banking
  - it-operations
  - servicenow
  - incident-management
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: it-ops
    port: 8080
    tools:
    - name: get-incident-status
      description: Given a ServiceNow incident number, return the state, priority, and assignment group.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number.
      call: snow.get-incident
      with:
        number: '{{incident_number}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.result.state
      - name: priority
        type: string
        mapping: $.result.priority
      - name: assigned_to
        type: string
        mapping: $.result.assignment_group.display_value
  consumes:
  - namespace: snow
    type: http
    baseUri: https://bofa.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: it-ops
      path: /{{id}}
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → servicenow-incident-status-check.yml

Tracks compliance training by pulling enrollment data from Workday Learning, checking ServiceNow escalation thresholds, and notifying managers via Teams.

naftiko: '0.5'
info:
  label: Compliance Training Completion Tracker
  description: Tracks compliance training by pulling enrollment data from Workday Learning, checking ServiceNow escalation thresholds, and notifying managers via Teams.
  tags:
  - banking
  - compliance
  - training
  - workday
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: compliance-training
    port: 8080
    tools:
    - name: track-training-completion
      description: Given a program ID and deadline, query Workday for incomplete enrollments, check escalation status in ServiceNow, and notify managers in Teams.
      inputParameters:
      - name: program_id
        in: body
        type: string
        description: Training program ID.
      - name: deadline
        in: body
        type: string
        description: Deadline date.
      steps:
      - name: get-enrollments
        type: call
        call: workday.get-training-status
        with:
          program_id: '{{program_id}}'
      - name: check-escalation
        type: call
        call: snow.check-escalation
        with:
          program_id: '{{program_id}}'
          deadline: '{{deadline}}'
      - name: notify-managers
        type: call
        call: msteams.send-notification
        with:
          subject: 'Training overdue: {{program_id}}'
          body: 'Deadline: {{deadline}}. Incomplete: {{get-enrollments.incomplete_count}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/service/bofa/Learning/v40.1
    authentication:
      type: basic
      username: $secrets.workday_user
      password: $secrets.workday_password
    resources:
    - name: training
      path: /learning-enrollments?program={{program_id}}
      inputParameters:
      - name: program_id
        in: query
      operations:
      - name: get-training-status
        method: GET
  - type: http
    namespace: snow
    baseUri: https://bofa.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: escalation
      path: /table/u_training_compliance
      operations:
      - name: check-escalation
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → compliance-training-completion-tracker.yml

Generates a daily Value-at-Risk report by pulling positions from Snowflake, computing VaR, and distributing to risk management via Teams.

naftiko: '0.5'
info:
  label: Market Risk Daily VaR Report
  description: Generates a daily Value-at-Risk report by pulling positions from Snowflake, computing VaR, and distributing to risk management via Teams.
  tags:
  - banking
  - market-risk
  - trading
  - snowflake
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: risk-ops
    port: 8080
    tools:
    - name: generate-var-report
      description: Given a trading desk and report date, pull positions from Snowflake, compute VaR metrics, and post to the risk channel.
      inputParameters:
      - name: trading_desk
        in: body
        type: string
        description: Trading desk name.
      - name: report_date
        in: body
        type: string
        description: Report date.
      - name: risk_channel_id
        in: body
        type: string
        description: Risk Teams channel.
      steps:
      - name: get-positions
        type: call
        call: snowflake.query-positions
        with:
          desk: '{{trading_desk}}'
          date: '{{report_date}}'
      - name: compute-var
        type: call
        call: snowflake.compute-var
        with:
          desk: '{{trading_desk}}'
          date: '{{report_date}}'
      - name: post-report
        type: call
        call: msteams.post-channel
        with:
          channel_id: '{{risk_channel_id}}'
          text: 'Daily VaR: {{trading_desk}} — {{report_date}}. VaR(95): ${{compute-var.var_95}} | VaR(99): ${{compute-var.var_99}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bofa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: query-positions
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://bofa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: compute-var
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channels
      path: /teams/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel
        method: POST
Open in Framework → View in Fleet → market-risk-daily-var-report.yml

Looks up a trading platform incident in ServiceNow by incident number and returns status, severity, and affected trading system.

naftiko: '0.5'
info:
  label: ServiceNow Trading Incident Lookup
  description: Looks up a trading platform incident in ServiceNow by incident number and returns status, severity, and affected trading system.
  tags:
  - banking
  - banking
  - trading
  - servicenow
  - incident-management
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: trading-ops
    port: 8080
    tools:
    - name: get-trading-incident
      description: Given a ServiceNow incident number, return the incident state, severity, affected trading system, and resolution target.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number.
      call: snow.get-incident
      with:
        number: '{{incident_number}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.result.state
      - name: severity
        type: string
        mapping: $.result.severity
      - name: system
        type: string
        mapping: $.result.cmdb_ci.display_value
  consumes:
  - namespace: snow
    type: http
    baseUri: https://bofa.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: trading-ops
      path: /{{id}}
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → servicenow-trading-incident-lookup.yml

Generates a daily treasury report by pulling SAP balances, Snowflake market rates, and posting to Teams.

naftiko: '0.5'
info:
  label: Treasury Cash Position Daily Report
  description: Generates a daily treasury report by pulling SAP balances, Snowflake market rates, and posting to Teams.
  tags:
  - banking
  - treasury
  - finance
  - sap
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: treasury-ops
    port: 8080
    tools:
    - name: generate-cash-report
      description: Given a report date, pull cash balances from SAP, get market rates from Snowflake, and post to Teams.
      inputParameters:
      - name: report_date
        in: body
        type: string
        description: Report date.
      - name: treasury_channel_id
        in: body
        type: string
        description: Treasury channel.
      steps:
      - name: get-balances
        type: call
        call: sap-fi.get-cash
        with:
          date: '{{report_date}}'
      - name: get-rates
        type: call
        call: snowflake.get-rates
        with:
          date: '{{report_date}}'
      - name: post-report
        type: call
        call: msteams.post-channel
        with:
          channel_id: '{{treasury_channel_id}}'
          text: 'Treasury {{report_date}}: Cash: ${{get-balances.total}} | Rates updated.'
  consumes:
  - type: http
    namespace: sap-fi
    baseUri: https://bofa-s4.sap.com/sap/opu/odata/sap/API_JOURNAL_ENTRY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: balances
      path: /A_JournalEntry
      operations:
      - name: get-cash
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://bofa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-rates
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channels
      path: /teams/channels/{{channel_id}}/messages
      operations:
      - name: post-channel
        method: POST
Open in Framework → View in Fleet → treasury-cash-position-daily-report.yml

Enriches Salesforce account health scores by pulling data from Snowflake, checking billing in SAP, and updating the Salesforce record.

naftiko: '0.5'
info:
  label: Salesforce Account Health Enrichment
  description: Enriches Salesforce account health scores by pulling data from Snowflake, checking billing in SAP, and updating the Salesforce record.
  tags:
  - banking
  - crm
  - salesforce
  - snowflake
  - sap
capability:
  exposes:
  - type: mcp
    namespace: account-ops
    port: 8080
    tools:
    - name: enrich-account-health
      description: Given a Salesforce account ID, pull performance data from Snowflake, check billing in SAP, and update the health score in Salesforce.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Salesforce account ID.
      - name: account_manager_upn
        in: body
        type: string
        description: UPN of account manager.
      steps:
      - name: get-data
        type: call
        call: snowflake.query-account-data
        with:
          account_id: '{{account_id}}'
      - name: get-billing
        type: call
        call: sap-fi.get-ar-aging
        with:
          account_id: '{{account_id}}'
      - name: update-sf
        type: call
        call: sf.update-health-score
        with:
          account_id: '{{account_id}}'
          score: '{{get-data.health_score}}'
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{account_manager_upn}}'
          text: 'Account health updated: {{account_id}}. Score: {{get-data.health_score}} | AR: {{get-billing.days_outstanding}} days'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bofa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: query-account-data
        method: POST
  - type: http
    namespace: sap
    baseUri: https://bofa-s4.sap.com/sap/opu/odata/sap/API_JOURNAL_ENTRY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: ar
      path: /A_JournalEntry?$filter=AccountID eq '{{account_id}}'
      inputParameters:
      - name: account_id
        in: query
      operations:
      - name: get-ar-aging
        method: GET
  - type: http
    namespace: sf
    baseUri: https://bofa.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: update-health-score
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-account-health-enrichment.yml

When a Snowflake pipeline fails, creates a Jira incident, pages the on-call engineer via PagerDuty, and notifies the pipeline owner in Teams.

naftiko: '0.5'
info:
  label: Snowflake Data Pipeline Failure Response
  description: When a Snowflake pipeline fails, creates a Jira incident, pages the on-call engineer via PagerDuty, and notifies the pipeline owner in Teams.
  tags:
  - banking
  - data-engineering
  - snowflake
  - jira
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: data-reliability
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a Snowflake task name and error, create a Jira incident, trigger a PagerDuty alert, and notify the owner in Teams.
      inputParameters:
      - name: task_name
        in: body
        type: string
        description: Snowflake task name.
      - name: error_message
        in: body
        type: string
        description: Error message.
      - name: pipeline_owner
        in: body
        type: string
        description: Pipeline owner email.
      steps:
      - name: create-incident
        type: call
        call: jira.create-issue
        with:
          project: DATA
          summary: 'Pipeline failure: {{task_name}}'
          description: 'Error: {{error_message}}'
      - name: page-oncall
        type: call
        call: pagerduty.create-incident
        with:
          service_id: data-engineering
          title: 'Pipeline failure: {{task_name}}'
      - name: notify-owner
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{pipeline_owner}}'
          text: 'Pipeline failure: {{task_name}}. Jira: {{create-incident.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bofa.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: 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.msteams_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → snowflake-data-pipeline-failure-response.yml

Queries Snowflake to return the row count and last update timestamp for a specified data table.

naftiko: '0.5'
info:
  label: Snowflake Table Row Count Check
  description: Queries Snowflake to return the row count and last update timestamp for a specified data table.
  tags:
  - banking
  - data-engineering
  - snowflake
  - analytics
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: data-ops
    port: 8080
    tools:
    - name: get-table-stats
      description: Given a Snowflake table name, return the row count and last DML timestamp.
      inputParameters:
      - name: table_name
        in: body
        type: string
        description: Fully qualified Snowflake table name.
      call: snowflake.query-stats
      with:
        table: '{{table_name}}'
      outputParameters:
      - name: row_count
        type: integer
        mapping: $.data[0].ROW_COUNT
      - name: last_altered
        type: string
        mapping: $.data[0].LAST_ALTERED
  consumes:
  - namespace: snowflake
    type: http
    baseUri: https://bofa.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: data-ops
      path: /{{id}}
      operations:
      - name: query-stats
        method: GET
Open in Framework → View in Fleet → snowflake-table-row-count-check.yml

Generates a performance calibration report by pulling ratings from Workday, aggregating in Snowflake, and distributing to HR leadership via Teams.

naftiko: '0.5'
info:
  label: Workday Performance Calibration Report
  description: Generates a performance calibration report by pulling ratings from Workday, aggregating in Snowflake, and distributing to HR leadership via Teams.
  tags:
  - banking
  - hr
  - performance-management
  - workday
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: perf-ops
    port: 8080
    tools:
    - name: generate-calibration-report
      description: Given a review cycle and business unit, pull ratings from Workday, aggregate in Snowflake, and post to HR leadership channel.
      inputParameters:
      - name: review_cycle
        in: body
        type: string
        description: Review cycle ID.
      - name: business_unit
        in: body
        type: string
        description: Business unit.
      - name: hr_channel_id
        in: body
        type: string
        description: HR Teams channel ID.
      steps:
      - name: get-ratings
        type: call
        call: workday.get-performance-data
        with:
          cycle: '{{review_cycle}}'
          bu: '{{business_unit}}'
      - name: aggregate
        type: call
        call: snowflake.aggregate-ratings
        with:
          cycle: '{{review_cycle}}'
          bu: '{{business_unit}}'
      - name: post-report
        type: call
        call: msteams.post-channel
        with:
          channel_id: '{{hr_channel_id}}'
          text: 'Calibration: {{business_unit}} — {{review_cycle}}. Exceeds: {{aggregate.exceeds_pct}}% | Meets: {{aggregate.meets_pct}}%'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/service/bofa/Performance_Management/v40.1
    authentication:
      type: basic
      username: $secrets.workday_user
      password: $secrets.workday_password
    resources:
    - name: reviews
      path: /performance-reviews
      operations:
      - name: get-performance-data
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://bofa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: aggregate-ratings
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channels
      path: /teams/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel
        method: POST
Open in Framework → View in Fleet → workday-performance-calibration-report.yml

When a GitHub Actions deployment workflow fails on the main banking platform branch, creates a Jira incident ticket, and notifies the Engineering leadership team via Microsoft Teams.

naftiko: '0.5'
info:
  label: GitHub Actions Deployment Failure Handler
  description: When a GitHub Actions deployment workflow fails on the main banking platform branch, creates a Jira incident ticket, and notifies the Engineering leadership team via Microsoft Teams.
  tags:
  - devops
  - ci-cd
  - github
  - jira
  - microsoft-teams
  - deployment
capability:
  exposes:
  - type: mcp
    namespace: devops-cicd
    port: 8080
    tools:
    - name: handle-deployment-failure
      description: Given a failed GitHub Actions run ID and repository, retrieve failure details, create a Jira incident, and post an alert to the DevOps Teams channel.
      inputParameters:
      - name: repo_full_name
        in: body
        type: string
        description: The GitHub repository full name, e.g. 'bankofamerica/payments-api'.
      - name: run_id
        in: body
        type: integer
        description: The GitHub Actions workflow run ID that failed.
      - name: branch
        in: body
        type: string
        description: The branch that was being deployed, typically 'main'.
      steps:
      - name: get-run
        type: call
        call: github.get-workflow-run
        with:
          repo: '{{repo_full_name}}'
          run_id: '{{run_id}}'
      - name: create-jira-incident
        type: call
        call: jira.create-issue
        with:
          project_key: OPS
          issuetype: Incident
          summary: 'Deployment failure: {{repo_full_name}} on {{branch}}'
          description: 'Run: {{run_id}} | Status: {{get-run.conclusion}} | URL: {{get-run.html_url}}'
      - name: alert-teams
        type: call
        call: msteams.post-channel-message
        with:
          channel: devops-alerts
          message: 'Deployment FAILED: {{repo_full_name}} | Branch: {{branch}} | Jira: {{create-jira-incident.key}} | Run: {{get-run.html_url}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflow-runs
      path: /repos/{{repo}}/actions/runs/{{run_id}}
      inputParameters:
      - name: repo
        in: path
      - name: run_id
        in: path
      operations:
      - name: get-workflow-run
        method: GET
  - type: http
    namespace: jira
    baseUri: https://bankofamerica.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → github-actions-deployment-failure-handler.yml

Looks up the approval status, dates, and leave type of an employee absence request in Workday by request ID.

naftiko: '0.5'
info:
  label: Workday Absence Request Status Lookup
  description: Looks up the approval status, dates, and leave type of an employee absence request in Workday by request ID.
  tags:
  - hr
  - workday
  - absence-management
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: hr-absence
    port: 8080
    tools:
    - name: get-absence-request-status
      description: Given a Workday absence request ID, return the current approval status, leave start/end dates, leave type, and approver name. Use for manager review or employee self-service.
      inputParameters:
      - name: absence_request_id
        in: body
        type: string
        description: The Workday absence request ID to look up.
      call: workday.get-absence-request
      with:
        request_id: '{{absence_request_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.data.approvalStatus
      - name: start_date
        type: string
        mapping: $.data.startDate
      - name: end_date
        type: string
        mapping: $.data.endDate
      - name: leave_type
        type: string
        mapping: $.data.leaveType
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: absence-requests
      path: /bankofamerica/absenceRequests/{{request_id}}
      inputParameters:
      - name: request_id
        in: path
      operations:
      - name: get-absence-request
        method: GET
Open in Framework → View in Fleet → workday-absence-request-status-lookup.yml

Queries Azure Cost Management for the current month spend of a specified resource group.

naftiko: '0.5'
info:
  label: Azure Resource Group Cost Check
  description: Queries Azure Cost Management for the current month spend of a specified resource group.
  tags:
  - banking
  - cloud
  - azure
  - finops
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: cloud-finops
    port: 8080
    tools:
    - name: get-rg-cost
      description: Given an Azure resource group name, return the current month total cost and forecast.
      inputParameters:
      - name: resource_group
        in: body
        type: string
        description: Azure resource group name.
      call: azure-cost.get-cost
      with:
        resourceGroup: '{{resource_group}}'
      outputParameters:
      - name: total_cost
        type: number
        mapping: $.properties.rows[0][0]
      - name: forecast
        type: number
        mapping: $.properties.rows[0][1]
  consumes:
  - namespace: azure-cost
    type: http
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: cloud-finops
      path: /{{id}}
      operations:
      - name: get-cost
        method: GET
Open in Framework → View in Fleet → azure-resource-group-cost-check.yml

Generates a talent brand performance report by pulling LinkedIn analytics, comparing with Workday hiring data, and posting to Teams.

naftiko: '0.5'
info:
  label: LinkedIn Talent Brand Performance Report
  description: Generates a talent brand performance report by pulling LinkedIn analytics, comparing with Workday hiring data, and posting to Teams.
  tags:
  - banking
  - hr
  - talent-acquisition
  - linkedin
  - workday
capability:
  exposes:
  - type: mcp
    namespace: ta-ops
    port: 8080
    tools:
    - name: generate-talent-report
      description: Given a reporting week, pull LinkedIn employer brand metrics, compare against Workday requisitions, and post a digest to Teams.
      inputParameters:
      - name: week
        in: body
        type: string
        description: Reporting week.
      - name: region
        in: body
        type: string
        description: Region.
      - name: ta_channel_id
        in: body
        type: string
        description: Teams channel ID.
      steps:
      - name: get-metrics
        type: call
        call: linkedin.get-brand-metrics
        with:
          week: '{{week}}'
          region: '{{region}}'
      - name: get-reqs
        type: call
        call: workday.get-open-reqs
        with:
          region: '{{region}}'
      - name: post-digest
        type: call
        call: msteams.post-channel
        with:
          channel_id: '{{ta_channel_id}}'
          text: 'Talent Brand: {{week}} ({{region}}). Impressions: {{get-metrics.impressions}} | Open reqs: {{get-reqs.count}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: analytics
      path: /organizationalEntityShareStatistics
      operations:
      - name: get-brand-metrics
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/service/bofa/Recruiting/v40.1
    authentication:
      type: basic
      username: $secrets.workday_user
      password: $secrets.workday_password
    resources:
    - name: requisitions
      path: /job-requisitions
      operations:
      - name: get-open-reqs
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channels
      path: /teams/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel
        method: POST
Open in Framework → View in Fleet → linkedin-talent-brand-performance-report.yml

Compiles an executive KPI digest by pulling metrics from Snowflake, refreshing Power BI, and emailing the C-suite.

naftiko: '0.5'
info:
  label: Executive KPI Dashboard Digest
  description: Compiles an executive KPI digest by pulling metrics from Snowflake, refreshing Power BI, and emailing the C-suite.
  tags:
  - banking
  - reporting
  - analytics
  - snowflake
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: exec-reporting
    port: 8080
    tools:
    - name: generate-kpi-digest
      description: Given a reporting period, pull KPIs from Snowflake, refresh the Power BI executive dashboard, and email the digest.
      inputParameters:
      - name: period
        in: body
        type: string
        description: Reporting period.
      - name: exec_dl
        in: body
        type: string
        description: Executive DL email.
      steps:
      - name: get-kpis
        type: call
        call: snowflake.query-kpis
        with:
          period: '{{period}}'
      - name: refresh-pbi
        type: call
        call: powerbi.trigger-refresh
        with:
          datasetId: executive-dashboard
      - name: send-digest
        type: call
        call: msgraph.send-mail
        with:
          to: '{{exec_dl}}'
          subject: Executive KPI Digest — {{period}}
          body: Key metrics refreshed. Dashboard updated.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bofa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: query-kpis
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{datasetId}}/refreshes
      inputParameters:
      - name: datasetId
        in: path
      operations:
      - name: trigger-refresh
        method: POST
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/noreply@bofa.com/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → executive-kpi-dashboard-digest.yml

Monitors regulatory filing deadlines by querying Snowflake, checking preparation status in ServiceNow, and alerting the compliance team in Teams.

naftiko: '0.5'
info:
  label: Regulatory Filing Deadline Monitor
  description: Monitors regulatory filing deadlines by querying Snowflake, checking preparation status in ServiceNow, and alerting the compliance team in Teams.
  tags:
  - banking
  - compliance
  - regulatory
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: regulatory-ops
    port: 8080
    tools:
    - name: track-filing-deadlines
      description: Given a jurisdiction and filing type, check the filing calendar in Snowflake, verify status in ServiceNow, and alert the compliance channel in Teams.
      inputParameters:
      - name: jurisdiction
        in: body
        type: string
        description: Jurisdiction.
      - name: filing_type
        in: body
        type: string
        description: Filing type.
      - name: compliance_channel_id
        in: body
        type: string
        description: Teams channel ID.
      steps:
      - name: get-deadlines
        type: call
        call: snowflake.query-filings
        with:
          jurisdiction: '{{jurisdiction}}'
      - name: check-status
        type: call
        call: snow.get-filing-status
        with:
          jurisdiction: '{{jurisdiction}}'
      - name: alert-team
        type: call
        call: msteams.post-channel
        with:
          channel_id: '{{compliance_channel_id}}'
          text: 'Filing deadline: {{filing_type}} for {{jurisdiction}} — Due: {{get-deadlines.next_deadline}} | Status: {{check-status.status}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bofa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: query-filings
        method: POST
  - type: http
    namespace: snow
    baseUri: https://bofa.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: filings
      path: /table/u_regulatory_filing?sysparm_query=jurisdiction={{jurisdiction}}
      inputParameters:
      - name: jurisdiction
        in: query
      operations:
      - name: get-filing-status
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channels
      path: /teams/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel
        method: POST
Open in Framework → View in Fleet → regulatory-filing-deadline-monitor.yml

When a critical vulnerability is discovered, creates a Jira remediation ticket, updates the CMDB in ServiceNow, and alerts the security team via Teams.

naftiko: '0.5'
info:
  label: IT Security Vulnerability Remediation Workflow
  description: When a critical vulnerability is discovered, creates a Jira remediation ticket, updates the CMDB in ServiceNow, and alerts the security team via Teams.
  tags:
  - banking
  - security
  - vulnerability-management
  - jira
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: secops
    port: 8080
    tools:
    - name: remediate-vulnerability
      description: Given a CVE ID, severity, and affected system, create a Jira ticket, update the ServiceNow CMDB, and notify SecOps in Teams.
      inputParameters:
      - name: cve_id
        in: body
        type: string
        description: CVE identifier.
      - name: severity
        in: body
        type: string
        description: Severity level.
      - name: affected_system
        in: body
        type: string
        description: Affected system name.
      - name: secops_upn
        in: body
        type: string
        description: UPN of SecOps lead.
      steps:
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: SECOPS
          summary: Remediate {{cve_id}} — {{affected_system}}
          description: 'Severity: {{severity}} | System: {{affected_system}}'
      - name: update-cmdb
        type: call
        call: snow.update-ci
        with:
          ci_name: '{{affected_system}}'
          vulnerability: '{{cve_id}} — {{severity}}'
      - name: notify-secops
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{secops_upn}}'
          text: 'Vulnerability: {{cve_id}} ({{severity}}) on {{affected_system}}. Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bofa.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: snow
    baseUri: https://bofa.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={{ci_name}}
      inputParameters:
      - name: ci_name
        in: query
      operations:
      - name: update-ci
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → it-security-vulnerability-remediation-workflow.yml

Retrieves the current state of a Terraform Cloud workspace, returning last run status and resource count.

naftiko: '0.5'
info:
  label: Terraform Workspace State Check
  description: Retrieves the current state of a Terraform Cloud workspace, returning last run status and resource count.
  tags:
  - banking
  - devops
  - terraform
  - infrastructure
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: infra-ops
    port: 8080
    tools:
    - name: get-workspace-state
      description: Given a Terraform Cloud workspace name, return the last run status and managed resource count.
      inputParameters:
      - name: workspace_name
        in: body
        type: string
        description: Terraform Cloud workspace name.
      call: tfc.get-workspace
      with:
        workspace: '{{workspace_name}}'
      outputParameters:
      - name: last_run_status
        type: string
        mapping: $.data.attributes.latest-run.status
      - name: resource_count
        type: integer
        mapping: $.data.attributes.resource-count
  consumes:
  - namespace: tfc
    type: http
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: infra-ops
      path: /{{id}}
      operations:
      - name: get-workspace
        method: GET
Open in Framework → View in Fleet → terraform-workspace-state-check.yml

Retrieves the latest build run for an Azure DevOps pipeline, returning status and result.

naftiko: '0.5'
info:
  label: Azure DevOps Build Status Lookup
  description: Retrieves the latest build run for an Azure DevOps pipeline, returning status and result.
  tags:
  - banking
  - devops
  - azure-devops
  - cicd
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: cicd-ops
    port: 8080
    tools:
    - name: get-build-status
      description: Given an Azure DevOps project and pipeline ID, return the latest build status and result.
      inputParameters:
      - name: project
        in: body
        type: string
        description: Azure DevOps project name.
      - name: pipeline_id
        in: body
        type: string
        description: Pipeline ID.
      call: azdo.get-run
      with:
        project: '{{project}}'
        pipelineId: '{{pipeline_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.value[0].state
      - name: result
        type: string
        mapping: $.value[0].result
  consumes:
  - namespace: azdo
    type: http
    baseUri: https://dev.azure.com/bofa
    authentication:
      type: bearer
      token: $secrets.azdo_token
    resources:
    - name: cicd-ops
      path: /{{id}}
      operations:
      - name: get-run
        method: GET
Open in Framework → View in Fleet → azure-devops-build-status-lookup.yml

Detects Terraform state drift, creates a Jira remediation ticket, and alerts the platform team in Teams.

naftiko: '0.5'
info:
  label: Terraform Drift Detection and Remediation
  description: Detects Terraform state drift, creates a Jira remediation ticket, and alerts the platform team in Teams.
  tags:
  - banking
  - devops
  - terraform
  - jira
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: platform-drift
    port: 8080
    tools:
    - name: handle-terraform-drift
      description: Given a Terraform workspace, check for drift, create a Jira ticket if detected, and notify platform engineering in Teams.
      inputParameters:
      - name: workspace_name
        in: body
        type: string
        description: Terraform workspace name.
      - name: platform_channel_id
        in: body
        type: string
        description: Teams channel ID.
      steps:
      - name: check-drift
        type: call
        call: tfc.run-plan
        with:
          workspace: '{{workspace_name}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: PLATFORM
          summary: 'Drift detected: {{workspace_name}}'
          description: 'Changes: {{check-drift.resource_changes}}'
      - name: notify-team
        type: call
        call: msteams.post-channel
        with:
          channel_id: '{{platform_channel_id}}'
          text: 'Terraform drift: {{workspace_name}} — {{check-drift.resource_changes}} changes. Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: tfc
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: runs
      path: /workspaces/{{workspace}}/runs
      inputParameters:
      - name: workspace
        in: path
      operations:
      - name: run-plan
        method: POST
  - type: http
    namespace: jira
    baseUri: https://bofa.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $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.msteams_token
    resources:
    - name: channels
      path: /teams/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel
        method: POST
Open in Framework → View in Fleet → terraform-drift-detection-and-remediation.yml

When an AML alert fires, enriches from Snowflake, creates a SAR investigation in ServiceNow, and notifies the BSA officer.

naftiko: '0.5'
info:
  label: AML Transaction Monitoring Workflow
  description: When an AML alert fires, enriches from Snowflake, creates a SAR investigation in ServiceNow, and notifies the BSA officer.
  tags:
  - banking
  - aml
  - compliance
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: aml-ops
    port: 8080
    tools:
    - name: handle-aml-alert
      description: Given a transaction ID and alert type, enrich from Snowflake, create a SAR in ServiceNow, and notify BSA.
      inputParameters:
      - name: transaction_id
        in: body
        type: string
        description: Transaction ID.
      - name: alert_type
        in: body
        type: string
        description: Alert type.
      - name: bsa_upn
        in: body
        type: string
        description: BSA officer UPN.
      steps:
      - name: enrich
        type: call
        call: snowflake.get-transaction
        with:
          transaction_id: '{{transaction_id}}'
      - name: create-sar
        type: call
        call: snow.create-sar
        with:
          short_description: 'AML: {{transaction_id}} — {{alert_type}}'
          description: 'Amount: {{enrich.amount}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{bsa_upn}}'
          text: 'AML: {{transaction_id}} — {{alert_type}}. Amount: {{enrich.amount}}. SAR: {{create-sar.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bofa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-transaction
        method: POST
  - type: http
    namespace: snow
    baseUri: https://bofa.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: sar
      path: /table/u_sar_investigation
      operations:
      - name: create-sar
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → aml-transaction-monitoring-workflow.yml

Retrieves an employee profile from Workday by employee ID, returning name, department, title, and manager.

naftiko: '0.5'
info:
  label: Workday Employee Profile Lookup
  description: Retrieves an employee profile from Workday by employee ID, returning name, department, title, and manager.
  tags:
  - banking
  - hr
  - workday
  - employee-management
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: hr-ops
    port: 8080
    tools:
    - name: get-employee-profile
      description: Given a Workday employee ID, return the employee full name, department, job title, and manager name.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      call: workday.get-worker
      with:
        Worker_ID: '{{employee_id}}'
      outputParameters:
      - name: full_name
        type: string
        mapping: $.Worker.Worker_Data.Personal_Data.Name_Data.Legal_Name
      - name: department
        type: string
        mapping: $.Worker.Worker_Data.Organization_Data.Organization_Name
      - name: title
        type: string
        mapping: $.Worker.Worker_Data.Job_Data.Position_Data.Business_Title
  consumes:
  - namespace: workday
    type: http
    baseUri: https://wd5-impl-services1.workday.com/ccx/service/bofa/Human_Resources/v40.1
    authentication:
      type: basic
      username: $secrets.workday_user
      password: $secrets.workday_password
    resources:
    - name: hr-ops
      path: /{{id}}
      operations:
      - name: get-worker
        method: GET
Open in Framework → View in Fleet → workday-employee-profile-lookup.yml

Retrieves completed sprint metrics from Jira, calculates velocity, and publishes a sprint summary to the Engineering Microsoft Teams channel for agile retrospective.

naftiko: '0.5'
info:
  label: Jira Engineering Sprint Velocity Report
  description: Retrieves completed sprint metrics from Jira, calculates velocity, and publishes a sprint summary to the Engineering Microsoft Teams channel for agile retrospective.
  tags:
  - devops
  - jira
  - agile
  - reporting
  - microsoft-teams
  - engineering
capability:
  exposes:
  - type: mcp
    namespace: agile-reporting
    port: 8080
    tools:
    - name: publish-sprint-report
      description: Given a Jira board ID and sprint ID, retrieve sprint issue data, calculate velocity, and post a formatted sprint summary to the Engineering Teams channel.
      inputParameters:
      - name: board_id
        in: body
        type: integer
        description: The Jira software board ID.
      - name: sprint_id
        in: body
        type: integer
        description: The completed sprint ID to report on.
      steps:
      - name: get-sprint
        type: call
        call: jira.get-sprint
        with:
          board_id: '{{board_id}}'
          sprint_id: '{{sprint_id}}'
      - name: get-sprint-issues
        type: call
        call: jira.list-sprint-issues
        with:
          sprint_id: '{{sprint_id}}'
      - name: post-sprint-report
        type: call
        call: msteams.post-channel-message
        with:
          channel: engineering-metrics
          message: 'Sprint {{get-sprint.name}} complete: {{get-sprint-issues.completed_points}} pts delivered | {{get-sprint-issues.count}} issues closed | Velocity: {{get-sprint-issues.velocity}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bankofamerica.atlassian.net/rest/api/3
    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
    - name: sprint-issues
      path: /sprint/{{sprint_id}}/issue
      inputParameters:
      - name: sprint_id
        in: path
      operations:
      - name: list-sprint-issues
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → jira-engineering-sprint-velocity-report.yml

When an employee termination is recorded in Workday, disables their Microsoft 365 account, revokes Okta sessions, and opens a ServiceNow offboarding checklist ticket to track hardware recovery.

naftiko: '0.5'
info:
  label: Employee Offboarding and Access Revocation
  description: When an employee termination is recorded in Workday, disables their Microsoft 365 account, revokes Okta sessions, and opens a ServiceNow offboarding checklist ticket to track hardware recovery.
  tags:
  - hr
  - offboarding
  - workday
  - okta
  - servicenow
  - microsoft-graph
  - access-revocation
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: trigger-employee-offboarding
      description: Given a Workday employee ID and termination date, disable the Microsoft 365 account, revoke all Okta sessions, and open a ServiceNow offboarding ticket.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: The Workday worker ID for the departing employee.
      - name: termination_date
        in: body
        type: string
        description: The employee's last working day in ISO 8601 format (YYYY-MM-DD).
      steps:
      - name: get-worker
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: disable-m365
        type: call
        call: msgraph.disable-user
        with:
          user_id: '{{get-worker.work_email}}'
      - name: revoke-okta
        type: call
        call: okta.revoke-user-sessions
        with:
          user_login: '{{get-worker.work_email}}'
      - name: create-offboarding-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Offboarding: {{get-worker.full_name}} — last day {{termination_date}}'
          category: hr_offboarding
          assignment_group: IT_Asset_Recovery
  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: /bankofamerica/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/{{user_id}}
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: disable-user
        method: PATCH
  - type: http
    namespace: okta
    baseUri: https://bankofamerica.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: user-sessions
      path: /users/{{user_login}}/sessions
      inputParameters:
      - name: user_login
        in: path
      operations:
      - name: revoke-user-sessions
        method: DELETE
  - type: http
    namespace: servicenow
    baseUri: https://bankofamerica.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → employee-offboarding-and-access-revocation.yml

On a pull request opened against a protected branch in a banking platform repository, posts a security checklist comment on GitHub and creates a Jira security review ticket.

naftiko: '0.5'
info:
  label: GitHub Pull Request Security Review Gate
  description: On a pull request opened against a protected branch in a banking platform repository, posts a security checklist comment on GitHub and creates a Jira security review ticket.
  tags:
  - devops
  - security
  - github
  - jira
  - ci-cd
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: pr-security
    port: 8080
    tools:
    - name: handle-pr-security-gate
      description: Given a GitHub repository, PR number, and commit SHA, post a security review checklist comment on the PR and open a Jira security ticket for mandatory review before merge.
      inputParameters:
      - name: repo_full_name
        in: body
        type: string
        description: GitHub repository full name, e.g. 'bankofamerica/payments-gateway'.
      - name: pr_number
        in: body
        type: integer
        description: The pull request number to gate.
      - name: commit_sha
        in: body
        type: string
        description: Head commit SHA for the pull request.
      steps:
      - name: get-pr
        type: call
        call: github.get-pull-request
        with:
          repo: '{{repo_full_name}}'
          pull_number: '{{pr_number}}'
      - name: post-checklist-comment
        type: call
        call: github.create-pr-comment
        with:
          repo: '{{repo_full_name}}'
          pull_number: '{{pr_number}}'
          body: Security review initiated for commit {{commit_sha}}. A Jira ticket has been created for mandatory security sign-off.
      - name: create-security-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: SEC
          issuetype: Task
          summary: 'Security review: {{repo_full_name}} PR #{{pr_number}}'
          description: 'Commit: {{commit_sha}} | PR: {{get-pr.html_url}} | Author: {{get-pr.user_login}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: pull-requests
      path: /repos/{{repo}}/pulls/{{pull_number}}
      inputParameters:
      - name: repo
        in: path
      - name: pull_number
        in: path
      operations:
      - name: get-pull-request
        method: GET
    - name: pr-comments
      path: /repos/{{repo}}/issues/{{pull_number}}/comments
      inputParameters:
      - name: repo
        in: path
      - name: pull_number
        in: path
      operations:
      - name: create-pr-comment
        method: POST
  - type: http
    namespace: jira
    baseUri: https://bankofamerica.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → github-pull-request-security-review-gate.yml

Prepares a client portfolio review by pulling holdings from Snowflake, generating a performance summary, and distributing to the relationship manager via Teams.

naftiko: '0.5'
info:
  label: Client Portfolio Review Preparation
  description: Prepares a client portfolio review by pulling holdings from Snowflake, generating a performance summary, and distributing to the relationship manager via Teams.
  tags:
  - banking
  - wealth-management
  - portfolio
  - snowflake
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: wealth-ops
    port: 8080
    tools:
    - name: prepare-portfolio-review
      description: Given a client ID, pull portfolio holdings from Snowflake, generate performance metrics, and notify the RM in Teams.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: Client ID.
      - name: rm_upn
        in: body
        type: string
        description: Relationship manager UPN.
      steps:
      - name: get-holdings
        type: call
        call: snowflake.query-portfolio
        with:
          client_id: '{{client_id}}'
      - name: update-sf
        type: call
        call: sf.update-review
        with:
          client_id: '{{client_id}}'
          performance: '{{get-holdings.ytd_return}}'
      - name: notify-rm
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{rm_upn}}'
          text: 'Portfolio review ready: {{client_id}} — YTD: {{get-holdings.ytd_return}}% | AUM: ${{get-holdings.total_aum}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bofa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: query-portfolio
        method: POST
  - type: http
    namespace: sf
    baseUri: https://bofa.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: reviews
      path: /sobjects/Portfolio_Review__c/{{client_id}}
      inputParameters:
      - name: client_id
        in: path
      operations:
      - name: update-review
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → client-portfolio-review-preparation.yml

Retrieves the current balance for a specified SAP general ledger account and company code.

naftiko: '0.5'
info:
  label: SAP General Ledger Balance Check
  description: Retrieves the current balance for a specified SAP general ledger account and company code.
  tags:
  - banking
  - finance
  - sap
  - accounting
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: gl-ops
    port: 8080
    tools:
    - name: get-gl-balance
      description: Given an SAP company code and GL account, return the current balance and currency.
      inputParameters:
      - name: company_code
        in: body
        type: string
        description: SAP company code.
      - name: gl_account
        in: body
        type: string
        description: GL account number.
      call: sap-fi.get-balance
      with:
        CompanyCode: '{{company_code}}'
        GLAccount: '{{gl_account}}'
      outputParameters:
      - name: balance
        type: number
        mapping: $.d.EndingBalanceAmtInCoCodeCrcy
      - name: currency
        type: string
        mapping: $.d.CompanyCodeCurrency
  consumes:
  - namespace: sap-fi
    type: http
    baseUri: https://bofa-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: gl-ops
      path: /{{id}}
      operations:
      - name: get-balance
        method: GET
Open in Framework → View in Fleet → sap-general-ledger-balance-check.yml

Tracks loan document collection by checking Salesforce, sending reminders, and logging in ServiceNow.

naftiko: '0.5'
info:
  label: Loan Origination Document Tracker
  description: Tracks loan document collection by checking Salesforce, sending reminders, and logging in ServiceNow.
  tags:
  - banking
  - lending
  - salesforce
  - servicenow
  - document-management
capability:
  exposes:
  - type: mcp
    namespace: lending-ops
    port: 8080
    tools:
    - name: track-loan-documents
      description: Given a loan application ID, check document status, send reminders, and log progress.
      inputParameters:
      - name: application_id
        in: body
        type: string
        description: Application ID.
      - name: applicant_email
        in: body
        type: string
        description: Applicant email.
      - name: lo_upn
        in: body
        type: string
        description: Loan officer UPN.
      steps:
      - name: check-docs
        type: call
        call: sf.get-doc-status
        with:
          application_id: '{{application_id}}'
      - name: send-reminder
        type: call
        call: msgraph.send-mail
        with:
          to: '{{applicant_email}}'
          subject: 'Documents Needed: {{application_id}}'
          body: 'Missing: {{check-docs.missing_documents}}'
      - name: log-progress
        type: call
        call: snow.update-task
        with:
          short_description: 'Docs: {{application_id}}'
          description: 'Complete: {{check-docs.complete_count}}'
  consumes:
  - type: http
    namespace: sf
    baseUri: https://bofa.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: applications
      path: /sobjects/Loan_Application__c/{{application_id}}
      operations:
      - name: get-doc-status
        method: GET
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/noreply@bofa.com/sendMail
      operations:
      - name: send-mail
        method: POST
  - type: http
    namespace: snow
    baseUri: https://bofa.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/u_loan_task
      operations:
      - name: update-task
        method: POST
Open in Framework → View in Fleet → loan-origination-document-tracker.yml

Exports current headcount and salary band data from ADP by cost center, posts the report to SharePoint, and sends a summary digest to the HR Finance Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Payroll Headcount and Cost Center Report
  description: Exports current headcount and salary band data from ADP by cost center, posts the report to SharePoint, and sends a summary digest to the HR Finance Microsoft Teams channel.
  tags:
  - hr
  - finance
  - payroll
  - headcount
  - adp
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-finance
    port: 8080
    tools:
    - name: get-payroll-headcount-snapshot
      description: Export headcount and cost center data from ADP for a given report month, upload the report to SharePoint, and post a summary to the HR Finance Teams channel.
      inputParameters:
      - name: report_month
        in: body
        type: string
        description: The month to report on in YYYY-MM format, e.g. '2026-03'.
      - name: division
        in: body
        type: string
        description: Bank of America division to filter by, e.g. 'Global Banking', 'Merrill Lynch'.
      steps:
      - name: export-headcount
        type: call
        call: adp.export-workers
        with:
          asOfDate: '{{report_month}}'
          division: '{{division}}'
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: hr-finance
          folder: Headcount/{{report_month}}
          filename: headcount-{{division}}-{{report_month}}.csv
          content: '{{export-headcount.csv_data}}'
      - name: post-digest
        type: call
        call: msteams.post-channel-message
        with:
          channel: hr-finance-reporting
          message: 'Headcount snapshot for {{division}} ({{report_month}}): {{export-headcount.total_count}} employees. Report uploaded to SharePoint.'
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: workers-export
      path: /hr/v2/workers/export
      operations:
      - name: export-workers
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /sites/{{site_id}}/drive/root:/{{folder}}/{{filename}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder
        in: path
      - name: filename
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → payroll-headcount-and-cost-center-report.yml

Books a conference room via Microsoft Graph, creates the calendar event, and notifies attendees in Teams.

naftiko: '0.5'
info:
  label: Conference Room Booking Notification
  description: Books a conference room via Microsoft Graph, creates the calendar event, and notifies attendees in Teams.
  tags:
  - banking
  - facilities
  - microsoft-graph
  - microsoft-teams
  - scheduling
capability:
  exposes:
  - type: mcp
    namespace: facilities-ops
    port: 8080
    tools:
    - name: book-conference-room
      description: Given a room email, start/end times, and organizer, check availability, create the booking, and notify in Teams.
      inputParameters:
      - name: room_email
        in: body
        type: string
        description: Room resource email.
      - name: start_time
        in: body
        type: string
        description: Start time (ISO 8601).
      - name: end_time
        in: body
        type: string
        description: End time (ISO 8601).
      - name: organizer_upn
        in: body
        type: string
        description: Organizer UPN.
      steps:
      - name: check-availability
        type: call
        call: msgraph.get-schedule
        with:
          room: '{{room_email}}'
          start: '{{start_time}}'
      - name: create-booking
        type: call
        call: msgraph.create-event
        with:
          room: '{{room_email}}'
          start: '{{start_time}}'
          end: '{{end_time}}'
      - name: notify-organizer
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{organizer_upn}}'
          text: 'Room booked: {{room_email}} from {{start_time}} to {{end_time}}.'
  consumes:
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: schedules
      path: /users/{{room}}/calendar/getSchedule
      inputParameters:
      - name: room
        in: path
      operations:
      - name: get-schedule
        method: POST
    - name: events
      path: /users/{{organizer_upn}}/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: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → conference-room-booking-notification.yml

Looks up an Okta user by email and returns the account status, last login timestamp, and MFA enrollment state.

naftiko: '0.5'
info:
  label: Okta User Account Status Lookup
  description: Looks up an Okta user by email and returns the account status, last login timestamp, and MFA enrollment state.
  tags:
  - banking
  - security
  - okta
  - identity
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: identity-ops
    port: 8080
    tools:
    - name: get-user-status
      description: Given a user email, return the Okta account status, last login, and MFA enrollment status.
      inputParameters:
      - name: user_email
        in: body
        type: string
        description: User email address.
      call: okta.get-user
      with:
        login: '{{user_email}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: last_login
        type: string
        mapping: $.lastLogin
  consumes:
  - namespace: okta
    type: http
    baseUri: https://bofa.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_api_token
    resources:
    - name: identity-ops
      path: /{{id}}
      operations:
      - name: get-user
        method: GET
Open in Framework → View in Fleet → okta-user-account-status-lookup.yml

When a complaint is received, creates a Salesforce case, opens a ServiceNow investigation task, and notifies the compliance officer via Teams.

naftiko: '0.5'
info:
  label: Customer Complaint Escalation Handler
  description: When a complaint is received, creates a Salesforce case, opens a ServiceNow investigation task, and notifies the compliance officer via Teams.
  tags:
  - banking
  - customer-service
  - salesforce
  - servicenow
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: complaints-ops
    port: 8080
    tools:
    - name: escalate-complaint
      description: Given complaint details, create a Salesforce case, open a ServiceNow task, and alert compliance via Teams.
      inputParameters:
      - name: customer_name
        in: body
        type: string
        description: Complainant name.
      - name: account_number
        in: body
        type: string
        description: Account or policy number.
      - name: complaint_category
        in: body
        type: string
        description: Complaint category.
      - name: compliance_upn
        in: body
        type: string
        description: UPN of compliance officer.
      steps:
      - name: create-case
        type: call
        call: sf.create-case
        with:
          Subject: Complaint — {{account_number}} — {{complaint_category}}
          Description: 'Customer: {{customer_name}} | Category: {{complaint_category}}'
      - name: create-task
        type: call
        call: snow.create-task
        with:
          short_description: 'Complaint: {{account_number}}'
          description: 'SF Case: {{create-case.case_number}} | {{complaint_category}}'
      - name: notify-compliance
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{compliance_upn}}'
          text: 'Complaint escalation: {{customer_name}} — {{complaint_category}}. SF: {{create-case.case_number}} | SNOW: {{create-task.number}}'
  consumes:
  - type: http
    namespace: sf
    baseUri: https://bofa.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: snow
    baseUri: https://bofa.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sn_si_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → customer-complaint-escalation-handler.yml

Collects loan origination documents by tracking submission status in Salesforce, sending reminders via email, and logging progress in ServiceNow.

naftiko: '0.5'
info:
  label: Loan Origination Document Collection
  description: Collects loan origination documents by tracking submission status in Salesforce, sending reminders via email, and logging progress in ServiceNow.
  tags:
  - banking
  - lending
  - salesforce
  - servicenow
  - document-management
capability:
  exposes:
  - type: mcp
    namespace: lending-ops
    port: 8080
    tools:
    - name: collect-loan-documents
      description: Given a loan application ID, check document status in Salesforce, send reminders for missing docs, and log progress in ServiceNow.
      inputParameters:
      - name: application_id
        in: body
        type: string
        description: Loan application ID.
      - name: applicant_email
        in: body
        type: string
        description: Applicant email.
      - name: lo_upn
        in: body
        type: string
        description: Loan officer UPN.
      steps:
      - name: check-docs
        type: call
        call: sf.get-doc-status
        with:
          application_id: '{{application_id}}'
      - name: send-reminder
        type: call
        call: msgraph.send-mail
        with:
          to: '{{applicant_email}}'
          subject: 'Documents Needed: Loan Application {{application_id}}'
          body: 'Missing: {{check-docs.missing_documents}}'
      - name: log-progress
        type: call
        call: snow.update-task
        with:
          short_description: 'Doc collection: {{application_id}}'
          description: 'Complete: {{check-docs.complete_count}} | Missing: {{check-docs.missing_count}}'
  consumes:
  - type: http
    namespace: sf
    baseUri: https://bofa.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: applications
      path: /sobjects/Loan_Application__c/{{application_id}}
      inputParameters:
      - name: application_id
        in: path
      operations:
      - name: get-doc-status
        method: GET
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/noreply@bofa.com/sendMail
      operations:
      - name: send-mail
        method: POST
  - type: http
    namespace: snow
    baseUri: https://bofa.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/u_loan_task
      operations:
      - name: update-task
        method: POST
Open in Framework → View in Fleet → loan-origination-document-collection.yml

When an employee termination is processed in Workday, disables their Okta account, revokes ServiceNow access, and notifies the HR business partner via Teams.

naftiko: '0.5'
info:
  label: Employee Termination Access Revocation
  description: When an employee termination is processed in Workday, disables their Okta account, revokes ServiceNow access, and notifies the HR business partner via Teams.
  tags:
  - banking
  - hr
  - security
  - workday
  - okta
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: hr-security
    port: 8080
    tools:
    - name: revoke-terminated-access
      description: Given a Workday employee ID and termination date, disable the Okta account, close open ServiceNow tickets, and notify the HRBP via Teams.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      - name: termination_date
        in: body
        type: string
        description: Termination date.
      - name: hrbp_upn
        in: body
        type: string
        description: UPN of the HRBP.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          employee_id: '{{employee_id}}'
      - name: disable-okta
        type: call
        call: okta.deactivate-user
        with:
          login: '{{get-employee.email}}'
      - name: notify-hrbp
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{hrbp_upn}}'
          text: Access revoked for {{get-employee.full_name}} ({{employee_id}}) effective {{termination_date}}.
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/service/bofa/Human_Resources/v40.1
    authentication:
      type: basic
      username: $secrets.workday_user
      password: $secrets.workday_password
    resources:
    - name: workers
      path: /workers/{{employee_id}}
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: okta
    baseUri: https://bofa.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_api_token
    resources:
    - name: users
      path: /users/{{login}}/lifecycle/deactivate
      inputParameters:
      - name: login
        in: path
      operations:
      - name: deactivate-user
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → employee-termination-access-revocation.yml

Queries SAP Concur for expense reports pending approval beyond the SLA threshold and sends reminder notifications to approving managers via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Concur Expense Report Approval Reminder
  description: Queries SAP Concur for expense reports pending approval beyond the SLA threshold and sends reminder notifications to approving managers via Microsoft Teams.
  tags:
  - finance
  - expense-management
  - sap-concur
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: expense-approvals
    port: 8080
    tools:
    - name: send-expense-approval-reminders
      description: Query SAP Concur for expense reports in Pending Manager Approval status older than the specified threshold, then send a Teams reminder to the Finance Approvals channel.
      inputParameters:
      - name: days_pending
        in: body
        type: integer
        description: 'Days a report must be pending before sending a reminder. Default: 5.'
      steps:
      - name: get-pending-reports
        type: call
        call: concur.list-pending-reports
        with:
          approvalStatus: A_PEND
          daysOld: '{{days_pending}}'
      - name: notify-approvers
        type: call
        call: msteams.post-channel-message
        with:
          channel: finance-approvals
          message: '{{get-pending-reports.count}} expense reports pending approval for more than {{days_pending}} days. Please review 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: expense-reports
      path: /expense/reports
      operations:
      - name: list-pending-reports
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → sap-concur-expense-report-approval-reminder.yml

Looks up a user identity in SailPoint and returns current entitlements and certification status.

naftiko: '0.5'
info:
  label: SailPoint Identity Governance Lookup
  description: Looks up a user identity in SailPoint and returns current entitlements and certification status.
  tags:
  - banking
  - security
  - sailpoint
  - identity-governance
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: iam-ops
    port: 8080
    tools:
    - name: get-identity-access
      description: Given a SailPoint identity alias, return the display name, entitlement count, and last certification date.
      inputParameters:
      - name: identity_alias
        in: body
        type: string
        description: SailPoint identity alias or email.
      call: sailpoint.get-identity
      with:
        alias: '{{identity_alias}}'
      outputParameters:
      - name: display_name
        type: string
        mapping: $.displayName
      - name: entitlement_count
        type: integer
        mapping: $.entitlementCount
  consumes:
  - namespace: sailpoint
    type: http
    baseUri: https://bofa.api.identitynow.com/v3
    authentication:
      type: bearer
      token: $secrets.sailpoint_token
    resources:
    - name: iam-ops
      path: /{{id}}
      operations:
      - name: get-identity
        method: GET
Open in Framework → View in Fleet → sailpoint-identity-governance-lookup.yml

Runs a Splunk search for security events matching a query and returns the result count.

naftiko: '0.5'
info:
  label: Splunk Security Event Query
  description: Runs a Splunk search for security events matching a query and returns the result count.
  tags:
  - banking
  - security
  - splunk
  - siem
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: security-ops
    port: 8080
    tools:
    - name: search-security-events
      description: Given a Splunk search query, execute the search and return the result count and top events.
      inputParameters:
      - name: search_query
        in: body
        type: string
        description: Splunk search query string.
      call: splunk.run-search
      with:
        search: '{{search_query}}'
      outputParameters:
      - name: result_count
        type: integer
        mapping: $.resultCount
  consumes:
  - namespace: splunk
    type: http
    baseUri: https://bofa-splunk.splunkcloud.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: security-ops
      path: /{{id}}
      operations:
      - name: run-search
        method: GET
Open in Framework → View in Fleet → splunk-security-event-query.yml

Triggers a Terraform Cloud workspace run for cloud infrastructure provisioning or updates, and notifies the Platform Engineering team in Microsoft Teams with the run status.

naftiko: '0.5'
info:
  label: Terraform Cloud Infrastructure Provisioning Trigger
  description: Triggers a Terraform Cloud workspace run for cloud infrastructure provisioning or updates, and notifies the Platform Engineering team in Microsoft Teams with the run status.
  tags:
  - cloud
  - infrastructure
  - terraform
  - microsoft-teams
  - devops
  - provisioning
capability:
  exposes:
  - type: mcp
    namespace: infra-provisioning
    port: 8080
    tools:
    - name: trigger-terraform-run
      description: Given a Terraform Cloud workspace ID and a descriptive message, trigger an infrastructure plan-and-apply run and notify the Platform Engineering Teams channel.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: The Terraform Cloud workspace ID to run against.
      - name: run_message
        in: body
        type: string
        description: Description of the infrastructure change, e.g. 'Scale EKS node group for transaction processing'.
      steps:
      - name: trigger-run
        type: call
        call: terraform.create-run
        with:
          workspace_id: '{{workspace_id}}'
          message: '{{run_message}}'
      - name: notify-platform
        type: call
        call: msteams.post-channel-message
        with:
          channel: platform-engineering
          message: 'Terraform run triggered: {{run_message}} | Workspace: {{workspace_id}} | Run: {{trigger-run.id}}'
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: runs
      path: /runs
      operations:
      - name: create-run
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → terraform-cloud-infrastructure-provisioning-trigger.yml

Checks the refresh status of a Power BI dataset and returns the last refresh time and status.

naftiko: '0.5'
info:
  label: Power BI Dataset Refresh Status Check
  description: Checks the refresh status of a Power BI dataset and returns the last refresh time and status.
  tags:
  - banking
  - analytics
  - power-bi
  - reporting
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: bi-ops
    port: 8080
    tools:
    - name: get-dataset-refresh
      description: Given a Power BI dataset ID, return the last refresh timestamp and status.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset GUID.
      call: pbi.get-refresh
      with:
        datasetId: '{{dataset_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.value[0].status
      - name: end_time
        type: string
        mapping: $.value[0].endTime
  consumes:
  - namespace: pbi
    type: http
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: bi-ops
      path: /{{id}}
      operations:
      - name: get-refresh
        method: GET
Open in Framework → View in Fleet → power-bi-dataset-refresh-status-check.yml

Retrieves the current on-call engineer for a given PagerDuty escalation policy to support incident routing and stakeholder communication.

naftiko: '0.5'
info:
  label: PagerDuty On-Call Engineer Lookup
  description: Retrieves the current on-call engineer for a given PagerDuty escalation policy to support incident routing and stakeholder communication.
  tags:
  - itsm
  - pagerduty
  - on-call
  - incident-response
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: oncall-lookup
    port: 8080
    tools:
    - name: get-current-oncall
      description: Given a PagerDuty escalation policy ID, return the name and email of the currently on-call engineer. Use when routing critical banking platform incidents.
      inputParameters:
      - name: escalation_policy_id
        in: body
        type: string
        description: The PagerDuty escalation policy ID for the relevant banking system team.
      call: pagerduty.get-oncall
      with:
        escalation_policy_id: '{{escalation_policy_id}}'
      outputParameters:
      - name: oncall_name
        type: string
        mapping: $.oncalls[0].user.summary
      - name: oncall_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
      operations:
      - name: get-oncall
        method: GET
Open in Framework → View in Fleet → pagerduty-on-call-engineer-lookup.yml

Queries Workday for open positions by department, returning count and average days open.

naftiko: '0.5'
info:
  label: Workday Open Position Count Check
  description: Queries Workday for open positions by department, returning count and average days open.
  tags:
  - banking
  - hr
  - workday
  - talent-acquisition
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: ta-ops
    port: 8080
    tools:
    - name: get-open-positions
      description: Given a department name, return the open position count and average days since posting.
      inputParameters:
      - name: department
        in: body
        type: string
        description: Department name.
      call: workday.get-requisitions
      with:
        department: '{{department}}'
      outputParameters:
      - name: open_count
        type: integer
        mapping: $.total
      - name: avg_days_open
        type: number
        mapping: $.averageDaysOpen
  consumes:
  - namespace: workday
    type: http
    baseUri: https://wd5-impl-services1.workday.com/ccx/service/bofa/Human_Resources/v40.1
    authentication:
      type: basic
      username: $secrets.workday_user
      password: $secrets.workday_password
    resources:
    - name: ta-ops
      path: /{{id}}
      operations:
      - name: get-requisitions
        method: GET
Open in Framework → View in Fleet → workday-open-position-count-check.yml

Processes KYC customer onboarding by verifying identity in Salesforce, running compliance checks in Snowflake, and creating an onboarding task in ServiceNow.

naftiko: '0.5'
info:
  label: KYC Customer Onboarding Workflow
  description: Processes KYC customer onboarding by verifying identity in Salesforce, running compliance checks in Snowflake, and creating an onboarding task in ServiceNow.
  tags:
  - banking
  - kyc
  - compliance
  - salesforce
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: kyc-ops
    port: 8080
    tools:
    - name: onboard-customer-kyc
      description: Given customer details, verify identity in Salesforce, run KYC checks in Snowflake, create onboarding task in ServiceNow, and notify compliance in Teams.
      inputParameters:
      - name: customer_name
        in: body
        type: string
        description: Customer name.
      - name: customer_id
        in: body
        type: string
        description: Customer ID.
      - name: compliance_upn
        in: body
        type: string
        description: Compliance officer UPN.
      steps:
      - name: verify-identity
        type: call
        call: sf.get-customer
        with:
          customer_id: '{{customer_id}}'
      - name: run-kyc
        type: call
        call: snowflake.run-kyc-check
        with:
          customer_name: '{{customer_name}}'
      - name: create-task
        type: call
        call: snow.create-task
        with:
          short_description: 'KYC Onboarding: {{customer_name}}'
          description: 'ID: {{customer_id}} | KYC: {{run-kyc.status}}'
      - name: notify-compliance
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{compliance_upn}}'
          text: 'KYC onboarding: {{customer_name}} — Status: {{run-kyc.status}}. SNOW: {{create-task.number}}'
  consumes:
  - type: http
    namespace: sf
    baseUri: https://bofa.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: customers
      path: /sobjects/Account/{{customer_id}}
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: get-customer
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://bofa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-kyc-check
        method: POST
  - type: http
    namespace: snow
    baseUri: https://bofa.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/u_kyc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → kyc-customer-onboarding-workflow.yml

Retrieves a client account from Salesforce by account ID, returning relationship manager, account tier, and total assets under management.

naftiko: '0.5'
info:
  label: Salesforce Client Account Lookup
  description: Retrieves a client account from Salesforce by account ID, returning relationship manager, account tier, and total assets under management.
  tags:
  - banking
  - banking
  - salesforce
  - relationship-management
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: client-ops
    port: 8080
    tools:
    - name: get-client-account
      description: Given a Salesforce account ID, return the client name, relationship manager, account tier, and AUM.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Salesforce account ID.
      call: sf.get-account
      with:
        accountId: '{{account_id}}'
      outputParameters:
      - name: client_name
        type: string
        mapping: $.Name
      - name: rm
        type: string
        mapping: $.Owner.Name
      - name: tier
        type: string
        mapping: $.Tier__c
  consumes:
  - namespace: sf
    type: http
    baseUri: https://bofa.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: client-ops
      path: /{{id}}
      operations:
      - name: get-account
        method: GET
Open in Framework → View in Fleet → salesforce-client-account-lookup.yml

Enriches a Salesforce client account record with updated relationship manager assignment, segment classification, and AUM data, then syncs the update status to the Relationship Management Teams channel.

naftiko: '0.5'
info:
  label: Salesforce Client Account Enrichment
  description: Enriches a Salesforce client account record with updated relationship manager assignment, segment classification, and AUM data, then syncs the update status to the Relationship Management Teams channel.
  tags:
  - crm
  - salesforce
  - microsoft-teams
  - client-management
  - wealth-management
capability:
  exposes:
  - type: mcp
    namespace: client-management
    port: 8080
    tools:
    - name: enrich-client-account
      description: Given a Salesforce account ID, relationship manager ID, segment, and AUM value, update the client account record and notify the Relationship Management Teams channel of the change.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID to enrich.
      - name: relationship_manager_id
        in: body
        type: string
        description: The Salesforce user ID of the assigned relationship manager.
      - name: client_segment
        in: body
        type: string
        description: 'Client segment classification: ''Mass Affluent'', ''High Net Worth'', ''Ultra High Net Worth'', ''Institutional''.'
      - name: aum_usd
        in: body
        type: number
        description: Total assets under management for the client in USD.
      steps:
      - name: update-account
        type: call
        call: salesforce.update-account
        with:
          account_id: '{{account_id}}'
          owner_id: '{{relationship_manager_id}}'
          segment: '{{client_segment}}'
          aum: '{{aum_usd}}'
      - name: notify-rm-channel
        type: call
        call: msteams.post-channel-message
        with:
          channel: relationship-management
          message: 'Client account {{account_id}} updated: Segment {{client_segment}} | AUM ${{aum_usd}} | RM: {{relationship_manager_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://bankofamerica.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: update-account
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → salesforce-client-account-enrichment.yml

Screens customers against sanctions lists in Snowflake, logs in ServiceNow, and escalates matches.

naftiko: '0.5'
info:
  label: Sanctions Screening Handler
  description: Screens customers against sanctions lists in Snowflake, logs in ServiceNow, and escalates matches.
  tags:
  - banking
  - sanctions
  - compliance
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: sanctions-ops
    port: 8080
    tools:
    - name: screen-sanctions
      description: Given a customer name and country, screen in Snowflake, log in ServiceNow, and notify compliance.
      inputParameters:
      - name: customer_name
        in: body
        type: string
        description: Customer name.
      - name: country
        in: body
        type: string
        description: Country.
      - name: compliance_upn
        in: body
        type: string
        description: Compliance UPN.
      steps:
      - name: screen
        type: call
        call: snowflake.screen-sanctions
        with:
          customer: '{{customer_name}}'
          country: '{{country}}'
      - name: log
        type: call
        call: snow.create-record
        with:
          short_description: 'Sanctions: {{customer_name}}'
          description: 'Matches: {{screen.match_count}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{compliance_upn}}'
          text: 'Sanctions: {{customer_name}} ({{country}}) — {{screen.match_count}} matches. SNOW: {{log.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bofa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: screen-sanctions
        method: POST
  - type: http
    namespace: snow
    baseUri: https://bofa.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: screening
      path: /table/u_sanctions_screening
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sanctions-screening-handler.yml

Retrieves the current foreign exchange rate from Refinitiv for a specified currency pair.

naftiko: '0.5'
info:
  label: Refinitiv FX Rate Lookup
  description: Retrieves the current foreign exchange rate from Refinitiv for a specified currency pair.
  tags:
  - banking
  - refinitiv
  - foreign-exchange
  - trading
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: fx-ops
    port: 8080
    tools:
    - name: get-fx-rate
      description: Given a currency pair, return the current bid, ask, and mid rates.
      inputParameters:
      - name: currency_pair
        in: body
        type: string
        description: Currency pair, e.g. EURUSD.
      call: refinitiv.get-fx-rate
      with:
        pair: '{{currency_pair}}'
      outputParameters:
      - name: bid
        type: number
        mapping: $.data[0].bid
      - name: ask
        type: number
        mapping: $.data[0].ask
      - name: mid
        type: number
        mapping: $.data[0].mid
  consumes:
  - namespace: refinitiv
    type: http
    baseUri: https://api.refinitiv.com/data/pricing/v1
    authentication:
      type: bearer
      token: $secrets.refinitiv_token
    resources:
    - name: quotes
      path: /quotes/{{pair}}
      operations:
      - name: get-fx-rate
        method: GET
Open in Framework → View in Fleet → refinitiv-fx-rate-lookup.yml

When an AML alert fires, enriches the transaction from Snowflake, creates a SAR investigation in ServiceNow, and notifies the BSA officer via Teams.

naftiko: '0.5'
info:
  label: AML Transaction Monitoring Alert
  description: When an AML alert fires, enriches the transaction from Snowflake, creates a SAR investigation in ServiceNow, and notifies the BSA officer via Teams.
  tags:
  - banking
  - aml
  - compliance
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: aml-ops
    port: 8080
    tools:
    - name: handle-aml-alert
      description: Given a transaction ID and alert type, enrich from Snowflake, create a SAR investigation in ServiceNow, and notify the BSA officer.
      inputParameters:
      - name: transaction_id
        in: body
        type: string
        description: Transaction ID.
      - name: alert_type
        in: body
        type: string
        description: AML alert type.
      - name: bsa_officer_upn
        in: body
        type: string
        description: BSA officer UPN.
      steps:
      - name: enrich-txn
        type: call
        call: snowflake.get-transaction
        with:
          transaction_id: '{{transaction_id}}'
      - name: create-sar
        type: call
        call: snow.create-sar
        with:
          short_description: 'AML Alert: {{transaction_id}} — {{alert_type}}'
          description: 'Amount: {{enrich-txn.amount}} | Customer: {{enrich-txn.customer_name}}'
      - name: notify-bsa
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{bsa_officer_upn}}'
          text: 'AML alert: {{transaction_id}} — {{alert_type}}. Amount: {{enrich-txn.amount}}. SAR: {{create-sar.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bofa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-transaction
        method: POST
  - type: http
    namespace: snow
    baseUri: https://bofa.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: sar
      path: /table/u_sar_investigation
      operations:
      - name: create-sar
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → aml-transaction-monitoring-alert.yml

Looks up the most recent execution status of a named Snowflake task pipeline in the Bank of America data warehouse and returns run state, duration, and error message.

naftiko: '0.5'
info:
  label: Snowflake Pipeline Job Status Lookup
  description: Looks up the most recent execution status of a named Snowflake task pipeline in the Bank of America data warehouse and returns run state, duration, and error message.
  tags:
  - data
  - analytics
  - snowflake
  - monitoring
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: data-pipeline-lookup
    port: 8080
    tools:
    - name: get-pipeline-job-status
      description: Given a Snowflake database and task name, return the most recent task run state, scheduled time, completed time, and error message if failed.
      inputParameters:
      - name: database_name
        in: body
        type: string
        description: The Snowflake database name, e.g. 'BOA_RISK_PROD'.
      - name: task_name
        in: body
        type: string
        description: The Snowflake task name to query status for.
      call: snowflake.get-task-history
      with:
        database: '{{database_name}}'
        task_name: '{{task_name}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.data[0].STATE
      - name: scheduled_time
        type: string
        mapping: $.data[0].SCHEDULED_TIME
      - name: completed_time
        type: string
        mapping: $.data[0].COMPLETED_TIME
      - name: error_message
        type: string
        mapping: $.data[0].ERROR_MESSAGE
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bankofamerica.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: task-history
      path: /databases/{{database}}/schemas/information_schema/task_history
      inputParameters:
      - name: database
        in: path
      operations:
      - name: get-task-history
        method: GET
Open in Framework → View in Fleet → snowflake-pipeline-job-status-lookup.yml

Retrieves an SAP Concur expense report by ID, returning the total amount, approval status, and owner.

naftiko: '0.5'
info:
  label: SAP Concur Expense Report Status Lookup
  description: Retrieves an SAP Concur expense report by ID, returning the total amount, approval status, and owner.
  tags:
  - banking
  - finance
  - sap-concur
  - expense-management
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: expense-ops
    port: 8080
    tools:
    - name: get-expense-report
      description: Given a Concur report ID, return the total, currency, approval status, and submitter name.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: SAP Concur expense report ID.
      call: concur.get-report
      with:
        reportId: '{{report_id}}'
      outputParameters:
      - name: total
        type: number
        mapping: $.Total
      - name: status
        type: string
        mapping: $.ApprovalStatusName
      - name: owner
        type: string
        mapping: $.OwnerName
  consumes:
  - namespace: concur
    type: http
    baseUri: https://api.bofa.com/v1
    authentication:
      type: bearer
      token: $secrets.api_token
    resources:
    - name: expense-ops
      path: /{{id}}
      operations:
      - name: get-report
        method: GET
Open in Framework → View in Fleet → sap-concur-expense-report-status-lookup.yml

When an AWS cost anomaly alert is triggered, annotates it in Datadog, opens a ServiceNow change request for FinOps review, and notifies the Cloud Cost Management team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Cloud Cost Anomaly Detection and Response
  description: When an AWS cost anomaly alert is triggered, annotates it in Datadog, opens a ServiceNow change request for FinOps review, and notifies the Cloud Cost Management team via Microsoft Teams.
  tags:
  - finops
  - cloud
  - aws
  - datadog
  - servicenow
  - cost-management
capability:
  exposes:
  - type: mcp
    namespace: finops
    port: 8080
    tools:
    - name: handle-cost-anomaly
      description: Given an AWS cost anomaly with service name and overage amount, create a Datadog annotation, open a ServiceNow change request, and alert the FinOps Teams channel.
      inputParameters:
      - name: aws_service
        in: body
        type: string
        description: The AWS service reporting the anomaly, e.g. 'Amazon EC2', 'AWS Lambda'.
      - name: overage_usd
        in: body
        type: number
        description: Estimated cost overage in USD.
      - name: account_id
        in: body
        type: string
        description: The AWS account ID where the anomaly was detected.
      steps:
      - name: annotate-datadog
        type: call
        call: datadog.create-event
        with:
          title: 'AWS Cost Anomaly: {{aws_service}}'
          text: 'Account {{account_id}} — overage: ${{overage_usd}}'
          alert_type: warning
      - name: open-change-request
        type: call
        call: servicenow.create-change
        with:
          short_description: 'FinOps review: {{aws_service}} overage ${{overage_usd}}'
          category: finops
          justification: AWS anomaly detected on account {{account_id}}
      - name: notify-finops
        type: call
        call: msteams.post-channel-message
        with:
          channel: cloud-cost-management
          message: 'AWS Cost Anomaly: {{aws_service}} | Account: {{account_id}} | Overage: ${{overage_usd}} | SNOW: {{open-change-request.number}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bankofamerica.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: post-channel-message
        method: POST
Open in Framework → View in Fleet → cloud-cost-anomaly-detection-and-response.yml

Analyzes interest rate risk by pulling balance sheet data from Snowflake, running scenarios, and distributing results via Teams.

naftiko: '0.5'
info:
  label: Interest Rate Risk Sensitivity Analysis
  description: Analyzes interest rate risk by pulling balance sheet data from Snowflake, running scenarios, and distributing results via Teams.
  tags:
  - banking
  - risk-management
  - interest-rate
  - snowflake
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: alm-ops
    port: 8080
    tools:
    - name: run-ir-sensitivity
      description: Given a scenario set and report date, pull balance sheet from Snowflake, run rate shock scenarios, and post results.
      inputParameters:
      - name: scenario_set
        in: body
        type: string
        description: Scenario set name.
      - name: report_date
        in: body
        type: string
        description: Report date.
      - name: alm_channel_id
        in: body
        type: string
        description: ALM channel.
      steps:
      - name: get-balances
        type: call
        call: snowflake.query-balances
        with:
          date: '{{report_date}}'
      - name: run-scenarios
        type: call
        call: snowflake.run-scenarios
        with:
          scenario: '{{scenario_set}}'
      - name: post-results
        type: call
        call: msteams.post-channel
        with:
          channel_id: '{{alm_channel_id}}'
          text: 'IR Sensitivity: {{scenario_set}} — {{report_date}}. NII impact: ${{run-scenarios.nii_impact}} | EVE impact: ${{run-scenarios.eve_impact}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bofa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: query-balances
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channels
      path: /teams/channels/{{channel_id}}/messages
      operations:
      - name: post-channel
        method: POST
Open in Framework → View in Fleet → interest-rate-risk-sensitivity-analysis.yml

Prepares portfolio reviews by pulling holdings from Snowflake, updating Salesforce, and notifying the RM.

naftiko: '0.5'
info:
  label: Client Portfolio Review Preparer
  description: Prepares portfolio reviews by pulling holdings from Snowflake, updating Salesforce, and notifying the RM.
  tags:
  - banking
  - wealth-management
  - portfolio
  - snowflake
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: wealth-ops
    port: 8080
    tools:
    - name: prepare-portfolio-review
      description: Given a client ID, pull portfolio from Snowflake, update Salesforce, and notify the RM.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: Client ID.
      - name: rm_upn
        in: body
        type: string
        description: RM UPN.
      steps:
      - name: get-holdings
        type: call
        call: snowflake.query-portfolio
        with:
          client_id: '{{client_id}}'
      - name: update-sf
        type: call
        call: sf.update-review
        with:
          client_id: '{{client_id}}'
          ytd: '{{get-holdings.ytd_return}}'
      - name: notify-rm
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{rm_upn}}'
          text: 'Portfolio ready: {{client_id}} — YTD: {{get-holdings.ytd_return}}%'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bofa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: query-portfolio
        method: POST
  - type: http
    namespace: sf
    baseUri: https://bofa.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: reviews
      path: /sobjects/Portfolio_Review__c/{{client_id}}
      operations:
      - name: update-review
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → client-portfolio-review-preparer.yml

Performs a three-way match on a vendor invoice by verifying the PO in SAP, confirming goods receipt, and routing for approval with Teams notification.

naftiko: '0.5'
info:
  label: SAP Invoice Three-Way Match Workflow
  description: Performs a three-way match on a vendor invoice by verifying the PO in SAP, confirming goods receipt, and routing for approval with Teams notification.
  tags:
  - banking
  - finance
  - accounts-payable
  - sap
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: ap-ops
    port: 8080
    tools:
    - name: three-way-match
      description: Given an invoice and PO number, verify the PO in SAP, confirm goods receipt, create an approval in ServiceNow, and notify AP via Teams.
      inputParameters:
      - name: invoice_number
        in: body
        type: string
        description: Vendor invoice number.
      - name: po_number
        in: body
        type: string
        description: SAP purchase order number.
      - name: ap_manager_upn
        in: body
        type: string
        description: UPN of AP manager.
      steps:
      - name: verify-po
        type: call
        call: sap.get-po
        with:
          po_number: '{{po_number}}'
      - name: check-gr
        type: call
        call: sap.get-goods-receipt
        with:
          po_number: '{{po_number}}'
      - name: create-approval
        type: call
        call: snow.create-approval
        with:
          short_description: 'Invoice approval: {{invoice_number}} — PO {{po_number}}'
          description: 'PO Amount: {{verify-po.total_amount}} | GR: {{check-gr.status}}'
      - name: notify-ap
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{ap_manager_upn}}'
          text: 'Three-way match: Invoice {{invoice_number}} — PO {{po_number}}. GR: {{check-gr.status}}. Approval: {{create-approval.number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://bofa-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: purchase-orders
      path: /A_PurchaseOrder('{{po_number}}')
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-po
        method: GET
    - name: goods-receipts
      path: /A_PurchaseOrder('{{po_number}}')/to_GoodsReceipt
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-goods-receipt
        method: GET
  - type: http
    namespace: snow
    baseUri: https://bofa.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: approvals
      path: /table/sysapproval_approver
      operations:
      - name: create-approval
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-invoice-three-way-match-workflow.yml

When Dependabot alerts are raised, creates Jira tickets for remediation, logs in Snowflake, and alerts the AppSec team via Teams.

naftiko: '0.5'
info:
  label: GitHub Dependabot Alert Handler
  description: When Dependabot alerts are raised, creates Jira tickets for remediation, logs in Snowflake, and alerts the AppSec team via Teams.
  tags:
  - banking
  - security
  - github
  - jira
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: appsec-ops
    port: 8080
    tools:
    - name: handle-dependabot-alert
      description: Given a repo and alert severity, create a Jira ticket, log the vulnerability in Snowflake, and notify AppSec in Teams.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: GitHub repository.
      - name: cve_id
        in: body
        type: string
        description: CVE identifier.
      - name: severity
        in: body
        type: string
        description: Alert severity.
      - name: appsec_upn
        in: body
        type: string
        description: UPN of AppSec lead.
      steps:
      - name: create-jira
        type: call
        call: jira.create-issue
        with:
          project: APPSEC
          summary: 'Dependabot: {{cve_id}} in {{repo_name}}'
          description: 'Severity: {{severity}} | Repo: {{repo_name}}'
      - name: log-vuln
        type: call
        call: snowflake.insert-vuln
        with:
          repo: '{{repo_name}}'
          cve: '{{cve_id}}'
          severity: '{{severity}}'
      - name: notify-appsec
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{appsec_upn}}'
          text: 'Dependabot: {{cve_id}} ({{severity}}) in {{repo_name}}. Jira: {{create-jira.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bofa.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://bofa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: insert-vuln
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → github-dependabot-alert-handler.yml

Creates a ServiceNow change request for technology infrastructure changes at Bank of America, assigns it to the CAB review board, and notifies stakeholders via Microsoft Teams.

naftiko: '0.5'
info:
  label: ServiceNow IT Change Advisory Board Request
  description: Creates a ServiceNow change request for technology infrastructure changes at Bank of America, assigns it to the CAB review board, and notifies stakeholders via Microsoft Teams.
  tags:
  - itsm
  - change-management
  - servicenow
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: change-management
    port: 8080
    tools:
    - name: submit-change-request
      description: Given a change title, description, risk level, and planned date, create a ServiceNow change request and notify the CAB via the Change Management Teams channel.
      inputParameters:
      - name: change_title
        in: body
        type: string
        description: Short description of the proposed infrastructure change.
      - name: change_description
        in: body
        type: string
        description: Full description including what is changing, business justification, and rollback plan.
      - name: risk_level
        in: body
        type: string
        description: 'Risk classification: ''low'', ''medium'', or ''high''.'
      - name: planned_date
        in: body
        type: string
        description: Planned implementation date in YYYY-MM-DD format.
      steps:
      - name: create-change
        type: call
        call: servicenow.create-change
        with:
          short_description: '{{change_title}}'
          description: '{{change_description}}'
          risk: '{{risk_level}}'
          planned_start_date: '{{planned_date}}'
      - name: notify-cab
        type: call
        call: msteams.post-channel-message
        with:
          channel: change-advisory-board
          message: 'New CAB request: {{change_title}} | Risk: {{risk_level}} | Planned: {{planned_date}} | SNOW: {{create-change.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bankofamerica.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: post-channel-message
        method: POST
Open in Framework → View in Fleet → servicenow-it-change-advisory-board-request.yml

Retrieves a Zendesk support ticket by ID, returning subject, status, priority, and assignee.

naftiko: '0.5'
info:
  label: Zendesk Support Ticket Lookup
  description: Retrieves a Zendesk support ticket by ID, returning subject, status, priority, and assignee.
  tags:
  - customer-service
  - zendesk
  - support
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: support-ops
    port: 8080
    tools:
    - name: get-support-ticket
      description: Given a Zendesk ticket ID, return the subject, status, priority, and assigned agent name.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: Zendesk ticket ID.
      call: zendesk.get-ticket
      with:
        ticketId: '{{ticket_id}}'
      outputParameters:
      - name: subject
        type: string
        mapping: $.ticket.subject
      - name: status
        type: string
        mapping: $.ticket.status
      - name: priority
        type: string
        mapping: $.ticket.priority
  consumes:
  - namespace: zendesk
    type: http
    baseUri: https://bofa.zendesk.com/api/v2
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: tickets
      path: /tickets/{{ticketId}}
      operations:
      - name: get-ticket
        method: GET
Open in Framework → View in Fleet → zendesk-support-ticket-lookup.yml

Screens wire transfers for fraud by checking transaction patterns in Snowflake, creating a hold in SAP if suspicious, and alerting the fraud team via Teams.

naftiko: '0.5'
info:
  label: Wire Transfer Fraud Screening
  description: Screens wire transfers for fraud by checking transaction patterns in Snowflake, creating a hold in SAP if suspicious, and alerting the fraud team via Teams.
  tags:
  - banking
  - fraud-detection
  - payments
  - snowflake
  - sap
capability:
  exposes:
  - type: mcp
    namespace: fraud-ops
    port: 8080
    tools:
    - name: screen-wire-transfer
      description: Given a wire transfer ID and amount, check patterns in Snowflake, hold in SAP if suspicious, and alert the fraud team.
      inputParameters:
      - name: transfer_id
        in: body
        type: string
        description: Wire transfer ID.
      - name: amount
        in: body
        type: number
        description: Transfer amount.
      - name: fraud_channel_id
        in: body
        type: string
        description: Fraud team Teams channel.
      steps:
      - name: check-patterns
        type: call
        call: snowflake.check-wire-patterns
        with:
          transfer_id: '{{transfer_id}}'
          amount: '{{amount}}'
      - name: hold-payment
        type: call
        call: sap-fi.create-hold
        with:
          transfer_id: '{{transfer_id}}'
          reason: 'Fraud screening: {{check-patterns.risk_level}}'
      - name: alert-fraud
        type: call
        call: msteams.post-channel
        with:
          channel_id: '{{fraud_channel_id}}'
          text: 'Wire screening: {{transfer_id}} — ${{amount}}. Risk: {{check-patterns.risk_level}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bofa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: check-wire-patterns
        method: POST
  - type: http
    namespace: sap
    baseUri: https://bofa-s4.sap.com/sap/opu/odata/sap/API_JOURNAL_ENTRY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: holds
      path: /A_JournalEntry
      operations:
      - name: create-hold
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channels
      path: /teams/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel
        method: POST
Open in Framework → View in Fleet → wire-transfer-fraud-screening.yml

Handles trade settlement exceptions by pulling details from Snowflake, creating a ServiceNow ticket, and notifying operations.

naftiko: '0.5'
info:
  label: Trade Settlement Exception Workflow
  description: Handles trade settlement exceptions by pulling details from Snowflake, creating a ServiceNow ticket, and notifying operations.
  tags:
  - banking
  - trading
  - settlement
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: settlement-ops
    port: 8080
    tools:
    - name: handle-settlement-exception
      description: Given a trade ID and exception type, pull details, create a ticket, and notify operations.
      inputParameters:
      - name: trade_id
        in: body
        type: string
        description: Trade ID.
      - name: exception_type
        in: body
        type: string
        description: Exception type.
      - name: ops_channel_id
        in: body
        type: string
        description: Operations channel.
      steps:
      - name: get-trade
        type: call
        call: snowflake.get-trade
        with:
          trade_id: '{{trade_id}}'
      - name: create-ticket
        type: call
        call: snow.create-exception
        with:
          short_description: 'Settlement: {{trade_id}} — {{exception_type}}'
          description: 'Counterparty: {{get-trade.counterparty}}'
      - name: notify
        type: call
        call: msteams.post-channel
        with:
          channel_id: '{{ops_channel_id}}'
          text: 'Settlement exception: {{trade_id}} — {{exception_type}}. SNOW: {{create-ticket.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bofa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-trade
        method: POST
  - type: http
    namespace: snow
    baseUri: https://bofa.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: exceptions
      path: /table/u_trade_exception
      operations:
      - name: create-exception
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channels
      path: /teams/channels/{{channel_id}}/messages
      operations:
      - name: post-channel
        method: POST
Open in Framework → View in Fleet → trade-settlement-exception-workflow.yml

Verifies that a change request falls within the approved window by checking ServiceNow, validating service health in Datadog, and notifying the CAB via Teams.

naftiko: '0.5'
info:
  label: ServiceNow Change Window Compliance Validator
  description: Verifies that a change request falls within the approved window by checking ServiceNow, validating service health in Datadog, and notifying the CAB via Teams.
  tags:
  - banking
  - it-operations
  - change-management
  - servicenow
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: change-ops
    port: 8080
    tools:
    - name: check-change-compliance
      description: Given a change request number and proposed date, verify window compliance in ServiceNow, check Datadog service health, and notify the CAB in Teams.
      inputParameters:
      - name: change_number
        in: body
        type: string
        description: Change request number.
      - name: proposed_date
        in: body
        type: string
        description: Proposed date.
      - name: cab_channel_id
        in: body
        type: string
        description: Teams channel ID for CAB.
      steps:
      - name: check-window
        type: call
        call: snow.get-change-window
        with:
          change_number: '{{change_number}}'
      - name: check-health
        type: call
        call: datadog.get-status
        with:
          date: '{{proposed_date}}'
      - name: notify-cab
        type: call
        call: msteams.post-channel
        with:
          channel_id: '{{cab_channel_id}}'
          text: 'Change compliance: {{change_number}} for {{proposed_date}}. Window: {{check-window.status}} | Health: {{check-health.overall}}'
  consumes:
  - type: http
    namespace: snow
    baseUri: https://bofa.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request?sysparm_query=number={{change_number}}
      inputParameters:
      - name: change_number
        in: query
      operations:
      - name: get-change-window
        method: GET
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: monitors
      path: /monitor/groups
      operations:
      - name: get-status
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channels
      path: /teams/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel
        method: POST
Open in Framework → View in Fleet → servicenow-change-window-compliance-validator.yml

When a Datadog SLO breach is detected, creates a ServiceNow incident, pages on-call via PagerDuty, and posts to the reliability channel.

naftiko: '0.5'
info:
  label: Datadog SLO Breach Incident Handler
  description: When a Datadog SLO breach is detected, creates a ServiceNow incident, pages on-call via PagerDuty, and posts to the reliability channel.
  tags:
  - banking
  - sre
  - datadog
  - servicenow
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: sre-ops
    port: 8080
    tools:
    - name: handle-slo-breach
      description: Given an SLO name and current SLI value, create a ServiceNow incident, trigger a PagerDuty alert, and notify the SRE channel in Teams.
      inputParameters:
      - name: slo_name
        in: body
        type: string
        description: SLO name.
      - name: sli_value
        in: body
        type: number
        description: Current SLI value.
      - name: service_name
        in: body
        type: string
        description: Affected service.
      - name: sre_channel_id
        in: body
        type: string
        description: SRE Teams channel.
      steps:
      - name: create-incident
        type: call
        call: snow.create-incident
        with:
          short_description: 'SLO breach: {{slo_name}} — {{service_name}}'
          description: 'SLI: {{sli_value}}%'
          priority: '2'
      - name: page-oncall
        type: call
        call: pagerduty.create-incident
        with:
          service_id: sre-team
          title: 'SLO breach: {{slo_name}} ({{sli_value}}%)'
      - name: notify-channel
        type: call
        call: msteams.post-channel
        with:
          channel_id: '{{sre_channel_id}}'
          text: 'SLO Breach: {{slo_name}} — {{service_name}} at {{sli_value}}%. SNOW: {{create-incident.number}}'
  consumes:
  - type: http
    namespace: snow
    baseUri: https://bofa.service-now.com/api/now
    authentication:
      type: 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.msteams_token
    resources:
    - name: channels
      path: /teams/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel
        method: POST
Open in Framework → View in Fleet → datadog-slo-breach-incident-handler.yml

Generates a quarterly financial report by querying Snowflake for KPIs, refreshing Power BI dashboards, and distributing via email to the executive team.

naftiko: '0.5'
info:
  label: Quarterly Financial Report Generator
  description: Generates a quarterly financial report by querying Snowflake for KPIs, refreshing Power BI dashboards, and distributing via email to the executive team.
  tags:
  - banking
  - finance
  - analytics
  - snowflake
  - power-bi
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: finance-reporting
    port: 8080
    tools:
    - name: generate-financial-report
      description: Given a reporting quarter, query Snowflake for financial KPIs, trigger a Power BI refresh, and email the report link to executives.
      inputParameters:
      - name: quarter
        in: body
        type: string
        description: Reporting quarter.
      - name: exec_dl
        in: body
        type: string
        description: Executive distribution list email.
      steps:
      - name: query-kpis
        type: call
        call: snowflake.run-query
        with:
          query: SELECT * FROM financial_kpis WHERE quarter='{{quarter}}'
      - name: refresh-pbi
        type: call
        call: powerbi.trigger-refresh
        with:
          datasetId: financial-dashboard
      - name: send-report
        type: call
        call: msgraph.send-mail
        with:
          to: '{{exec_dl}}'
          subject: Financial Report — {{quarter}}
          body: 'Revenue: {{query-kpis.revenue}} | Expenses: {{query-kpis.expenses}}. Dashboard refreshed.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bofa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{datasetId}}/refreshes
      inputParameters:
      - name: datasetId
        in: path
      operations:
      - name: trigger-refresh
        method: POST
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/noreply@bofa.com/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → quarterly-financial-report-generator.yml

Sends benefits open enrollment reminders by querying Workday for incomplete enrollments, sending emails via Microsoft Graph, and logging in ServiceNow.

naftiko: '0.5'
info:
  label: Workday Benefits Enrollment Reminder Workflow
  description: Sends benefits open enrollment reminders by querying Workday for incomplete enrollments, sending emails via Microsoft Graph, and logging in ServiceNow.
  tags:
  - banking
  - hr
  - benefits
  - workday
  - microsoft-graph
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: benefits-ops
    port: 8080
    tools:
    - name: send-enrollment-reminders
      description: Given an enrollment period and deadline, query Workday for incomplete enrollments, send reminder emails, and log the outreach in ServiceNow.
      inputParameters:
      - name: enrollment_period
        in: body
        type: string
        description: Enrollment period.
      - name: deadline_date
        in: body
        type: string
        description: Deadline in YYYY-MM-DD.
      steps:
      - name: get-incomplete
        type: call
        call: workday.get-incomplete-enrollment
        with:
          period: '{{enrollment_period}}'
      - name: send-reminders
        type: call
        call: msgraph.send-bulk-mail
        with:
          subject: Benefits Enrollment Deadline {{deadline_date}}
          body: Please complete enrollment by {{deadline_date}}.
      - name: log-outreach
        type: call
        call: snow.create-task
        with:
          short_description: 'Benefits reminders: {{enrollment_period}}'
          description: 'Incomplete: {{get-incomplete.count}} | Deadline: {{deadline_date}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/service/bofa/Benefits/v40.1
    authentication:
      type: basic
      username: $secrets.workday_user
      password: $secrets.workday_password
    resources:
    - name: enrollment
      path: /benefit-elections?status=incomplete
      operations:
      - name: get-incomplete-enrollment
        method: GET
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/benefits@bofa.com/sendMail
      operations:
      - name: send-bulk-mail
        method: POST
  - type: http
    namespace: snow
    baseUri: https://bofa.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/u_benefits_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → workday-benefits-enrollment-reminder-workflow.yml

Retrieves all Okta application assignments for a given user and posts a formatted access summary to the Cybersecurity Teams channel for quarterly access certification review.

naftiko: '0.5'
info:
  label: Okta Access Certification Workflow
  description: Retrieves all Okta application assignments for a given user and posts a formatted access summary to the Cybersecurity Teams channel for quarterly access certification review.
  tags:
  - identity
  - security
  - okta
  - microsoft-teams
  - access-review
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: access-certification
    port: 8080
    tools:
    - name: certify-user-access
      description: Given an Okta user login, retrieve all application assignments and group memberships, and post a structured access report to the Cybersecurity Teams channel for certification.
      inputParameters:
      - name: user_login
        in: body
        type: string
        description: The Okta user login (email) to certify access for.
      steps:
      - name: get-user-apps
        type: call
        call: okta.list-user-apps
        with:
          user_login: '{{user_login}}'
      - name: get-user-groups
        type: call
        call: okta.list-user-groups
        with:
          user_login: '{{user_login}}'
      - name: post-cert-report
        type: call
        call: msteams.post-channel-message
        with:
          channel: cybersecurity-access-certs
          message: 'Access cert for {{user_login}}: {{get-user-apps.count}} apps | {{get-user-groups.count}} groups | Apps: {{get-user-apps.names}}'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://bankofamerica.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: user-apps
      path: /users/{{user_login}}/appLinks
      inputParameters:
      - name: user_login
        in: path
      operations:
      - name: list-user-apps
        method: GET
    - name: user-groups
      path: /users/{{user_login}}/groups
      inputParameters:
      - name: user_login
        in: path
      operations:
      - name: list-user-groups
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → okta-access-certification-workflow.yml

Retrieves a regulatory filing or policy document from SharePoint and generates a structured executive summary using OpenAI GPT-4o, returning key findings for compliance review.

naftiko: '0.5'
info:
  label: AI-Assisted Regulatory Document Summarization
  description: Retrieves a regulatory filing or policy document from SharePoint and generates a structured executive summary using OpenAI GPT-4o, returning key findings for compliance review.
  tags:
  - ai
  - compliance
  - openai
  - sharepoint
  - document-processing
  - regulatory
capability:
  exposes:
  - type: mcp
    namespace: compliance-ai
    port: 8080
    tools:
    - name: summarize-regulatory-document
      description: Given a SharePoint site ID and document item ID, retrieve the document and generate a 5-point executive summary using OpenAI. Use for rapid review of regulatory filings, SEC documents, or policy updates.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: The SharePoint site ID where the regulatory document is stored.
      - name: item_id
        in: body
        type: string
        description: The SharePoint drive item ID for the document.
      - name: document_type
        in: body
        type: string
        description: 'Document type context: ''SEC filing'', ''CCAR report'', ''compliance policy'', ''audit finding''.'
      steps:
      - name: get-document
        type: call
        call: sharepoint.get-document-content
        with:
          site_id: '{{site_id}}'
          item_id: '{{item_id}}'
      - name: generate-summary
        type: call
        call: openai.create-chat-completion
        with:
          model: gpt-4o
          system_prompt: You are a regulatory compliance analyst at a major US bank. Summarize the following {{document_type}} document in 5 key bullet points, highlighting risk factors, regulatory requirements, deadlines, and required actions.
          user_message: '{{get-document.content}}'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: document-content
      path: /sites/{{site_id}}/drive/items/{{item_id}}/content
      inputParameters:
      - name: site_id
        in: path
      - name: item_id
        in: path
      operations:
      - name: get-document-content
        method: GET
  - 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-chat-completion
        method: POST
Open in Framework → View in Fleet → ai-assisted-regulatory-document-summarization.yml

Processes KYC onboarding by verifying identity in Salesforce, running compliance checks in Snowflake, and creating an onboarding task in ServiceNow.

naftiko: '0.5'
info:
  label: KYC Customer Onboarding Handler
  description: Processes KYC onboarding by verifying identity in Salesforce, running compliance checks in Snowflake, and creating an onboarding task in ServiceNow.
  tags:
  - banking
  - kyc
  - compliance
  - salesforce
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: kyc-ops
    port: 8080
    tools:
    - name: onboard-customer-kyc
      description: Given customer details, verify in Salesforce, run KYC in Snowflake, create a ServiceNow task, and notify compliance.
      inputParameters:
      - name: customer_name
        in: body
        type: string
        description: Customer name.
      - name: customer_id
        in: body
        type: string
        description: Customer ID.
      - name: compliance_upn
        in: body
        type: string
        description: Compliance UPN.
      steps:
      - name: verify
        type: call
        call: sf.get-customer
        with:
          customer_id: '{{customer_id}}'
      - name: run-kyc
        type: call
        call: snowflake.run-kyc
        with:
          customer: '{{customer_name}}'
      - name: create-task
        type: call
        call: snow.create-task
        with:
          short_description: 'KYC: {{customer_name}}'
          description: 'Status: {{run-kyc.status}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{compliance_upn}}'
          text: 'KYC: {{customer_name}} — {{run-kyc.status}}. SNOW: {{create-task.number}}'
  consumes:
  - type: http
    namespace: sf
    baseUri: https://bofa.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: customers
      path: /sobjects/Account/{{customer_id}}
      operations:
      - name: get-customer
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://bofa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-kyc
        method: POST
  - type: http
    namespace: snow
    baseUri: https://bofa.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/u_kyc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → kyc-customer-onboarding-handler.yml

Checks regulatory capital adequacy by pulling risk-weighted assets from Snowflake, comparing against SAP capital accounts, and reporting to compliance.

naftiko: '0.5'
info:
  label: Regulatory Capital Adequacy Check
  description: Checks regulatory capital adequacy by pulling risk-weighted assets from Snowflake, comparing against SAP capital accounts, and reporting to compliance.
  tags:
  - banking
  - regulatory
  - capital
  - snowflake
  - sap
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: capital-ops
    port: 8080
    tools:
    - name: check-capital-adequacy
      description: Given a reporting date, pull RWA from Snowflake, compare with SAP capital, and notify the compliance team in Teams.
      inputParameters:
      - name: report_date
        in: body
        type: string
        description: Report date.
      - name: compliance_channel_id
        in: body
        type: string
        description: Compliance Teams channel.
      steps:
      - name: get-rwa
        type: call
        call: snowflake.query-rwa
        with:
          date: '{{report_date}}'
      - name: get-capital
        type: call
        call: sap-fi.get-capital-accounts
        with:
          date: '{{report_date}}'
      - name: notify-compliance
        type: call
        call: msteams.post-channel
        with:
          channel_id: '{{compliance_channel_id}}'
          text: 'Capital adequacy: RWA: ${{get-rwa.total}} | Capital: ${{get-capital.total}} | Ratio: {{get-capital.ratio}}%'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bofa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: query-rwa
        method: POST
  - type: http
    namespace: sap
    baseUri: https://bofa-s4.sap.com/sap/opu/odata/sap/API_JOURNAL_ENTRY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: capital
      path: /A_JournalEntry?$filter=PostingDate eq '{{date}}'
      inputParameters:
      - name: date
        in: query
      operations:
      - name: get-capital-accounts
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channels
      path: /teams/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel
        method: POST
Open in Framework → View in Fleet → regulatory-capital-adequacy-check.yml

Retrieves the current on-call engineer for a PagerDuty schedule.

naftiko: '0.5'
info:
  label: PagerDuty On-Call Schedule Lookup
  description: Retrieves the current on-call engineer for a PagerDuty schedule.
  tags:
  - banking
  - it-operations
  - pagerduty
  - incident-management
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: incident-ops
    port: 8080
    tools:
    - name: get-on-call
      description: Given a PagerDuty schedule ID, return the currently on-call user name and email.
      inputParameters:
      - name: schedule_id
        in: body
        type: string
        description: PagerDuty schedule ID.
      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:
  - namespace: pagerduty
    type: http
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: incident-ops
      path: /{{id}}
      operations:
      - name: get-oncall
        method: GET
Open in Framework → View in Fleet → pagerduty-on-call-schedule-lookup.yml

Performs a credit risk assessment by pulling customer financials from Snowflake, running the risk model, and updating the Salesforce opportunity with the risk rating.

naftiko: '0.5'
info:
  label: Credit Risk Assessment Workflow
  description: Performs a credit risk assessment by pulling customer financials from Snowflake, running the risk model, and updating the Salesforce opportunity with the risk rating.
  tags:
  - banking
  - credit-risk
  - risk-management
  - snowflake
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: credit-ops
    port: 8080
    tools:
    - name: assess-credit-risk
      description: Given a customer ID and loan amount, pull financials from Snowflake, compute risk score, and update the Salesforce opportunity.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: Customer ID.
      - name: loan_amount
        in: body
        type: number
        description: Requested loan amount.
      - name: rm_upn
        in: body
        type: string
        description: Relationship manager UPN.
      steps:
      - name: get-financials
        type: call
        call: snowflake.query-financials
        with:
          customer_id: '{{customer_id}}'
      - name: update-opportunity
        type: call
        call: sf.update-risk-rating
        with:
          customer_id: '{{customer_id}}'
          risk_score: '{{get-financials.risk_score}}'
      - name: notify-rm
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{rm_upn}}'
          text: 'Credit assessment: {{customer_id}} — Risk score: {{get-financials.risk_score}} | Loan: ${{loan_amount}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bofa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: query-financials
        method: POST
  - type: http
    namespace: sf
    baseUri: https://bofa.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{customer_id}}
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: update-risk-rating
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → credit-risk-assessment-workflow.yml

Performs credit risk assessment by pulling financials from Snowflake, computing risk, and updating Salesforce.

naftiko: '0.5'
info:
  label: Credit Risk Assessment Handler
  description: Performs credit risk assessment by pulling financials from Snowflake, computing risk, and updating Salesforce.
  tags:
  - banking
  - credit-risk
  - risk-management
  - snowflake
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: credit-ops
    port: 8080
    tools:
    - name: assess-credit-risk
      description: Given a customer ID and loan amount, pull financials from Snowflake, update Salesforce, and notify the RM.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: Customer ID.
      - name: loan_amount
        in: body
        type: number
        description: Loan amount.
      - name: rm_upn
        in: body
        type: string
        description: RM UPN.
      steps:
      - name: get-financials
        type: call
        call: snowflake.query-financials
        with:
          customer_id: '{{customer_id}}'
      - name: update-sf
        type: call
        call: sf.update-risk
        with:
          customer_id: '{{customer_id}}'
          risk_score: '{{get-financials.risk_score}}'
      - name: notify-rm
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{rm_upn}}'
          text: 'Credit: {{customer_id}} — Risk: {{get-financials.risk_score}} | Loan: ${{loan_amount}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bofa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: query-financials
        method: POST
  - type: http
    namespace: sf
    baseUri: https://bofa.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{customer_id}}
      operations:
      - name: update-risk
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → credit-risk-assessment-handler.yml

Retrieves contractor engagement status from Workday, returning contract end date, rate, and hiring manager.

naftiko: '0.5'
info:
  label: Workday Contractor Status Lookup
  description: Retrieves contractor engagement status from Workday, returning contract end date, rate, and hiring manager.
  tags:
  - hr
  - workday
  - contractor-management
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: contractor-ops
    port: 8080
    tools:
    - name: get-contractor-status
      description: Given a contractor worker ID, return the contract end date, billing rate, and hiring manager name.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: Workday contingent worker ID.
      call: workday.get-contingent-worker
      with:
        Worker_ID: '{{worker_id}}'
      outputParameters:
      - name: end_date
        type: string
        mapping: $.Worker.Contract_End_Date
      - name: billing_rate
        type: number
        mapping: $.Worker.Bill_Rate
      - name: manager
        type: string
        mapping: $.Worker.Manager_Name
  consumes:
  - namespace: workday
    type: http
    baseUri: https://wd5-impl-services1.workday.com/ccx/service/bofa/Human_Resources/v40.1
    authentication:
      type: basic
      username: $secrets.workday_user
      password: $secrets.workday_password
    resources:
    - name: contingent-workers
      path: /contingent-workers/{{Worker_ID}}
      operations:
      - name: get-contingent-worker
        method: GET
Open in Framework → View in Fleet → workday-contractor-status-lookup.yml

Handles trade settlement exceptions by pulling trade details from Snowflake, creating an exception ticket in ServiceNow, and notifying operations via Teams.

naftiko: '0.5'
info:
  label: Trade Settlement Exception Handler
  description: Handles trade settlement exceptions by pulling trade details from Snowflake, creating an exception ticket in ServiceNow, and notifying operations via Teams.
  tags:
  - banking
  - trading
  - settlement
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: settlement-ops
    port: 8080
    tools:
    - name: handle-settlement-exception
      description: Given a trade ID and exception type, pull details from Snowflake, create a ServiceNow ticket, and notify operations.
      inputParameters:
      - name: trade_id
        in: body
        type: string
        description: Trade ID.
      - name: exception_type
        in: body
        type: string
        description: Exception type.
      - name: ops_channel_id
        in: body
        type: string
        description: Operations Teams channel.
      steps:
      - name: get-trade
        type: call
        call: snowflake.get-trade-details
        with:
          trade_id: '{{trade_id}}'
      - name: create-ticket
        type: call
        call: snow.create-exception
        with:
          short_description: 'Settlement exception: {{trade_id}} — {{exception_type}}'
          description: 'Counterparty: {{get-trade.counterparty}} | Amount: {{get-trade.amount}}'
      - name: notify-ops
        type: call
        call: msteams.post-channel
        with:
          channel_id: '{{ops_channel_id}}'
          text: 'Settlement exception: {{trade_id}} — {{exception_type}}. Counterparty: {{get-trade.counterparty}}. SNOW: {{create-ticket.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bofa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-trade-details
        method: POST
  - type: http
    namespace: snow
    baseUri: https://bofa.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: exceptions
      path: /table/u_trade_exception
      operations:
      - name: create-exception
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channels
      path: /teams/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel
        method: POST
Open in Framework → View in Fleet → trade-settlement-exception-handler.yml

When a new hire is created in Workday, provisions an Active Directory account via Microsoft Graph, opens a ServiceNow IT onboarding ticket, and sends a Microsoft Teams welcome message to the new employee.

naftiko: '0.5'
info:
  label: New Employee Onboarding Orchestrator
  description: When a new hire is created in Workday, provisions an Active Directory account via Microsoft Graph, opens a ServiceNow IT onboarding ticket, and sends a Microsoft Teams welcome message to the new employee.
  tags:
  - hr
  - onboarding
  - workday
  - servicenow
  - microsoft-graph
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-onboarding
    port: 8080
    tools:
    - name: trigger-employee-onboarding
      description: Given a Workday employee ID and start date, provision an Active Directory account via Microsoft Graph, open a ServiceNow IT onboarding ticket, and send a Teams welcome message to the new hire.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: 'The Workday worker ID for the new hire. Format: WID-XXXXXXXX.'
      - name: start_date
        in: body
        type: string
        description: The employee's first day in ISO 8601 format (YYYY-MM-DD).
      - name: business_line
        in: body
        type: string
        description: The Bank of America business line the employee is joining, e.g. 'Global Markets', 'Consumer Banking'.
      steps:
      - name: get-worker
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: provision-ad
        type: call
        call: msgraph.create-user
        with:
          displayName: '{{get-worker.full_name}}'
          userPrincipalName: '{{get-worker.work_email}}'
          department: '{{business_line}}'
      - name: create-it-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'IT Onboarding: {{get-worker.full_name}} — starts {{start_date}}'
          category: hr_onboarding
          assignment_group: IT_Onboarding
      - name: send-welcome
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-worker.work_email}}'
          message: Welcome to Bank of America, {{get-worker.first_name}}! Your IT setup ticket is {{create-it-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: /bankofamerica/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://bankofamerica.service-now.com/api/now
    authentication:
      type: 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: mail
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → new-employee-onboarding-orchestrator.yml

Generates a daily treasury cash position report by pulling balances from SAP, enriching with market rates from Snowflake, and distributing via Teams.

naftiko: '0.5'
info:
  label: Treasury Cash Position Report
  description: Generates a daily treasury cash position report by pulling balances from SAP, enriching with market rates from Snowflake, and distributing via Teams.
  tags:
  - banking
  - treasury
  - finance
  - sap
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: treasury-ops
    port: 8080
    tools:
    - name: generate-cash-report
      description: Given a reporting date, pull cash balances from SAP, get market rates from Snowflake, and post the treasury report to Teams.
      inputParameters:
      - name: report_date
        in: body
        type: string
        description: Report date.
      - name: treasury_channel_id
        in: body
        type: string
        description: Treasury Teams channel.
      steps:
      - name: get-balances
        type: call
        call: sap-fi.get-cash-balances
        with:
          date: '{{report_date}}'
      - name: get-rates
        type: call
        call: snowflake.get-market-rates
        with:
          date: '{{report_date}}'
      - name: post-report
        type: call
        call: msteams.post-channel
        with:
          channel_id: '{{treasury_channel_id}}'
          text: 'Treasury Report {{report_date}}: Cash: ${{get-balances.total}} | USD/EUR: {{get-rates.usd_eur}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://bofa-s4.sap.com/sap/opu/odata/sap/API_JOURNAL_ENTRY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: balances
      path: /A_JournalEntry?$filter=PostingDate eq '{{date}}'
      inputParameters:
      - name: date
        in: query
      operations:
      - name: get-cash-balances
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://bofa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-market-rates
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channels
      path: /teams/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel
        method: POST
Open in Framework → View in Fleet → treasury-cash-position-report.yml

Runs data quality validation queries against Bank of America's Snowflake risk data warehouse to detect anomalies, nulls, and stale data, posting results to the Risk Analytics Teams channel.

naftiko: '0.5'
info:
  label: Snowflake Risk Data Warehouse Quality Check
  description: Runs data quality validation queries against Bank of America's Snowflake risk data warehouse to detect anomalies, nulls, and stale data, posting results to the Risk Analytics Teams channel.
  tags:
  - data
  - analytics
  - snowflake
  - data-quality
  - risk
  - finance
capability:
  exposes:
  - type: mcp
    namespace: risk-data
    port: 8080
    tools:
    - name: run-risk-data-quality-check
      description: Given a Snowflake table name and check date, execute data quality validation SQL and post a pass/fail quality report to the Risk Analytics Teams channel.
      inputParameters:
      - name: table_name
        in: body
        type: string
        description: Fully qualified Snowflake table, e.g. 'BOA_RISK_PROD.CREDIT.LOAN_POSITIONS'.
      - name: check_date
        in: body
        type: string
        description: The business date to validate in YYYY-MM-DD format.
      steps:
      - name: run-dq-check
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT COUNT(*) as total, COUNT_IF(exposure IS NULL) as null_exposure FROM {{table_name}} WHERE position_date = '{{check_date}}'
      - name: post-results
        type: call
        call: msteams.post-channel-message
        with:
          channel: risk-analytics
          message: 'DQ check on {{table_name}} for {{check_date}}: {{run-dq-check.total}} rows, {{run-dq-check.null_exposure}} null exposures'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bankofamerica.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → snowflake-risk-data-warehouse-quality-check.yml

Retrieves vendor master data from SAP by vendor number, returning company name, payment terms, and tax ID.

naftiko: '0.5'
info:
  label: SAP Vendor Master Data Lookup
  description: Retrieves vendor master data from SAP by vendor number, returning company name, payment terms, and tax ID.
  tags:
  - banking
  - finance
  - sap
  - procurement
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: vendor-ops
    port: 8080
    tools:
    - name: get-vendor
      description: Given an SAP vendor number, return the vendor name, payment terms, and tax ID.
      inputParameters:
      - name: vendor_number
        in: body
        type: string
        description: SAP vendor account number.
      call: sap.get-vendor
      with:
        Supplier: '{{vendor_number}}'
      outputParameters:
      - name: vendor_name
        type: string
        mapping: $.d.SupplierName
      - name: payment_terms
        type: string
        mapping: $.d.PaymentTerms
  consumes:
  - namespace: sap
    type: http
    baseUri: https://bofa-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: vendor-ops
      path: /{{id}}
      operations:
      - name: get-vendor
        method: GET
Open in Framework → View in Fleet → sap-vendor-master-data-lookup.yml

Initiates the annual performance review cycle in Workday for a given division, creates ServiceNow tracking tasks for HR, and notifies managers via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Performance Review Cycle Launch
  description: Initiates the annual performance review cycle in Workday for a given division, creates ServiceNow tracking tasks for HR, and notifies managers via Microsoft Teams.
  tags:
  - hr
  - performance
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-performance
    port: 8080
    tools:
    - name: launch-performance-review-cycle
      description: Given a department ID and review year, start the Workday performance review process, create ServiceNow HR tracking tasks, and notify managers in Teams.
      inputParameters:
      - name: department_id
        in: body
        type: string
        description: The Workday organization unit ID for the performance review cycle.
      - name: review_year
        in: body
        type: string
        description: The performance review year, e.g. '2026'.
      steps:
      - name: initiate-review
        type: call
        call: workday.initiate-review
        with:
          department_id: '{{department_id}}'
          review_period: '{{review_year}}'
      - name: create-hr-task
        type: call
        call: servicenow.create-task
        with:
          short_description: Performance review {{review_year}} — {{department_id}}
          assignment_group: HR_Operations
          due_date: '{{initiate-review.deadline}}'
      - name: notify-managers
        type: call
        call: msteams.post-channel-message
        with:
          channel: hr-announcements
          message: Performance review cycle {{review_year}} launched for department {{department_id}}. Complete reviews by {{initiate-review.deadline}}.
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: performance-reviews
      path: /bankofamerica/performanceReviews
      operations:
      - name: initiate-review
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bankofamerica.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → workday-performance-review-cycle-launch.yml

Screens customers against sanctions lists by querying Snowflake, logging results in ServiceNow, and escalating matches to the compliance team via Teams.

naftiko: '0.5'
info:
  label: Sanctions Screening Workflow
  description: Screens customers against sanctions lists by querying Snowflake, logging results in ServiceNow, and escalating matches to the compliance team via Teams.
  tags:
  - banking
  - sanctions
  - compliance
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: sanctions-ops
    port: 8080
    tools:
    - name: screen-sanctions
      description: Given a customer name and country, run sanctions screening in Snowflake, log in ServiceNow, and escalate matches to compliance.
      inputParameters:
      - name: customer_name
        in: body
        type: string
        description: Customer name.
      - name: country
        in: body
        type: string
        description: Customer country.
      - name: compliance_upn
        in: body
        type: string
        description: Compliance officer UPN.
      steps:
      - name: run-screening
        type: call
        call: snowflake.screen-sanctions
        with:
          customer: '{{customer_name}}'
          country: '{{country}}'
      - name: log-result
        type: call
        call: snow.create-screening-record
        with:
          short_description: 'Sanctions: {{customer_name}} ({{country}})'
          description: 'Match count: {{run-screening.match_count}}'
      - name: notify-compliance
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{compliance_upn}}'
          text: 'Sanctions screening: {{customer_name}} ({{country}}) — Matches: {{run-screening.match_count}}. SNOW: {{log-result.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bofa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: screen-sanctions
        method: POST
  - type: http
    namespace: snow
    baseUri: https://bofa.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: screening
      path: /table/u_sanctions_screening
      operations:
      - name: create-screening-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sanctions-screening-workflow.yml

Queries Datadog for SLO compliance across Bank of America's critical banking platforms and posts a daily availability digest to the Engineering Operations Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Datadog Platform SLO Digest
  description: Queries Datadog for SLO compliance across Bank of America's critical banking platforms and posts a daily availability digest to the Engineering Operations Microsoft Teams channel.
  tags:
  - observability
  - monitoring
  - datadog
  - slo
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: observability-reporting
    port: 8080
    tools:
    - name: digest-platform-slos
      description: Query Datadog for SLO compliance metrics for the specified environment and time window, then post a structured report to the Engineering Ops Teams channel.
      inputParameters:
      - name: environment
        in: body
        type: string
        description: 'Target environment to report on: ''production'', ''staging'', or ''dr''.'
      - name: time_window_hours
        in: body
        type: integer
        description: Look-back window in hours for SLO metrics. Typically 24.
      steps:
      - name: get-slos
        type: call
        call: datadog.list-slos
        with:
          tags: env:{{environment}}
          limit: '100'
      - name: post-digest
        type: call
        call: msteams.post-channel-message
        with:
          channel: engineering-ops
          message: 'Daily SLO Report ({{environment}}, last {{time_window_hours}}h): {{get-slos.passing}} passing, {{get-slos.failing}} failing. Overall compliance: {{get-slos.compliance_pct}}%'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: slos
      path: /slo
      operations:
      - name: list-slos
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → datadog-platform-slo-digest.yml

Queries Salesforce for open client opportunities closing in the current quarter, aggregates by relationship manager and product, and posts a pipeline digest to the Sales Leadership Teams channel.

naftiko: '0.5'
info:
  label: Salesforce Client Opportunity Pipeline Digest
  description: Queries Salesforce for open client opportunities closing in the current quarter, aggregates by relationship manager and product, and posts a pipeline digest to the Sales Leadership Teams channel.
  tags:
  - sales
  - crm
  - salesforce
  - microsoft-teams
  - reporting
  - finance
capability:
  exposes:
  - type: mcp
    namespace: sales-pipeline
    port: 8080
    tools:
    - name: digest-opportunity-pipeline
      description: Query Salesforce for opportunities closing this quarter, group by relationship manager and product type, and post a pipeline summary to the Sales Leadership Teams channel.
      inputParameters:
      - name: fiscal_quarter
        in: body
        type: string
        description: Fiscal quarter to report on, e.g. '2026-Q1'.
      - name: business_segment
        in: body
        type: string
        description: Bank of America business segment, e.g. 'Global Banking', 'Business Banking'.
      steps:
      - name: query-pipeline
        type: call
        call: salesforce.query-opportunities
        with:
          quarter: '{{fiscal_quarter}}'
          segment: '{{business_segment}}'
      - name: post-digest
        type: call
        call: msteams.post-channel-message
        with:
          channel: sales-leadership
          message: 'Q{{fiscal_quarter}} Pipeline ({{business_segment}}): {{query-pipeline.count}} opportunities | Total value: ${{query-pipeline.total_value}} | Weighted: ${{query-pipeline.weighted_value}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://bankofamerica.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunity-query
      path: /query
      inputParameters:
      - name: q
        in: query
      operations:
      - name: query-opportunities
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → salesforce-client-opportunity-pipeline-digest.yml

Searches Confluence for a knowledge article by keyword and returns the page title, space, and URL.

naftiko: '0.5'
info:
  label: Confluence Knowledge Article Search
  description: Searches Confluence for a knowledge article by keyword and returns the page title, space, and URL.
  tags:
  - banking
  - knowledge-management
  - confluence
  - documentation
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: km-ops
    port: 8080
    tools:
    - name: search-article
      description: Given a keyword, search Confluence for matching articles and return the top result title, space, and URL.
      inputParameters:
      - name: keyword
        in: body
        type: string
        description: Search keyword.
      call: confluence.search-content
      with:
        cql: type=page AND title~{{keyword}}
      outputParameters:
      - name: title
        type: string
        mapping: $.results[0].title
      - name: space
        type: string
        mapping: $.results[0].space.name
  consumes:
  - namespace: confluence
    type: http
    baseUri: https://bofa.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_api_token
    resources:
    - name: km-ops
      path: /{{id}}
      operations:
      - name: search-content
        method: GET
Open in Framework → View in Fleet → confluence-knowledge-article-search.yml

Processes a data subject access request by searching Salesforce and Snowflake for personal data, compiling results, and logging in ServiceNow.

naftiko: '0.5'
info:
  label: Data Privacy Subject Access Request Handler
  description: Processes a data subject access request by searching Salesforce and Snowflake for personal data, compiling results, and logging in ServiceNow.
  tags:
  - banking
  - compliance
  - data-privacy
  - salesforce
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: privacy-ops
    port: 8080
    tools:
    - name: process-dsar
      description: Given a data subject email, search for personal data across Salesforce and Snowflake, log the DSAR in ServiceNow, and notify the privacy officer via Teams.
      inputParameters:
      - name: subject_email
        in: body
        type: string
        description: Data subject email.
      - name: request_type
        in: body
        type: string
        description: 'DSAR type: access, deletion.'
      - name: privacy_officer_upn
        in: body
        type: string
        description: UPN of privacy officer.
      steps:
      - name: search-sf
        type: call
        call: sf.search-person
        with:
          email: '{{subject_email}}'
      - name: search-snowflake
        type: call
        call: snowflake.search-pii
        with:
          email: '{{subject_email}}'
      - name: log-dsar
        type: call
        call: snow.create-dsar
        with:
          short_description: 'DSAR: {{request_type}} — {{subject_email}}'
          description: 'SF: {{search-sf.record_count}} | Snowflake: {{search-snowflake.record_count}}'
      - name: notify-officer
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{privacy_officer_upn}}'
          text: 'DSAR: {{request_type}} for {{subject_email}}. SF: {{search-sf.record_count}}, SF: {{search-snowflake.record_count}}. SNOW: {{log-dsar.number}}'
  consumes:
  - type: http
    namespace: sf
    baseUri: https://bofa.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: search
      path: /parameterizedSearch/?q={{email}}
      inputParameters:
      - name: email
        in: query
      operations:
      - name: search-person
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://bofa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: search-pii
        method: POST
  - type: http
    namespace: snow
    baseUri: https://bofa.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: dsar
      path: /table/u_dsar_request
      operations:
      - name: create-dsar
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → data-privacy-subject-access-request-handler.yml

Responds to AKS scaling alerts by checking Datadog metrics, triggering node pool scaling via Azure, and notifying the platform team in Teams.

naftiko: '0.5'
info:
  label: Azure Kubernetes Cluster Scaling Handler
  description: Responds to AKS scaling alerts by checking Datadog metrics, triggering node pool scaling via Azure, and notifying the platform team in Teams.
  tags:
  - banking
  - devops
  - kubernetes
  - azure
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: platform-ops
    port: 8080
    tools:
    - name: handle-aks-scaling
      description: Given an AKS cluster name and CPU utilization, check Datadog metrics, scale Azure node pool, and notify platform team in Teams.
      inputParameters:
      - name: cluster_name
        in: body
        type: string
        description: AKS cluster name.
      - name: cpu_utilization
        in: body
        type: number
        description: CPU utilization percentage.
      - name: platform_channel_id
        in: body
        type: string
        description: Teams channel ID.
      steps:
      - name: check-metrics
        type: call
        call: datadog.get-cluster-metrics
        with:
          cluster: '{{cluster_name}}'
      - name: scale-nodes
        type: call
        call: azure.scale-nodepool
        with:
          cluster: '{{cluster_name}}'
      - name: notify-team
        type: call
        call: msteams.post-channel
        with:
          channel_id: '{{platform_channel_id}}'
          text: 'AKS scaling: {{cluster_name}} — CPU: {{cpu_utilization}}%. Trend: {{check-metrics.trend}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /query?query=kubernetes.cpu.usage{{cluster}}
      inputParameters:
      - name: cluster
        in: query
      operations:
      - name: get-cluster-metrics
        method: GET
  - type: http
    namespace: azure
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: nodepools
      path: /subscriptions/{{subId}}/resourceGroups/aks-rg/providers/Microsoft.ContainerService/managedClusters/{{cluster}}/agentPools/default
      inputParameters:
      - name: cluster
        in: path
      operations:
      - name: scale-nodepool
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channels
      path: /teams/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel
        method: POST
Open in Framework → View in Fleet → azure-kubernetes-cluster-scaling-handler.yml

Manages IT asset retirement by updating the ServiceNow CMDB, revoking Okta access, and logging disposal in SAP fixed assets.

naftiko: '0.5'
info:
  label: IT Asset Lifecycle Retirement Workflow
  description: Manages IT asset retirement by updating the ServiceNow CMDB, revoking Okta access, and logging disposal in SAP fixed assets.
  tags:
  - banking
  - it-operations
  - asset-management
  - servicenow
  - okta
  - sap
capability:
  exposes:
  - type: mcp
    namespace: asset-ops
    port: 8080
    tools:
    - name: retire-it-asset
      description: Given a CI name and asset tag, mark as retired in ServiceNow CMDB, revoke Okta access, create SAP disposal entry, and notify IT manager in Teams.
      inputParameters:
      - name: ci_name
        in: body
        type: string
        description: ServiceNow CI name.
      - name: asset_tag
        in: body
        type: string
        description: Asset tag number.
      - name: it_manager_upn
        in: body
        type: string
        description: UPN of IT asset manager.
      steps:
      - name: retire-cmdb
        type: call
        call: snow.update-ci-status
        with:
          ci_name: '{{ci_name}}'
          status: Retired
      - name: revoke-access
        type: call
        call: okta.remove-app-assignment
        with:
          app_label: '{{ci_name}}'
      - name: log-disposal
        type: call
        call: sap.create-disposal
        with:
          asset_number: '{{asset_tag}}'
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{it_manager_upn}}'
          text: 'Asset retired: {{ci_name}} ({{asset_tag}}). CMDB updated, access revoked.'
  consumes:
  - type: http
    namespace: snow
    baseUri: https://bofa.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={{ci_name}}
      inputParameters:
      - name: ci_name
        in: query
      operations:
      - name: update-ci-status
        method: PATCH
  - type: http
    namespace: okta
    baseUri: https://bofa.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_api_token
    resources:
    - name: apps
      path: /apps?q={{app_label}}
      inputParameters:
      - name: app_label
        in: query
      operations:
      - name: remove-app-assignment
        method: DELETE
  - type: http
    namespace: sap
    baseUri: https://bofa-s4.sap.com/sap/opu/odata/sap/API_FIXEDASSET_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: disposals
      path: /A_FixedAsset
      operations:
      - name: create-disposal
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → it-asset-lifecycle-retirement-workflow.yml

Performs a vendor risk assessment by pulling vendor details from SAP Ariba, checking compliance in ServiceNow GRC, and notifying procurement via Teams.

naftiko: '0.5'
info:
  label: Third-Party Vendor Risk Assessment Workflow
  description: Performs a vendor risk assessment by pulling vendor details from SAP Ariba, checking compliance in ServiceNow GRC, and notifying procurement via Teams.
  tags:
  - banking
  - procurement
  - risk-management
  - sap-ariba
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: vendor-risk
    port: 8080
    tools:
    - name: assess-vendor-risk
      description: Given a vendor ID, retrieve the vendor profile from SAP Ariba, check GRC compliance in ServiceNow, and send the risk summary to procurement in Teams.
      inputParameters:
      - name: vendor_id
        in: body
        type: string
        description: SAP Ariba supplier ID.
      - name: procurement_lead_upn
        in: body
        type: string
        description: UPN of procurement lead.
      steps:
      - name: get-vendor
        type: call
        call: ariba.get-supplier
        with:
          vendorId: '{{vendor_id}}'
      - name: check-grc
        type: call
        call: snow.get-compliance
        with:
          vendor_name: '{{get-vendor.SupplierName}}'
      - name: notify-lead
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{procurement_lead_upn}}'
          text: 'Vendor Risk: {{get-vendor.SupplierName}} — GRC: {{check-grc.compliance_status}} | Score: {{check-grc.risk_score}}'
  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/{{vendorId}}
      inputParameters:
      - name: vendorId
        in: path
      operations:
      - name: get-supplier
        method: GET
  - type: http
    namespace: snow
    baseUri: https://bofa.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: grc
      path: /table/sn_grc_profile?sysparm_query=name={{vendor_name}}
      inputParameters:
      - name: vendor_name
        in: query
      operations:
      - name: get-compliance
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → third-party-vendor-risk-assessment-workflow.yml

Retrieves the status of a DocuSign envelope by ID, returning signing status and sent date.

naftiko: '0.5'
info:
  label: DocuSign Envelope Tracking Lookup
  description: Retrieves the status of a DocuSign envelope by ID, returning signing status and sent date.
  tags:
  - banking
  - legal
  - docusign
  - document-management
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: doc-ops
    port: 8080
    tools:
    - name: get-envelope-status
      description: Given a DocuSign envelope ID, return the status, sent date, and recipient count.
      inputParameters:
      - name: envelope_id
        in: body
        type: string
        description: DocuSign envelope ID.
      call: docusign.get-envelope
      with:
        envelopeId: '{{envelope_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: sent_date
        type: string
        mapping: $.sentDateTime
  consumes:
  - namespace: docusign
    type: http
    baseUri: https://na4.docusign.net/restapi/v2.1
    authentication:
      type: bearer
      token: $secrets.docusign_token
    resources:
    - name: doc-ops
      path: /{{id}}
      operations:
      - name: get-envelope
        method: GET
Open in Framework → View in Fleet → docusign-envelope-tracking-lookup.yml

Searches application logs for matching patterns. Used by Barclays teams.

naftiko: '0.5'
info:
  label: Barclays Log Search Query
  description: Searches application logs for matching patterns. Used by Barclays teams.
  tags:
  - banking
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: salesforce
    port: 8080
    tools:
    - name: get-log_search_query
      description: Searches application logs for matching patterns. Used by Barclays teams.
      inputParameters:
      - name: search_query
        in: body
        type: string
        description: The search_query to look up.
      call: salesforce.get-search_query
      with:
        search_query: '{{search_query}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://barclays.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: barclays_salesforce_log_search
        method: GET
Open in Framework → View in Fleet → barclays-log-search-query.yml

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

naftiko: '0.5'
info:
  label: Security Incident Response Pipeline
  description: Detects security incidents, enriches with context, creates response tickets, and notifies the SOC.
  tags:
  - security
  - splunk
  - servicenow
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: security
    port: 8080
    tools:
    - name: barclays_security_incident_response_pipe
      description: Orchestrate security incident response pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-splunk
        type: call
        call: splunk.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          data: '{{get-splunk.result}}'
      - name: create-pagerduty
        type: call
        call: pagerduty.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Security Incident Response Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://barclays-splunk.com/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: splunk-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://barclays.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: 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
Open in Framework → View in Fleet → security-incident-response-pipeline.yml

Orchestrates Politically Exposed Persons screening by pulling client data from Salesforce, running PEP screening in Refinitiv, storing the result in Oracle, and creating a compliance review task in Jira if flagged.

naftiko: '0.5'
info:
  label: PEP Screening Workflow
  description: Orchestrates Politically Exposed Persons screening by pulling client data from Salesforce, running PEP screening in Refinitiv, storing the result in Oracle, and creating a compliance review task in Jira if flagged.
  tags:
  - compliance
  - pep-screening
  - salesforce
  - refinitiv
  - oracle-database
  - jira
capability:
  exposes:
  - type: mcp
    namespace: pep-screening
    port: 8080
    tools:
    - name: screen-pep
      description: Run PEP screening for a client with automated escalation on positive matches.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: Salesforce client account ID.
      steps:
      - name: get-client
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{client_id}}'
      - name: run-screening
        type: call
        call: refinitiv.screen-entity
        with:
          entity_name: '{{get-client.Name}}'
          entity_type: individual
          screening_type: pep
      - name: store-result
        type: call
        call: oracle.insert-screening-result
        with:
          client_id: '{{client_id}}'
          screening_type: PEP
          result: '{{run-screening.overallResult}}'
          match_count: '{{run-screening.matchCount}}'
      - name: create-review
        type: call
        call: jira.create-issue
        with:
          project: COMP
          issue_type: Review
          summary: 'PEP Screening Review: {{get-client.Name}} - {{run-screening.overallResult}}'
          description: 'Client: {{get-client.Name}}. PEP matches: {{run-screening.matchCount}}. Result: {{run-screening.overallResult}}.'
          priority: High
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://barclays.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: refinitiv
    baseUri: https://rms-world-check-one-api-pilot.thomsonreuters.com/v2
    authentication:
      type: bearer
      token: $secrets.refinitiv_api_key
    resources:
    - name: screening
      path: /cases/screeningRequest
      operations:
      - name: screen-entity
        method: POST
  - type: http
    namespace: oracle
    baseUri: https://barclays-ords.db.oracle.com/ords/compliance/v1
    authentication:
      type: bearer
      token: $secrets.oracle_ords_token
    resources:
    - name: screening-results
      path: /screening-results
      operations:
      - name: insert-screening-result
        method: POST
  - type: http
    namespace: jira
    baseUri: https://barclays.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → pep-screening-workflow.yml

Checks the current status of a project. Used by Barclays teams.

naftiko: '0.5'
info:
  label: Barclays Project Status Check
  description: Checks the current status of a project. Used by Barclays teams.
  tags:
  - banking
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: snowflake
    port: 8080
    tools:
    - name: get-project_status_check
      description: Checks the current status of a project. Used by Barclays teams.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The project_key to look up.
      call: snowflake.get-project_key
      with:
        project_key: '{{project_key}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://barclays.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: barclays_project_status_check
        method: GET
Open in Framework → View in Fleet → barclays-project-status-check.yml

Monitors portfolio exposures, calculates VaR, detects limit breaches, and alerts risk management.

naftiko: '0.5'
info:
  label: Market Risk Monitoring Pipeline
  description: Monitors portfolio exposures, calculates VaR, detects limit breaches, and alerts risk management.
  tags:
  - risk
  - snowflake
  - grafana
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: risk
    port: 8080
    tools:
    - name: market_risk_monitoring_pipeline
      description: Orchestrate market risk monitoring pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-snowflake
        type: call
        call: snowflake.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-grafana
        type: call
        call: grafana.process-resource
        with:
          data: '{{get-snowflake.result}}'
      - name: create-pagerduty
        type: call
        call: pagerduty.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Market Risk Monitoring Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://barclays.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://barclays-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
Open in Framework → View in Fleet → market-risk-monitoring-pipeline.yml

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

naftiko: '0.5'
info:
  label: Employee Onboarding Automation Pipeline
  description: Provisions new employee accounts, assigns training, creates IT tickets, and notifies managers.
  tags:
  - hr
  - workday
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: barclays_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/barclays
    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://barclays.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → employee-onboarding-automation-pipeline.yml

Assesses counterparty credit risk by pulling entity data from Refinitiv, querying exposure from Snowflake, computing risk metrics via Azure Machine Learning, and filing the assessment in SharePoint.

naftiko: '0.5'
info:
  label: Counterparty Risk Assessment
  description: Assesses counterparty credit risk by pulling entity data from Refinitiv, querying exposure from Snowflake, computing risk metrics via Azure Machine Learning, and filing the assessment in SharePoint.
  tags:
  - risk-management
  - counterparty-risk
  - refinitiv
  - snowflake
  - azure-machine-learning
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: counterparty-risk
    port: 8080
    tools:
    - name: assess-counterparty
      description: Run a full counterparty risk assessment including exposure analysis and credit scoring.
      inputParameters:
      - name: counterparty_name
        in: body
        type: string
        description: Legal name of the counterparty.
      - name: counterparty_lei
        in: body
        type: string
        description: Legal Entity Identifier.
      steps:
      - name: screen-entity
        type: call
        call: refinitiv.screen-entity
        with:
          entity_name: '{{counterparty_name}}'
          entity_type: organisation
          lei: '{{counterparty_lei}}'
      - name: get-exposure
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT SUM(current_exposure) as total_exposure, SUM(potential_future_exposure) as pfe FROM risk.counterparty_exposure WHERE counterparty_lei = '{{counterparty_lei}}'
          warehouse: RISK_WH
          database: RISK_DB
      - name: compute-risk
        type: call
        call: azure-ml.score-model
        with:
          model_name: counterparty-risk-model
          input_data: '{"name":"{{counterparty_name}}","lei":"{{counterparty_lei}}","screening_result":"{{screen-entity.overallResult}}","exposure":"{{get-exposure.total_exposure}}"}'
      - name: store-assessment
        type: call
        call: sharepoint.upload-file
        with:
          site_id: risk_management
          folder_path: Counterparty_Assessments/{{counterparty_lei}}
          file_name: assessment_{{counterparty_lei}}.json
  consumes:
  - type: http
    namespace: refinitiv
    baseUri: https://rms-world-check-one-api-pilot.thomsonreuters.com/v2
    authentication:
      type: bearer
      token: $secrets.refinitiv_api_key
    resources:
    - name: screening
      path: /cases/screeningRequest
      operations:
      - name: screen-entity
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://barclays.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: azure-ml
    baseUri: https://barclays-ml.westeurope.inference.ml.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_ml_token
    resources:
    - name: scoring
      path: /score
      operations:
      - name: score-model
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → counterparty-risk-assessment.yml

Checks the health status of a monitored service. Used by Barclays teams.

naftiko: '0.5'
info:
  label: Barclays Service Health Check
  description: Checks the health status of a monitored service. Used by Barclays teams.
  tags:
  - banking
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: servicenow
    port: 8080
    tools:
    - name: get-service_health_check
      description: Checks the health status of a monitored service. Used by Barclays teams.
      inputParameters:
      - name: health_target
        in: body
        type: string
        description: The health_target to look up.
      call: servicenow.get-health_target
      with:
        health_target: '{{health_target}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://barclays.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: barclays_service_health_check
        method: GET
Open in Framework → View in Fleet → barclays-service-health-check.yml

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

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

Retrieves current monitoring alert status. Used by Barclays teams.

naftiko: '0.5'
info:
  label: Barclays Alert Status Check
  description: Retrieves current monitoring alert status. Used by Barclays teams.
  tags:
  - banking
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: confluence
    port: 8080
    tools:
    - name: get-alert_status_check
      description: Retrieves current monitoring alert status. Used by Barclays teams.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The alert_id to look up.
      call: confluence.get-alert_id
      with:
        alert_id: '{{alert_id}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://barclays.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: barclays_alert_status_check
        method: GET
Open in Framework → View in Fleet → barclays-alert-status-check.yml

Orchestrates employee offboarding by terminating Workday record, revoking access in SailPoint, deactivating Azure AD account, and creating a ServiceNow decommission ticket.

naftiko: '0.5'
info:
  label: Employee Offboarding Orchestrator
  description: Orchestrates employee offboarding by terminating Workday record, revoking access in SailPoint, deactivating Azure AD account, and creating a ServiceNow decommission ticket.
  tags:
  - hr
  - offboarding
  - workday
  - sailpoint
  - azure-active-directory
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: offboard-employee
      description: Orchestrate full employee offboarding across HR, identity, and IT systems.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: Workday worker ID.
      - name: termination_date
        in: body
        type: string
        description: Last working date (YYYY-MM-DD).
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{worker_id}}'
      - name: revoke-access
        type: call
        call: sailpoint.disable-identity
        with:
          identity_id: '{{get-employee.sailpoint_id}}'
      - name: disable-ad
        type: call
        call: azure-ad.disable-user
        with:
          user_principal_name: '{{get-employee.work_email}}'
      - name: create-ticket
        type: call
        call: servicenow.create-record
        with:
          table: sc_request
          short_description: 'Offboarding: {{get-employee.full_name}} - equipment return and access cleanup'
          description: 'Termination date: {{termination_date}}. Revoke all access and arrange equipment collection.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1/barclays
    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: sailpoint
    baseUri: https://barclays.api.identitynow.com/v3
    authentication:
      type: bearer
      token: $secrets.sailpoint_token
    resources:
    - name: identities
      path: /accounts/{{identity_id}}/disable
      inputParameters:
      - name: identity_id
        in: path
      operations:
      - name: disable-identity
        method: POST
  - type: http
    namespace: azure-ad
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users/{{user_principal_name}}
      inputParameters:
      - name: user_principal_name
        in: path
      operations:
      - name: disable-user
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://barclays.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: table-records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → employee-offboarding-orchestrator.yml

Retrieves pending access certification items from SailPoint for a given reviewer. Returns identity name, entitlement, and application for each pending review.

naftiko: '0.5'
info:
  label: SailPoint Access Certification Review
  description: Retrieves pending access certification items from SailPoint for a given reviewer. Returns identity name, entitlement, and application for each pending review.
  tags:
  - security
  - identity-governance
  - sailpoint
capability:
  exposes:
  - type: mcp
    namespace: identity-governance
    port: 8080
    tools:
    - name: get-pending-certifications
      description: Retrieve pending access certification items for a reviewer.
      inputParameters:
      - name: reviewer_id
        in: body
        type: string
        description: SailPoint reviewer identity ID.
      call: sailpoint.get-certifications
      with:
        reviewer_id: '{{reviewer_id}}'
      outputParameters:
      - name: pending_items
        type: array
        mapping: $.items
  consumes:
  - type: http
    namespace: sailpoint
    baseUri: https://barclays.api.identitynow.com/v3
    authentication:
      type: bearer
      token: $secrets.sailpoint_token
    resources:
    - name: certifications
      path: /certifications?filters=reviewer.id eq "{{reviewer_id}}" and phase eq "ACTIVE"
      inputParameters:
      - name: reviewer_id
        in: query
      operations:
      - name: get-certifications
        method: GET
Open in Framework → View in Fleet → sailpoint-access-certification-review.yml

Retrieves code repository information. Used by Barclays teams.

naftiko: '0.5'
info:
  label: Barclays Repository Info Lookup
  description: Retrieves code repository information. Used by Barclays teams.
  tags:
  - banking
  - workday
capability:
  exposes:
  - type: mcp
    namespace: workday
    port: 8080
    tools:
    - name: get-repository_info_lookup
      description: Retrieves code repository information. Used by Barclays teams.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: The repo_name to look up.
      call: workday.get-repo_name
      with:
        repo_name: '{{repo_name}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/barclays
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: barclays_repository_info_looku
        method: GET
Open in Framework → View in Fleet → barclays-repository-info-lookup.yml

Orchestrates a real-time payment through the Faster Payments network by validating the payee in Avaloq, debiting the account, dispatching to the payments gateway via Amazon SQS, and logging to Splunk.

naftiko: '0.5'
info:
  label: Real-Time Payments Processing
  description: Orchestrates a real-time payment through the Faster Payments network by validating the payee in Avaloq, debiting the account, dispatching to the payments gateway via Amazon SQS, and logging to Splunk.
  tags:
  - payments
  - real-time-payments
  - avaloq
  - amazon-sqs
  - splunk
capability:
  exposes:
  - type: mcp
    namespace: rtp-processing
    port: 8080
    tools:
    - name: process-faster-payment
      description: Process a Faster Payment through validation, debit, dispatch, and audit logging.
      inputParameters:
      - name: payer_account
        in: body
        type: string
        description: Payer account number.
      - name: payee_account
        in: body
        type: string
        description: Payee account number.
      - name: payee_sort_code
        in: body
        type: string
        description: Payee sort code.
      - name: amount
        in: body
        type: string
        description: Payment amount in GBP.
      - name: reference
        in: body
        type: string
        description: Payment reference.
      steps:
      - name: validate-payee
        type: call
        call: avaloq.validate-account
        with:
          account_number: '{{payee_account}}'
          sort_code: '{{payee_sort_code}}'
      - name: debit-account
        type: call
        call: avaloq.create-debit
        with:
          account_number: '{{payer_account}}'
          amount: '{{amount}}'
          currency: GBP
          reference: '{{reference}}'
      - name: dispatch-payment
        type: call
        call: sqs.send-message
        with:
          queue_url: https://sqs.eu-west-2.amazonaws.com/barclays/faster-payments-outbound
          message_body: '{"payerAccount":"{{payer_account}}","payeeAccount":"{{payee_account}}","sortCode":"{{payee_sort_code}}","amount":"{{amount}}","reference":"{{reference}}","debitRef":"{{debit-account.transaction_id}}"}'
      - name: audit-log
        type: call
        call: splunk.send-event
        with:
          index: payments
          source: faster-payments
          event: '{"type":"FPS","payer":"{{payer_account}}","payee":"{{payee_account}}","amount":"{{amount}}","status":"dispatched"}'
  consumes:
  - type: http
    namespace: avaloq
    baseUri: https://barclays-avaloq.internal.barclays.com/api/v1
    authentication:
      type: bearer
      token: $secrets.avaloq_token
    resources:
    - name: account-validation
      path: /accounts/{{account_number}}/validate
      inputParameters:
      - name: account_number
        in: path
      operations:
      - name: validate-account
        method: GET
    - name: debits
      path: /accounts/{{account_number}}/debits
      inputParameters:
      - name: account_number
        in: path
      operations:
      - name: create-debit
        method: POST
  - type: http
    namespace: sqs
    baseUri: https://sqs.eu-west-2.amazonaws.com
    authentication:
      type: aws-sigv4
      region: eu-west-2
      access_key: $secrets.aws_access_key
      secret_key: $secrets.aws_secret_key
    resources:
    - name: messages
      path: /barclays/faster-payments-outbound
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: splunk
    baseUri: https://barclays-splunk.splunkcloud.com:8088
    authentication:
      type: bearer
      token: $secrets.splunk_hec_token
    resources:
    - name: events
      path: /services/collector/event
      operations:
      - name: send-event
        method: POST
Open in Framework → View in Fleet → real-time-payments-processing.yml

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

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

Queries Geneos monitoring for the health status of a managed entity. Returns severity, component name, and active alert count.

naftiko: '0.5'
info:
  label: Geneos System Health Status
  description: Queries Geneos monitoring for the health status of a managed entity. Returns severity, component name, and active alert count.
  tags:
  - operations
  - monitoring
  - geneos
capability:
  exposes:
  - type: mcp
    namespace: system-health
    port: 8080
    tools:
    - name: get-system-health
      description: Check Geneos managed entity health status.
      inputParameters:
      - name: managed_entity
        in: body
        type: string
        description: Geneos managed entity name.
      call: geneos.get-entity-status
      with:
        entity: '{{managed_entity}}'
      outputParameters:
      - name: severity
        type: string
        mapping: $.entity.severity
      - name: active_alerts
        type: string
        mapping: $.entity.activeAlertCount
  consumes:
  - type: http
    namespace: geneos
    baseUri: https://barclays-geneos.internal.barclays.com/api/v1
    authentication:
      type: bearer
      token: $secrets.geneos_token
    resources:
    - name: entities
      path: /managedEntities/{{entity}}/status
      inputParameters:
      - name: entity
        in: path
      operations:
      - name: get-entity-status
        method: GET
Open in Framework → View in Fleet → geneos-system-health-status.yml

Searches Splunk for security events matching a given query string and time range. Used by the SOC team for rapid threat investigation.

naftiko: '0.5'
info:
  label: Splunk Security Event Search
  description: Searches Splunk for security events matching a given query string and time range. Used by the SOC team for rapid threat investigation.
  tags:
  - security
  - siem
  - splunk
capability:
  exposes:
  - type: mcp
    namespace: security-monitoring
    port: 8080
    tools:
    - name: search-security-events
      description: Search Splunk for security events by query and time range.
      inputParameters:
      - name: search_query
        in: body
        type: string
        description: Splunk search query (SPL).
      - name: earliest_time
        in: body
        type: string
        description: Earliest time for search (e.g. -24h, -7d).
      call: splunk.create-search
      with:
        search: '{{search_query}}'
        earliest_time: '{{earliest_time}}'
        latest_time: now
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://barclays-splunk.splunkcloud.com:8089
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search-jobs
      path: /services/search/jobs
      operations:
      - name: create-search
        method: POST
Open in Framework → View in Fleet → splunk-security-event-search.yml

Retrieves the latest economic indicator value from Bloomberg Economics by indicator code. Returns value, date, and prior reading for macro research.

naftiko: '0.5'
info:
  label: Bloomberg Economics Indicator Fetch
  description: Retrieves the latest economic indicator value from Bloomberg Economics by indicator code. Returns value, date, and prior reading for macro research.
  tags:
  - research
  - economics
  - bloomberg-economics
capability:
  exposes:
  - type: mcp
    namespace: macro-research
    port: 8080
    tools:
    - name: get-economic-indicator
      description: Fetch an economic indicator from Bloomberg Economics.
      inputParameters:
      - name: indicator_code
        in: body
        type: string
        description: Bloomberg Economics indicator code (e.g. GDP CQOQ Index).
      call: bloomberg-econ.get-indicator
      with:
        indicator: '{{indicator_code}}'
      outputParameters:
      - name: value
        type: string
        mapping: $.data.value
      - name: date
        type: string
        mapping: $.data.date
      - name: prior
        type: string
        mapping: $.data.prior
  consumes:
  - type: http
    namespace: bloomberg-econ
    baseUri: https://bql.data.bloomberg.com/api/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_api_key
    resources:
    - name: economics
      path: /economics/{{indicator}}
      inputParameters:
      - name: indicator
        in: path
      operations:
      - name: get-indicator
        method: GET
Open in Framework → View in Fleet → bloomberg-economics-indicator-fetch.yml

Orchestrates expense report processing by pulling the report from SAP Concur, validating against policy limits in Oracle, logging the approval in ServiceNow, and notifying the submitter via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Concur Expense Report Approval
  description: Orchestrates expense report processing by pulling the report from SAP Concur, validating against policy limits in Oracle, logging the approval in ServiceNow, and notifying the submitter via Microsoft Teams.
  tags:
  - finance
  - expense-management
  - sap-concur
  - oracle-database
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: expense-management
    port: 8080
    tools:
    - name: process-expense-report
      description: Process and approve an expense report with policy validation and audit logging.
      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: validate-policy
        type: call
        call: oracle.validate-expense-policy
        with:
          department: '{{get-report.department}}'
          total_amount: '{{get-report.totalAmount}}'
          expense_type: '{{get-report.expenseType}}'
      - name: log-approval
        type: call
        call: servicenow.create-record
        with:
          table: u_expense_approvals
          short_description: 'Expense approval: {{get-report.employeeName}} - {{get-report.totalAmount}} {{get-report.currency}}'
          description: 'Report {{report_id}}. Policy check: {{validate-policy.result}}.'
      - name: notify-submitter
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-report.employeeEmail}}'
          text: 'Your expense report {{report_id}} ({{get-report.totalAmount}} {{get-report.currency}}) has been {{validate-policy.result}}. Reference: {{log-approval.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: oracle
    baseUri: https://barclays-ords.db.oracle.com/ords/finance/v1
    authentication:
      type: bearer
      token: $secrets.oracle_ords_token
    resources:
    - name: policy-validation
      path: /expense-policy/validate
      operations:
      - name: validate-expense-policy
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://barclays.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: table-records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-concur-expense-report-approval.yml

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

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

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

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

Retrieves company financial summary data from FactSet for a given ticker, returning revenue, EPS, market cap, and P/E ratio for analyst research.

naftiko: '0.5'
info:
  label: FactSet Company Financials Lookup
  description: Retrieves company financial summary data from FactSet for a given ticker, returning revenue, EPS, market cap, and P/E ratio for analyst research.
  tags:
  - research
  - market-data
  - factset
capability:
  exposes:
  - type: mcp
    namespace: research-data
    port: 8080
    tools:
    - name: get-company-financials
      description: Fetch company financial summary from FactSet by ticker.
      inputParameters:
      - name: ticker
        in: body
        type: string
        description: FactSet ticker identifier.
      call: factset.get-fundamentals
      with:
        ticker: '{{ticker}}'
      outputParameters:
      - name: revenue
        type: string
        mapping: $.data.revenue
      - name: eps
        type: string
        mapping: $.data.eps
      - name: market_cap
        type: string
        mapping: $.data.marketCap
      - name: pe_ratio
        type: string
        mapping: $.data.peRatio
  consumes:
  - type: http
    namespace: factset
    baseUri: https://api.factset.com/content/factset-fundamentals/v2
    authentication:
      type: basic
      username: $secrets.factset_user
      password: $secrets.factset_password
    resources:
    - name: fundamentals
      path: /fundamentals?ids={{ticker}}
      inputParameters:
      - name: ticker
        in: query
      operations:
      - name: get-fundamentals
        method: GET
Open in Framework → View in Fleet → factset-company-financials-lookup.yml

Checks availability of an API endpoint. Used by Barclays teams.

naftiko: '0.5'
info:
  label: Barclays API Endpoint Status
  description: Checks availability of an API endpoint. Used by Barclays teams.
  tags:
  - banking
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: datadog
    port: 8080
    tools:
    - name: get-api_endpoint_status
      description: Checks availability of an API endpoint. Used by Barclays 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: barclays_api_endpoint_status
        method: GET
Open in Framework → View in Fleet → barclays-api-endpoint-status.yml

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

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

Orchestrates an IRS trade by capturing terms from Tradeweb, booking in Bloomberg AIM, calculating initial margin via Azure Machine Learning, and dispatching the confirmation to the counterparty via IBM MQ.

naftiko: '0.5'
info:
  label: Interest Rate Swap Lifecycle
  description: Orchestrates an IRS trade by capturing terms from Tradeweb, booking in Bloomberg AIM, calculating initial margin via Azure Machine Learning, and dispatching the confirmation to the counterparty via IBM MQ.
  tags:
  - trading
  - derivatives
  - tradeweb
  - bloomberg-aim
  - azure-machine-learning
  - ibm-mq
capability:
  exposes:
  - type: mcp
    namespace: derivatives-trading
    port: 8080
    tools:
    - name: process-irs-trade
      description: Process an interest rate swap from execution through margin calculation and confirmation.
      inputParameters:
      - name: trade_id
        in: body
        type: string
        description: Tradeweb IRS trade identifier.
      steps:
      - name: get-trade
        type: call
        call: tradeweb.get-trade
        with:
          trade_id: '{{trade_id}}'
      - name: book-swap
        type: call
        call: bloomberg-aim.create-order
        with:
          portfolio_id: '{{get-trade.portfolio_id}}'
          security: '{{get-trade.swap_identifier}}'
          side: '{{get-trade.side}}'
          quantity: '{{get-trade.notional}}'
          price: '{{get-trade.fixed_rate}}'
      - name: calc-margin
        type: call
        call: azure-ml.score-model
        with:
          model_name: initial-margin-calculator
          input_data: '{"notional":"{{get-trade.notional}}","fixed_rate":"{{get-trade.fixed_rate}}","tenor":"{{get-trade.tenor}}","currency":"{{get-trade.currency}}"}'
      - name: send-confirmation
        type: call
        call: ibmmq.send-message
        with:
          queue: DERIVATIVES.CONFIRMATIONS.OUT
          body: '{"tradeId":"{{trade_id}}","type":"IRS","notional":"{{get-trade.notional}}","fixedRate":"{{get-trade.fixed_rate}}","floatingIndex":"{{get-trade.floating_index}}","initialMargin":"{{calc-margin.margin_amount}}"}'
  consumes:
  - type: http
    namespace: tradeweb
    baseUri: https://api.tradeweb.com/v1
    authentication:
      type: bearer
      token: $secrets.tradeweb_api_key
    resources:
    - name: trades
      path: /trades/{{trade_id}}
      inputParameters:
      - name: trade_id
        in: path
      operations:
      - name: get-trade
        method: GET
  - type: http
    namespace: bloomberg-aim
    baseUri: https://aim.bloomberg.com/api/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_aim_token
    resources:
    - name: orders
      path: /orders
      operations:
      - name: create-order
        method: POST
  - type: http
    namespace: azure-ml
    baseUri: https://barclays-ml.westeurope.inference.ml.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_ml_token
    resources:
    - name: scoring
      path: /score
      operations:
      - name: score-model
        method: POST
  - type: http
    namespace: ibmmq
    baseUri: https://barclays-mq.ibm.com/ibmmq/rest/v2
    authentication:
      type: basic
      username: $secrets.ibmmq_user
      password: $secrets.ibmmq_password
    resources:
    - name: messages
      path: /messaging/qmgr/BARCMQ01/queue/{{queue}}/message
      inputParameters:
      - name: queue
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → interest-rate-swap-lifecycle.yml

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

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

When an AML alert fires, pulls transaction details from Oracle Database, enriches with customer profile from Salesforce, runs risk scoring, and creates a JIRA investigation case for the compliance team.

naftiko: '0.5'
info:
  label: AML Transaction Alert Triage
  description: When an AML alert fires, pulls transaction details from Oracle Database, enriches with customer profile from Salesforce, runs risk scoring, and creates a JIRA investigation case for the compliance team.
  tags:
  - aml
  - compliance
  - oracle-database
  - salesforce
  - jira
capability:
  exposes:
  - type: mcp
    namespace: aml-triage
    port: 8080
    tools:
    - name: triage-aml-alert
      description: Triage an AML transaction alert by enriching with customer data and opening an investigation ticket.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The AML alert identifier from the monitoring system.
      - name: transaction_id
        in: body
        type: string
        description: The transaction reference to investigate.
      steps:
      - name: get-transaction
        type: call
        call: oracle.get-transaction
        with:
          transaction_id: '{{transaction_id}}'
      - name: get-customer-profile
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{get-transaction.customer_account_id}}'
      - name: create-investigation
        type: call
        call: jira.create-issue
        with:
          project: AML
          issue_type: Investigation
          summary: AML Alert {{alert_id}} - {{get-customer-profile.Name}}
          description: 'Transaction {{transaction_id}} amount {{get-transaction.amount}} {{get-transaction.currency}}. Customer risk: {{get-customer-profile.Risk_Rating__c}}.'
          priority: High
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://barclays-ords.db.oracle.com/ords/aml/v1
    authentication:
      type: bearer
      token: $secrets.oracle_ords_token
    resources:
    - name: transactions
      path: /transactions/{{transaction_id}}
      inputParameters:
      - name: transaction_id
        in: path
      operations:
      - name: get-transaction
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://barclays.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: jira
    baseUri: https://barclays.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → aml-transaction-alert-triage.yml

Retrieves the details of a support ticket. Used by Barclays teams.

naftiko: '0.5'
info:
  label: Barclays Ticket Details Lookup
  description: Retrieves the details of a support ticket. Used by Barclays teams.
  tags:
  - banking
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: powerbi
    port: 8080
    tools:
    - name: get-ticket_details_lookup
      description: Retrieves the details of a support ticket. Used by Barclays teams.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: The ticket_id to look up.
      call: powerbi.get-ticket_id
      with:
        ticket_id: '{{ticket_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: barclays_ticket_details_lookup
        method: GET
Open in Framework → View in Fleet → barclays-ticket-details-lookup.yml

Orchestrates institutional client onboarding by creating the client in Salesforce, provisioning access in SailPoint, setting up document storage in Box, and sending welcome instructions via Microsoft Teams.

naftiko: '0.5'
info:
  label: Client Onboarding Orchestrator
  description: Orchestrates institutional client onboarding by creating the client in Salesforce, provisioning access in SailPoint, setting up document storage in Box, and sending welcome instructions via Microsoft Teams.
  tags:
  - client-onboarding
  - salesforce
  - sailpoint
  - box
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: client-onboarding
    port: 8080
    tools:
    - name: onboard-institutional-client
      description: Onboard a new institutional client across CRM, identity, document storage, and communications.
      inputParameters:
      - name: client_name
        in: body
        type: string
        description: Legal name of the client entity.
      - name: client_type
        in: body
        type: string
        description: Client type (hedge_fund, pension, corporate, sovereign).
      - name: relationship_manager
        in: body
        type: string
        description: Email of the assigned relationship manager.
      steps:
      - name: create-account
        type: call
        call: salesforce.create-account
        with:
          name: '{{client_name}}'
          type: '{{client_type}}'
          owner_email: '{{relationship_manager}}'
      - name: provision-identity
        type: call
        call: sailpoint.create-identity
        with:
          name: '{{client_name}}'
          type: service_account
          source: institutional_clients
      - name: create-folder
        type: call
        call: box.create-folder
        with:
          parent_id: '0'
          name: Client_{{create-account.id}}_{{client_name}}
      - name: notify-rm
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{relationship_manager}}'
          text: 'New client onboarded: {{client_name}} ({{client_type}}). Salesforce ID: {{create-account.id}}. Document folder: {{create-folder.url}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://barclays.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account
      operations:
      - name: create-account
        method: POST
  - type: http
    namespace: sailpoint
    baseUri: https://barclays.api.identitynow.com/v3
    authentication:
      type: bearer
      token: $secrets.sailpoint_token
    resources:
    - name: identities
      path: /accounts
      operations:
      - name: create-identity
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: folders
      path: /folders
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → client-onboarding-orchestrator.yml

Monitors transactions for suspicious patterns, scores risk, creates alerts, and notifies compliance.

naftiko: '0.5'
info:
  label: Transaction Monitoring Pipeline
  description: Monitors transactions for suspicious patterns, scores risk, creates alerts, and notifies compliance.
  tags:
  - compliance
  - snowflake
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: barclays_transaction_monitoring_pipeline
      description: Orchestrate transaction monitoring pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-snowflake
        type: call
        call: snowflake.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          data: '{{get-snowflake.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Transaction Monitoring Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://barclays.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://barclays.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → transaction-monitoring-pipeline.yml

Identifies KYC records due for review, collects updated information, validates identity, and updates records.

naftiko: '0.5'
info:
  label: Client KYC Refresh Pipeline
  description: Identifies KYC records due for review, collects updated information, validates identity, and updates records.
  tags:
  - compliance
  - salesforce
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: client_kyc_refresh_pipeline
      description: Orchestrate client kyc refresh 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-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Client KYC Refresh Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://barclays.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://barclays.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → client-kyc-refresh-pipeline.yml

Retrieves user account details from the directory. Used by Barclays teams.

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

Orchestrates a Value-at-Risk calculation by pulling positions from Bloomberg AIM, computing VaR via Azure Databricks, storing results in Snowflake, and sending a breach alert to Microsoft Teams if the limit is exceeded.

naftiko: '0.5'
info:
  label: Market Risk VaR Calculation Pipeline
  description: Orchestrates a Value-at-Risk calculation by pulling positions from Bloomberg AIM, computing VaR via Azure Databricks, storing results in Snowflake, and sending a breach alert to Microsoft Teams if the limit is exceeded.
  tags:
  - risk-management
  - var
  - bloomberg-aim
  - azure-databricks
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: market-risk
    port: 8080
    tools:
    - name: calculate-var
      description: Run Value-at-Risk calculation for a trading book and alert on breaches.
      inputParameters:
      - name: book_id
        in: body
        type: string
        description: Trading book identifier.
      - name: confidence_level
        in: body
        type: string
        description: VaR confidence level (e.g. 99, 95).
      - name: horizon_days
        in: body
        type: string
        description: Holding period in days.
      steps:
      - name: get-positions
        type: call
        call: bloomberg-aim.get-positions
        with:
          portfolio_id: '{{book_id}}'
      - name: compute-var
        type: call
        call: databricks.run-job
        with:
          job_id: var-calculator
          parameters: '{"positions":{{get-positions.holdings}},"confidence":"{{confidence_level}}","horizon":"{{horizon_days}}"}'
      - name: store-result
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO risk.var_results (book_id, var_amount, confidence, horizon, calc_date) VALUES ('{{book_id}}', '{{compute-var.var_amount}}', '{{confidence_level}}', '{{horizon_days}}', CURRENT_DATE())
          warehouse: RISK_WH
          database: RISK_DB
      - name: alert-breach
        type: call
        call: msteams.send-channel-message
        with:
          team_id: market-risk
          channel_id: var-alerts
          text: 'VaR Report - Book {{book_id}}: {{compute-var.var_amount}} ({{confidence_level}}% / {{horizon_days}}d). Limit utilization: {{compute-var.limit_utilization}}%.'
  consumes:
  - type: http
    namespace: bloomberg-aim
    baseUri: https://aim.bloomberg.com/api/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_aim_token
    resources:
    - name: positions
      path: /portfolios/{{portfolio_id}}/positions
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: get-positions
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://barclays.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://barclays.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → market-risk-var-calculation-pipeline.yml

Queries cost and spending data. Used by Barclays teams.

naftiko: '0.5'
info:
  label: Barclays Cost Report Query
  description: Queries cost and spending data. Used by Barclays teams.
  tags:
  - banking
  - github
capability:
  exposes:
  - type: mcp
    namespace: github
    port: 8080
    tools:
    - name: get-cost_report_query
      description: Queries cost and spending data. Used by Barclays teams.
      inputParameters:
      - name: cost_center
        in: body
        type: string
        description: The cost_center to look up.
      call: github.get-cost_center
      with:
        cost_center: '{{cost_center}}'
  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: barclays_cost_report_query
        method: GET
Open in Framework → View in Fleet → barclays-cost-report-query.yml

Retrieves the latest build status for a Jenkins job. Returns build number, result, duration, and timestamp.

naftiko: '0.5'
info:
  label: Jenkins Build Status Check
  description: Retrieves the latest build status for a Jenkins job. Returns build number, result, duration, and timestamp.
  tags:
  - devops
  - ci-cd
  - jenkins
capability:
  exposes:
  - type: mcp
    namespace: ci-monitoring
    port: 8080
    tools:
    - name: get-build-status
      description: Check the latest Jenkins build status for a job.
      inputParameters:
      - name: job_name
        in: body
        type: string
        description: Jenkins job name (can include folder path).
      call: jenkins.get-last-build
      with:
        job_name: '{{job_name}}'
      outputParameters:
      - name: build_number
        type: string
        mapping: $.number
      - name: result
        type: string
        mapping: $.result
      - name: duration
        type: string
        mapping: $.duration
  consumes:
  - type: http
    namespace: jenkins
    baseUri: https://jenkins.barclays.com
    authentication:
      type: basic
      username: $secrets.jenkins_user
      password: $secrets.jenkins_api_token
    resources:
    - name: builds
      path: /job/{{job_name}}/lastBuild/api/json
      inputParameters:
      - name: job_name
        in: path
      operations:
      - name: get-last-build
        method: GET
Open in Framework → View in Fleet → jenkins-build-status-check.yml

Retrieves real-time market data for a given security from Bloomberg Enterprise Data, returning price, volume, and daily change. Used by traders and portfolio managers for quick instrument checks.

naftiko: '0.5'
info:
  label: Bloomberg Market Data Lookup
  description: Retrieves real-time market data for a given security from Bloomberg Enterprise Data, returning price, volume, and daily change. Used by traders and portfolio managers for quick instrument checks.
  tags:
  - trading
  - market-data
  - bloomberg-enterprise-data
capability:
  exposes:
  - type: mcp
    namespace: market-data
    port: 8080
    tools:
    - name: get-security-price
      description: Fetch real-time price, volume, and change for a Bloomberg security identifier.
      inputParameters:
      - name: ticker
        in: body
        type: string
        description: Bloomberg ticker symbol (e.g. BARC LN Equity).
      call: bloomberg.get-security
      with:
        ticker: '{{ticker}}'
      outputParameters:
      - name: last_price
        type: string
        mapping: $.data.lastPrice
      - name: volume
        type: string
        mapping: $.data.volume
      - name: change_pct
        type: string
        mapping: $.data.changePct
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://bql.data.bloomberg.com/api/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_api_key
    resources:
    - name: securities
      path: /data/{{ticker}}
      inputParameters:
      - name: ticker
        in: path
      operations:
      - name: get-security
        method: GET
Open in Framework → View in Fleet → bloomberg-market-data-lookup.yml

Orchestrates a portfolio reconciliation by extracting positions from Bloomberg AIM, running the reconciliation on Trioptima, logging discrepancies in Snowflake, and creating a Jira task for the operations team.

naftiko: '0.5'
info:
  label: Trioptima Portfolio Reconciliation
  description: Orchestrates a portfolio reconciliation by extracting positions from Bloomberg AIM, running the reconciliation on Trioptima, logging discrepancies in Snowflake, and creating a Jira task for the operations team.
  tags:
  - operations
  - reconciliation
  - bloomberg-aim
  - trioptima
  - snowflake
  - jira
capability:
  exposes:
  - type: mcp
    namespace: portfolio-recon
    port: 8080
    tools:
    - name: reconcile-portfolio
      description: Run portfolio reconciliation between internal positions and Trioptima, logging breaks.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: Bloomberg AIM portfolio identifier.
      - name: recon_date
        in: body
        type: string
        description: Reconciliation date (YYYY-MM-DD).
      steps:
      - name: get-positions
        type: call
        call: bloomberg-aim.get-positions
        with:
          portfolio_id: '{{portfolio_id}}'
      - name: run-recon
        type: call
        call: trioptima.submit-reconciliation
        with:
          portfolio_id: '{{portfolio_id}}'
          as_of_date: '{{recon_date}}'
          positions: '{{get-positions.holdings}}'
      - name: log-breaks
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO ops.recon_breaks SELECT * FROM TABLE(RESULT_SCAN('{{run-recon.query_id}}')) WHERE status = 'BREAK'
          warehouse: OPS_WH
          database: OPS_DB
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: OPS
          issue_type: Task
          summary: 'Recon breaks: Portfolio {{portfolio_id}} as of {{recon_date}}'
          description: '{{run-recon.break_count}} breaks found. Review in Snowflake OPS_DB.ops.recon_breaks.'
  consumes:
  - type: http
    namespace: bloomberg-aim
    baseUri: https://aim.bloomberg.com/api/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_aim_token
    resources:
    - name: positions
      path: /portfolios/{{portfolio_id}}/positions
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: get-positions
        method: GET
  - type: http
    namespace: trioptima
    baseUri: https://api.trioptima.com/v1
    authentication:
      type: bearer
      token: $secrets.trioptima_token
    resources:
    - name: reconciliations
      path: /reconciliations
      operations:
      - name: submit-reconciliation
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://barclays.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://barclays.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → trioptima-portfolio-reconciliation.yml

Orchestrates quarterly regulatory report generation by extracting data from Snowflake, generating the report in Power BI, uploading to SharePoint, and creating a Jira sign-off task for the compliance officer.

naftiko: '0.5'
info:
  label: Regulatory Report Generation
  description: Orchestrates quarterly regulatory report generation by extracting data from Snowflake, generating the report in Power BI, uploading to SharePoint, and creating a Jira sign-off task for the compliance officer.
  tags:
  - compliance
  - regulatory-reporting
  - snowflake
  - power-bi
  - sharepoint
  - jira
capability:
  exposes:
  - type: mcp
    namespace: regulatory-reporting
    port: 8080
    tools:
    - name: generate-regulatory-report
      description: Generate and distribute a quarterly regulatory report with sign-off tracking.
      inputParameters:
      - name: report_type
        in: body
        type: string
        description: Report type (e.g. COREP, FINREP, LCR, NSFR).
      - name: reporting_period
        in: body
        type: string
        description: Reporting period in YYYY-QN format.
      steps:
      - name: extract-data
        type: call
        call: snowflake.execute-query
        with:
          statement: CALL regulatory.generate_report_data('{{report_type}}', '{{reporting_period}}')
          warehouse: REGULATORY_WH
          database: REGULATORY_DB
      - name: refresh-report
        type: call
        call: powerbi.refresh-dataset
        with:
          group_id: regulatory-reports
          dataset_id: '{{report_type}}-dataset'
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: regulatory_reporting
          folder_path: Reports/{{reporting_period}}/{{report_type}}
          file_name: '{{report_type}}_{{reporting_period}}.pdf'
      - name: create-signoff
        type: call
        call: jira.create-issue
        with:
          project: REG
          issue_type: Task
          summary: 'Sign-off required: {{report_type}} report for {{reporting_period}}'
          description: Report available at {{upload-report.url}}. Please review and approve.
          priority: High
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://barclays.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: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: jira
    baseUri: https://barclays.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → regulatory-report-generation.yml

Triggers a Power BI dataset refresh for a specified workspace and dataset. Used by analysts to ensure dashboards display the latest data.

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

After a trade is executed on Tradeweb, fetches the trade details, retrieves counterparty data from Salesforce, publishes a settlement instruction to IBM MQ, and updates the position in Bloomberg AIM.

naftiko: '0.5'
info:
  label: Trade Execution Post-Trade Enrichment
  description: After a trade is executed on Tradeweb, fetches the trade details, retrieves counterparty data from Salesforce, publishes a settlement instruction to IBM MQ, and updates the position in Bloomberg AIM.
  tags:
  - trading
  - post-trade
  - tradeweb
  - salesforce
  - ibm-mq
  - bloomberg-aim
capability:
  exposes:
  - type: mcp
    namespace: trade-enrichment
    port: 8080
    tools:
    - name: enrich-trade
      description: Enrich a completed trade with counterparty data, publish settlement instruction, and update portfolio position.
      inputParameters:
      - name: trade_id
        in: body
        type: string
        description: The Tradeweb trade identifier.
      steps:
      - name: get-trade
        type: call
        call: tradeweb.get-trade
        with:
          trade_id: '{{trade_id}}'
      - name: get-counterparty
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{get-trade.counterparty_id}}'
      - name: publish-settlement
        type: call
        call: ibmmq.send-message
        with:
          queue: SETTLEMENT.INSTRUCTIONS
          body: '{"tradeId":"{{trade_id}}","counterparty":"{{get-counterparty.Name}}","amount":"{{get-trade.notional}}","currency":"{{get-trade.currency}}","settleDate":"{{get-trade.settlement_date}}"}'
      - name: update-aim
        type: call
        call: bloomberg-aim.update-position
        with:
          portfolio_id: '{{get-trade.portfolio_id}}'
          security: '{{get-trade.security}}'
          quantity: '{{get-trade.quantity}}'
  consumes:
  - type: http
    namespace: tradeweb
    baseUri: https://api.tradeweb.com/v1
    authentication:
      type: bearer
      token: $secrets.tradeweb_api_key
    resources:
    - name: trades
      path: /trades/{{trade_id}}
      inputParameters:
      - name: trade_id
        in: path
      operations:
      - name: get-trade
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://barclays.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: ibmmq
    baseUri: https://barclays-mq.ibm.com/ibmmq/rest/v2
    authentication:
      type: basic
      username: $secrets.ibmmq_user
      password: $secrets.ibmmq_password
    resources:
    - name: messages
      path: /messaging/qmgr/BARCMQ01/queue/{{queue}}/message
      inputParameters:
      - name: queue
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: bloomberg-aim
    baseUri: https://aim.bloomberg.com/api/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_aim_token
    resources:
    - name: positions
      path: /portfolios/{{portfolio_id}}/positions
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: update-position
        method: PUT
Open in Framework → View in Fleet → trade-execution-post-trade-enrichment.yml

Orchestrates a wealth management suitability assessment by pulling client profile from Salesforce, risk questionnaire results from Oracle, running the suitability model on Azure Machine Learning, and storing the assessment in SharePoint.

naftiko: '0.5'
info:
  label: Client Suitability Assessment
  description: Orchestrates a wealth management suitability assessment by pulling client profile from Salesforce, risk questionnaire results from Oracle, running the suitability model on Azure Machine Learning, and storing the assessment in SharePoint.
  tags:
  - wealth-management
  - suitability
  - salesforce
  - oracle-database
  - azure-machine-learning
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: wealth-suitability
    port: 8080
    tools:
    - name: assess-suitability
      description: Run a suitability assessment for a wealth management client.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: Salesforce client account ID.
      - name: product_type
        in: body
        type: string
        description: Investment product type being assessed.
      steps:
      - name: get-client
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{client_id}}'
      - name: get-risk-questionnaire
        type: call
        call: oracle.get-risk-questionnaire
        with:
          client_id: '{{client_id}}'
      - name: run-suitability-model
        type: call
        call: azure-ml.score-model
        with:
          model_name: suitability-assessor
          input_data: '{"client_type":"{{get-client.Type}}","risk_tolerance":"{{get-risk-questionnaire.risk_tolerance}}","investment_horizon":"{{get-risk-questionnaire.investment_horizon}}","product_type":"{{product_type}}"}'
      - name: store-assessment
        type: call
        call: sharepoint.upload-file
        with:
          site_id: wealth_management
          folder_path: Suitability/{{client_id}}
          file_name: suitability_{{product_type}}.json
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://barclays.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: oracle
    baseUri: https://barclays-ords.db.oracle.com/ords/wealth/v1
    authentication:
      type: bearer
      token: $secrets.oracle_ords_token
    resources:
    - name: risk-questionnaires
      path: /risk-questionnaires/{{client_id}}
      inputParameters:
      - name: client_id
        in: path
      operations:
      - name: get-risk-questionnaire
        method: GET
  - type: http
    namespace: azure-ml
    baseUri: https://barclays-ml.westeurope.inference.ml.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_ml_token
    resources:
    - name: scoring
      path: /score
      operations:
      - name: score-model
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → client-suitability-assessment.yml

Checks the status of a Mastercard payment transaction by reference ID. Returns authorization status, amount, and settlement state.

naftiko: '0.5'
info:
  label: Mastercard Payment Gateway Status
  description: Checks the status of a Mastercard payment transaction by reference ID. Returns authorization status, amount, and settlement state.
  tags:
  - payments
  - card-processing
  - mastercard
capability:
  exposes:
  - type: mcp
    namespace: card-payments
    port: 8080
    tools:
    - name: get-payment-status
      description: Check a Mastercard payment transaction status.
      inputParameters:
      - name: transaction_ref
        in: body
        type: string
        description: Mastercard transaction reference.
      call: mastercard.get-transaction
      with:
        transaction_ref: '{{transaction_ref}}'
      outputParameters:
      - name: auth_status
        type: string
        mapping: $.transaction.authorizationStatus
      - name: amount
        type: string
        mapping: $.transaction.amount
      - name: settlement_status
        type: string
        mapping: $.transaction.settlementStatus
  consumes:
  - type: http
    namespace: mastercard
    baseUri: https://sandbox.api.mastercard.com/mcob/v1
    authentication:
      type: oauth2
      token: $secrets.mastercard_oauth_token
    resources:
    - name: transactions
      path: /transactions/{{transaction_ref}}
      inputParameters:
      - name: transaction_ref
        in: path
      operations:
      - name: get-transaction
        method: GET
Open in Framework → View in Fleet → mastercard-payment-gateway-status.yml

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

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

Orchestrates a fixed income order by placing the order on Tradeweb, confirming execution, booking in Bloomberg AIM, and publishing the fill event to Apache Kafka for trade reporting.

naftiko: '0.5'
info:
  label: Fixed Income Order Execution
  description: Orchestrates a fixed income order by placing the order on Tradeweb, confirming execution, booking in Bloomberg AIM, and publishing the fill event to Apache Kafka for trade reporting.
  tags:
  - trading
  - fixed-income
  - tradeweb
  - bloomberg-aim
  - apache-kafka
capability:
  exposes:
  - type: mcp
    namespace: fi-trading
    port: 8080
    tools:
    - name: execute-fi-order
      description: Execute a fixed income order through placement, booking, and event publication.
      inputParameters:
      - name: security_id
        in: body
        type: string
        description: Bond ISIN or identifier.
      - name: side
        in: body
        type: string
        description: Order side (buy, sell).
      - name: quantity
        in: body
        type: string
        description: Face value / quantity.
      - name: portfolio_id
        in: body
        type: string
        description: Target portfolio ID.
      steps:
      - name: place-order
        type: call
        call: tradeweb.create-order
        with:
          security_id: '{{security_id}}'
          side: '{{side}}'
          quantity: '{{quantity}}'
          order_type: limit
      - name: book-trade
        type: call
        call: bloomberg-aim.create-order
        with:
          portfolio_id: '{{portfolio_id}}'
          security: '{{security_id}}'
          side: '{{side}}'
          quantity: '{{quantity}}'
          price: '{{place-order.execution_price}}'
      - name: publish-fill
        type: call
        call: kafka.produce
        with:
          topic: fi.trades.fills
          key: '{{place-order.trade_id}}'
          value: '{"tradeId":"{{place-order.trade_id}}","security":"{{security_id}}","side":"{{side}}","quantity":"{{quantity}}","price":"{{place-order.execution_price}}"}'
  consumes:
  - type: http
    namespace: tradeweb
    baseUri: https://api.tradeweb.com/v1
    authentication:
      type: bearer
      token: $secrets.tradeweb_api_key
    resources:
    - name: orders
      path: /orders
      operations:
      - name: create-order
        method: POST
  - type: http
    namespace: bloomberg-aim
    baseUri: https://aim.bloomberg.com/api/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_aim_token
    resources:
    - name: orders
      path: /orders
      operations:
      - name: create-order
        method: POST
  - type: http
    namespace: kafka
    baseUri: https://barclays-kafka.confluent.cloud/kafka/v3/clusters/barclays-prod
    authentication:
      type: basic
      username: $secrets.kafka_api_key
      password: $secrets.kafka_api_secret
    resources:
    - name: records
      path: /topics/{{topic}}/records
      inputParameters:
      - name: topic
        in: path
      operations:
      - name: produce
        method: POST
Open in Framework → View in Fleet → fixed-income-order-execution.yml

Retrieves a ServiceNow incident by number and returns its state, priority, assignment group, and short description. Used by support teams for quick incident lookups.

naftiko: '0.5'
info:
  label: ServiceNow Incident Status
  description: Retrieves a ServiceNow incident by number and returns its state, priority, assignment group, and short description. Used by support teams for quick incident lookups.
  tags:
  - operations
  - itsm
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: itsm-support
    port: 8080
    tools:
    - name: get-incident-status
      description: Look up a ServiceNow incident by number.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number (e.g. INC0012345).
      call: servicenow.get-incident
      with:
        incident_number: '{{incident_number}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.result.state
      - name: priority
        type: string
        mapping: $.result.priority
      - name: assigned_to
        type: string
        mapping: $.result.assigned_to.display_value
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://barclays.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident?sysparm_query=number={{incident_number}}
      inputParameters:
      - name: incident_number
        in: query
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → servicenow-incident-status.yml

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://barclays.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://barclays.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → access-review-certification-pipeline.yml

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

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

Orchestrates an international payment by validating the beneficiary in Oracle Database, formatting a SWIFT MT103 message, dispatching via IBM MQ, and logging the payment event to Splunk for monitoring.

naftiko: '0.5'
info:
  label: Payment Processing SWIFT Dispatch
  description: Orchestrates an international payment by validating the beneficiary in Oracle Database, formatting a SWIFT MT103 message, dispatching via IBM MQ, and logging the payment event to Splunk for monitoring.
  tags:
  - payments
  - swift
  - oracle-database
  - ibm-mq
  - splunk
capability:
  exposes:
  - type: mcp
    namespace: payments-processing
    port: 8080
    tools:
    - name: dispatch-swift-payment
      description: Validate, format, and dispatch a SWIFT MT103 international payment with audit logging.
      inputParameters:
      - name: payment_ref
        in: body
        type: string
        description: Internal payment reference.
      - name: beneficiary_account
        in: body
        type: string
        description: Beneficiary account number.
      - name: amount
        in: body
        type: string
        description: Payment amount.
      - name: currency
        in: body
        type: string
        description: ISO currency code.
      - name: beneficiary_bic
        in: body
        type: string
        description: Beneficiary bank SWIFT BIC.
      steps:
      - name: validate-beneficiary
        type: call
        call: oracle.get-beneficiary
        with:
          account_number: '{{beneficiary_account}}'
      - name: send-swift
        type: call
        call: ibmmq.send-message
        with:
          queue: SWIFT.MT103.OUT
          body: '{"ref":"{{payment_ref}}","beneficiary":"{{validate-beneficiary.account_holder}}","bic":"{{beneficiary_bic}}","amount":"{{amount}}","currency":"{{currency}}"}'
      - name: log-event
        type: call
        call: splunk.send-event
        with:
          index: payments
          source: swift-gateway
          event: '{"payment_ref":"{{payment_ref}}","status":"dispatched","amount":"{{amount}}","currency":"{{currency}}"}'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://barclays-ords.db.oracle.com/ords/payments/v1
    authentication:
      type: bearer
      token: $secrets.oracle_ords_token
    resources:
    - name: beneficiaries
      path: /beneficiaries/{{account_number}}
      inputParameters:
      - name: account_number
        in: path
      operations:
      - name: get-beneficiary
        method: GET
  - type: http
    namespace: ibmmq
    baseUri: https://barclays-mq.ibm.com/ibmmq/rest/v2
    authentication:
      type: basic
      username: $secrets.ibmmq_user
      password: $secrets.ibmmq_password
    resources:
    - name: messages
      path: /messaging/qmgr/BARCMQ01/queue/{{queue}}/message
      inputParameters:
      - name: queue
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: splunk
    baseUri: https://barclays-splunk.splunkcloud.com:8088
    authentication:
      type: bearer
      token: $secrets.splunk_hec_token
    resources:
    - name: events
      path: /services/collector/event
      operations:
      - name: send-event
        method: POST
Open in Framework → View in Fleet → payment-processing-swift-dispatch.yml

Retrieves compliance check status. Used by Barclays teams.

naftiko: '0.5'
info:
  label: Barclays Compliance Check Status
  description: Retrieves compliance check status. Used by Barclays teams.
  tags:
  - banking
  - okta
capability:
  exposes:
  - type: mcp
    namespace: okta
    port: 8080
    tools:
    - name: get-compliance_check_status
      description: Retrieves compliance check status. Used by Barclays 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://barclays.okta.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.okta_api_token
      header: Authorization
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: barclays_compliance_check_stat
        method: GET
Open in Framework → View in Fleet → barclays-compliance-check-status.yml

Retrieves the latest Bloomberg news articles for a given topic or security. Returns headlines, timestamps, and article summaries for research analysts.

naftiko: '0.5'
info:
  label: Bloomberg News Feed
  description: Retrieves the latest Bloomberg news articles for a given topic or security. Returns headlines, timestamps, and article summaries for research analysts.
  tags:
  - research
  - news
  - bloomberg-news
capability:
  exposes:
  - type: mcp
    namespace: research-news
    port: 8080
    tools:
    - name: get-bloomberg-news
      description: Fetch latest Bloomberg news by topic or security.
      inputParameters:
      - name: topic
        in: body
        type: string
        description: News topic or Bloomberg ticker.
      call: bloomberg-news.search-articles
      with:
        query: '{{topic}}'
      outputParameters:
      - name: articles
        type: array
        mapping: $.articles
  consumes:
  - type: http
    namespace: bloomberg-news
    baseUri: https://bql.data.bloomberg.com/api/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_api_key
    resources:
    - name: news
      path: /news/search?query={{query}}
      inputParameters:
      - name: query
        in: query
      operations:
      - name: search-articles
        method: GET
Open in Framework → View in Fleet → bloomberg-news-feed.yml

Runs data quality checks, scores datasets, creates remediation tickets, and publishes scorecards.

naftiko: '0.5'
info:
  label: Data Quality Monitoring Pipeline
  description: Runs data quality checks, scores datasets, creates remediation tickets, and publishes scorecards.
  tags:
  - data-quality
  - snowflake
  - jira
  - grafana
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: data_quality_monitoring_pipeline
      description: Orchestrate data quality monitoring pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-snowflake
        type: call
        call: snowflake.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-jira
        type: call
        call: jira.process-resource
        with:
          data: '{{get-snowflake.result}}'
      - name: create-grafana
        type: call
        call: grafana.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Data Quality Monitoring Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://barclays.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://barclays.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://barclays-grafana.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_api_key
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: grafana-op
        method: POST
Open in Framework → View in Fleet → data-quality-monitoring-pipeline.yml

Orchestrates a service health check by querying Datadog for active alerts, pulling recent error logs from Splunk, and posting a consolidated health summary to Microsoft Teams for the on-call team.

naftiko: '0.5'
info:
  label: Datadog Service Health Dashboard
  description: Orchestrates a service health check by querying Datadog for active alerts, pulling recent error logs from Splunk, and posting a consolidated health summary to Microsoft Teams for the on-call team.
  tags:
  - operations
  - monitoring
  - datadog
  - splunk
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: service-health
    port: 8080
    tools:
    - name: check-service-health
      description: Run a consolidated service health check across monitoring and logging systems.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: Service name to check.
      steps:
      - name: check-alerts
        type: call
        call: datadog.search-monitors
        with:
          query: tag:service:{{service_name}} status:alert
      - name: search-errors
        type: call
        call: splunk.create-search
        with:
          search: index=applications service={{service_name}} level=ERROR earliest=-1h
          earliest_time: -1h
          latest_time: now
      - name: post-summary
        type: call
        call: msteams.send-channel-message
        with:
          team_id: platform-engineering
          channel_id: service-health
          text: 'Service Health: {{service_name}}. Active alerts: {{check-alerts.total_count}}. Errors (1h): {{search-errors.result_count}}.'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.eu/api/v1
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: monitors
      path: /monitor/search
      operations:
      - name: search-monitors
        method: GET
  - type: http
    namespace: splunk
    baseUri: https://barclays-splunk.splunkcloud.com:8089
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search-jobs
      path: /services/search/jobs
      operations:
      - name: create-search
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → datadog-service-health-dashboard.yml

Orchestrates capital adequacy reporting by aggregating risk-weighted assets from Snowflake, computing capital ratios via Azure Databricks, generating the report in Power BI, uploading to SharePoint, and notifying the CFO office via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Capital Adequacy Report Pipeline
  description: Orchestrates capital adequacy reporting by aggregating risk-weighted assets from Snowflake, computing capital ratios via Azure Databricks, generating the report in Power BI, uploading to SharePoint, and notifying the CFO office via Microsoft Outlook.
  tags:
  - risk-management
  - capital-adequacy
  - snowflake
  - azure-databricks
  - power-bi
  - sharepoint
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: capital-reporting
    port: 8080
    tools:
    - name: generate-capital-report
      description: Generate and distribute a capital adequacy report with ratio calculations.
      inputParameters:
      - name: reporting_date
        in: body
        type: string
        description: Reporting date (YYYY-MM-DD).
      steps:
      - name: get-rwa
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT risk_category, SUM(rwa) as total_rwa FROM risk.risk_weighted_assets WHERE as_of_date = '{{reporting_date}}' GROUP BY risk_category
          warehouse: RISK_WH
          database: RISK_DB
      - name: compute-ratios
        type: call
        call: databricks.run-job
        with:
          job_id: capital-ratio-calculator
          parameters: '{"reporting_date":"{{reporting_date}}"}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          group_id: capital-reporting
          dataset_id: capital-adequacy
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: finance_reporting
          folder_path: Capital_Adequacy/{{reporting_date}}
          file_name: capital_adequacy_{{reporting_date}}.pdf
      - name: notify-cfo
        type: call
        call: outlook.send-mail
        with:
          to: cfo-office@barclays.com
          subject: Capital Adequacy Report - {{reporting_date}}
          body: 'CET1 Ratio: {{compute-ratios.cet1_ratio}}%. Tier 1: {{compute-ratios.tier1_ratio}}%. Total Capital: {{compute-ratios.total_capital_ratio}}%. Report: {{upload-report.url}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://barclays.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: databricks
    baseUri: https://barclays.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /groups/{{group_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: group_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - 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: mail
      path: /users/finance-reporting@barclays.com/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → capital-adequacy-report-pipeline.yml

Orchestrates a BACS batch payment submission by generating the payment file from Oracle, validating entries against Avaloq, submitting via Amazon SQS to the BACS gateway, and notifying treasury operations in Microsoft Teams.

naftiko: '0.5'
info:
  label: BACS Payment Batch Submission
  description: Orchestrates a BACS batch payment submission by generating the payment file from Oracle, validating entries against Avaloq, submitting via Amazon SQS to the BACS gateway, and notifying treasury operations in Microsoft Teams.
  tags:
  - payments
  - bacs
  - oracle-database
  - avaloq
  - amazon-sqs
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: bacs-payments
    port: 8080
    tools:
    - name: submit-bacs-batch
      description: Generate, validate, and submit a BACS payment batch with operations notification.
      inputParameters:
      - name: batch_id
        in: body
        type: string
        description: Payment batch identifier.
      - name: processing_date
        in: body
        type: string
        description: BACS processing date (YYYY-MM-DD).
      steps:
      - name: generate-file
        type: call
        call: oracle.generate-bacs-file
        with:
          batch_id: '{{batch_id}}'
          processing_date: '{{processing_date}}'
      - name: validate-accounts
        type: call
        call: avaloq.validate-batch
        with:
          batch_id: '{{batch_id}}'
          payment_count: '{{generate-file.payment_count}}'
      - name: submit-batch
        type: call
        call: sqs.send-message
        with:
          queue_url: https://sqs.eu-west-2.amazonaws.com/barclays/bacs-submissions
          message_body: '{"batchId":"{{batch_id}}","processingDate":"{{processing_date}}","paymentCount":"{{generate-file.payment_count}}","totalAmount":"{{generate-file.total_amount}}"}'
      - name: notify-ops
        type: call
        call: msteams.send-channel-message
        with:
          team_id: treasury-operations
          channel_id: bacs-processing
          text: 'BACS batch {{batch_id}} submitted for {{processing_date}}. Payments: {{generate-file.payment_count}}. Total: GBP {{generate-file.total_amount}}. Validation: {{validate-accounts.status}}.'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://barclays-ords.db.oracle.com/ords/payments/v1
    authentication:
      type: bearer
      token: $secrets.oracle_ords_token
    resources:
    - name: bacs-files
      path: /bacs/generate
      operations:
      - name: generate-bacs-file
        method: POST
  - type: http
    namespace: avaloq
    baseUri: https://barclays-avaloq.internal.barclays.com/api/v1
    authentication:
      type: bearer
      token: $secrets.avaloq_token
    resources:
    - name: batch-validation
      path: /payments/validate-batch
      operations:
      - name: validate-batch
        method: POST
  - type: http
    namespace: sqs
    baseUri: https://sqs.eu-west-2.amazonaws.com
    authentication:
      type: aws-sigv4
      region: eu-west-2
      access_key: $secrets.aws_access_key
      secret_key: $secrets.aws_secret_key
    resources:
    - name: messages
      path: /barclays/bacs-submissions
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → bacs-payment-batch-submission.yml

Orchestrates trade surveillance by pulling suspicious trade patterns from Snowflake, enriching with trader details from Workday, screening the counterparty in Refinitiv, and filing a compliance report in ServiceNow.

naftiko: '0.5'
info:
  label: Trade Surveillance Alert Processing
  description: Orchestrates trade surveillance by pulling suspicious trade patterns from Snowflake, enriching with trader details from Workday, screening the counterparty in Refinitiv, and filing a compliance report in ServiceNow.
  tags:
  - compliance
  - trade-surveillance
  - snowflake
  - workday
  - refinitiv
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: trade-surveillance
    port: 8080
    tools:
    - name: process-surveillance-alert
      description: Process a trade surveillance alert with enrichment and compliance filing.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: Surveillance alert identifier.
      - name: trader_id
        in: body
        type: string
        description: Workday worker ID of the trader.
      steps:
      - name: get-alert-details
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT * FROM compliance.surveillance_alerts WHERE alert_id = '{{alert_id}}'
          warehouse: COMPLIANCE_WH
          database: COMPLIANCE_DB
      - name: get-trader
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{trader_id}}'
      - name: screen-counterparty
        type: call
        call: refinitiv.screen-entity
        with:
          entity_name: '{{get-alert-details.counterparty_name}}'
          entity_type: organisation
      - name: file-report
        type: call
        call: servicenow.create-record
        with:
          table: u_surveillance_reports
          short_description: 'Surveillance Alert {{alert_id}} - Trader: {{get-trader.full_name}}'
          description: 'Pattern: {{get-alert-details.pattern_type}}. Counterparty screening: {{screen-counterparty.overallResult}}. Trade volume: {{get-alert-details.trade_volume}}.'
          priority: '2'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://barclays.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/barclays
    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: refinitiv
    baseUri: https://rms-world-check-one-api-pilot.thomsonreuters.com/v2
    authentication:
      type: bearer
      token: $secrets.refinitiv_api_key
    resources:
    - name: screening
      path: /cases/screeningRequest
      operations:
      - name: screen-entity
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://barclays.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: table-records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → trade-surveillance-alert-processing.yml

Queries metric values from a monitoring dashboard. Used by Barclays teams.

naftiko: '0.5'
info:
  label: Barclays Metric Dashboard Query
  description: Queries metric values from a monitoring dashboard. Used by Barclays teams.
  tags:
  - banking
  - splunk
capability:
  exposes:
  - type: mcp
    namespace: splunk
    port: 8080
    tools:
    - name: get-metric_dashboard_query
      description: Queries metric values from a monitoring dashboard. Used by Barclays teams.
      inputParameters:
      - name: metric_name
        in: body
        type: string
        description: The metric_name to look up.
      call: splunk.get-metric_name
      with:
        metric_name: '{{metric_name}}'
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://barclays-splunk.com/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: barclays_metric_dashboard_quer
        method: GET
Open in Framework → View in Fleet → barclays-metric-dashboard-query.yml

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

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

Orchestrates credit risk scoring by pulling applicant data from Salesforce, running the credit model on Azure Databricks, storing results in Snowflake, and notifying the credit committee via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Credit Risk Model Scoring
  description: Orchestrates credit risk scoring by pulling applicant data from Salesforce, running the credit model on Azure Databricks, storing results in Snowflake, and notifying the credit committee via Microsoft Outlook.
  tags:
  - risk-management
  - credit-risk
  - salesforce
  - azure-databricks
  - snowflake
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: credit-risk
    port: 8080
    tools:
    - name: score-credit-risk
      description: Run credit risk model scoring for a loan applicant.
      inputParameters:
      - name: applicant_id
        in: body
        type: string
        description: Salesforce contact ID for the applicant.
      - name: loan_amount
        in: body
        type: string
        description: Requested loan amount.
      steps:
      - name: get-applicant
        type: call
        call: salesforce.get-contact
        with:
          contact_id: '{{applicant_id}}'
      - name: run-model
        type: call
        call: databricks.run-job
        with:
          job_id: credit-risk-scorer
          parameters: '{"name":"{{get-applicant.Name}}","income":"{{get-applicant.Annual_Income__c}}","loan_amount":"{{loan_amount}}"}'
      - name: store-result
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO credit.risk_scores (applicant_id, score, pd, lgd, timestamp) VALUES ('{{applicant_id}}', '{{run-model.score}}', '{{run-model.pd}}', '{{run-model.lgd}}', CURRENT_TIMESTAMP())
          warehouse: RISK_WH
          database: RISK_DB
      - name: send-notification
        type: call
        call: outlook.send-mail
        with:
          to: credit-committee@barclays.com
          subject: 'Credit Risk Score: {{get-applicant.Name}} - {{run-model.score}}'
          body: 'Applicant: {{get-applicant.Name}}. Loan: {{loan_amount}}. PD: {{run-model.pd}}. LGD: {{run-model.lgd}}. Score: {{run-model.score}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://barclays.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /sobjects/Contact/{{contact_id}}
      inputParameters:
      - name: contact_id
        in: path
      operations:
      - name: get-contact
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://barclays.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://barclays.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/credit-service@barclays.com/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → credit-risk-model-scoring.yml

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

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

Orchestrates sanctions list updates by fetching the latest list from Refinitiv, updating the screening database in Snowflake, triggering a re-screening batch on Azure Databricks, and notifying compliance via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Sanctions List Update Propagation
  description: Orchestrates sanctions list updates by fetching the latest list from Refinitiv, updating the screening database in Snowflake, triggering a re-screening batch on Azure Databricks, and notifying compliance via Microsoft Outlook.
  tags:
  - compliance
  - sanctions
  - refinitiv
  - snowflake
  - azure-databricks
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: sanctions-management
    port: 8080
    tools:
    - name: propagate-sanctions-update
      description: Propagate a sanctions list update across screening infrastructure and notify compliance.
      inputParameters:
      - name: list_type
        in: body
        type: string
        description: Sanctions list type (OFAC, EU, UN, HMT).
      steps:
      - name: fetch-list
        type: call
        call: refinitiv.get-sanctions-list
        with:
          list_type: '{{list_type}}'
      - name: update-database
        type: call
        call: snowflake.execute-query
        with:
          statement: CALL compliance.update_sanctions_list('{{list_type}}', '{{fetch-list.version}}')
          warehouse: COMPLIANCE_WH
          database: COMPLIANCE_DB
      - name: trigger-rescreening
        type: call
        call: databricks.run-job
        with:
          job_id: sanctions-rescreening
          parameters: '{"list_type":"{{list_type}}","version":"{{fetch-list.version}}"}'
      - name: notify-compliance
        type: call
        call: outlook.send-mail
        with:
          to: sanctions-team@barclays.com
          subject: 'Sanctions List Updated: {{list_type}} v{{fetch-list.version}}'
          body: '{{list_type}} sanctions list updated to version {{fetch-list.version}}. Rescreening batch initiated. {{trigger-rescreening.affected_entities}} entities queued for review.'
  consumes:
  - type: http
    namespace: refinitiv
    baseUri: https://rms-world-check-one-api-pilot.thomsonreuters.com/v2
    authentication:
      type: bearer
      token: $secrets.refinitiv_api_key
    resources:
    - name: sanctions-lists
      path: /lists/{{list_type}}
      inputParameters:
      - name: list_type
        in: path
      operations:
      - name: get-sanctions-list
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://barclays.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: databricks
    baseUri: https://barclays.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: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/compliance-notices@barclays.com/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → sanctions-list-update-propagation.yml

Retrieves a signed URL for a report file stored in Amazon S3. Used by compliance and audit teams to access archived regulatory reports.

naftiko: '0.5'
info:
  label: Amazon S3 Report Archive Retrieval
  description: Retrieves a signed URL for a report file stored in Amazon S3. Used by compliance and audit teams to access archived regulatory reports.
  tags:
  - storage
  - archive
  - amazon-s3
capability:
  exposes:
  - type: mcp
    namespace: report-archive
    port: 8080
    tools:
    - name: get-archived-report
      description: Generate a pre-signed URL for an S3 archived report.
      inputParameters:
      - name: bucket
        in: body
        type: string
        description: S3 bucket name.
      - name: object_key
        in: body
        type: string
        description: S3 object key (file path).
      call: s3.get-presigned-url
      with:
        bucket: '{{bucket}}'
        key: '{{object_key}}'
  consumes:
  - type: http
    namespace: s3
    baseUri: https://s3.eu-west-2.amazonaws.com
    authentication:
      type: aws-sigv4
      region: eu-west-2
      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: get-presigned-url
        method: GET
Open in Framework → View in Fleet → amazon-s3-report-archive-retrieval.yml

Orchestrates a production deployment by triggering the GitHub Actions workflow, running smoke tests via Postman, checking Datadog health monitors, and posting the deployment result to Microsoft Teams.

naftiko: '0.5'
info:
  label: Deployment Pipeline Orchestrator
  description: Orchestrates a production deployment by triggering the GitHub Actions workflow, running smoke tests via Postman, checking Datadog health monitors, and posting the deployment result to Microsoft Teams.
  tags:
  - devops
  - ci-cd
  - github-actions
  - postman
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: deployment-pipeline
    port: 8080
    tools:
    - name: deploy-to-production
      description: Trigger a full production deployment with smoke tests, health checks, and team notification.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository (owner/repo).
      - name: workflow_id
        in: body
        type: string
        description: GitHub Actions workflow file name.
      - name: ref
        in: body
        type: string
        description: Git ref to deploy (branch or tag).
      steps:
      - name: trigger-deploy
        type: call
        call: github.trigger-workflow
        with:
          repo: '{{repo}}'
          workflow_id: '{{workflow_id}}'
          ref: '{{ref}}'
      - name: run-smoke-tests
        type: call
        call: postman.run-collection
        with:
          collection_id: smoke-tests-production
          environment: production
      - name: check-health
        type: call
        call: datadog.search-monitors
        with:
          query: tag:service:{{repo}} status:alert
      - name: notify-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: platform-engineering
          channel_id: deployments
          text: 'Deployment of {{repo}}@{{ref}} complete. Smoke tests: {{run-smoke-tests.status}}. Active alerts: {{check-health.total_count}}.'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflow-dispatches
      path: /repos/{{repo}}/actions/workflows/{{workflow_id}}/dispatches
      inputParameters:
      - name: repo
        in: path
      - name: workflow_id
        in: path
      operations:
      - name: trigger-workflow
        method: POST
  - type: http
    namespace: postman
    baseUri: https://api.getpostman.com
    authentication:
      type: apiKey
      name: X-Api-Key
      in: header
      value: $secrets.postman_api_key
    resources:
    - name: collection-runs
      path: /collections/{{collection_id}}/runs
      inputParameters:
      - name: collection_id
        in: path
      operations:
      - name: run-collection
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.eu/api/v1
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: monitors
      path: /monitor/search
      operations:
      - name: search-monitors
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → deployment-pipeline-orchestrator.yml

Executes a read-only analytics query. Used by Barclays teams.

naftiko: '0.5'
info:
  label: Barclays Database Query Runner
  description: Executes a read-only analytics query. Used by Barclays teams.
  tags:
  - banking
  - elasticsearch
capability:
  exposes:
  - type: mcp
    namespace: elasticsearc
    port: 8080
    tools:
    - name: get-database_query_runner
      description: Executes a read-only analytics query. Used by Barclays teams.
      inputParameters:
      - name: sql_query
        in: body
        type: string
        description: The sql_query to look up.
      call: elasticsearch.get-sql_query
      with:
        sql_query: '{{sql_query}}'
  consumes:
  - type: http
    namespace: elasticsearch
    baseUri: https://barclays-es.com:9200
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: barclays_database_query_runner
        method: GET
Open in Framework → View in Fleet → barclays-database-query-runner.yml

Orchestrates customer identity verification during onboarding by pulling customer data from Salesforce, running sanctions screening via Refinitiv World-Check, and logging the verification result in ServiceNow for audit trail.

naftiko: '0.5'
info:
  label: KYC Customer Identity Verification
  description: Orchestrates customer identity verification during onboarding by pulling customer data from Salesforce, running sanctions screening via Refinitiv World-Check, and logging the verification result in ServiceNow for audit trail.
  tags:
  - kyc
  - compliance
  - salesforce
  - refinitiv
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: kyc-verification
    port: 8080
    tools:
    - name: verify-customer-identity
      description: Run full KYC identity verification for a customer, including sanctions screening and audit logging.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The Salesforce customer account ID.
      steps:
      - name: fetch-customer
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{customer_id}}'
      - name: screen-sanctions
        type: call
        call: refinitiv.screen-entity
        with:
          entity_name: '{{fetch-customer.Name}}'
          entity_type: individual
          date_of_birth: '{{fetch-customer.PersonBirthdate}}'
      - name: log-result
        type: call
        call: servicenow.create-record
        with:
          table: u_kyc_verification
          short_description: KYC screening for {{fetch-customer.Name}}
          result: '{{screen-sanctions.overallResult}}'
          risk_score: '{{screen-sanctions.riskScore}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://barclays.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: refinitiv
    baseUri: https://rms-world-check-one-api-pilot.thomsonreuters.com/v2
    authentication:
      type: bearer
      token: $secrets.refinitiv_api_key
    resources:
    - name: screening
      path: /cases/screeningRequest
      operations:
      - name: screen-entity
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://barclays.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: table-records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → kyc-customer-identity-verification.yml

Orchestrates publishing enriched trade events to Apache Kafka by pulling trade details from Tradeweb, enriching with Bloomberg market data, and producing the composite event to the trade events topic.

naftiko: '0.5'
info:
  label: Kafka Trade Event Stream Publishing
  description: Orchestrates publishing enriched trade events to Apache Kafka by pulling trade details from Tradeweb, enriching with Bloomberg market data, and producing the composite event to the trade events topic.
  tags:
  - trading
  - event-streaming
  - tradeweb
  - bloomberg-enterprise-data
  - apache-kafka
capability:
  exposes:
  - type: mcp
    namespace: trade-events
    port: 8080
    tools:
    - name: publish-enriched-trade-event
      description: Enrich a trade with market data and publish to the Kafka trade events stream.
      inputParameters:
      - name: trade_id
        in: body
        type: string
        description: Tradeweb trade identifier.
      steps:
      - name: get-trade
        type: call
        call: tradeweb.get-trade
        with:
          trade_id: '{{trade_id}}'
      - name: get-market-data
        type: call
        call: bloomberg.get-security
        with:
          ticker: '{{get-trade.security}}'
      - name: publish-event
        type: call
        call: kafka.produce
        with:
          topic: trades.enriched
          key: '{{trade_id}}'
          value: '{"tradeId":"{{trade_id}}","security":"{{get-trade.security}}","notional":"{{get-trade.notional}}","lastPrice":"{{get-market-data.lastPrice}}","volume":"{{get-market-data.volume}}"}'
  consumes:
  - type: http
    namespace: tradeweb
    baseUri: https://api.tradeweb.com/v1
    authentication:
      type: bearer
      token: $secrets.tradeweb_api_key
    resources:
    - name: trades
      path: /trades/{{trade_id}}
      inputParameters:
      - name: trade_id
        in: path
      operations:
      - name: get-trade
        method: GET
  - type: http
    namespace: bloomberg
    baseUri: https://bql.data.bloomberg.com/api/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_api_key
    resources:
    - name: securities
      path: /data/{{ticker}}
      inputParameters:
      - name: ticker
        in: path
      operations:
      - name: get-security
        method: GET
  - type: http
    namespace: kafka
    baseUri: https://barclays-kafka.confluent.cloud/kafka/v3/clusters/barclays-prod
    authentication:
      type: basic
      username: $secrets.kafka_api_key
      password: $secrets.kafka_api_secret
    resources:
    - name: records
      path: /topics/{{topic}}/records
      inputParameters:
      - name: topic
        in: path
      operations:
      - name: produce
        method: POST
Open in Framework → View in Fleet → kafka-trade-event-stream-publishing.yml

Executes a parameterized query against the Snowflake risk data warehouse to retrieve portfolio exposure by asset class. Used by risk managers for daily limit checks.

naftiko: '0.5'
info:
  label: Snowflake Risk Exposure Query
  description: Executes a parameterized query against the Snowflake risk data warehouse to retrieve portfolio exposure by asset class. Used by risk managers for daily limit checks.
  tags:
  - risk-management
  - data-warehouse
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: risk-analytics
    port: 8080
    tools:
    - name: query-risk-exposure
      description: Run a portfolio exposure query on Snowflake by portfolio ID and asset class.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: Portfolio identifier.
      - name: asset_class
        in: body
        type: string
        description: Asset class filter (e.g. equities, fixed_income, fx).
      call: snowflake.execute-query
      with:
        statement: SELECT asset_class, SUM(notional) as total_exposure, SUM(pnl) as total_pnl FROM risk.positions WHERE portfolio_id = '{{portfolio_id}}' AND asset_class = '{{asset_class}}' GROUP BY asset_class
        warehouse: RISK_WH
        database: RISK_DB
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://barclays.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → snowflake-risk-exposure-query.yml

Retrieves vulnerability scan results. Used by Barclays teams.

naftiko: '0.5'
info:
  label: Barclays Security Scan Results
  description: Retrieves vulnerability scan results. Used by Barclays teams.
  tags:
  - banking
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: pagerduty
    port: 8080
    tools:
    - name: get-security_scan_results
      description: Retrieves vulnerability scan results. Used by Barclays teams.
      inputParameters:
      - name: scan_id
        in: body
        type: string
        description: The scan_id to look up.
      call: pagerduty.get-scan_id
      with:
        scan_id: '{{scan_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: barclays_security_scan_results
        method: GET
Open in Framework → View in Fleet → barclays-security-scan-results.yml

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

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

Orchestrates portfolio rebalancing by pulling current positions from Bloomberg AIM, computing target allocations via Azure Machine Learning, generating trade orders, and notifying the advisor in Microsoft Teams.

naftiko: '0.5'
info:
  label: Wealth Management Portfolio Rebalancing
  description: Orchestrates portfolio rebalancing by pulling current positions from Bloomberg AIM, computing target allocations via Azure Machine Learning, generating trade orders, and notifying the advisor in Microsoft Teams.
  tags:
  - wealth-management
  - portfolio
  - bloomberg-aim
  - azure-machine-learning
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: wealth-rebalance
    port: 8080
    tools:
    - name: rebalance-portfolio
      description: Trigger a portfolio rebalancing workflow for a wealth management client.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: Bloomberg AIM portfolio identifier.
      - name: risk_profile
        in: body
        type: string
        description: Client risk profile (conservative, moderate, aggressive).
      steps:
      - name: get-positions
        type: call
        call: bloomberg-aim.get-positions
        with:
          portfolio_id: '{{portfolio_id}}'
      - name: compute-targets
        type: call
        call: azure-ml.score-model
        with:
          model_name: portfolio-optimizer
          input_data: '{"positions":{{get-positions.holdings}},"risk_profile":"{{risk_profile}}"}'
      - name: notify-advisor
        type: call
        call: msteams.send-channel-message
        with:
          team_id: wealth-advisory
          channel_id: rebalancing
          text: 'Portfolio {{portfolio_id}} rebalancing complete. Target allocation: {{compute-targets.targetAllocation}}. Trades required: {{compute-targets.tradeCount}}.'
  consumes:
  - type: http
    namespace: bloomberg-aim
    baseUri: https://aim.bloomberg.com/api/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_aim_token
    resources:
    - name: positions
      path: /portfolios/{{portfolio_id}}/positions
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: get-positions
        method: GET
  - type: http
    namespace: azure-ml
    baseUri: https://barclays-ml.westeurope.inference.ml.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_ml_token
    resources:
    - name: scoring
      path: /score
      operations:
      - name: score-model
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → wealth-management-portfolio-rebalancing.yml

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

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

Orchestrates a threat investigation in Microsoft Sentinel by querying for incidents, enriching with SailPoint identity data, creating a ServiceNow security incident, and alerting the SOC team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Microsoft Sentinel Threat Investigation
  description: Orchestrates a threat investigation in Microsoft Sentinel by querying for incidents, enriching with SailPoint identity data, creating a ServiceNow security incident, and alerting the SOC team via Microsoft Teams.
  tags:
  - security
  - threat-detection
  - microsoft-sentinel
  - sailpoint
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: threat-investigation
    port: 8080
    tools:
    - name: investigate-threat
      description: Investigate a Microsoft Sentinel security incident with identity enrichment and escalation.
      inputParameters:
      - name: incident_id
        in: body
        type: string
        description: Microsoft Sentinel incident ID.
      steps:
      - name: get-incident
        type: call
        call: sentinel.get-incident
        with:
          incident_id: '{{incident_id}}'
      - name: get-identity
        type: call
        call: sailpoint.get-identity
        with:
          identity_name: '{{get-incident.owner.assignedTo}}'
      - name: create-security-incident
        type: call
        call: servicenow.create-record
        with:
          table: sn_si_incident
          short_description: 'Sentinel Alert: {{get-incident.properties.title}}'
          severity: '{{get-incident.properties.severity}}'
          description: 'Sentinel incident {{incident_id}}: {{get-incident.properties.description}}. Affected user: {{get-identity.displayName}} ({{get-identity.department}}).'
      - name: alert-soc
        type: call
        call: msteams.send-channel-message
        with:
          team_id: security-operations
          channel_id: incidents
          text: 'Sentinel Incident {{incident_id}}: {{get-incident.properties.title}}. Severity: {{get-incident.properties.severity}}. ServiceNow: {{create-security-incident.number}}.'
  consumes:
  - type: http
    namespace: sentinel
    baseUri: https://management.azure.com/subscriptions/barclays-sub/resourceGroups/security-rg/providers/Microsoft.SecurityInsights
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: incidents
      path: /incidents/{{incident_id}}?api-version=2023-11-01
      inputParameters:
      - name: incident_id
        in: path
      operations:
      - name: get-incident
        method: GET
  - type: http
    namespace: sailpoint
    baseUri: https://barclays.api.identitynow.com/v3
    authentication:
      type: bearer
      token: $secrets.sailpoint_token
    resources:
    - name: identities
      path: /search/identities?query=name:{{identity_name}}
      inputParameters:
      - name: identity_name
        in: query
      operations:
      - name: get-identity
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://barclays.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: table-records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → microsoft-sentinel-threat-investigation.yml

Retrieves a document from knowledge management. Used by Barclays teams.

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

Orchestrates an FX spot trade from execution to confirmation by capturing the trade via Tradeweb, booking it in Bloomberg AIM, sending confirmation via Microsoft Outlook, and streaming the event to Apache Kafka for downstream consumers.

naftiko: '0.5'
info:
  label: FX Trade Lifecycle
  description: Orchestrates an FX spot trade from execution to confirmation by capturing the trade via Tradeweb, booking it in Bloomberg AIM, sending confirmation via Microsoft Outlook, and streaming the event to Apache Kafka for downstream consumers.
  tags:
  - trading
  - fx
  - tradeweb
  - bloomberg-aim
  - microsoft-outlook
  - apache-kafka
capability:
  exposes:
  - type: mcp
    namespace: fx-trading
    port: 8080
    tools:
    - name: process-fx-trade
      description: Process an FX spot trade through booking, confirmation, and event streaming.
      inputParameters:
      - name: trade_id
        in: body
        type: string
        description: Tradeweb FX trade identifier.
      - name: counterparty_email
        in: body
        type: string
        description: Counterparty confirmation email address.
      steps:
      - name: get-trade
        type: call
        call: tradeweb.get-trade
        with:
          trade_id: '{{trade_id}}'
      - name: book-trade
        type: call
        call: bloomberg-aim.create-order
        with:
          portfolio_id: '{{get-trade.portfolio_id}}'
          security: '{{get-trade.currency_pair}}'
          side: '{{get-trade.side}}'
          quantity: '{{get-trade.notional}}'
          price: '{{get-trade.rate}}'
      - name: send-confirmation
        type: call
        call: outlook.send-mail
        with:
          to: '{{counterparty_email}}'
          subject: FX Trade Confirmation - {{trade_id}}
          body: 'Trade {{trade_id}}: {{get-trade.side}} {{get-trade.notional}} {{get-trade.currency_pair}} at {{get-trade.rate}}. Settlement: {{get-trade.settlement_date}}.'
      - name: publish-event
        type: call
        call: kafka.produce
        with:
          topic: fx.trades.completed
          key: '{{trade_id}}'
          value: '{"tradeId":"{{trade_id}}","pair":"{{get-trade.currency_pair}}","rate":"{{get-trade.rate}}","notional":"{{get-trade.notional}}"}'
  consumes:
  - type: http
    namespace: tradeweb
    baseUri: https://api.tradeweb.com/v1
    authentication:
      type: bearer
      token: $secrets.tradeweb_api_key
    resources:
    - name: trades
      path: /trades/{{trade_id}}
      inputParameters:
      - name: trade_id
        in: path
      operations:
      - name: get-trade
        method: GET
  - type: http
    namespace: bloomberg-aim
    baseUri: https://aim.bloomberg.com/api/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_aim_token
    resources:
    - name: orders
      path: /orders
      operations:
      - name: create-order
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/fx-confirmations@barclays.com/sendMail
      operations:
      - name: send-mail
        method: POST
  - type: http
    namespace: kafka
    baseUri: https://barclays-kafka.confluent.cloud/kafka/v3/clusters/barclays-prod
    authentication:
      type: basic
      username: $secrets.kafka_api_key
      password: $secrets.kafka_api_secret
    resources:
    - name: records
      path: /topics/{{topic}}/records
      inputParameters:
      - name: topic
        in: path
      operations:
      - name: produce
        method: POST
Open in Framework → View in Fleet → fx-trade-lifecycle.yml

Orchestrates a new loan application by creating the application in Salesforce, running credit checks via Refinitiv, generating risk documents in SharePoint, and notifying the lending team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Loan Origination Workflow
  description: Orchestrates a new loan application by creating the application in Salesforce, running credit checks via Refinitiv, generating risk documents in SharePoint, and notifying the lending team via Microsoft Teams.
  tags:
  - lending
  - loan-origination
  - salesforce
  - refinitiv
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: lending-origination
    port: 8080
    tools:
    - name: initiate-loan-application
      description: Create and process a new loan application through credit check, document provisioning, and team notification.
      inputParameters:
      - name: applicant_name
        in: body
        type: string
        description: Full name of the loan applicant.
      - name: loan_amount
        in: body
        type: string
        description: Requested loan amount.
      - name: loan_currency
        in: body
        type: string
        description: Currency code (e.g. GBP, USD).
      - name: loan_type
        in: body
        type: string
        description: Type of loan (mortgage, corporate, personal).
      steps:
      - name: create-application
        type: call
        call: salesforce.create-opportunity
        with:
          name: Loan - {{applicant_name}} - {{loan_amount}} {{loan_currency}}
          stage: Application Received
          amount: '{{loan_amount}}'
          type: '{{loan_type}}'
      - name: credit-check
        type: call
        call: refinitiv.screen-entity
        with:
          entity_name: '{{applicant_name}}'
          entity_type: individual
          check_type: credit
      - name: provision-docs
        type: call
        call: sharepoint.create-folder
        with:
          site_id: lending_applications
          folder_path: Applications/{{create-application.id}}_{{applicant_name}}
      - name: notify-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: lending-approvals
          channel_id: new-applications
          text: 'New {{loan_type}} loan application: {{applicant_name}} for {{loan_amount}} {{loan_currency}}. Credit score: {{credit-check.creditScore}}. Docs: {{provision-docs.url}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://barclays.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity
      operations:
      - name: create-opportunity
        method: POST
  - type: http
    namespace: refinitiv
    baseUri: https://rms-world-check-one-api-pilot.thomsonreuters.com/v2
    authentication:
      type: bearer
      token: $secrets.refinitiv_api_key
    resources:
    - name: screening
      path: /cases/screeningRequest
      operations:
      - name: screen-entity
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → loan-origination-workflow.yml

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

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

Checks status of a recent deployment. Used by Barclays teams.

naftiko: '0.5'
info:
  label: Barclays Deployment Status Check
  description: Checks status of a recent deployment. Used by Barclays teams.
  tags:
  - banking
  - slack
capability:
  exposes:
  - type: mcp
    namespace: slack
    port: 8080
    tools:
    - name: get-deployment_status_check
      description: Checks status of a recent deployment. Used by Barclays teams.
      inputParameters:
      - name: deployment_id
        in: body
        type: string
        description: The deployment_id to look up.
      call: slack.get-deployment_id
      with:
        deployment_id: '{{deployment_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: barclays_deployment_status_che
        method: GET
Open in Framework → View in Fleet → barclays-deployment-status-check.yml

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

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

Orchestrates margin call processing by computing margin requirements from Snowflake, generating the call notice in SharePoint, dispatching to the counterparty via IBM MQ, and creating a follow-up task in Jira for collateral management.

naftiko: '0.5'
info:
  label: Margin Call Processing
  description: Orchestrates margin call processing by computing margin requirements from Snowflake, generating the call notice in SharePoint, dispatching to the counterparty via IBM MQ, and creating a follow-up task in Jira for collateral management.
  tags:
  - trading
  - margin-calls
  - snowflake
  - sharepoint
  - ibm-mq
  - jira
capability:
  exposes:
  - type: mcp
    namespace: margin-management
    port: 8080
    tools:
    - name: process-margin-call
      description: Compute margin requirements, generate notice, dispatch to counterparty, and track follow-up.
      inputParameters:
      - name: counterparty_lei
        in: body
        type: string
        description: Counterparty Legal Entity Identifier.
      - name: valuation_date
        in: body
        type: string
        description: Valuation date (YYYY-MM-DD).
      steps:
      - name: compute-margin
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT counterparty_lei, SUM(mtm_value) as portfolio_mtm, SUM(collateral_value) as collateral_held, SUM(mtm_value) - SUM(collateral_value) as margin_shortfall FROM risk.counterparty_positions WHERE counterparty_lei = '{{counterparty_lei}}' AND valuation_date = '{{valuation_date}}' GROUP BY counterparty_lei
          warehouse: RISK_WH
          database: RISK_DB
      - name: generate-notice
        type: call
        call: sharepoint.upload-file
        with:
          site_id: collateral_management
          folder_path: Margin_Calls/{{counterparty_lei}}/{{valuation_date}}
          file_name: margin_call_{{counterparty_lei}}_{{valuation_date}}.json
      - name: dispatch-notice
        type: call
        call: ibmmq.send-message
        with:
          queue: MARGIN.CALLS.OUT
          body: '{"lei":"{{counterparty_lei}}","valuationDate":"{{valuation_date}}","shortfall":"{{compute-margin.margin_shortfall}}","portfolioMtm":"{{compute-margin.portfolio_mtm}}"}'
      - name: create-follow-up
        type: call
        call: jira.create-issue
        with:
          project: COLL
          issue_type: Task
          summary: 'Margin Call: {{counterparty_lei}} - shortfall {{compute-margin.margin_shortfall}}'
          description: 'Margin call dispatched for {{valuation_date}}. Portfolio MTM: {{compute-margin.portfolio_mtm}}. Collateral held: {{compute-margin.collateral_held}}. Shortfall: {{compute-margin.margin_shortfall}}.'
          priority: High
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://barclays.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: ibmmq
    baseUri: https://barclays-mq.ibm.com/ibmmq/rest/v2
    authentication:
      type: basic
      username: $secrets.ibmmq_user
      password: $secrets.ibmmq_password
    resources:
    - name: messages
      path: /messaging/qmgr/BARCMQ01/queue/{{queue}}/message
      inputParameters:
      - name: queue
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: jira
    baseUri: https://barclays.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → margin-call-processing.yml

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

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

Collects applicant data, runs credit models, generates decisions, and notifies relationship managers.

naftiko: '0.5'
info:
  label: Credit Scoring Pipeline
  description: Collects applicant data, runs credit models, generates decisions, and notifies relationship managers.
  tags:
  - lending
  - snowflake
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: lending
    port: 8080
    tools:
    - name: barclays_credit_scoring_pipeline
      description: Orchestrate credit scoring 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: Credit Scoring Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://barclays.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://barclays.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: salesforce-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → credit-scoring-pipeline.yml

Orchestrates end-of-day P&L aggregation by pulling trade data from Snowflake, computing PnL via Azure Databricks, updating Bloomberg AIM portfolio valuations, and distributing the PnL report to front office via Microsoft Outlook.

naftiko: '0.5'
info:
  label: End-of-Day PnL Aggregation
  description: Orchestrates end-of-day P&L aggregation by pulling trade data from Snowflake, computing PnL via Azure Databricks, updating Bloomberg AIM portfolio valuations, and distributing the PnL report to front office via Microsoft Outlook.
  tags:
  - trading
  - pnl
  - snowflake
  - azure-databricks
  - bloomberg-aim
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: eod-pnl
    port: 8080
    tools:
    - name: aggregate-eod-pnl
      description: Run end-of-day PnL aggregation with reporting and distribution.
      inputParameters:
      - name: trading_date
        in: body
        type: string
        description: Trading date (YYYY-MM-DD).
      - name: desk
        in: body
        type: string
        description: Trading desk identifier.
      steps:
      - name: get-trades
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT * FROM trading.trades WHERE trade_date = '{{trading_date}}' AND desk = '{{desk}}'
          warehouse: TRADING_WH
          database: TRADING_DB
      - name: compute-pnl
        type: call
        call: databricks.run-job
        with:
          job_id: eod-pnl-calculator
          parameters: '{"trading_date":"{{trading_date}}","desk":"{{desk}}"}'
      - name: update-valuations
        type: call
        call: bloomberg-aim.update-valuations
        with:
          desk: '{{desk}}'
          as_of_date: '{{trading_date}}'
          realized_pnl: '{{compute-pnl.realized_pnl}}'
          unrealized_pnl: '{{compute-pnl.unrealized_pnl}}'
      - name: send-report
        type: call
        call: outlook.send-mail
        with:
          to: '{{desk}}-desk@barclays.com'
          subject: EOD PnL Report - {{desk}} - {{trading_date}}
          body: 'Realized PnL: {{compute-pnl.realized_pnl}}. Unrealized PnL: {{compute-pnl.unrealized_pnl}}. Total: {{compute-pnl.total_pnl}}. Trades: {{compute-pnl.trade_count}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://barclays.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: databricks
    baseUri: https://barclays.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: bloomberg-aim
    baseUri: https://aim.bloomberg.com/api/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_aim_token
    resources:
    - name: valuations
      path: /valuations
      operations:
      - name: update-valuations
        method: PUT
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/trading-reports@barclays.com/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → end-of-day-pnl-aggregation.yml

Orchestrates a regulatory stress test by pulling portfolio positions from Bloomberg AIM, applying scenario shocks via Azure Databricks, storing results in Snowflake, generating the report in Power BI, and emailing the risk committee.

naftiko: '0.5'
info:
  label: Stress Testing Orchestrator
  description: Orchestrates a regulatory stress test by pulling portfolio positions from Bloomberg AIM, applying scenario shocks via Azure Databricks, storing results in Snowflake, generating the report in Power BI, and emailing the risk committee.
  tags:
  - risk-management
  - stress-testing
  - bloomberg-aim
  - azure-databricks
  - snowflake
  - power-bi
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: stress-testing
    port: 8080
    tools:
    - name: run-stress-test
      description: Execute a full stress testing scenario across the portfolio with reporting and notification.
      inputParameters:
      - name: scenario_name
        in: body
        type: string
        description: Stress scenario name (e.g. severe_recession, rate_shock_200bps).
      - name: portfolio_id
        in: body
        type: string
        description: Portfolio to stress test.
      steps:
      - name: get-positions
        type: call
        call: bloomberg-aim.get-positions
        with:
          portfolio_id: '{{portfolio_id}}'
      - name: apply-scenario
        type: call
        call: databricks.run-job
        with:
          job_id: stress-test-engine
          parameters: '{"scenario":"{{scenario_name}}","positions":{{get-positions.holdings}}}'
      - name: store-results
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO risk.stress_test_results (portfolio_id, scenario, pnl_impact, capital_impact, run_date) VALUES ('{{portfolio_id}}', '{{scenario_name}}', '{{apply-scenario.pnl_impact}}', '{{apply-scenario.capital_impact}}', CURRENT_DATE())
          warehouse: RISK_WH
          database: RISK_DB
      - name: refresh-report
        type: call
        call: powerbi.refresh-dataset
        with:
          group_id: risk-reporting
          dataset_id: stress-test-results
      - name: notify-committee
        type: call
        call: outlook.send-mail
        with:
          to: risk-committee@barclays.com
          subject: 'Stress Test Complete: {{scenario_name}} - Portfolio {{portfolio_id}}'
          body: 'Scenario: {{scenario_name}}. PnL Impact: {{apply-scenario.pnl_impact}}. Capital Impact: {{apply-scenario.capital_impact}}. Dashboard refreshed.'
  consumes:
  - type: http
    namespace: bloomberg-aim
    baseUri: https://aim.bloomberg.com/api/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_aim_token
    resources:
    - name: positions
      path: /portfolios/{{portfolio_id}}/positions
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: get-positions
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://barclays.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://barclays.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: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/risk-reporting@barclays.com/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → stress-testing-orchestrator.yml

Retrieves a Jira issue from the compliance project by key, returning summary, status, assignee, and due date.

naftiko: '0.5'
info:
  label: Jira Compliance Task Lookup
  description: Retrieves a Jira issue from the compliance project by key, returning summary, status, assignee, and due date.
  tags:
  - compliance
  - project-management
  - jira
capability:
  exposes:
  - type: mcp
    namespace: compliance-tasks
    port: 8080
    tools:
    - name: get-compliance-task
      description: Look up a Jira compliance task by issue key.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: Jira issue key (e.g. COMP-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: due_date
        type: string
        mapping: $.fields.duedate
  consumes:
  - type: http
    namespace: jira
    baseUri: https://barclays.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-compliance-task-lookup.yml

Orchestrates operational risk event recording by creating the event in ServiceNow, storing supporting evidence in Box, computing the risk impact via Azure Databricks, and notifying the operational risk committee via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Operational Risk Event Capture
  description: Orchestrates operational risk event recording by creating the event in ServiceNow, storing supporting evidence in Box, computing the risk impact via Azure Databricks, and notifying the operational risk committee via Microsoft Outlook.
  tags:
  - risk-management
  - operational-risk
  - servicenow
  - box
  - azure-databricks
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: oprisk-management
    port: 8080
    tools:
    - name: record-oprisk-event
      description: Record an operational risk event with evidence collection, impact assessment, and committee notification.
      inputParameters:
      - name: event_description
        in: body
        type: string
        description: Description of the operational risk event.
      - name: business_unit
        in: body
        type: string
        description: Affected business unit.
      - name: estimated_loss
        in: body
        type: string
        description: Estimated financial loss.
      - name: currency
        in: body
        type: string
        description: Loss currency.
      steps:
      - name: create-event
        type: call
        call: servicenow.create-record
        with:
          table: u_oprisk_events
          short_description: 'OpRisk Event: {{business_unit}} - {{estimated_loss}} {{currency}}'
          description: '{{event_description}}'
          category: operational_risk
      - name: create-evidence-folder
        type: call
        call: box.create-folder
        with:
          parent_id: oprisk_evidence
          name: Event_{{create-event.sys_id}}
      - name: assess-impact
        type: call
        call: databricks.run-job
        with:
          job_id: oprisk-impact-assessor
          parameters: '{"estimated_loss":"{{estimated_loss}}","currency":"{{currency}}","business_unit":"{{business_unit}}"}'
      - name: notify-committee
        type: call
        call: outlook.send-mail
        with:
          to: oprisk-committee@barclays.com
          subject: 'OpRisk Event: {{business_unit}} - {{estimated_loss}} {{currency}}'
          body: 'Event: {{event_description}}. Estimated loss: {{estimated_loss}} {{currency}}. Risk category: {{assess-impact.risk_category}}. Capital impact: {{assess-impact.capital_impact}}. ServiceNow: {{create-event.number}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://barclays.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: table-records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: folders
      path: /folders
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: databricks
    baseUri: https://barclays.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: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/oprisk-reporting@barclays.com/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → operational-risk-event-capture.yml

Retrieves account details from the Avaloq core banking system by account number, returning balance, currency, status, and holder name. Used by operations staff for account inquiries.

naftiko: '0.5'
info:
  label: Avaloq Banking Core Account Inquiry
  description: Retrieves account details from the Avaloq core banking system by account number, returning balance, currency, status, and holder name. Used by operations staff for account inquiries.
  tags:
  - core-banking
  - accounts
  - avaloq
capability:
  exposes:
  - type: mcp
    namespace: core-banking
    port: 8080
    tools:
    - name: get-account-details
      description: Look up an account in Avaloq core banking by account number.
      inputParameters:
      - name: account_number
        in: body
        type: string
        description: Avaloq account number.
      call: avaloq.get-account
      with:
        account_number: '{{account_number}}'
      outputParameters:
      - name: balance
        type: string
        mapping: $.account.balance
      - name: currency
        type: string
        mapping: $.account.currency
      - name: status
        type: string
        mapping: $.account.status
      - name: holder_name
        type: string
        mapping: $.account.holderName
  consumes:
  - type: http
    namespace: avaloq
    baseUri: https://barclays-avaloq.internal.barclays.com/api/v1
    authentication:
      type: bearer
      token: $secrets.avaloq_token
    resources:
    - name: accounts
      path: /accounts/{{account_number}}
      inputParameters:
      - name: account_number
        in: path
      operations:
      - name: get-account
        method: GET
Open in Framework → View in Fleet → avaloq-banking-core-account-inquiry.yml

Orchestrates daily LCR monitoring by pulling HQLA positions from Snowflake, net cash outflows from Oracle, computing the ratio via Azure Databricks, and alerting treasury via Microsoft Teams if below threshold.

naftiko: '0.5'
info:
  label: Liquidity Coverage Ratio Monitoring
  description: Orchestrates daily LCR monitoring by pulling HQLA positions from Snowflake, net cash outflows from Oracle, computing the ratio via Azure Databricks, and alerting treasury via Microsoft Teams if below threshold.
  tags:
  - risk-management
  - liquidity
  - snowflake
  - oracle-database
  - azure-databricks
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: liquidity-risk
    port: 8080
    tools:
    - name: monitor-lcr
      description: Compute and monitor the Liquidity Coverage Ratio with threshold alerting.
      inputParameters:
      - name: reporting_date
        in: body
        type: string
        description: Reporting date (YYYY-MM-DD).
      - name: threshold_pct
        in: body
        type: string
        description: Alert threshold percentage (e.g. 100).
      steps:
      - name: get-hqla
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT SUM(market_value) as hqla_total FROM treasury.hqla_positions WHERE as_of_date = '{{reporting_date}}'
          warehouse: TREASURY_WH
          database: TREASURY_DB
      - name: get-outflows
        type: call
        call: oracle.get-cash-outflows
        with:
          reporting_date: '{{reporting_date}}'
      - name: compute-lcr
        type: call
        call: databricks.run-job
        with:
          job_id: lcr-calculator
          parameters: '{"hqla":"{{get-hqla.hqla_total}}","net_outflows":"{{get-outflows.net_outflow_total}}","threshold":"{{threshold_pct}}"}'
      - name: alert-treasury
        type: call
        call: msteams.send-channel-message
        with:
          team_id: treasury
          channel_id: liquidity-monitoring
          text: 'LCR Report {{reporting_date}}: HQLA {{get-hqla.hqla_total}}, Net Outflows {{get-outflows.net_outflow_total}}, LCR {{compute-lcr.lcr_ratio}}%. Threshold: {{threshold_pct}}%. Status: {{compute-lcr.breach_status}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://barclays.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: oracle
    baseUri: https://barclays-ords.db.oracle.com/ords/treasury/v1
    authentication:
      type: bearer
      token: $secrets.oracle_ords_token
    resources:
    - name: cash-outflows
      path: /cash-outflows/{{reporting_date}}
      inputParameters:
      - name: reporting_date
        in: path
      operations:
      - name: get-cash-outflows
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://barclays.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → liquidity-coverage-ratio-monitoring.yml

Executes a SQL statement against the Snowflake risk warehouse to retrieve portfolio-level aggregation data such as sector allocation or duration.

naftiko: '0.5'
info:
  label: Snowflake Portfolio Query
  description: Executes a SQL statement against the Snowflake risk warehouse to retrieve portfolio-level aggregation data such as sector allocation or duration.
  tags:
  - data-warehouse
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: snowflake-query
    port: 8080
    tools:
    - name: run-portfolio-query
      description: Run a read-only SQL query on the Snowflake portfolio analytics warehouse.
      inputParameters:
      - name: sql_statement
        in: body
        type: string
        description: The SQL SELECT statement to execute.
      call: snowflake.execute-statement
      with:
        statement: '{{sql_statement}}'
        warehouse: PORTFOLIO_WH
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://blackrock.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
Open in Framework → View in Fleet → snowflake-portfolio-query.yml

Triggers an Aladdin portfolio rebalance, retrieves the proposed trades, publishes results to a Kafka topic for downstream systems, and notifies the portfolio manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: Aladdin Rebalance and Notification Workflow
  description: Triggers an Aladdin portfolio rebalance, retrieves the proposed trades, publishes results to a Kafka topic for downstream systems, and notifies the portfolio manager via Microsoft Teams.
  tags:
  - portfolio-management
  - rebalancing
  - aladdin
  - apache-kafka
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: rebalance-workflow
    port: 8080
    tools:
    - name: trigger-rebalance
      description: Run an Aladdin rebalance for a portfolio and distribute results.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The Aladdin portfolio identifier.
      - name: model_id
        in: body
        type: string
        description: The target model portfolio ID.
      - name: pm_email
        in: body
        type: string
        description: Portfolio manager email for notification.
      steps:
      - name: run-rebalance
        type: call
        call: aladdin.trigger-rebalance
        with:
          portfolio_id: '{{portfolio_id}}'
          model_id: '{{model_id}}'
      - name: get-proposed-trades
        type: call
        call: aladdin.get-proposed-trades
        with:
          rebalance_id: '{{run-rebalance.rebalance_id}}'
      - name: publish-trades
        type: call
        call: kafka.produce-message
        with:
          topic: portfolio.rebalance.proposed-trades
          key: '{{portfolio_id}}'
          value: '{{get-proposed-trades.trades}}'
      - name: notify-pm
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{pm_email}}'
          text: Rebalance complete for portfolio {{portfolio_id}}. {{get-proposed-trades.trade_count}} proposed trades generated against model {{model_id}}.
  consumes:
  - type: http
    namespace: aladdin
    baseUri: https://aladdin.blackrock.com/api/v2
    authentication:
      type: bearer
      token: $secrets.aladdin_token
    resources:
    - name: rebalance
      path: /portfolios/{{portfolio_id}}/rebalance
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: trigger-rebalance
        method: POST
    - name: proposed-trades
      path: /rebalances/{{rebalance_id}}/trades
      inputParameters:
      - name: rebalance_id
        in: path
      operations:
      - name: get-proposed-trades
        method: GET
  - type: http
    namespace: kafka
    baseUri: https://kafka-rest.blackrock.com/v3
    authentication:
      type: bearer
      token: $secrets.kafka_rest_token
    resources:
    - name: records
      path: /clusters/main/topics/{{topic}}/records
      inputParameters:
      - name: topic
        in: path
      operations:
      - name: produce-message
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → aladdin-rebalance-and-notification-workflow.yml

When a Prometheus alert fires for an Aladdin microservice, queries Grafana for dashboard context, creates a PagerDuty incident, and logs the event in ServiceNow.

naftiko: '0.5'
info:
  label: Prometheus Alert to PagerDuty Escalation
  description: When a Prometheus alert fires for an Aladdin microservice, queries Grafana for dashboard context, creates a PagerDuty incident, and logs the event in ServiceNow.
  tags:
  - monitoring
  - incident-response
  - prometheus
  - grafana
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: alert-escalation
    port: 8080
    tools:
    - name: escalate-prometheus-alert
      description: Escalate a Prometheus alert through Grafana context, PagerDuty, and ServiceNow.
      inputParameters:
      - name: alert_name
        in: body
        type: string
        description: Prometheus alert name.
      - name: service
        in: body
        type: string
        description: Affected service name.
      - name: severity
        in: body
        type: string
        description: Alert severity (critical, warning).
      steps:
      - name: get-dashboard
        type: call
        call: grafana.get-dashboard
        with:
          uid: '{{service}}-overview'
      - name: create-pagerduty-incident
        type: call
        call: pagerduty.create-incident
        with:
          service_id: '{{service}}'
          title: '{{alert_name}} - {{severity}}'
          body: 'Prometheus alert {{alert_name}} fired for {{service}}. Dashboard: {{get-dashboard.url}}'
      - name: log-to-servicenow
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Prometheus: {{alert_name}} on {{service}}'
          category: infrastructure
          assigned_group: SRE_Team
          description: 'Alert: {{alert_name}}. Severity: {{severity}}. PagerDuty: {{create-pagerduty-incident.incident_id}}.'
  consumes:
  - type: http
    namespace: grafana
    baseUri: https://grafana.blackrock.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_token
    resources:
    - name: dashboards
      path: /dashboards/uid/{{uid}}
      inputParameters:
      - name: uid
        in: path
      operations:
      - name: get-dashboard
        method: GET
  - 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: servicenow
    baseUri: https://blackrock.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → prometheus-alert-to-pagerduty-escalation.yml

Pulls a real-time market data snapshot from Bloomberg Enterprise Data for a given security identifier, returning price, yield, and volume.

naftiko: '0.5'
info:
  label: Bloomberg Market Data Snapshot
  description: Pulls a real-time market data snapshot from Bloomberg Enterprise Data for a given security identifier, returning price, yield, and volume.
  tags:
  - market-data
  - bloomberg-enterprise-data
capability:
  exposes:
  - type: mcp
    namespace: market-data
    port: 8080
    tools:
    - name: get-market-snapshot
      description: Fetch the latest price, bid, ask, yield, and volume for a given Bloomberg security identifier.
      inputParameters:
      - name: security_id
        in: body
        type: string
        description: The Bloomberg FIGI or ticker symbol.
      call: bloomberg.get-snapshot
      with:
        security_id: '{{security_id}}'
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://bsapi.bloomberg.com/eap/catalogs/bbg/datasets
    authentication:
      type: bearer
      token: $secrets.bloomberg_eap_token
    resources:
    - name: snapshots
      path: /snapshots/{{security_id}}
      inputParameters:
      - name: security_id
        in: path
      operations:
      - name: get-snapshot
        method: GET
Open in Framework → View in Fleet → bloomberg-market-data-snapshot.yml

Searches BlackRock's Confluence knowledge base for investment research documentation and internal policy pages.

naftiko: '0.5'
info:
  label: Confluence Knowledge Base Search
  description: Searches BlackRock's Confluence knowledge base for investment research documentation and internal policy pages.
  tags:
  - knowledge-management
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: knowledge-search
    port: 8080
    tools:
    - name: search-confluence
      description: Search Confluence for pages matching a query string.
      inputParameters:
      - name: search_query
        in: body
        type: string
        description: The CQL search query.
      call: confluence.search
      with:
        cql: '{{search_query}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://blackrock.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
Open in Framework → View in Fleet → confluence-knowledge-base-search.yml

Pulls ESG ratings from MSCI, enriches portfolio holdings in Aladdin with ESG scores, stores results in Snowflake, and refreshes the ESG Tableau dashboard.

naftiko: '0.5'
info:
  label: ESG Data Integration Pipeline
  description: Pulls ESG ratings from MSCI, enriches portfolio holdings in Aladdin with ESG scores, stores results in Snowflake, and refreshes the ESG Tableau dashboard.
  tags:
  - esg
  - msci
  - aladdin
  - snowflake
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: esg-integration
    port: 8080
    tools:
    - name: integrate-esg-data
      description: Pull ESG ratings, enrich portfolio holdings, store in Snowflake, and refresh dashboards.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The Aladdin portfolio identifier.
      steps:
      - name: get-holdings
        type: call
        call: aladdin.get-holdings
        with:
          portfolio_id: '{{portfolio_id}}'
      - name: get-esg-ratings
        type: call
        call: msci.get-esg-ratings
        with:
          isins: '{{get-holdings.isin_list}}'
      - name: store-scores
        type: call
        call: snowflake.execute-statement
        with:
          statement: CALL ESG.UPDATE_PORTFOLIO_SCORES('{{portfolio_id}}')
      - name: refresh-dashboard
        type: call
        call: tableau.refresh-workbook
        with:
          workbook_id: esg-dashboard
  consumes:
  - type: http
    namespace: aladdin
    baseUri: https://aladdin.blackrock.com/api/v2
    authentication:
      type: bearer
      token: $secrets.aladdin_token
    resources:
    - name: holdings
      path: /portfolios/{{portfolio_id}}/holdings
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: get-holdings
        method: GET
  - type: http
    namespace: msci
    baseUri: https://api.msci.com/esg/v2
    authentication:
      type: bearer
      token: $secrets.msci_token
    resources:
    - name: ratings
      path: /ratings
      inputParameters:
      - name: isins
        in: query
      operations:
      - name: get-esg-ratings
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://blackrock.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://tableau.blackrock.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/default/workbooks/{{workbook_id}}/refresh
      inputParameters:
      - name: workbook_id
        in: path
      operations:
      - name: refresh-workbook
        method: POST
Open in Framework → View in Fleet → esg-data-integration-pipeline.yml

Retrieves fund performance data and ratings from Morningstar for competitive analysis and client reporting.

naftiko: '0.5'
info:
  label: Morningstar Fund Data Lookup
  description: Retrieves fund performance data and ratings from Morningstar for competitive analysis and client reporting.
  tags:
  - fund-data
  - morningstar
capability:
  exposes:
  - type: mcp
    namespace: morningstar
    port: 8080
    tools:
    - name: get-fund-data
      description: Look up fund performance data from Morningstar.
      inputParameters:
      - name: fund_id
        in: body
        type: string
        description: The Morningstar fund identifier.
      call: morningstar.get-fund
      with:
        fund_id: '{{fund_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.fund.name
      - name: star_rating
        type: integer
        mapping: $.fund.starRating
      - name: ytd_return
        type: number
        mapping: $.fund.ytdReturn
  consumes:
  - type: http
    namespace: morningstar
    baseUri: https://api.morningstar.com/v2
    authentication:
      type: apiKey
      name: x-api-key
      in: header
      value: $secrets.morningstar_api_key
    resources:
    - name: funds
      path: /funds/{{fund_id}}
      inputParameters:
      - name: fund_id
        in: path
      operations:
      - name: get-fund
        method: GET
Open in Framework → View in Fleet → morningstar-fund-data-lookup.yml

Triggers a PagerDuty incident for critical trading platform and infrastructure alerts.

naftiko: '0.5'
info:
  label: PagerDuty Incident Trigger
  description: Triggers a PagerDuty incident for critical trading platform and infrastructure alerts.
  tags:
  - incident-management
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: pagerduty
    port: 8080
    tools:
    - name: trigger-incident
      description: Create a new PagerDuty incident.
      inputParameters:
      - name: service_id
        in: body
        type: string
        description: The PagerDuty service ID.
      - name: title
        in: body
        type: string
        description: Incident title.
      - name: urgency
        in: body
        type: string
        description: 'Incident urgency: 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: incident_url
        type: string
        mapping: $.incident.html_url
  consumes:
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → pagerduty-incident-trigger.yml

Retrieves active Datadog alerts filtered by tag for BlackRock infrastructure monitoring.

naftiko: '0.5'
info:
  label: Datadog Infrastructure Alert Check
  description: Retrieves active Datadog alerts filtered by tag for BlackRock infrastructure monitoring.
  tags:
  - monitoring
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: infra-monitoring
    port: 8080
    tools:
    - name: get-active-alerts
      description: Fetch currently triggered Datadog monitors filtered by service tag.
      inputParameters:
      - name: service_tag
        in: body
        type: string
        description: The service tag to filter monitors, e.g. service:aladdin.
      call: datadog.get-monitors
      with:
        tags: '{{service_tag}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    inputParameters:
    - name: DD-APPLICATION-KEY
      in: header
      value: $secrets.datadog_app_key
    resources:
    - name: monitors
      path: /monitor?tags={{tags}}
      inputParameters:
      - name: tags
        in: query
      operations:
      - name: get-monitors
        method: GET
Open in Framework → View in Fleet → datadog-infrastructure-alert-check.yml

Retrieves market prices from Bloomberg, calculates NAV in SimCorp, validates against Aladdin, and distributes to fund accountants via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Daily NAV Calculation Pipeline
  description: Retrieves market prices from Bloomberg, calculates NAV in SimCorp, validates against Aladdin, and distributes to fund accountants via Microsoft Outlook.
  tags:
  - nav-calculation
  - fund-accounting
  - bloomberg
  - simcorp-dimension
  - aladdin
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: daily-nav
    port: 8080
    tools:
    - name: calculate-nav
      description: Calculate daily NAV, validate, and distribute.
      inputParameters:
      - name: fund_id
        in: body
        type: string
        description: The fund identifier.
      - name: accountant_email
        in: body
        type: string
        description: Fund accountant email.
      steps:
      - name: get-prices
        type: call
        call: bloomberg.get-market-data
        with:
          fund_id: '{{fund_id}}'
      - name: calculate-nav
        type: call
        call: simcorp.calculate-nav
        with:
          fund_id: '{{fund_id}}'
          prices: '{{get-prices.prices}}'
      - name: validate-nav
        type: call
        call: aladdin.validate-nav
        with:
          fund_id: '{{fund_id}}'
          calculated_nav: '{{calculate-nav.nav_per_share}}'
      - name: distribute-nav
        type: call
        call: outlook.send-mail
        with:
          to: '{{accountant_email}}'
          subject: 'Daily NAV: {{fund_id}} — ${{calculate-nav.nav_per_share}}'
          body: 'NAV: ${{calculate-nav.nav_per_share}}. AUM: ${{calculate-nav.total_aum}}M. Validation: {{validate-nav.status}}. Variance: {{validate-nav.variance_bps}}bps.'
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://bsapi.bloomberg.com/eap/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: market-data
      path: /marketdata/snapshots
      operations:
      - name: get-market-data
        method: GET
  - type: http
    namespace: simcorp
    baseUri: https://simcorp.blackrock.com/api/v2
    authentication:
      type: bearer
      token: $secrets.simcorp_token
    resources:
    - name: nav
      path: /funds/{{fund_id}}/nav
      inputParameters:
      - name: fund_id
        in: path
      operations:
      - name: calculate-nav
        method: POST
  - type: http
    namespace: aladdin
    baseUri: https://aladdin.blackrock.com/api/v2
    authentication:
      type: bearer
      token: $secrets.aladdin_token
    resources:
    - name: nav-validation
      path: /funds/{{fund_id}}/nav/validate
      inputParameters:
      - name: fund_id
        in: path
      operations:
      - name: validate-nav
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0/me
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → daily-nav-calculation-pipeline.yml

Deploys a trained model from Azure Databricks to Azure Machine Learning, creates a Grafana monitoring dashboard, and notifies the data science team via Slack.

naftiko: '0.5'
info:
  label: ML Model Deployment and Monitoring
  description: Deploys a trained model from Azure Databricks to Azure Machine Learning, creates a Grafana monitoring dashboard, and notifies the data science team via Slack.
  tags:
  - machine-learning
  - azure-databricks
  - azure-machine-learning
  - grafana
  - slack
capability:
  exposes:
  - type: mcp
    namespace: ml-deploy
    port: 8080
    tools:
    - name: deploy-model
      description: Deploy a model to production with monitoring and notifications.
      inputParameters:
      - name: model_name
        in: body
        type: string
        description: Name of the registered model.
      - name: model_version
        in: body
        type: string
        description: Model version to deploy.
      steps:
      - name: get-model
        type: call
        call: databricks.get-model-version
        with:
          name: '{{model_name}}'
          version: '{{model_version}}'
      - name: deploy-endpoint
        type: call
        call: azure-ml.create-deployment
        with:
          model_uri: '{{get-model.source}}'
          endpoint_name: '{{model_name}}-prod'
      - name: create-dashboard
        type: call
        call: grafana.create-dashboard
        with:
          title: ML Model — {{model_name}} v{{model_version}}
          endpoint: '{{deploy-endpoint.scoring_uri}}'
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: '#data-science'
          text: 'Model {{model_name}} v{{model_version}} deployed. Endpoint: {{deploy-endpoint.scoring_uri}}. Dashboard: {{create-dashboard.url}}.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://adb-blackrock.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: models
      path: /mlflow/model-versions/get
      inputParameters:
      - name: name
        in: query
      - name: version
        in: query
      operations:
      - name: get-model-version
        method: GET
  - type: http
    namespace: azure-ml
    baseUri: https://ml.azure.com/api/v1
    authentication:
      type: bearer
      token: $secrets.azure_ml_token
    resources:
    - name: deployments
      path: /deployments
      operations:
      - name: create-deployment
        method: POST
  - type: http
    namespace: grafana
    baseUri: https://grafana.blackrock.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_token
    resources:
    - name: dashboards
      path: /dashboards/db
      operations:
      - name: create-dashboard
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → ml-model-deployment-and-monitoring.yml

Calculates rebalancing trades in Aladdin, validates compliance, submits orders via Bloomberg EMSX, and notifies the portfolio manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: Portfolio Rebalancing Execution Pipeline
  description: Calculates rebalancing trades in Aladdin, validates compliance, submits orders via Bloomberg EMSX, and notifies the portfolio manager via Microsoft Teams.
  tags:
  - portfolio-management
  - rebalancing
  - aladdin
  - bloomberg-emsx
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: portfolio-rebalancing
    port: 8080
    tools:
    - name: execute-rebalance
      description: Calculate, validate, execute, and notify for portfolio rebalancing.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The Aladdin portfolio identifier.
      - name: pm_channel
        in: body
        type: string
        description: Microsoft Teams PM channel.
      steps:
      - name: calculate-trades
        type: call
        call: aladdin.calculate-rebalance
        with:
          portfolio_id: '{{portfolio_id}}'
      - name: check-compliance
        type: call
        call: aladdin.check-compliance
        with:
          portfolio_id: '{{portfolio_id}}'
          trades: '{{calculate-trades.proposed_trades}}'
      - name: submit-orders
        type: call
        call: emsx.create-order-batch
        with:
          orders: '{{calculate-trades.proposed_trades}}'
      - name: notify-pm
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{pm_channel}}'
          text: 'Rebalance executed for {{portfolio_id}}: {{calculate-trades.trade_count}} trades. Compliance: {{check-compliance.status}}. EMSX batch: {{submit-orders.batch_id}}.'
  consumes:
  - type: http
    namespace: aladdin
    baseUri: https://aladdin.blackrock.com/api/v2
    authentication:
      type: bearer
      token: $secrets.aladdin_token
    resources:
    - name: rebalance
      path: /portfolios/{{portfolio_id}}/rebalance
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: calculate-rebalance
        method: POST
    - name: compliance
      path: /compliance/check
      operations:
      - name: check-compliance
        method: POST
  - type: http
    namespace: emsx
    baseUri: https://bsapi.bloomberg.com/emsapi/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_emsx_token
    resources:
    - name: orders
      path: /orders/batch
      operations:
      - name: create-order-batch
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → portfolio-rebalancing-execution-pipeline.yml

Fetches ESG ratings from FactSet for a portfolio's holdings from Aladdin, aggregates scores, and stores the enriched dataset in Snowflake for reporting.

naftiko: '0.5'
info:
  label: ESG Score Enrichment Pipeline
  description: Fetches ESG ratings from FactSet for a portfolio's holdings from Aladdin, aggregates scores, and stores the enriched dataset in Snowflake for reporting.
  tags:
  - esg
  - portfolio-management
  - factset
  - aladdin
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: esg-enrichment
    port: 8080
    tools:
    - name: enrich-portfolio-esg
      description: Pull holdings from Aladdin, fetch ESG scores from FactSet, and store aggregated results in Snowflake.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The Aladdin portfolio identifier.
      steps:
      - name: get-holdings
        type: call
        call: aladdin.get-holdings
        with:
          portfolio_id: '{{portfolio_id}}'
      - name: fetch-esg-scores
        type: call
        call: factset.get-esg-scores
        with:
          ids: '{{get-holdings.tickers}}'
      - name: store-results
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO esg.portfolio_scores SELECT * FROM TABLE(RESULT_SCAN('{{fetch-esg-scores.request_id}}'))
  consumes:
  - type: http
    namespace: aladdin
    baseUri: https://aladdin.blackrock.com/api/v2/portfolios
    authentication:
      type: bearer
      token: $secrets.aladdin_token
    resources:
    - name: holdings
      path: /{{portfolio_id}}/holdings
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: get-holdings
        method: GET
  - type: http
    namespace: factset
    baseUri: https://api.factset.com/content/factset-esg/v1
    authentication:
      type: basic
      username: $secrets.factset_user
      password: $secrets.factset_password
    resources:
    - name: esg-scores
      path: /esg-scores
      operations:
      - name: get-esg-scores
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://blackrock.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → esg-score-enrichment-pipeline.yml

Routes investment orders through Bloomberg AIM, validates against Aladdin compliance, and logs execution details to Snowflake for audit.

naftiko: '0.5'
info:
  label: Bloomberg AIM Order Routing
  description: Routes investment orders through Bloomberg AIM, validates against Aladdin compliance, and logs execution details to Snowflake for audit.
  tags:
  - trading
  - order-management
  - bloomberg-aim
  - aladdin
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: aim-routing
    port: 8080
    tools:
    - name: route-aim-order
      description: Validate and route an order through Bloomberg AIM with compliance and audit logging.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: Aladdin portfolio identifier.
      - name: ticker
        in: body
        type: string
        description: Security ticker.
      - name: side
        in: body
        type: string
        description: BUY or SELL.
      - name: quantity
        in: body
        type: integer
        description: Order quantity.
      - name: broker
        in: body
        type: string
        description: Target broker code.
      steps:
      - name: compliance-check
        type: call
        call: aladdin.check-compliance
        with:
          portfolio_id: '{{portfolio_id}}'
          ticker: '{{ticker}}'
          side: '{{side}}'
          quantity: '{{quantity}}'
      - name: submit-aim-order
        type: call
        call: aim.create-order
        with:
          ticker: '{{ticker}}'
          side: '{{side}}'
          quantity: '{{quantity}}'
          broker: '{{broker}}'
      - name: log-execution
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO trading.order_audit VALUES ('{{submit-aim-order.order_id}}', '{{portfolio_id}}', '{{ticker}}', '{{side}}', {{quantity}}, '{{broker}}', CURRENT_TIMESTAMP())
  consumes:
  - type: http
    namespace: aladdin
    baseUri: https://aladdin.blackrock.com/api/v2
    authentication:
      type: bearer
      token: $secrets.aladdin_token
    resources:
    - name: compliance
      path: /compliance/check
      operations:
      - name: check-compliance
        method: POST
  - type: http
    namespace: aim
    baseUri: https://bsapi.bloomberg.com/aim/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_aim_token
    resources:
    - name: orders
      path: /orders
      operations:
      - name: create-order
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://blackrock.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → bloomberg-aim-order-routing.yml

Fetches holdings from Aladdin, retrieves benchmark data from FactSet, generates a Tableau dashboard snapshot, and emails the review package to the client via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Client Portfolio Review Generator
  description: Fetches holdings from Aladdin, retrieves benchmark data from FactSet, generates a Tableau dashboard snapshot, and emails the review package to the client via Microsoft Outlook.
  tags:
  - client-reporting
  - aladdin
  - factset
  - tableau
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: portfolio-review
    port: 8080
    tools:
    - name: generate-review
      description: Generate and distribute a client portfolio review package.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The Aladdin portfolio identifier.
      - name: client_email
        in: body
        type: string
        description: Client email address for distribution.
      - name: benchmark_id
        in: body
        type: string
        description: FactSet benchmark identifier.
      steps:
      - name: get-holdings
        type: call
        call: aladdin.get-holdings
        with:
          portfolio_id: '{{portfolio_id}}'
      - name: get-benchmark
        type: call
        call: factset.get-benchmark-returns
        with:
          benchmark_id: '{{benchmark_id}}'
      - name: refresh-dashboard
        type: call
        call: tableau.refresh-workbook
        with:
          workbook_id: portfolio-review-{{portfolio_id}}
      - name: send-review
        type: call
        call: outlook.send-email
        with:
          to: '{{client_email}}'
          subject: Portfolio Review — {{portfolio_id}}
          body: 'Your portfolio review is ready. Dashboard: {{refresh-dashboard.url}}. Total holdings: {{get-holdings.total_count}}.'
  consumes:
  - type: http
    namespace: aladdin
    baseUri: https://aladdin.blackrock.com/api/v2
    authentication:
      type: bearer
      token: $secrets.aladdin_token
    resources:
    - name: holdings
      path: /portfolios/{{portfolio_id}}/holdings
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: get-holdings
        method: GET
  - type: http
    namespace: factset
    baseUri: https://api.factset.com/analytics/v3
    authentication:
      type: basic
      username: $secrets.factset_user
      password: $secrets.factset_api_key
    resources:
    - name: benchmarks
      path: /benchmarks/{{benchmark_id}}/returns
      inputParameters:
      - name: benchmark_id
        in: path
      operations:
      - name: get-benchmark-returns
        method: GET
  - type: http
    namespace: tableau
    baseUri: https://tableau.blackrock.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/default/workbooks/{{workbook_id}}/refresh
      inputParameters:
      - name: workbook_id
        in: path
      operations:
      - name: refresh-workbook
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → client-portfolio-review-generator.yml

Looks up a Jira issue by key and returns its current status, assignee, priority, and last updated timestamp.

naftiko: '0.5'
info:
  label: Jira Issue Status Check
  description: Looks up a Jira issue by key and returns its current status, assignee, priority, and last updated timestamp.
  tags:
  - project-management
  - jira
capability:
  exposes:
  - type: mcp
    namespace: project-tracking
    port: 8080
    tools:
    - name: get-jira-issue
      description: Retrieve a Jira issue by key to check its status and assignment.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: The Jira issue key, e.g. RISK-1234.
      call: jira.get-issue
      with:
        issue_key: '{{issue_key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://blackrock.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-issue-status-check.yml

Fetches Morningstar category-level performance and ranking data for a given fund, returning percentile rank and peer group statistics.

naftiko: '0.5'
info:
  label: Morningstar Category Performance
  description: Fetches Morningstar category-level performance and ranking data for a given fund, returning percentile rank and peer group statistics.
  tags:
  - fund-analytics
  - morningstar
capability:
  exposes:
  - type: mcp
    namespace: morningstar-perf
    port: 8080
    tools:
    - name: get-category-performance
      description: Retrieve Morningstar category performance and percentile rank for a fund by its SecId.
      inputParameters:
      - name: sec_id
        in: body
        type: string
        description: The Morningstar security identifier.
      call: morningstar.get-performance
      with:
        sec_id: '{{sec_id}}'
  consumes:
  - type: http
    namespace: morningstar
    baseUri: https://api.morningstar.com/v2
    authentication:
      type: apiKey
      name: X-API-KEY
      in: header
      value: $secrets.morningstar_api_key
    resources:
    - name: performance
      path: /securities/{{sec_id}}/performance
      inputParameters:
      - name: sec_id
        in: path
      operations:
      - name: get-performance
        method: GET
Open in Framework → View in Fleet → morningstar-category-performance.yml

Sends an SMS notification via Twilio for critical portfolio alerts and trade confirmations.

naftiko: '0.5'
info:
  label: Twilio SMS Notification
  description: Sends an SMS notification via Twilio for critical portfolio alerts and trade confirmations.
  tags:
  - notifications
  - twilio
capability:
  exposes:
  - type: mcp
    namespace: twilio-sms
    port: 8080
    tools:
    - name: send-sms
      description: Send an SMS message to a phone number.
      inputParameters:
      - name: to
        in: body
        type: string
        description: Recipient phone number in E.164 format.
      - name: message
        in: body
        type: string
        description: The SMS message body.
      call: twilio.send-message
      with:
        to: '{{to}}'
        from: $secrets.twilio_from_number
        body: '{{message}}'
      outputParameters:
      - name: message_sid
        type: string
        mapping: $.sid
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: twilio
    baseUri: https://api.twilio.com/2010-04-01/Accounts/$secrets.twilio_account_sid
    authentication:
      type: basic
      username: $secrets.twilio_account_sid
      password: $secrets.twilio_auth_token
    resources:
    - name: messages
      path: /Messages.json
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → twilio-sms-notification.yml

Scales an Azure Kubernetes Service deployment for Aladdin microservices, verifies pod readiness, and updates Grafana annotations for tracking.

naftiko: '0.5'
info:
  label: Kubernetes Deployment Scaler
  description: Scales an Azure Kubernetes Service deployment for Aladdin microservices, verifies pod readiness, and updates Grafana annotations for tracking.
  tags:
  - infrastructure
  - azure-kubernetes-service
  - grafana
capability:
  exposes:
  - type: mcp
    namespace: k8s-ops
    port: 8080
    tools:
    - name: scale-and-annotate
      description: Scale an AKS deployment and record the event in Grafana.
      inputParameters:
      - name: namespace
        in: body
        type: string
        description: Kubernetes namespace.
      - name: deployment
        in: body
        type: string
        description: Deployment name.
      - name: replicas
        in: body
        type: integer
        description: Desired replica count.
      steps:
      - name: scale-deployment
        type: call
        call: aks.scale-deployment
        with:
          namespace: '{{namespace}}'
          deployment: '{{deployment}}'
          replicas: '{{replicas}}'
      - name: annotate-grafana
        type: call
        call: grafana.create-annotation
        with:
          dashboard_id: aladdin-infra
          text: Scaled {{deployment}} in {{namespace}} to {{replicas}} replicas
  consumes:
  - type: http
    namespace: aks
    baseUri: https://blackrock-aks.hcp.eastus.azmk8s.io/apis/apps/v1
    authentication:
      type: bearer
      token: $secrets.aks_token
    resources:
    - name: deployments
      path: /namespaces/{{namespace}}/deployments/{{deployment}}/scale
      inputParameters:
      - name: namespace
        in: path
      - name: deployment
        in: path
      operations:
      - name: scale-deployment
        method: PATCH
  - type: http
    namespace: grafana
    baseUri: https://grafana.blackrock.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_token
    resources:
    - name: annotations
      path: /annotations
      operations:
      - name: create-annotation
        method: POST
Open in Framework → View in Fleet → kubernetes-deployment-scaler.yml

Extracts departmental budgets from Oracle Hyperion, reconciles against Workday actuals, stores variance analysis in Snowflake, and emails the CFO a summary via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Oracle Hyperion Budget Consolidation
  description: Extracts departmental budgets from Oracle Hyperion, reconciles against Workday actuals, stores variance analysis in Snowflake, and emails the CFO a summary via Microsoft Outlook.
  tags:
  - finance
  - budgeting
  - oracle-hyperion
  - workday
  - snowflake
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: budget-consolidation
    port: 8080
    tools:
    - name: consolidate-budgets
      description: Consolidate Hyperion budgets against Workday actuals and distribute variance report.
      inputParameters:
      - name: fiscal_period
        in: body
        type: string
        description: Fiscal period identifier (e.g. FY2026-Q1).
      - name: cfo_email
        in: body
        type: string
        description: CFO email for report delivery.
      steps:
      - name: get-budgets
        type: call
        call: hyperion.get-budget-data
        with:
          period: '{{fiscal_period}}'
      - name: get-actuals
        type: call
        call: workday.get-actuals
        with:
          period: '{{fiscal_period}}'
      - name: store-variance
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO finance.budget_variance SELECT '{{fiscal_period}}', budget.dept, budget.amount, actual.amount, (budget.amount - actual.amount) AS variance FROM ({{get-budgets.data}}) budget JOIN ({{get-actuals.data}}) actual ON budget.dept = actual.dept
      - name: email-cfo
        type: call
        call: outlook.send-mail
        with:
          to: '{{cfo_email}}'
          subject: Budget Variance Report - {{fiscal_period}}
          body: 'Budget consolidation complete for {{fiscal_period}}. Total budget: {{get-budgets.total}}. Total actuals: {{get-actuals.total}}. Variance analysis stored in Snowflake.'
  consumes:
  - type: http
    namespace: hyperion
    baseUri: https://hyperion.blackrock.com/HyperionPlanning/rest/v3
    authentication:
      type: basic
      username: $secrets.hyperion_user
      password: $secrets.hyperion_password
    resources:
    - name: budget-data
      path: /applications/BudgetApp/plantypes/Plan1/exportDataSlice
      operations:
      - name: get-budget-data
        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: actuals
      path: /financial-management/actuals?period={{period}}
      inputParameters:
      - name: period
        in: query
      operations:
      - name: get-actuals
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://blackrock.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0/me
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → oracle-hyperion-budget-consolidation.yml

Executes an Azure Databricks notebook for quantitative research, stores output in Amazon S3, and updates a Confluence research wiki page with results.

naftiko: '0.5'
info:
  label: Azure Databricks Notebook Execution
  description: Executes an Azure Databricks notebook for quantitative research, stores output in Amazon S3, and updates a Confluence research wiki page with results.
  tags:
  - research
  - quantitative
  - azure-databricks
  - amazon-s3
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: quant-research
    port: 8080
    tools:
    - name: run-research-notebook
      description: Execute a Databricks notebook and publish results to S3 and Confluence.
      inputParameters:
      - name: notebook_path
        in: body
        type: string
        description: Path to the Databricks notebook.
      - name: s3_bucket
        in: body
        type: string
        description: S3 bucket for output storage.
      - name: confluence_page_id
        in: body
        type: string
        description: Confluence page ID to update with results.
      steps:
      - name: run-notebook
        type: call
        call: databricks.run-notebook
        with:
          notebook_path: '{{notebook_path}}'
      - name: upload-to-s3
        type: call
        call: s3.put-object
        with:
          bucket: '{{s3_bucket}}'
          key: research/{{run-notebook.run_id}}/output.json
          body: '{{run-notebook.output}}'
      - name: update-wiki
        type: call
        call: confluence.update-page
        with:
          page_id: '{{confluence_page_id}}'
          body: 'Research run {{run-notebook.run_id}} completed. Output: s3://{{s3_bucket}}/research/{{run-notebook.run_id}}/output.json'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://blackrock.cloud.databricks.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/runs/submit
      operations:
      - name: run-notebook
        method: POST
  - type: http
    namespace: s3
    baseUri: https://s3.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_s3_token
    resources:
    - name: objects
      path: /{{bucket}}/{{key}}
      inputParameters:
      - name: bucket
        in: path
      - name: key
        in: path
      operations:
      - name: put-object
        method: PUT
  - type: http
    namespace: confluence
    baseUri: https://blackrock.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content/{{page_id}}
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: update-page
        method: PUT
Open in Framework → View in Fleet → azure-databricks-notebook-execution.yml

Retrieves research notes from Confluence, enriches with market data from Bloomberg, generates formatted reports via Power BI, and distributes to PMs via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Investment Research Distribution Pipeline
  description: Retrieves research notes from Confluence, enriches with market data from Bloomberg, generates formatted reports via Power BI, and distributes to PMs via Microsoft Outlook.
  tags:
  - research
  - distribution
  - confluence
  - bloomberg
  - power-bi
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: research-distribution
    port: 8080
    tools:
    - name: distribute-research
      description: Retrieve research, enrich with data, format report, and distribute.
      inputParameters:
      - name: page_id
        in: body
        type: string
        description: Confluence research page ID.
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset ID.
      - name: group_id
        in: body
        type: string
        description: Power BI workspace ID.
      - name: pm_list
        in: body
        type: string
        description: PM distribution list email.
      steps:
      - name: get-research
        type: call
        call: confluence.get-page
        with:
          page_id: '{{page_id}}'
      - name: get-market-data
        type: call
        call: bloomberg.get-market-data
        with:
          tickers: '{{get-research.tickers}}'
      - name: refresh-report
        type: call
        call: powerbi.refresh-dataset
        with:
          group_id: '{{group_id}}'
          dataset_id: '{{dataset_id}}'
      - name: distribute
        type: call
        call: outlook.send-mail
        with:
          to: '{{pm_list}}'
          subject: 'Research: {{get-research.title}}'
          body: 'New research published: {{get-research.title}}. Key thesis: {{get-research.summary}}. Dashboard refreshed.'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://blackrock.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
  - type: http
    namespace: bloomberg
    baseUri: https://bsapi.bloomberg.com/eap/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: market-data
      path: /marketdata/snapshots
      operations:
      - name: get-market-data
        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: outlook
    baseUri: https://graph.microsoft.com/v1.0/me
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → investment-research-distribution-pipeline.yml

Pulls portfolio holdings from Aladdin, fetches benchmark data from MSCI, generates an attribution report in Power BI, and distributes it via Salesforce to relationship managers.

naftiko: '0.5'
info:
  label: Quarterly Attribution Report Pipeline
  description: Pulls portfolio holdings from Aladdin, fetches benchmark data from MSCI, generates an attribution report in Power BI, and distributes it via Salesforce to relationship managers.
  tags:
  - reporting
  - aladdin
  - msci
  - power-bi
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: attribution-report
    port: 8080
    tools:
    - name: generate-attribution-report
      description: Generate and distribute a quarterly performance attribution report for a portfolio.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The Aladdin portfolio identifier.
      - name: benchmark_id
        in: body
        type: string
        description: The MSCI benchmark index ID.
      - name: quarter
        in: body
        type: string
        description: Reporting quarter in YYYY-Q format.
      steps:
      - name: get-holdings
        type: call
        call: aladdin.get-holdings
        with:
          portfolio_id: '{{portfolio_id}}'
      - name: get-benchmark
        type: call
        call: msci.get-index-returns
        with:
          index_id: '{{benchmark_id}}'
          period: '{{quarter}}'
      - name: refresh-report
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: attribution-{{portfolio_id}}
      - name: notify-rms
        type: call
        call: salesforce.send-report-notification
        with:
          subject: Q{{quarter}} Attribution Report — Portfolio {{portfolio_id}}
          body: 'Attribution report refreshed. Active return: {{get-benchmark.active_return}}. View in Power BI.'
  consumes:
  - type: http
    namespace: aladdin
    baseUri: https://aladdin.blackrock.com/api/v2
    authentication:
      type: bearer
      token: $secrets.aladdin_token
    resources:
    - name: holdings
      path: /portfolios/{{portfolio_id}}/holdings
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: get-holdings
        method: GET
  - type: http
    namespace: msci
    baseUri: https://api.msci.com/index/v1
    authentication:
      type: bearer
      token: $secrets.msci_token
    resources:
    - name: returns
      path: /indexes/{{index_id}}/returns
      inputParameters:
      - name: index_id
        in: path
      - name: period
        in: query
      operations:
      - name: get-index-returns
        method: GET
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://blackrock.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: notifications
      path: /sobjects/Task
      operations:
      - name: send-report-notification
        method: POST
Open in Framework → View in Fleet → quarterly-attribution-report-pipeline.yml

Launches a Google Cloud Dataflow streaming job for real-time trade event processing and posts job status to a Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Google Cloud Dataflow Job Launcher
  description: Launches a Google Cloud Dataflow streaming job for real-time trade event processing and posts job status to a Microsoft Teams channel.
  tags:
  - data-engineering
  - streaming
  - google-cloud-dataflow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: dataflow-ops
    port: 8080
    tools:
    - name: launch-dataflow-job
      description: Launch a Dataflow streaming job and notify the team.
      inputParameters:
      - name: template_name
        in: body
        type: string
        description: Dataflow template name.
      - name: project_id
        in: body
        type: string
        description: GCP project ID.
      - name: channel_id
        in: body
        type: string
        description: Teams channel for notifications.
      steps:
      - name: launch-job
        type: call
        call: dataflow.launch-template
        with:
          project_id: '{{project_id}}'
          template_name: '{{template_name}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{channel_id}}'
          text: 'Dataflow job launched: {{template_name}} in project {{project_id}}. Job ID: {{launch-job.job_id}}. State: {{launch-job.currentState}}.'
  consumes:
  - type: http
    namespace: dataflow
    baseUri: https://dataflow.googleapis.com/v1b3/projects
    authentication:
      type: bearer
      token: $secrets.gcp_token
    resources:
    - name: templates
      path: /{{project_id}}/templates:launch
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: launch-template
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/General/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → google-cloud-dataflow-job-launcher.yml

Triggers a Terraform plan for an Aladdin infrastructure module, posts the plan output to a Confluence review page, and creates a Jira approval ticket.

naftiko: '0.5'
info:
  label: Terraform Infrastructure Plan Review
  description: Triggers a Terraform plan for an Aladdin infrastructure module, posts the plan output to a Confluence review page, and creates a Jira approval ticket.
  tags:
  - infrastructure
  - terraform
  - confluence
  - jira
capability:
  exposes:
  - type: mcp
    namespace: infra-review
    port: 8080
    tools:
    - name: plan-and-review
      description: Run a Terraform plan and create review artifacts in Confluence and Jira.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: Terraform Cloud workspace ID.
      - name: confluence_space
        in: body
        type: string
        description: Confluence space key for infrastructure reviews.
      steps:
      - name: create-run
        type: call
        call: terraform.create-run
        with:
          workspace_id: '{{workspace_id}}'
          is_destroy: false
          message: Automated plan review
      - name: create-review-page
        type: call
        call: confluence.create-page
        with:
          space_key: '{{confluence_space}}'
          title: Terraform Plan Review - {{create-run.id}}
          body: 'Plan output for workspace {{workspace_id}}: {{create-run.plan_summary}}'
      - name: create-approval
        type: call
        call: jira.create-issue
        with:
          project: INFRA
          summary: 'Approve Terraform plan: {{create-run.id}}'
          description: 'Review page: {{create-review-page.url}}. Resources to add: {{create-run.resource_additions}}, to change: {{create-run.resource_changes}}, to destroy: {{create-run.resource_destructions}}.'
          issue_type: Task
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: runs
      path: /runs
      operations:
      - name: create-run
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://blackrock.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: jira
    baseUri: https://blackrock.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → terraform-infrastructure-plan-review.yml

Retrieves current risk factor exposures from Snowflake, runs stress scenarios through Aladdin Risk, stores results in Azure Blob Storage, and notifies the risk team via Slack.

naftiko: '0.5'
info:
  label: Risk Factor Stress Test Pipeline
  description: Retrieves current risk factor exposures from Snowflake, runs stress scenarios through Aladdin Risk, stores results in Azure Blob Storage, and notifies the risk team via Slack.
  tags:
  - risk-management
  - snowflake
  - aladdin
  - azure-blob-storage
  - slack
capability:
  exposes:
  - type: mcp
    namespace: stress-test
    port: 8080
    tools:
    - name: run-stress-test
      description: Execute a stress test scenario and distribute results.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The portfolio identifier.
      - name: scenario_name
        in: body
        type: string
        description: Name of the stress scenario to run.
      steps:
      - name: get-exposures
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM RISK.FACTOR_EXPOSURES WHERE portfolio_id = '{{portfolio_id}}'
      - name: run-scenario
        type: call
        call: aladdin.run-stress-test
        with:
          portfolio_id: '{{portfolio_id}}'
          scenario: '{{scenario_name}}'
      - name: store-results
        type: call
        call: azure-blob.upload
        with:
          container: stress-test-results
          blob_name: '{{portfolio_id}}/{{scenario_name}}/latest.json'
          content: '{{run-scenario.results}}'
      - name: notify-risk
        type: call
        call: slack.post-message
        with:
          channel: '#risk-management'
          text: 'Stress test complete: {{scenario_name}} on {{portfolio_id}}. P&L impact: {{run-scenario.pnl_impact}}. Results: {{store-results.url}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://blackrock.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: aladdin
    baseUri: https://aladdin.blackrock.com/api/v2
    authentication:
      type: bearer
      token: $secrets.aladdin_token
    resources:
    - name: stress-tests
      path: /risk/stress-tests
      operations:
      - name: run-stress-test
        method: POST
  - type: http
    namespace: azure-blob
    baseUri: https://blackrockdata.blob.core.windows.net
    authentication:
      type: bearer
      token: $secrets.azure_storage_token
    resources:
    - name: blobs
      path: /{{container}}/{{blob_name}}
      inputParameters:
      - name: container
        in: path
      - name: blob_name
        in: path
      operations:
      - name: upload
        method: PUT
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → risk-factor-stress-test-pipeline.yml

Processes ETF creation/redemption baskets in Aladdin, updates NAV in SimCorp, settles with custodians via SWIFT, and notifies the ETF desk via Microsoft Teams.

naftiko: '0.5'
info:
  label: ETF Creation Redemption Pipeline
  description: Processes ETF creation/redemption baskets in Aladdin, updates NAV in SimCorp, settles with custodians via SWIFT, and notifies the ETF desk via Microsoft Teams.
  tags:
  - etf
  - creation-redemption
  - aladdin
  - simcorp-dimension
  - swift
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: etf-cr
    port: 8080
    tools:
    - name: process-cr-basket
      description: Process ETF creation/redemption basket across Aladdin, SimCorp, SWIFT, and Teams.
      inputParameters:
      - name: fund_id
        in: body
        type: string
        description: The ETF fund identifier.
      - name: cr_type
        in: body
        type: string
        description: CREATE or REDEEM.
      - name: units
        in: body
        type: integer
        description: Number of creation/redemption units.
      - name: etf_channel
        in: body
        type: string
        description: Microsoft Teams ETF desk channel.
      steps:
      - name: generate-basket
        type: call
        call: aladdin.generate-cr-basket
        with:
          fund_id: '{{fund_id}}'
          type: '{{cr_type}}'
          units: '{{units}}'
      - name: update-nav
        type: call
        call: simcorp.update-fund-nav
        with:
          fund_id: '{{fund_id}}'
          units: '{{units}}'
          cr_type: '{{cr_type}}'
      - name: send-settlement
        type: call
        call: swift.send-message
        with:
          message_type: MT543
          fund_id: '{{fund_id}}'
          basket: '{{generate-basket.basket}}'
      - name: notify-desk
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{etf_channel}}'
          text: 'ETF {{cr_type}}: {{fund_id}}, {{units}} units. Basket value: ${{generate-basket.basket_value}}. SWIFT: {{send-settlement.reference}}. NAV updated.'
  consumes:
  - type: http
    namespace: aladdin
    baseUri: https://aladdin.blackrock.com/api/v2
    authentication:
      type: bearer
      token: $secrets.aladdin_token
    resources:
    - name: cr-baskets
      path: /etf/{{fund_id}}/cr-basket
      inputParameters:
      - name: fund_id
        in: path
      operations:
      - name: generate-cr-basket
        method: POST
  - type: http
    namespace: simcorp
    baseUri: https://simcorp.blackrock.com/api/v2
    authentication:
      type: bearer
      token: $secrets.simcorp_token
    resources:
    - name: funds
      path: /funds/{{fund_id}}/nav
      inputParameters:
      - name: fund_id
        in: path
      operations:
      - name: update-fund-nav
        method: PATCH
  - type: http
    namespace: swift
    baseUri: https://swift.blackrock.com/api/v1
    authentication:
      type: bearer
      token: $secrets.swift_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → etf-creation-redemption-pipeline.yml

Pulls fundamental data from FactSet, retrieves recent Bloomberg news, sends both to OpenAI for an investment memo draft, and uploads the result to SharePoint.

naftiko: '0.5'
info:
  label: OpenAI-Powered Investment Memo Drafter
  description: Pulls fundamental data from FactSet, retrieves recent Bloomberg news, sends both to OpenAI for an investment memo draft, and uploads the result to SharePoint.
  tags:
  - research
  - ai
  - factset
  - bloomberg-news
  - openai
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: ai-research
    port: 8080
    tools:
    - name: draft-investment-memo
      description: Generate an AI-drafted investment memo from market data and news.
      inputParameters:
      - name: ticker
        in: body
        type: string
        description: Equity ticker symbol.
      - name: analyst_name
        in: body
        type: string
        description: Name of the requesting analyst.
      steps:
      - name: get-fundamentals
        type: call
        call: factset.get-fundamentals
        with:
          ticker: '{{ticker}}'
      - name: get-news
        type: call
        call: bloomberg-news.get-articles
        with:
          query: '{{ticker}}'
          limit: 10
      - name: generate-memo
        type: call
        call: openai.create-completion
        with:
          model: gpt-4
          prompt: 'Draft an investment memo for {{ticker}}. Fundamentals: {{get-fundamentals.data}}. Recent news: {{get-news.articles}}. Analyst: {{analyst_name}}.'
      - name: upload-memo
        type: call
        call: sharepoint.upload-file
        with:
          site_id: investment-research
          file_path: Memos/{{ticker}}_memo.md
          content: '{{generate-memo.text}}'
  consumes:
  - type: http
    namespace: factset
    baseUri: https://api.factset.com/content/factset-fundamentals/v2
    authentication:
      type: basic
      username: $secrets.factset_user
      password: $secrets.factset_password
    resources:
    - name: fundamentals
      path: /fundamentals?ids={{ticker}}
      inputParameters:
      - name: ticker
        in: query
      operations:
      - name: get-fundamentals
        method: GET
  - type: http
    namespace: bloomberg-news
    baseUri: https://bsapi.bloomberg.com/eap/catalogs/bbg
    authentication:
      type: bearer
      token: $secrets.bloomberg_eap_token
    resources:
    - name: articles
      path: /news?query={{query}}&limit={{limit}}
      inputParameters:
      - name: query
        in: query
      - name: limit
        in: query
      operations:
      - name: get-articles
        method: GET
  - type: http
    namespace: openai
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_api_key
    resources:
    - name: completions
      path: /chat/completions
      operations:
      - name: create-completion
        method: POST
  - type: http
    namespace: sharepoint
    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: upload-file
        method: PUT
Open in Framework → View in Fleet → openai-powered-investment-memo-drafter.yml

Pulls portfolio performance from Aladdin, generates attribution reports in Snowflake, creates presentation decks via Power BI, and distributes to relationship managers via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Client Quarterly Review Orchestrator
  description: Pulls portfolio performance from Aladdin, generates attribution reports in Snowflake, creates presentation decks via Power BI, and distributes to relationship managers via Microsoft Outlook.
  tags:
  - client-reporting
  - quarterly-review
  - aladdin
  - snowflake
  - power-bi
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: client-review
    port: 8080
    tools:
    - name: prepare-quarterly-review
      description: Pull performance, generate attribution, create deck, and distribute.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The client identifier.
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset ID.
      - name: group_id
        in: body
        type: string
        description: Power BI workspace ID.
      - name: rm_email
        in: body
        type: string
        description: Relationship manager email.
      steps:
      - name: get-performance
        type: call
        call: aladdin.get-portfolio-performance
        with:
          client_id: '{{client_id}}'
      - name: generate-attribution
        type: call
        call: snowflake.execute-statement
        with:
          statement: CALL GENERATE_ATTRIBUTION('{{client_id}}')
          warehouse: ANALYTICS_WH
      - name: refresh-deck
        type: call
        call: powerbi.refresh-dataset
        with:
          group_id: '{{group_id}}'
          dataset_id: '{{dataset_id}}'
      - name: distribute-report
        type: call
        call: outlook.send-mail
        with:
          to: '{{rm_email}}'
          subject: 'Q Review: {{client_id}} — {{get-performance.return_pct}}% return'
          body: 'Portfolio return: {{get-performance.return_pct}}%. Benchmark: {{get-performance.benchmark_pct}}%. Alpha: {{generate-attribution.alpha_bps}}bps. Dashboard refreshed.'
  consumes:
  - type: http
    namespace: aladdin
    baseUri: https://aladdin.blackrock.com/api/v2
    authentication:
      type: bearer
      token: $secrets.aladdin_token
    resources:
    - name: performance
      path: /clients/{{client_id}}/performance
      inputParameters:
      - name: client_id
        in: path
      operations:
      - name: get-portfolio-performance
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://blackrock.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: 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: outlook
    baseUri: https://graph.microsoft.com/v1.0/me
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → client-quarterly-review-orchestrator.yml

Calculates FX hedge requirements in Aladdin, submits trades via Tradeweb, updates positions in SimCorp, and notifies the FX desk via Slack.

naftiko: '0.5'
info:
  label: FX Hedging Execution Pipeline
  description: Calculates FX hedge requirements in Aladdin, submits trades via Tradeweb, updates positions in SimCorp, and notifies the FX desk via Slack.
  tags:
  - fx-hedging
  - foreign-exchange
  - aladdin
  - tradeweb
  - simcorp-dimension
  - slack
capability:
  exposes:
  - type: mcp
    namespace: fx-hedging
    port: 8080
    tools:
    - name: execute-fx-hedge
      description: Calculate FX hedges, execute trades, update positions, and notify.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The Aladdin portfolio identifier.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for FX desk.
      steps:
      - name: calculate-hedges
        type: call
        call: aladdin.calculate-fx-hedges
        with:
          portfolio_id: '{{portfolio_id}}'
      - name: execute-trades
        type: call
        call: tradeweb.submit-rfq
        with:
          currency_pairs: '{{calculate-hedges.currency_pairs}}'
          notionals: '{{calculate-hedges.notionals}}'
      - name: update-positions
        type: call
        call: simcorp.update-fx-positions
        with:
          portfolio_id: '{{portfolio_id}}'
          trades: '{{execute-trades.executed_trades}}'
      - name: notify-desk
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'FX hedge executed for {{portfolio_id}}: {{calculate-hedges.trade_count}} trades. Total notional: ${{calculate-hedges.total_notional}}M. Avg rate improvement: {{execute-trades.avg_improvement_bps}}bps.'
  consumes:
  - type: http
    namespace: aladdin
    baseUri: https://aladdin.blackrock.com/api/v2
    authentication:
      type: bearer
      token: $secrets.aladdin_token
    resources:
    - name: fx-hedges
      path: /portfolios/{{portfolio_id}}/fx-hedges
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: calculate-fx-hedges
        method: POST
  - type: http
    namespace: tradeweb
    baseUri: https://api.tradeweb.com/v1
    authentication:
      type: bearer
      token: $secrets.tradeweb_token
    resources:
    - name: rfq
      path: /rfq
      operations:
      - name: submit-rfq
        method: POST
  - type: http
    namespace: simcorp
    baseUri: https://simcorp.blackrock.com/api/v2
    authentication:
      type: bearer
      token: $secrets.simcorp_token
    resources:
    - name: fx-positions
      path: /portfolios/{{portfolio_id}}/fx-positions
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: update-fx-positions
        method: PATCH
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → fx-hedging-execution-pipeline.yml

Creates an OpsGenie alert for Aladdin platform and trading infrastructure issues.

naftiko: '0.5'
info:
  label: OpsGenie Alert Creation
  description: Creates an OpsGenie alert for Aladdin platform and trading infrastructure issues.
  tags:
  - alerting
  - opsgenie
capability:
  exposes:
  - type: mcp
    namespace: opsgenie
    port: 8080
    tools:
    - name: create-alert
      description: Create a new OpsGenie alert.
      inputParameters:
      - name: message
        in: body
        type: string
        description: Alert message.
      - name: priority
        in: body
        type: string
        description: 'Priority level: P1 through P5.'
      - name: team
        in: body
        type: string
        description: Responder team name.
      call: opsgenie.create-alert
      with:
        message: '{{message}}'
        priority: '{{priority}}'
        team: '{{team}}'
      outputParameters:
      - name: request_id
        type: string
        mapping: $.requestId
  consumes:
  - type: http
    namespace: opsgenie
    baseUri: https://api.opsgenie.com/v2
    authentication:
      type: apiKey
      name: Authorization
      in: header
      value: GenieKey $secrets.opsgenie_api_key
    resources:
    - name: alerts
      path: /alerts
      operations:
      - name: create-alert
        method: POST
Open in Framework → View in Fleet → opsgenie-alert-creation.yml

Retrieves the current on-call engineer for a given PagerDuty escalation policy, returning name, email, and escalation level.

naftiko: '0.5'
info:
  label: PagerDuty On-Call Lookup
  description: Retrieves the current on-call engineer for a given PagerDuty escalation policy, returning name, email, and escalation level.
  tags:
  - incident-management
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: pagerduty-oncall
    port: 8080
    tools:
    - name: get-oncall
      description: Look up who is currently on call for a given PagerDuty escalation policy.
      inputParameters:
      - name: policy_id
        in: body
        type: string
        description: The PagerDuty escalation policy ID.
      call: pagerduty.get-oncalls
      with:
        escalation_policy_ids: '{{policy_id}}'
  consumes:
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: oncalls
      path: /oncalls
      inputParameters:
      - name: escalation_policy_ids
        in: query
      operations:
      - name: get-oncalls
        method: GET
Open in Framework → View in Fleet → pagerduty-on-call-lookup.yml

Scans Docker container images for vulnerabilities in investment platform deployment pipelines.

naftiko: '0.5'
info:
  label: Docker Image Vulnerability Scan
  description: Scans Docker container images for vulnerabilities in investment platform deployment pipelines.
  tags:
  - security
  - snyk
capability:
  exposes:
  - type: mcp
    namespace: container-security
    port: 8080
    tools:
    - name: scan-image
      description: Scan a Docker image for vulnerabilities.
      inputParameters:
      - name: image
        in: body
        type: string
        description: The Docker image reference.
      call: snyk.test-image
      with:
        image: '{{image}}'
      outputParameters:
      - name: vulnerability_count
        type: integer
        mapping: $.summary.totalVulnerabilities
      - name: critical_count
        type: integer
        mapping: $.summary.criticalVulnerabilities
  consumes:
  - type: http
    namespace: snyk
    baseUri: https://api.snyk.io/v1
    authentication:
      type: bearer
      token: $secrets.snyk_token
    resources:
    - name: test
      path: /test/docker
      operations:
      - name: test-image
        method: POST
Open in Framework → View in Fleet → docker-image-vulnerability-scan.yml

Extracts Net Asset Value data from SimCorp Dimension, compares against Aladdin valuations, flags discrepancies in Snowflake, and alerts operations via Microsoft Teams.

naftiko: '0.5'
info:
  label: SimCorp Dimension NAV Reconciliation
  description: Extracts Net Asset Value data from SimCorp Dimension, compares against Aladdin valuations, flags discrepancies in Snowflake, and alerts operations via Microsoft Teams.
  tags:
  - fund-accounting
  - reconciliation
  - simcorp-dimension
  - aladdin
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: nav-recon
    port: 8080
    tools:
    - name: reconcile-nav
      description: Compare NAV between SimCorp and Aladdin, flag and alert on discrepancies.
      inputParameters:
      - name: fund_id
        in: body
        type: string
        description: The fund identifier.
      - name: valuation_date
        in: body
        type: string
        description: Valuation date in YYYY-MM-DD format.
      - name: ops_channel_id
        in: body
        type: string
        description: Teams channel for operations alerts.
      steps:
      - name: get-simcorp-nav
        type: call
        call: simcorp.get-nav
        with:
          fund_id: '{{fund_id}}'
          date: '{{valuation_date}}'
      - name: get-aladdin-nav
        type: call
        call: aladdin.get-valuation
        with:
          portfolio_id: '{{fund_id}}'
          date: '{{valuation_date}}'
      - name: log-discrepancy
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO recon.nav_breaks VALUES ('{{fund_id}}', '{{valuation_date}}', '{{get-simcorp-nav.nav}}', '{{get-aladdin-nav.nav}}', CURRENT_TIMESTAMP())
      - name: alert-ops
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{ops_channel_id}}'
          text: 'NAV Recon for {{fund_id}} on {{valuation_date}}: SimCorp={{get-simcorp-nav.nav}}, Aladdin={{get-aladdin-nav.nav}}. Difference logged.'
  consumes:
  - type: http
    namespace: simcorp
    baseUri: https://simcorp.blackrock.com/api/v1
    authentication:
      type: bearer
      token: $secrets.simcorp_token
    resources:
    - name: nav
      path: /funds/{{fund_id}}/nav?date={{date}}
      inputParameters:
      - name: fund_id
        in: path
      - name: date
        in: query
      operations:
      - name: get-nav
        method: GET
  - type: http
    namespace: aladdin
    baseUri: https://aladdin.blackrock.com/api/v2
    authentication:
      type: bearer
      token: $secrets.aladdin_token
    resources:
    - name: valuations
      path: /portfolios/{{portfolio_id}}/valuation?date={{date}}
      inputParameters:
      - name: portfolio_id
        in: path
      - name: date
        in: query
      operations:
      - name: get-valuation
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://blackrock.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/{{channel_id}}/channels/General/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → simcorp-dimension-nav-reconciliation.yml

Checks the latest GitHub Actions workflow run status for a BlackRock repository and posts results to a Microsoft Teams development channel.

naftiko: '0.5'
info:
  label: GitHub Actions CI Pipeline Status
  description: Checks the latest GitHub Actions workflow run status for a BlackRock repository and posts results to a Microsoft Teams development channel.
  tags:
  - development
  - ci-cd
  - github-actions
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ci-status
    port: 8080
    tools:
    - name: check-ci-and-notify
      description: Fetch the latest CI run status from GitHub Actions and post to a Teams channel.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository name (org/repo format).
      - name: channel_id
        in: body
        type: string
        description: Teams channel ID for dev notifications.
      steps:
      - name: get-latest-run
        type: call
        call: github.get-workflow-runs
        with:
          repo: '{{repo}}'
      - name: post-status
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{channel_id}}'
          text: 'CI Status for {{repo}}: {{get-latest-run.workflow_runs[0].conclusion}} ({{get-latest-run.workflow_runs[0].name}}). Commit: {{get-latest-run.workflow_runs[0].head_sha}}.'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com/repos
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflow-runs
      path: /{{repo}}/actions/runs?per_page=1
      inputParameters:
      - name: repo
        in: path
      operations:
      - name: get-workflow-runs
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/General/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → github-actions-ci-pipeline-status.yml

Receives an invoice from Coupa, validates the vendor in SAP, routes for approval in ServiceNow, and posts the journal entry to Oracle Hyperion upon approval.

naftiko: '0.5'
info:
  label: Vendor Invoice Approval Pipeline
  description: Receives an invoice from Coupa, validates the vendor in SAP, routes for approval in ServiceNow, and posts the journal entry to Oracle Hyperion upon approval.
  tags:
  - procurement
  - coupa
  - sap
  - servicenow
  - oracle-hyperion
capability:
  exposes:
  - type: mcp
    namespace: invoice-approval
    port: 8080
    tools:
    - name: process-invoice
      description: Validate, approve, and post a vendor invoice across Coupa, SAP, ServiceNow, and Hyperion.
      inputParameters:
      - name: invoice_id
        in: body
        type: string
        description: The Coupa invoice identifier.
      steps:
      - name: get-invoice
        type: call
        call: coupa.get-invoice
        with:
          invoice_id: '{{invoice_id}}'
      - name: validate-vendor
        type: call
        call: sap.get-vendor
        with:
          vendor_id: '{{get-invoice.vendor_id}}'
      - name: request-approval
        type: call
        call: servicenow.create-change-request
        with:
          short_description: 'Invoice approval: {{get-invoice.invoice_number}} — ${{get-invoice.total_amount}}'
          description: 'Vendor: {{validate-vendor.vendor_name}}. Amount: ${{get-invoice.total_amount}}. Cost center: {{get-invoice.cost_center}}.'
          category: finance
      - name: post-journal
        type: call
        call: hyperion.post-entry
        with:
          account: '{{get-invoice.gl_account}}'
          amount: '{{get-invoice.total_amount}}'
          cost_center: '{{get-invoice.cost_center}}'
          reference: '{{get-invoice.invoice_number}}'
  consumes:
  - type: http
    namespace: coupa
    baseUri: https://blackrock.coupahost.com/api
    authentication:
      type: bearer
      token: $secrets.coupa_api_key
    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://blackrock-s4.sap.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: servicenow
    baseUri: https://blackrock.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: hyperion
    baseUri: https://hyperion.blackrock.com/HyperionPlanning/rest/v3
    authentication:
      type: basic
      username: $secrets.hyperion_user
      password: $secrets.hyperion_password
    resources:
    - name: journal-entries
      path: /applications/FINPLAN/journals
      operations:
      - name: post-entry
        method: POST
Open in Framework → View in Fleet → vendor-invoice-approval-pipeline.yml

Retrieves the approval status of an expense report from SAP Concur for finance team tracking.

naftiko: '0.5'
info:
  label: SAP Concur Expense Status Check
  description: Retrieves the approval status of an expense report from SAP Concur for finance team tracking.
  tags:
  - expense-management
  - sap-concur
capability:
  exposes:
  - type: mcp
    namespace: concur
    port: 8080
    tools:
    - name: get-expense-status
      description: Check the status of an expense report.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The SAP Concur expense report ID.
      call: concur.get-report
      with:
        report_id: '{{report_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.ApprovalStatus
      - name: total
        type: number
        mapping: $.Total
  consumes:
  - type: http
    namespace: concur
    baseUri: https://us2.api.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: reports
      path: /expense/reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-report
        method: GET
Open in Framework → View in Fleet → sap-concur-expense-status-check.yml

Rotates a secret in HashiCorp Vault, updates the corresponding Azure Key Vault entry, and logs the rotation event in ServiceNow for audit compliance.

naftiko: '0.5'
info:
  label: HashiCorp Vault Secret Rotation
  description: Rotates a secret in HashiCorp Vault, updates the corresponding Azure Key Vault entry, and logs the rotation event in ServiceNow for audit compliance.
  tags:
  - security
  - secret-management
  - hashicorp-vault
  - azure-key-vault
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: secret-rotation
    port: 8080
    tools:
    - name: rotate-secret
      description: Rotate a secret across Vault and Azure Key Vault with audit logging.
      inputParameters:
      - name: secret_path
        in: body
        type: string
        description: The Vault secret path.
      - name: azure_secret_name
        in: body
        type: string
        description: Corresponding Azure Key Vault secret name.
      steps:
      - name: rotate-vault-secret
        type: call
        call: vault.rotate-secret
        with:
          path: '{{secret_path}}'
      - name: update-azure-kv
        type: call
        call: keyvault.set-secret
        with:
          secret_name: '{{azure_secret_name}}'
          value: '{{rotate-vault-secret.new_value}}'
      - name: log-rotation
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Secret rotation: {{secret_path}}'
          category: security_audit
          assigned_group: Security_Ops
          description: 'Secret {{secret_path}} rotated. Azure KV {{azure_secret_name}} updated. Version: {{update-azure-kv.version}}.'
  consumes:
  - type: http
    namespace: vault
    baseUri: https://vault.blackrock.com/v1
    authentication:
      type: bearer
      token: $secrets.vault_token
    resources:
    - name: secrets
      path: /secret/data/{{path}}
      inputParameters:
      - name: path
        in: path
      operations:
      - name: rotate-secret
        method: POST
  - type: http
    namespace: keyvault
    baseUri: https://blackrock-vault.vault.azure.net
    authentication:
      type: bearer
      token: $secrets.azure_keyvault_token
    resources:
    - name: secrets
      path: /secrets/{{secret_name}}?api-version=7.4
      inputParameters:
      - name: secret_name
        in: path
      operations:
      - name: set-secret
        method: PUT
  - type: http
    namespace: servicenow
    baseUri: https://blackrock.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → hashicorp-vault-secret-rotation.yml

Invokes an AWS Lambda function for serverless data processing in investment analytics pipelines.

naftiko: '0.5'
info:
  label: AWS Lambda Function Invocation
  description: Invokes an AWS Lambda function for serverless data processing in investment analytics pipelines.
  tags:
  - serverless
  - aws-lambda
capability:
  exposes:
  - type: mcp
    namespace: aws-lambda
    port: 8080
    tools:
    - name: invoke-function
      description: Invoke an AWS Lambda function by name.
      inputParameters:
      - name: function_name
        in: body
        type: string
        description: The Lambda function name or ARN.
      - name: payload
        in: body
        type: string
        description: JSON payload to pass to the function.
      call: lambda.invoke
      with:
        function_name: '{{function_name}}'
        payload: '{{payload}}'
      outputParameters:
      - name: status_code
        type: integer
        mapping: $.StatusCode
      - name: response_payload
        type: string
        mapping: $.Payload
  consumes:
  - type: http
    namespace: lambda
    baseUri: https://lambda.us-east-1.amazonaws.com/2015-03-31
    authentication:
      type: aws-sigv4
      accessKeyId: $secrets.aws_access_key
      secretAccessKey: $secrets.aws_secret_key
    resources:
    - name: functions
      path: /functions/{{function_name}}/invocations
      inputParameters:
      - name: function_name
        in: path
      operations:
      - name: invoke
        method: POST
Open in Framework → View in Fleet → aws-lambda-function-invocation.yml

Provisions a new fund by creating the Aladdin portfolio, registering in SimCorp Dimension, setting up the Confluence documentation space, and notifying stakeholders via Microsoft Teams.

naftiko: '0.5'
info:
  label: New Fund Launch Orchestrator
  description: Provisions a new fund by creating the Aladdin portfolio, registering in SimCorp Dimension, setting up the Confluence documentation space, and notifying stakeholders via Microsoft Teams.
  tags:
  - fund-operations
  - aladdin
  - simcorp-dimension
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: fund-launch
    port: 8080
    tools:
    - name: launch-fund
      description: Orchestrate new fund setup across Aladdin, SimCorp, Confluence, and Teams.
      inputParameters:
      - name: fund_name
        in: body
        type: string
        description: Name of the new fund.
      - name: fund_type
        in: body
        type: string
        description: Fund type (ETF, mutual_fund, alternatives).
      - name: pm_email
        in: body
        type: string
        description: Portfolio manager email.
      steps:
      - name: create-portfolio
        type: call
        call: aladdin.create-portfolio
        with:
          name: '{{fund_name}}'
          type: '{{fund_type}}'
      - name: register-fund
        type: call
        call: simcorp.create-portfolio
        with:
          portfolio_name: '{{fund_name}}'
          portfolio_ref: '{{create-portfolio.portfolio_id}}'
      - name: create-docs-space
        type: call
        call: confluence.create-space
        with:
          key: FUND-{{create-portfolio.portfolio_id}}
          name: '{{fund_name}} Documentation'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{pm_email}}'
          text: 'Fund {{fund_name}} launched. Aladdin: {{create-portfolio.portfolio_id}}. SimCorp: {{register-fund.portfolio_code}}. Docs: {{create-docs-space.url}}.'
  consumes:
  - type: http
    namespace: aladdin
    baseUri: https://aladdin.blackrock.com/api/v2
    authentication:
      type: bearer
      token: $secrets.aladdin_token
    resources:
    - name: portfolios
      path: /portfolios
      operations:
      - name: create-portfolio
        method: POST
  - type: http
    namespace: simcorp
    baseUri: https://simcorp.blackrock.com/api/v2
    authentication:
      type: bearer
      token: $secrets.simcorp_token
    resources:
    - name: portfolios
      path: /portfolios
      operations:
      - name: create-portfolio
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://blackrock.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: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → new-fund-launch-orchestrator.yml

Retrieves user profile details from Azure Active Directory by UPN or object ID, returning display name, department, and manager chain.

naftiko: '0.5'
info:
  label: Azure AD User Lookup
  description: Retrieves user profile details from Azure Active Directory by UPN or object ID, returning display name, department, and manager chain.
  tags:
  - identity
  - azure-active-directory
capability:
  exposes:
  - type: mcp
    namespace: azure-ad
    port: 8080
    tools:
    - name: get-user-profile
      description: Look up an Azure AD user by UPN or object ID and return profile attributes.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: The user principal name or Azure AD object ID.
      call: azure-ad.get-user
      with:
        user_id: '{{user_id}}'
  consumes:
  - type: http
    namespace: azure-ad
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users/{{user_id}}
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: get-user
        method: GET
Open in Framework → View in Fleet → azure-ad-user-lookup.yml

Queries Elasticsearch for trade execution logs, returning matching records for compliance investigation and audit.

naftiko: '0.5'
info:
  label: Elastic Search Trade Log Query
  description: Queries Elasticsearch for trade execution logs, returning matching records for compliance investigation and audit.
  tags:
  - search
  - elasticsearch
capability:
  exposes:
  - type: mcp
    namespace: elasticsearch
    port: 8080
    tools:
    - name: search-trade-logs
      description: Search trade execution logs in Elasticsearch.
      inputParameters:
      - name: index
        in: body
        type: string
        description: The Elasticsearch index name.
      - name: query
        in: body
        type: string
        description: The search query string.
      call: elasticsearch.search
      with:
        index: '{{index}}'
        q: '{{query}}'
      outputParameters:
      - name: total_hits
        type: integer
        mapping: $.hits.total.value
      - name: results
        type: array
        mapping: $.hits.hits
  consumes:
  - type: http
    namespace: elasticsearch
    baseUri: https://elasticsearch.blackrock.com:9200
    authentication:
      type: basic
      username: $secrets.elasticsearch_user
      password: $secrets.elasticsearch_password
    resources:
    - name: search
      path: /{{index}}/_search
      inputParameters:
      - name: index
        in: path
      operations:
      - name: search
        method: GET
Open in Framework → View in Fleet → elastic-search-trade-log-query.yml

When a Docker image vulnerability is found, creates a Jira ticket for the owning team, posts to the security Slack channel, and triggers a Terraform plan to rotate affected infrastructure.

naftiko: '0.5'
info:
  label: Security Vulnerability Remediation Pipeline
  description: When a Docker image vulnerability is found, creates a Jira ticket for the owning team, posts to the security Slack channel, and triggers a Terraform plan to rotate affected infrastructure.
  tags:
  - security
  - docker
  - jira
  - slack
  - terraform
capability:
  exposes:
  - type: mcp
    namespace: vuln-remediation
    port: 8080
    tools:
    - name: remediate-vulnerability
      description: Track and remediate a container vulnerability across Jira, Slack, and Terraform.
      inputParameters:
      - name: image_name
        in: body
        type: string
        description: The Docker image name with tag.
      - name: cve_id
        in: body
        type: string
        description: The CVE identifier.
      - name: severity
        in: body
        type: string
        description: Severity level (CRITICAL, HIGH, MEDIUM, LOW).
      - name: owning_team
        in: body
        type: string
        description: Jira project key for the owning team.
      steps:
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: '{{owning_team}}'
          summary: '{{severity}} vulnerability {{cve_id}} in {{image_name}}'
          description: 'CVE: {{cve_id}}. Image: {{image_name}}. Severity: {{severity}}. Remediate immediately.'
          issue_type: Bug
          priority: '{{severity}}'
      - name: notify-security
        type: call
        call: slack.post-message
        with:
          channel: '#security-alerts'
          text: '{{severity}} vulnerability {{cve_id}} found in {{image_name}}. Jira: {{create-ticket.key}}. Assigned to {{owning_team}}.'
      - name: trigger-rotation
        type: call
        call: terraform.create-run
        with:
          workspace_id: ws-infra-rotation
          message: Rotate infrastructure for {{cve_id}} remediation
  consumes:
  - type: http
    namespace: jira
    baseUri: https://blackrock.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: runs
      path: /runs
      operations:
      - name: create-run
        method: POST
Open in Framework → View in Fleet → security-vulnerability-remediation-pipeline.yml

Queries Azure cost data, identifies underutilized resources via Datadog metrics, creates optimization recommendations in Jira, and posts a summary to the FinOps Slack channel.

naftiko: '0.5'
info:
  label: Infrastructure Cost Optimization Workflow
  description: Queries Azure cost data, identifies underutilized resources via Datadog metrics, creates optimization recommendations in Jira, and posts a summary to the FinOps Slack channel.
  tags:
  - finops
  - microsoft-azure
  - datadog
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: cost-optimization
    port: 8080
    tools:
    - name: optimize-costs
      description: Identify and track cost optimization opportunities across Azure infrastructure.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription identifier.
      - name: threshold_percent
        in: body
        type: integer
        description: CPU utilization threshold below which resources are flagged.
      steps:
      - name: get-costs
        type: call
        call: azure.get-cost-details
        with:
          subscription_id: '{{subscription_id}}'
      - name: get-utilization
        type: call
        call: datadog.query-metrics
        with:
          query: avg:azure.vm.percentage_cpu{subscription_id:{{subscription_id}}} by {resource_name}
          period: 7d
      - name: create-recommendations
        type: call
        call: jira.create-issue
        with:
          project: FINOPS
          summary: 'Cost optimization: {{subscription_id}} — ${{get-costs.total_cost}} monthly'
          description: 'Underutilized resources identified. Current spend: ${{get-costs.total_cost}}. Resources below {{threshold_percent}}% CPU: {{get-utilization.low_util_count}}.'
          issue_type: Story
      - name: post-summary
        type: call
        call: slack.post-message
        with:
          channel: '#finops'
          text: 'Cost optimization scan complete for {{subscription_id}}. Monthly spend: ${{get-costs.total_cost}}. Recommendations: {{create-recommendations.key}}.'
  consumes:
  - type: http
    namespace: azure
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: costs
      path: /subscriptions/{{subscription_id}}/providers/Microsoft.CostManagement/query
      inputParameters:
      - name: subscription_id
        in: path
      operations:
      - name: get-cost-details
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /query
      inputParameters:
      - name: query
        in: query
      - name: period
        in: query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: jira
    baseUri: https://blackrock.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → infrastructure-cost-optimization-workflow.yml

Screens transactions against sanctions lists in Snowflake, generates risk scores via Azure ML, creates compliance cases in ServiceNow, and alerts the AML team via PagerDuty.

naftiko: '0.5'
info:
  label: AML Transaction Screening Pipeline
  description: Screens transactions against sanctions lists in Snowflake, generates risk scores via Azure ML, creates compliance cases in ServiceNow, and alerts the AML team via PagerDuty.
  tags:
  - aml
  - compliance
  - snowflake
  - azure-machine-learning
  - servicenow
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: aml-screening
    port: 8080
    tools:
    - name: screen-transactions
      description: Screen transactions, score risk, create cases, and alert AML team.
      inputParameters:
      - name: batch_id
        in: body
        type: string
        description: The transaction batch identifier.
      - name: pagerduty_service
        in: body
        type: string
        description: PagerDuty service for AML alerts.
      steps:
      - name: screen-sanctions
        type: call
        call: snowflake.execute-statement
        with:
          statement: CALL SCREEN_SANCTIONS('{{batch_id}}')
          warehouse: COMPLIANCE_WH
      - name: score-risk
        type: call
        call: azureml.score
        with:
          model_type: aml_risk
          data: '{{screen-sanctions.flagged_transactions}}'
      - name: create-case
        type: call
        call: servicenow.create-record
        with:
          table: u_aml_case
          batch_id: '{{batch_id}}'
          flagged_count: '{{score-risk.high_risk_count}}'
          total_screened: '{{screen-sanctions.total_screened}}'
      - name: alert-aml
        type: call
        call: pagerduty.create-incident
        with:
          service_id: '{{pagerduty_service}}'
          title: 'AML: {{score-risk.high_risk_count}} high-risk transactions in batch {{batch_id}}'
          urgency: high
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://blackrock.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: azureml
    baseUri: https://blackrock-ml.eastus.inference.ml.azure.com
    authentication:
      type: bearer
      token: $secrets.azureml_token
    resources:
    - name: scoring
      path: /score
      operations:
      - name: score
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://blackrock.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → aml-transaction-screening-pipeline.yml

Pulls performance attribution from Aladdin, enriches with Bloomberg benchmark data, stores in Snowflake, uploads to SharePoint, and emails the report via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Multi-Asset Portfolio Attribution Report
  description: Pulls performance attribution from Aladdin, enriches with Bloomberg benchmark data, stores in Snowflake, uploads to SharePoint, and emails the report via Microsoft Outlook.
  tags:
  - portfolio-management
  - attribution
  - aladdin
  - bloomberg-enterprise-data
  - snowflake
  - sharepoint
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: attribution-report
    port: 8080
    tools:
    - name: generate-attribution-report
      description: Build and distribute a multi-asset performance attribution report.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The Aladdin portfolio identifier.
      - name: benchmark_id
        in: body
        type: string
        description: Bloomberg benchmark identifier.
      - name: period
        in: body
        type: string
        description: Reporting period (e.g. 2026-Q1).
      - name: recipient_email
        in: body
        type: string
        description: Email address for report delivery.
      steps:
      - name: get-attribution
        type: call
        call: aladdin.get-attribution
        with:
          portfolio_id: '{{portfolio_id}}'
          period: '{{period}}'
      - name: get-benchmark
        type: call
        call: bloomberg.get-snapshot
        with:
          security_id: '{{benchmark_id}}'
      - name: store-attribution
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO performance.attribution VALUES ('{{portfolio_id}}', '{{period}}', '{{get-attribution.total_return}}', '{{get-benchmark.price}}')
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: performance-reports
          file_path: Attribution/{{portfolio_id}}_{{period}}.pdf
          content: '{{get-attribution.report_data}}'
      - name: email-report
        type: call
        call: outlook.send-mail
        with:
          to: '{{recipient_email}}'
          subject: Attribution Report - Portfolio {{portfolio_id}} - {{period}}
          body: 'Please find attached the performance attribution report. Total return: {{get-attribution.total_return}}. Benchmark: {{get-benchmark.price}}.'
  consumes:
  - type: http
    namespace: aladdin
    baseUri: https://aladdin.blackrock.com/api/v2
    authentication:
      type: bearer
      token: $secrets.aladdin_token
    resources:
    - name: attribution
      path: /portfolios/{{portfolio_id}}/attribution
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: get-attribution
        method: GET
  - type: http
    namespace: bloomberg
    baseUri: https://bsapi.bloomberg.com/eap/catalogs/bbg/datasets
    authentication:
      type: bearer
      token: $secrets.bloomberg_eap_token
    resources:
    - name: snapshots
      path: /snapshots/{{security_id}}
      inputParameters:
      - name: security_id
        in: path
      operations:
      - name: get-snapshot
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://blackrock.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        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: send-mail
      path: /sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → multi-asset-portfolio-attribution-report.yml

Retrieves security reference data from Refinitiv Eikon for instrument identification and classification.

naftiko: '0.5'
info:
  label: Refinitiv Eikon Security Lookup
  description: Retrieves security reference data from Refinitiv Eikon for instrument identification and classification.
  tags:
  - reference-data
  - refinitiv
capability:
  exposes:
  - type: mcp
    namespace: refinitiv
    port: 8080
    tools:
    - name: lookup-security
      description: Look up security reference data from Refinitiv.
      inputParameters:
      - name: ric
        in: body
        type: string
        description: The Reuters Instrument Code.
      call: refinitiv.get-instrument
      with:
        ric: '{{ric}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.instrument.name
      - name: isin
        type: string
        mapping: $.instrument.isin
      - name: currency
        type: string
        mapping: $.instrument.currency
  consumes:
  - type: http
    namespace: refinitiv
    baseUri: https://api.refinitiv.com/data/v1
    authentication:
      type: bearer
      token: $secrets.refinitiv_token
    resources:
    - name: instruments
      path: /instruments/{{ric}}
      inputParameters:
      - name: ric
        in: path
      operations:
      - name: get-instrument
        method: GET
Open in Framework → View in Fleet → refinitiv-eikon-security-lookup.yml

Executes a SQL query against BlackRock's Snowflake data warehouse to retrieve computed risk factor exposures for a given portfolio.

naftiko: '0.5'
info:
  label: Snowflake Risk Factor Query
  description: Executes a SQL query against BlackRock's Snowflake data warehouse to retrieve computed risk factor exposures for a given portfolio.
  tags:
  - risk-analytics
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: risk-warehouse
    port: 8080
    tools:
    - name: query-risk-factors
      description: Run a risk factor exposure query against Snowflake for a specified portfolio and date.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The internal portfolio identifier.
      - name: as_of_date
        in: body
        type: string
        description: Risk calculation date in YYYY-MM-DD format.
      call: snowflake.execute-query
      with:
        statement: SELECT factor_name, exposure, contribution FROM risk.factor_exposures WHERE portfolio_id = '{{portfolio_id}}' AND as_of_date = '{{as_of_date}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://blackrock.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → snowflake-risk-factor-query.yml

Retrieves cached market data from Redis for low-latency price lookups in trading systems.

naftiko: '0.5'
info:
  label: Redis Cache Market Data Lookup
  description: Retrieves cached market data from Redis for low-latency price lookups in trading systems.
  tags:
  - caching
  - redis
capability:
  exposes:
  - type: mcp
    namespace: redis-cache
    port: 8080
    tools:
    - name: get-value
      description: Look up a cached market data value in Redis by key.
      inputParameters:
      - name: key
        in: body
        type: string
        description: The Redis key to retrieve.
      call: redis.get-key
      with:
        key: '{{key}}'
      outputParameters:
      - name: value
        type: string
        mapping: $.value
      - name: ttl
        type: integer
        mapping: $.ttl
  consumes:
  - type: http
    namespace: redis
    baseUri: https://redis.blackrock.com:6380
    authentication:
      type: apiKey
      name: Authorization
      in: header
      value: $secrets.redis_token
    resources:
    - name: keys
      path: /get/{{key}}
      inputParameters:
      - name: key
        in: path
      operations:
      - name: get-key
        method: GET
Open in Framework → View in Fleet → redis-cache-market-data-lookup.yml

Posts a message to a Slack channel for investment team communications and automated trading notifications.

naftiko: '0.5'
info:
  label: Slack Channel Message
  description: Posts a message to a Slack channel for investment team communications and automated trading notifications.
  tags:
  - messaging
  - slack
capability:
  exposes:
  - type: mcp
    namespace: slack
    port: 8080
    tools:
    - name: post-message
      description: Post a message to a Slack channel.
      inputParameters:
      - name: channel
        in: body
        type: string
        description: The Slack channel ID.
      - name: text
        in: body
        type: string
        description: Message text.
      call: slack.post-message
      with:
        channel: '{{channel}}'
        text: '{{text}}'
      outputParameters:
      - name: ts
        type: string
        mapping: $.ts
      - name: ok
        type: boolean
        mapping: $.ok
  consumes:
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → slack-channel-message.yml

Pulls security reference data from Refinitiv, validates against Aladdin security master, and updates discrepancies in Snowflake.

naftiko: '0.5'
info:
  label: Refinitiv Reference Data Sync
  description: Pulls security reference data from Refinitiv, validates against Aladdin security master, and updates discrepancies in Snowflake.
  tags:
  - market-data
  - reference-data
  - refinitiv
  - aladdin
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: ref-data-sync
    port: 8080
    tools:
    - name: sync-reference-data
      description: Compare Refinitiv and Aladdin security reference data and log differences.
      inputParameters:
      - name: ric
        in: body
        type: string
        description: Reuters Instrument Code.
      steps:
      - name: get-refinitiv-data
        type: call
        call: refinitiv.get-security
        with:
          ric: '{{ric}}'
      - name: get-aladdin-security
        type: call
        call: aladdin.get-security
        with:
          identifier: '{{ric}}'
      - name: log-differences
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO reference_data.sync_log VALUES ('{{ric}}', '{{get-refinitiv-data.name}}', '{{get-aladdin-security.name}}', CURRENT_TIMESTAMP())
  consumes:
  - type: http
    namespace: refinitiv
    baseUri: https://api.refinitiv.com/data/pricing/v1
    authentication:
      type: bearer
      token: $secrets.refinitiv_token
    resources:
    - name: instruments
      path: /instruments/{{ric}}
      inputParameters:
      - name: ric
        in: path
      operations:
      - name: get-security
        method: GET
  - type: http
    namespace: aladdin
    baseUri: https://aladdin.blackrock.com/api/v2
    authentication:
      type: bearer
      token: $secrets.aladdin_token
    resources:
    - name: securities
      path: /securities/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-security
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://blackrock.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → refinitiv-reference-data-sync.yml

Monitors Bloomberg market data for anomalies, runs detection models in Azure Databricks, logs alerts in Splunk, and notifies the quant team via Slack.

naftiko: '0.5'
info:
  label: Market Data Anomaly Detection Pipeline
  description: Monitors Bloomberg market data for anomalies, runs detection models in Azure Databricks, logs alerts in Splunk, and notifies the quant team via Slack.
  tags:
  - market-data
  - bloomberg
  - azure-databricks
  - splunk
  - slack
capability:
  exposes:
  - type: mcp
    namespace: anomaly-detection
    port: 8080
    tools:
    - name: detect-anomalies
      description: Run market data anomaly detection and alert the quant team.
      inputParameters:
      - name: asset_class
        in: body
        type: string
        description: Asset class to monitor (equities, fixed_income, fx).
      - name: lookback_hours
        in: body
        type: integer
        description: Hours of data to analyze.
      steps:
      - name: get-market-data
        type: call
        call: bloomberg.get-bulk-data
        with:
          asset_class: '{{asset_class}}'
          lookback: '{{lookback_hours}}h'
      - name: run-detection
        type: call
        call: databricks.submit-job
        with:
          job_name: anomaly-detection-{{asset_class}}
          parameters: '{{get-market-data.snapshot_id}}'
      - name: log-alerts
        type: call
        call: splunk.create-event
        with:
          index: market-data-anomalies
          source: anomaly-detector
          event: '{{run-detection.anomalies}}'
      - name: notify-quants
        type: call
        call: slack.post-message
        with:
          channel: '#quant-alerts'
          text: Anomaly detection complete for {{asset_class}}. Found {{run-detection.anomaly_count}} anomalies. Review in Splunk.
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg
    authentication:
      type: bearer
      token: $secrets.bloomberg_api_key
    resources:
    - name: bulk-data
      path: /snapshots
      inputParameters:
      - name: asset_class
        in: query
      - name: lookback
        in: query
      operations:
      - name: get-bulk-data
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://adb-blackrock.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: submit-job
        method: POST
  - type: http
    namespace: splunk
    baseUri: https://splunk.blackrock.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: events
      path: /receivers/simple
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → market-data-anomaly-detection-pipeline.yml

Packages and deploys a Helm chart to Azure Kubernetes Service, runs post-deployment health checks via Datadog, and updates the Jira deployment ticket.

naftiko: '0.5'
info:
  label: Helm Chart Deployment Pipeline
  description: Packages and deploys a Helm chart to Azure Kubernetes Service, runs post-deployment health checks via Datadog, and updates the Jira deployment ticket.
  tags:
  - devops
  - helm
  - azure-kubernetes-service
  - datadog
  - jira
capability:
  exposes:
  - type: mcp
    namespace: helm-deploy
    port: 8080
    tools:
    - name: deploy-helm-chart
      description: Deploy a Helm chart to AKS with health verification and ticket update.
      inputParameters:
      - name: chart_name
        in: body
        type: string
        description: Helm chart name.
      - name: chart_version
        in: body
        type: string
        description: Chart version to deploy.
      - name: namespace
        in: body
        type: string
        description: Target Kubernetes namespace.
      - name: jira_ticket
        in: body
        type: string
        description: Deployment Jira ticket key.
      steps:
      - name: deploy-chart
        type: call
        call: aks.deploy-helm
        with:
          chart_name: '{{chart_name}}'
          chart_version: '{{chart_version}}'
          namespace: '{{namespace}}'
      - name: health-check
        type: call
        call: datadog.get-monitors
        with:
          tags: service:{{chart_name}},env:{{namespace}}
      - name: update-ticket
        type: call
        call: jira.add-comment
        with:
          issue_key: '{{jira_ticket}}'
          body: 'Deployed {{chart_name}}:{{chart_version}} to {{namespace}}. Health: {{health-check.overall_state}}.'
  consumes:
  - type: http
    namespace: aks
    baseUri: https://blackrock-aks.hcp.eastus.azmk8s.io/apis/helm/v1
    authentication:
      type: bearer
      token: $secrets.aks_token
    resources:
    - name: releases
      path: /namespaces/{{namespace}}/releases
      inputParameters:
      - name: namespace
        in: path
      operations:
      - name: deploy-helm
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    inputParameters:
    - name: DD-APPLICATION-KEY
      in: header
      value: $secrets.datadog_app_key
    resources:
    - name: monitors
      path: /monitor?tags={{tags}}
      inputParameters:
      - name: tags
        in: query
      operations:
      - name: get-monitors
        method: GET
  - type: http
    namespace: jira
    baseUri: https://blackrock.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: comments
      path: /issue/{{issue_key}}/comment
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: add-comment
        method: POST
Open in Framework → View in Fleet → helm-chart-deployment-pipeline.yml

Retrieves credit spread data for a corporate bond from Refinitiv, returning z-spread, OAS, and benchmark spread values.

naftiko: '0.5'
info:
  label: Refinitiv Credit Spread Lookup
  description: Retrieves credit spread data for a corporate bond from Refinitiv, returning z-spread, OAS, and benchmark spread values.
  tags:
  - fixed-income
  - refinitiv
capability:
  exposes:
  - type: mcp
    namespace: refinitiv-credit
    port: 8080
    tools:
    - name: get-credit-spread
      description: Fetch credit spread metrics for a bond by its ISIN from Refinitiv.
      inputParameters:
      - name: isin
        in: body
        type: string
        description: The ISIN of the bond instrument.
      call: refinitiv.get-spreads
      with:
        isin: '{{isin}}'
  consumes:
  - type: http
    namespace: refinitiv
    baseUri: https://api.refinitiv.com/data/pricing/v1
    authentication:
      type: bearer
      token: $secrets.refinitiv_token
    resources:
    - name: spreads
      path: /instruments/{{isin}}/spreads
      inputParameters:
      - name: isin
        in: path
      operations:
      - name: get-spreads
        method: GET
Open in Framework → View in Fleet → refinitiv-credit-spread-lookup.yml

Fetches frequently accessed securities from Snowflake, pulls latest prices from Bloomberg, and pre-loads them into Redis for low-latency market data access.

naftiko: '0.5'
info:
  label: Redis Cache Warm-Up for Market Data
  description: Fetches frequently accessed securities from Snowflake, pulls latest prices from Bloomberg, and pre-loads them into Redis for low-latency market data access.
  tags:
  - performance
  - caching
  - snowflake
  - bloomberg-enterprise-data
  - redis
capability:
  exposes:
  - type: mcp
    namespace: cache-warmup
    port: 8080
    tools:
    - name: warm-market-data-cache
      description: Pre-load top securities pricing into Redis from Bloomberg via Snowflake universe list.
      inputParameters:
      - name: universe_name
        in: body
        type: string
        description: Security universe name in Snowflake.
      steps:
      - name: get-universe
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT security_id FROM market_data.universes WHERE universe_name = '{{universe_name}}' LIMIT 500
      - name: fetch-prices
        type: call
        call: bloomberg.get-bulk-snapshots
        with:
          security_ids: '{{get-universe.data}}'
      - name: load-cache
        type: call
        call: redis.mset
        with:
          key_prefix: 'mktdata:'
          data: '{{fetch-prices.snapshots}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://blackrock.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: bloomberg
    baseUri: https://bsapi.bloomberg.com/eap/catalogs/bbg/datasets
    authentication:
      type: bearer
      token: $secrets.bloomberg_eap_token
    resources:
    - name: bulk-snapshots
      path: /snapshots/bulk
      operations:
      - name: get-bulk-snapshots
        method: POST
  - type: http
    namespace: redis
    baseUri: https://redis-api.blackrock.com/v1
    authentication:
      type: bearer
      token: $secrets.redis_token
    resources:
    - name: commands
      path: /mset
      operations:
      - name: mset
        method: POST
Open in Framework → View in Fleet → redis-cache-warm-up-for-market-data.yml

Checks the status of an Azure Data Factory pipeline run and sends a Grafana annotation plus a Microsoft Teams notification on completion.

naftiko: '0.5'
info:
  label: Azure Data Factory Pipeline Monitor
  description: Checks the status of an Azure Data Factory pipeline run and sends a Grafana annotation plus a Microsoft Teams notification on completion.
  tags:
  - data-engineering
  - azure-data-factory
  - grafana
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: adf-monitor
    port: 8080
    tools:
    - name: monitor-adf-pipeline
      description: Check ADF pipeline run status and notify on completion.
      inputParameters:
      - name: factory_name
        in: body
        type: string
        description: Azure Data Factory name.
      - name: run_id
        in: body
        type: string
        description: Pipeline run identifier.
      - name: channel_id
        in: body
        type: string
        description: Teams channel for data engineering alerts.
      steps:
      - name: get-run-status
        type: call
        call: adf.get-pipeline-run
        with:
          factory_name: '{{factory_name}}'
          run_id: '{{run_id}}'
      - name: annotate-grafana
        type: call
        call: grafana.create-annotation
        with:
          dashboard_id: data-pipelines
          text: 'ADF pipeline {{factory_name}}/{{run_id}}: {{get-run-status.status}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{channel_id}}'
          text: 'ADF Pipeline {{factory_name}} run {{run_id}}: {{get-run-status.status}}. Duration: {{get-run-status.duration_in_ms}}ms.'
  consumes:
  - type: http
    namespace: adf
    baseUri: https://management.azure.com/subscriptions/blackrock-sub/resourceGroups/data-rg/providers/Microsoft.DataFactory/factories
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: pipeline-runs
      path: /{{factory_name}}/pipelineruns/{{run_id}}?api-version=2018-06-01
      inputParameters:
      - name: factory_name
        in: path
      - name: run_id
        in: path
      operations:
      - name: get-pipeline-run
        method: GET
  - type: http
    namespace: grafana
    baseUri: https://grafana.blackrock.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_token
    resources:
    - name: annotations
      path: /annotations
      operations:
      - name: create-annotation
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/General/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → azure-data-factory-pipeline-monitor.yml

Scans a Docker container image for vulnerabilities using SonarQube, deploys to Azure Kubernetes Service if clean, and posts the deployment status to a Jira release ticket.

naftiko: '0.5'
info:
  label: Docker Container Image Scan and Deploy
  description: Scans a Docker container image for vulnerabilities using SonarQube, deploys to Azure Kubernetes Service if clean, and posts the deployment status to a Jira release ticket.
  tags:
  - devops
  - security
  - docker
  - sonarqube
  - azure-kubernetes-service
  - jira
capability:
  exposes:
  - type: mcp
    namespace: container-deploy
    port: 8080
    tools:
    - name: scan-and-deploy
      description: Scan a container image and deploy to AKS if it passes security checks.
      inputParameters:
      - name: image_uri
        in: body
        type: string
        description: Full Docker image URI with tag.
      - name: namespace
        in: body
        type: string
        description: Target Kubernetes namespace.
      - name: deployment
        in: body
        type: string
        description: Deployment name to update.
      - name: jira_ticket
        in: body
        type: string
        description: Jira release ticket key.
      steps:
      - name: scan-image
        type: call
        call: sonarqube.scan-project
        with:
          project_key: '{{deployment}}'
      - name: update-deployment
        type: call
        call: aks.update-image
        with:
          namespace: '{{namespace}}'
          deployment: '{{deployment}}'
          image: '{{image_uri}}'
      - name: update-ticket
        type: call
        call: jira.add-comment
        with:
          issue_key: '{{jira_ticket}}'
          body: 'Image {{image_uri}} deployed to {{namespace}}/{{deployment}}. Scan status: {{scan-image.status}}.'
  consumes:
  - type: http
    namespace: sonarqube
    baseUri: https://sonarqube.blackrock.com/api
    authentication:
      type: bearer
      token: $secrets.sonarqube_token
    resources:
    - name: projects
      path: /qualitygates/project_status?projectKey={{project_key}}
      inputParameters:
      - name: project_key
        in: query
      operations:
      - name: scan-project
        method: GET
  - type: http
    namespace: aks
    baseUri: https://blackrock-aks.hcp.eastus.azmk8s.io/apis/apps/v1
    authentication:
      type: bearer
      token: $secrets.aks_token
    resources:
    - name: deployments
      path: /namespaces/{{namespace}}/deployments/{{deployment}}
      inputParameters:
      - name: namespace
        in: path
      - name: deployment
        in: path
      operations:
      - name: update-image
        method: PATCH
  - type: http
    namespace: jira
    baseUri: https://blackrock.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: comments
      path: /issue/{{issue_key}}/comment
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: add-comment
        method: POST
Open in Framework → View in Fleet → docker-container-image-scan-and-deploy.yml

Retrieves bond pricing from Bloomberg, computes duration and convexity analytics via Aladdin, stores results in Snowflake, and refreshes the Tableau fixed income dashboard.

naftiko: '0.5'
info:
  label: Fixed Income Pricing and Analytics Pipeline
  description: Retrieves bond pricing from Bloomberg, computes duration and convexity analytics via Aladdin, stores results in Snowflake, and refreshes the Tableau fixed income dashboard.
  tags:
  - fixed-income
  - analytics
  - bloomberg-enterprise-data
  - aladdin
  - snowflake
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: fi-analytics
    port: 8080
    tools:
    - name: run-fi-analytics
      description: Pull bond pricing, compute analytics, store, and refresh dashboards.
      inputParameters:
      - name: security_id
        in: body
        type: string
        description: Bloomberg bond identifier.
      - name: portfolio_id
        in: body
        type: string
        description: Aladdin portfolio for analytics context.
      - name: tableau_datasource_id
        in: body
        type: string
        description: Tableau datasource LUID to refresh.
      steps:
      - name: get-bond-price
        type: call
        call: bloomberg.get-snapshot
        with:
          security_id: '{{security_id}}'
      - name: compute-analytics
        type: call
        call: aladdin.compute-fi-analytics
        with:
          security_id: '{{security_id}}'
          portfolio_id: '{{portfolio_id}}'
          price: '{{get-bond-price.price}}'
      - name: store-analytics
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO fixed_income.analytics VALUES ('{{security_id}}', '{{compute-analytics.duration}}', '{{compute-analytics.convexity}}', CURRENT_TIMESTAMP())
      - name: refresh-dashboard
        type: call
        call: tableau.refresh-datasource
        with:
          datasource_id: '{{tableau_datasource_id}}'
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://bsapi.bloomberg.com/eap/catalogs/bbg/datasets
    authentication:
      type: bearer
      token: $secrets.bloomberg_eap_token
    resources:
    - name: snapshots
      path: /snapshots/{{security_id}}
      inputParameters:
      - name: security_id
        in: path
      operations:
      - name: get-snapshot
        method: GET
  - type: http
    namespace: aladdin
    baseUri: https://aladdin.blackrock.com/api/v2
    authentication:
      type: bearer
      token: $secrets.aladdin_token
    resources:
    - name: fi-analytics
      path: /analytics/fixed-income
      operations:
      - name: compute-fi-analytics
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://blackrock.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://tableau.blackrock.com/api/3.21
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /sites/default/datasources/{{datasource_id}}/refresh
      inputParameters:
      - name: datasource_id
        in: path
      operations:
      - name: refresh-datasource
        method: POST
Open in Framework → View in Fleet → fixed-income-pricing-and-analytics-pipeline.yml

Uploads investment reports and portfolio data to Azure Blob Storage for archival and distribution.

naftiko: '0.5'
info:
  label: Azure Blob Storage Upload
  description: Uploads investment reports and portfolio data to Azure Blob Storage for archival and distribution.
  tags:
  - cloud-storage
  - azure-blob-storage
capability:
  exposes:
  - type: mcp
    namespace: azure-blob
    port: 8080
    tools:
    - name: upload-blob
      description: Upload a file to an Azure Blob Storage container.
      inputParameters:
      - name: container
        in: body
        type: string
        description: The Azure Blob container name.
      - name: blob_name
        in: body
        type: string
        description: The destination blob name.
      call: azureblob.put-blob
      with:
        container: '{{container}}'
        blob_name: '{{blob_name}}'
      outputParameters:
      - name: url
        type: string
        mapping: $.url
      - name: etag
        type: string
        mapping: $.etag
  consumes:
  - type: http
    namespace: azureblob
    baseUri: https://blackrock.blob.core.windows.net
    authentication:
      type: apiKey
      name: x-ms-access-key
      in: header
      value: $secrets.azure_storage_key
    resources:
    - name: blobs
      path: /{{container}}/{{blob_name}}
      inputParameters:
      - name: container
        in: path
      - name: blob_name
        in: path
      operations:
      - name: put-blob
        method: PUT
Open in Framework → View in Fleet → azure-blob-storage-upload.yml

Triggers an Alteryx analytics workflow for portfolio risk decomposition, waits for completion, and stores the output in Snowflake.

naftiko: '0.5'
info:
  label: Alteryx Analytics Workflow Trigger
  description: Triggers an Alteryx analytics workflow for portfolio risk decomposition, waits for completion, and stores the output in Snowflake.
  tags:
  - analytics
  - alteryx
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: alteryx-analytics
    port: 8080
    tools:
    - name: run-alteryx-workflow
      description: Trigger an Alteryx workflow and persist results to Snowflake.
      inputParameters:
      - name: workflow_id
        in: body
        type: string
        description: The Alteryx Server workflow ID.
      - name: portfolio_id
        in: body
        type: string
        description: Portfolio identifier to pass as workflow parameter.
      steps:
      - name: trigger-workflow
        type: call
        call: alteryx.run-workflow
        with:
          workflow_id: '{{workflow_id}}'
          parameters: '{"portfolio_id": "{{portfolio_id}}"}'
      - name: store-output
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO analytics.alteryx_results SELECT * FROM TABLE(RESULT_SCAN('{{trigger-workflow.job_id}}'))
  consumes:
  - type: http
    namespace: alteryx
    baseUri: https://alteryx.blackrock.com/api/v3
    authentication:
      type: bearer
      token: $secrets.alteryx_token
    resources:
    - name: workflows
      path: /workflows/{{workflow_id}}/jobs
      inputParameters:
      - name: workflow_id
        in: path
      operations:
      - name: run-workflow
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://blackrock.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → alteryx-analytics-workflow-trigger.yml

Checks API gateway health via Datadog, scales Kubernetes pods if latency exceeds thresholds, logs the scaling event in ServiceNow, and notifies the platform team via Teams.

naftiko: '0.5'
info:
  label: API Gateway Health and Scaling Pipeline
  description: Checks API gateway health via Datadog, scales Kubernetes pods if latency exceeds thresholds, logs the scaling event in ServiceNow, and notifies the platform team via Teams.
  tags:
  - platform
  - datadog
  - kubernetes
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: gateway-scaling
    port: 8080
    tools:
    - name: check-and-scale-gateway
      description: Monitor API gateway health and auto-scale if needed.
      inputParameters:
      - name: gateway_service
        in: body
        type: string
        description: The API gateway service name.
      - name: latency_threshold_ms
        in: body
        type: integer
        description: P99 latency threshold in milliseconds.
      steps:
      - name: check-metrics
        type: call
        call: datadog.query-metrics
        with:
          query: p99:trace.http.request{service:{{gateway_service}}}
          period: 15m
      - name: scale-pods
        type: call
        call: kubernetes.scale-deployment
        with:
          namespace: api-gateway
          deployment: '{{gateway_service}}'
          replicas: 10
      - name: log-event
        type: call
        call: servicenow.create-change-request
        with:
          short_description: 'Auto-scale: {{gateway_service}} scaled to 10 replicas'
          description: P99 latency exceeded {{latency_threshold_ms}}ms. Auto-scaled to 10 replicas.
          category: auto_scaling
      - name: notify-platform
        type: call
        call: msteams.send-message
        with:
          recipient_upn: platform-team@blackrock.com
          text: 'API gateway {{gateway_service}} auto-scaled. Change request: {{log-event.number}}.'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /query
      inputParameters:
      - name: query
        in: query
      - name: period
        in: query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: kubernetes
    baseUri: https://aks.blackrock.com/apis/apps/v1
    authentication:
      type: bearer
      token: $secrets.k8s_token
    resources:
    - name: deployments
      path: /namespaces/{{namespace}}/deployments/{{deployment}}/scale
      inputParameters:
      - name: namespace
        in: path
      - name: deployment
        in: path
      operations:
      - name: scale-deployment
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://blackrock.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-requests
      path: /table/change_request
      operations:
      - name: create-change-request
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → api-gateway-health-and-scaling-pipeline.yml

Creates a shareable Grafana dashboard snapshot for investment platform performance metrics.

naftiko: '0.5'
info:
  label: Grafana Dashboard Snapshot
  description: Creates a shareable Grafana dashboard snapshot for investment platform performance metrics.
  tags:
  - monitoring
  - grafana
capability:
  exposes:
  - type: mcp
    namespace: grafana
    port: 8080
    tools:
    - name: create-snapshot
      description: Create a shareable snapshot of a Grafana dashboard.
      inputParameters:
      - name: dashboard_uid
        in: body
        type: string
        description: The Grafana dashboard UID.
      - name: expires_in
        in: body
        type: integer
        description: Snapshot expiry in seconds.
      call: grafana.create-snapshot
      with:
        dashboard_uid: '{{dashboard_uid}}'
        expires: '{{expires_in}}'
      outputParameters:
      - name: snapshot_url
        type: string
        mapping: $.url
      - name: snapshot_id
        type: string
        mapping: $.id
  consumes:
  - type: http
    namespace: grafana
    baseUri: https://grafana.blackrock.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_token
    resources:
    - name: snapshots
      path: /snapshots
      operations:
      - name: create-snapshot
        method: POST
Open in Framework → View in Fleet → grafana-dashboard-snapshot.yml

Retrieves company engagement records from Salesforce, scores ESG progress in Snowflake, updates Aladdin ESG signals, and distributes reports via SharePoint.

naftiko: '0.5'
info:
  label: ESG Engagement Tracking Pipeline
  description: Retrieves company engagement records from Salesforce, scores ESG progress in Snowflake, updates Aladdin ESG signals, and distributes reports via SharePoint.
  tags:
  - esg
  - engagement
  - salesforce
  - snowflake
  - aladdin
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: esg-engagement
    port: 8080
    tools:
    - name: track-engagement
      description: Track ESG engagement, score progress, update signals, and distribute.
      inputParameters:
      - name: company_id
        in: body
        type: string
        description: The company identifier.
      steps:
      - name: get-engagements
        type: call
        call: salesforce.get-engagement-records
        with:
          company_id: '{{company_id}}'
      - name: score-progress
        type: call
        call: snowflake.execute-statement
        with:
          statement: CALL SCORE_ESG_ENGAGEMENT('{{company_id}}')
          warehouse: ESG_WH
      - name: update-signals
        type: call
        call: aladdin.update-esg-signal
        with:
          company_id: '{{company_id}}'
          engagement_score: '{{score-progress.engagement_score}}'
      - name: publish-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: esg_site
          folder_path: Engagements/{{company_id}}
          file_name: engagement_report_{{company_id}}.pdf
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://blackrock.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: engagements
      path: /sobjects/Engagement__c
      operations:
      - name: get-engagement-records
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://blackrock.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: aladdin
    baseUri: https://aladdin.blackrock.com/api/v2
    authentication:
      type: bearer
      token: $secrets.aladdin_token
    resources:
    - name: esg-signals
      path: /esg/signals
      operations:
      - name: update-esg-signal
        method: PATCH
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → esg-engagement-tracking-pipeline.yml

When a Salesforce opportunity is won, provisions an Aladdin portfolio, creates a DocuSign IMA envelope, and opens a ServiceNow implementation ticket.

naftiko: '0.5'
info:
  label: Salesforce Opportunity to Aladdin Pipeline
  description: When a Salesforce opportunity is won, provisions an Aladdin portfolio, creates a DocuSign IMA envelope, and opens a ServiceNow implementation ticket.
  tags:
  - sales
  - salesforce
  - aladdin
  - docusign
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: opportunity-pipeline
    port: 8080
    tools:
    - name: process-won-opportunity
      description: Provision portfolio and initiate client agreement when an opportunity is won.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: create-portfolio
        type: call
        call: aladdin.create-portfolio
        with:
          name: '{{get-opportunity.Account.Name}} — {{get-opportunity.Name}}'
          mandate_type: '{{get-opportunity.Investment_Strategy__c}}'
      - name: send-ima
        type: call
        call: docusign.create-envelope
        with:
          template_id: IMA-STANDARD
          signer_email: '{{get-opportunity.Contact_Email__c}}'
          signer_name: '{{get-opportunity.Contact_Name__c}}'
          portfolio_id: '{{create-portfolio.portfolio_id}}'
      - name: open-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Implementation: {{get-opportunity.Account.Name}}'
          description: 'Opportunity {{opportunity_id}} won. Portfolio: {{create-portfolio.portfolio_id}}. IMA: {{send-ima.envelope_id}}.'
          category: client_implementation
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://blackrock.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
  - type: http
    namespace: aladdin
    baseUri: https://aladdin.blackrock.com/api/v2
    authentication:
      type: bearer
      token: $secrets.aladdin_token
    resources:
    - name: portfolios
      path: /portfolios
      operations:
      - name: create-portfolio
        method: POST
  - type: http
    namespace: docusign
    baseUri: https://na4.docusign.net/restapi/v2.1/accounts/$secrets.docusign_account_id
    authentication:
      type: bearer
      token: $secrets.docusign_token
    resources:
    - name: envelopes
      path: /envelopes
      operations:
      - name: create-envelope
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://blackrock.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → salesforce-opportunity-to-aladdin-pipeline.yml

Monitors Aladdin for exposure limit breaches, creates a compliance Jira ticket, notifies the risk committee via Microsoft Teams, and logs the breach in Snowflake for regulatory reporting.

naftiko: '0.5'
info:
  label: Aladdin Exposure Limit Breach Handler
  description: Monitors Aladdin for exposure limit breaches, creates a compliance Jira ticket, notifies the risk committee via Microsoft Teams, and logs the breach in Snowflake for regulatory reporting.
  tags:
  - compliance
  - risk-analytics
  - aladdin
  - jira
  - microsoft-teams
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: limit-breach
    port: 8080
    tools:
    - name: handle-limit-breach
      description: Process an exposure limit breach with escalation, notification, and audit logging.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The Aladdin portfolio identifier.
      - name: limit_type
        in: body
        type: string
        description: Type of limit breached (e.g. sector, issuer, duration).
      - name: risk_committee_channel
        in: body
        type: string
        description: Teams channel ID for risk committee.
      steps:
      - name: get-breach-details
        type: call
        call: aladdin.get-limit-breaches
        with:
          portfolio_id: '{{portfolio_id}}'
          limit_type: '{{limit_type}}'
      - name: create-compliance-ticket
        type: call
        call: jira.create-issue
        with:
          project: COMPLIANCE
          summary: 'Exposure limit breach: {{portfolio_id}} - {{limit_type}}'
          description: 'Breach details: {{get-breach-details.breach_amount}} over limit of {{get-breach-details.limit_value}}. Securities: {{get-breach-details.securities}}.'
          issue_type: Bug
          priority: High
      - name: notify-risk-committee
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{risk_committee_channel}}'
          text: 'LIMIT BREACH: Portfolio {{portfolio_id}}, {{limit_type}} limit exceeded by {{get-breach-details.breach_amount}}. Jira: {{create-compliance-ticket.key}}.'
      - name: log-breach
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO compliance.limit_breaches VALUES ('{{portfolio_id}}', '{{limit_type}}', '{{get-breach-details.breach_amount}}', '{{create-compliance-ticket.key}}', CURRENT_TIMESTAMP())
  consumes:
  - type: http
    namespace: aladdin
    baseUri: https://aladdin.blackrock.com/api/v2
    authentication:
      type: bearer
      token: $secrets.aladdin_token
    resources:
    - name: limit-breaches
      path: /portfolios/{{portfolio_id}}/limits/breaches?type={{limit_type}}
      inputParameters:
      - name: portfolio_id
        in: path
      - name: limit_type
        in: query
      operations:
      - name: get-limit-breaches
        method: GET
  - type: http
    namespace: jira
    baseUri: https://blackrock.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
  - type: http
    namespace: snowflake
    baseUri: https://blackrock.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → aladdin-exposure-limit-breach-handler.yml

Triggers an Informatica data quality job for client reference data, stores quality scores in Snowflake, and creates a ServiceNow ticket for data stewards if quality drops below threshold.

naftiko: '0.5'
info:
  label: Informatica Data Quality Pipeline
  description: Triggers an Informatica data quality job for client reference data, stores quality scores in Snowflake, and creates a ServiceNow ticket for data stewards if quality drops below threshold.
  tags:
  - data-quality
  - informatica
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: run-data-quality-check
      description: Execute Informatica DQ job and escalate quality issues.
      inputParameters:
      - name: job_id
        in: body
        type: string
        description: Informatica DQ job identifier.
      - name: quality_threshold
        in: body
        type: number
        description: Minimum acceptable quality score (0-100).
      steps:
      - name: run-dq-job
        type: call
        call: informatica.run-job
        with:
          job_id: '{{job_id}}'
      - name: store-scores
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO data_quality.scores VALUES ('{{job_id}}', '{{run-dq-job.quality_score}}', CURRENT_TIMESTAMP())
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Data quality below threshold for job {{job_id}}
          category: data_quality
          assigned_group: Data_Stewards
          description: 'Quality score: {{run-dq-job.quality_score}}. Threshold: {{quality_threshold}}.'
  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/{{job_id}}
      inputParameters:
      - name: job_id
        in: path
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://blackrock.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://blackrock.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → informatica-data-quality-pipeline.yml

Extracts portfolio data from Aladdin, queries compliance metadata from Snowflake, generates a regulatory report, uploads to SharePoint, and creates a DocuSign envelope for sign-off.

naftiko: '0.5'
info:
  label: Regulatory Filing Preparation Workflow
  description: Extracts portfolio data from Aladdin, queries compliance metadata from Snowflake, generates a regulatory report, uploads to SharePoint, and creates a DocuSign envelope for sign-off.
  tags:
  - compliance
  - regulatory
  - aladdin
  - snowflake
  - sharepoint
  - docusign
capability:
  exposes:
  - type: mcp
    namespace: regulatory-filing
    port: 8080
    tools:
    - name: prepare-regulatory-filing
      description: Assemble a regulatory filing package from portfolio data, compliance metadata, and route for signature.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The Aladdin portfolio identifier.
      - name: filing_type
        in: body
        type: string
        description: Regulatory filing type (e.g. 13F, N-PORT).
      - name: signer_email
        in: body
        type: string
        description: Email of the authorized signatory.
      steps:
      - name: get-holdings
        type: call
        call: aladdin.get-holdings
        with:
          portfolio_id: '{{portfolio_id}}'
      - name: get-compliance-metadata
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT * FROM compliance.filing_metadata WHERE portfolio_id = '{{portfolio_id}}' AND filing_type = '{{filing_type}}'
      - name: upload-filing
        type: call
        call: sharepoint.upload-file
        with:
          site_id: regulatory-filings
          file_path: Filings/{{filing_type}}/{{portfolio_id}}_draft.pdf
          content: '{{get-compliance-metadata.data}}'
      - name: send-for-signature
        type: call
        call: docusign.create-envelope
        with:
          signer_email: '{{signer_email}}'
          document_url: '{{upload-filing.url}}'
          subject: '{{filing_type}} Filing - Portfolio {{portfolio_id}}'
  consumes:
  - type: http
    namespace: aladdin
    baseUri: https://aladdin.blackrock.com/api/v2/portfolios
    authentication:
      type: bearer
      token: $secrets.aladdin_token
    resources:
    - name: holdings
      path: /{{portfolio_id}}/holdings
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: get-holdings
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://blackrock.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: docusign
    baseUri: https://na4.docusign.net/restapi/v2.1/accounts/blackrock
    authentication:
      type: bearer
      token: $secrets.docusign_token
    resources:
    - name: envelopes
      path: /envelopes
      operations:
      - name: create-envelope
        method: POST
Open in Framework → View in Fleet → regulatory-filing-preparation-workflow.yml

Submits a new equity order through Bloomberg EMSX, specifying ticker, side, quantity, order type, and limit price.

naftiko: '0.5'
info:
  label: Bloomberg EMSX Trade Submission
  description: Submits a new equity order through Bloomberg EMSX, specifying ticker, side, quantity, order type, and limit price.
  tags:
  - trading
  - bloomberg-emsx
capability:
  exposes:
  - type: mcp
    namespace: trade-execution
    port: 8080
    tools:
    - name: submit-emsx-order
      description: Submit an equity order via Bloomberg EMSX with order parameters.
      inputParameters:
      - name: ticker
        in: body
        type: string
        description: Bloomberg ticker symbol.
      - name: side
        in: body
        type: string
        description: BUY or SELL.
      - name: quantity
        in: body
        type: integer
        description: Number of shares.
      - name: order_type
        in: body
        type: string
        description: Order type (MARKET, LIMIT).
      - name: limit_price
        in: body
        type: number
        description: Limit price if applicable.
      call: emsx.create-order
      with:
        ticker: '{{ticker}}'
        side: '{{side}}'
        quantity: '{{quantity}}'
        order_type: '{{order_type}}'
        limit_price: '{{limit_price}}'
  consumes:
  - type: http
    namespace: emsx
    baseUri: https://bsapi.bloomberg.com/emsapi/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_emsx_token
    resources:
    - name: orders
      path: /orders
      operations:
      - name: create-order
        method: POST
Open in Framework → View in Fleet → bloomberg-emsx-trade-submission.yml

Queries Databricks for the latest ML model inference metrics, checks drift thresholds in Snowflake, and creates a Jira ticket if model performance degrades beyond acceptable limits.

naftiko: '0.5'
info:
  label: Databricks ML Model Performance Monitor
  description: Queries Databricks for the latest ML model inference metrics, checks drift thresholds in Snowflake, and creates a Jira ticket if model performance degrades beyond acceptable limits.
  tags:
  - machine-learning
  - monitoring
  - databricks
  - snowflake
  - jira
capability:
  exposes:
  - type: mcp
    namespace: ml-monitoring
    port: 8080
    tools:
    - name: check-model-performance
      description: Monitor a deployed ML model's performance metrics and escalate if degradation is detected.
      inputParameters:
      - name: model_name
        in: body
        type: string
        description: The registered Databricks model name.
      - name: drift_threshold
        in: body
        type: number
        description: Maximum acceptable drift score.
      steps:
      - name: get-model-metrics
        type: call
        call: databricks.get-model-metrics
        with:
          model_name: '{{model_name}}'
      - name: check-drift
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT drift_score FROM ml.model_drift WHERE model_name = '{{model_name}}' ORDER BY computed_at DESC LIMIT 1
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: MLOPS
          summary: 'Model drift alert: {{model_name}} - score {{check-drift.drift_score}}'
          description: 'Model {{model_name}} drift score {{check-drift.drift_score}} exceeds threshold {{drift_threshold}}. Accuracy: {{get-model-metrics.accuracy}}.'
          issue_type: Bug
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://blackrock.cloud.databricks.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: model-metrics
      path: /mlflow/runs/search
      operations:
      - name: get-model-metrics
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://blackrock.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://blackrock.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → databricks-ml-model-performance-monitor.yml

Retrieves portfolio holdings from Aladdin, queries risk factor exposures from Snowflake, generates a summary, and uploads the report to SharePoint for distribution.

naftiko: '0.5'
info:
  label: Portfolio Risk Report Generator
  description: Retrieves portfolio holdings from Aladdin, queries risk factor exposures from Snowflake, generates a summary, and uploads the report to SharePoint for distribution.
  tags:
  - risk-analytics
  - portfolio-management
  - aladdin
  - snowflake
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: risk-reporting
    port: 8080
    tools:
    - name: generate-risk-report
      description: Build a risk report for a portfolio by combining holdings and factor exposures, then upload to SharePoint.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The Aladdin portfolio identifier.
      - name: as_of_date
        in: body
        type: string
        description: Report date in YYYY-MM-DD format.
      steps:
      - name: get-holdings
        type: call
        call: aladdin.get-holdings
        with:
          portfolio_id: '{{portfolio_id}}'
      - name: get-risk-factors
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT factor_name, exposure, contribution FROM risk.factor_exposures WHERE portfolio_id = '{{portfolio_id}}' AND as_of_date = '{{as_of_date}}'
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: risk-reports-site
          file_path: RiskReports/{{portfolio_id}}_{{as_of_date}}.json
          content: '{{get-risk-factors.data}}'
  consumes:
  - type: http
    namespace: aladdin
    baseUri: https://aladdin.blackrock.com/api/v2/portfolios
    authentication:
      type: bearer
      token: $secrets.aladdin_token
    resources:
    - name: holdings
      path: /{{portfolio_id}}/holdings
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: get-holdings
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://blackrock.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → portfolio-risk-report-generator.yml

Downloads a file from Box by file ID, returning the file content and metadata for investment documentation retrieval.

naftiko: '0.5'
info:
  label: Box Document Download
  description: Downloads a file from Box by file ID, returning the file content and metadata for investment documentation retrieval.
  tags:
  - document-management
  - box
capability:
  exposes:
  - type: mcp
    namespace: box-docs
    port: 8080
    tools:
    - name: download-file
      description: Download a file from Box by its file ID.
      inputParameters:
      - name: file_id
        in: body
        type: string
        description: The Box file identifier.
      call: box.get-file-content
      with:
        file_id: '{{file_id}}'
  consumes:
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files/{{file_id}}/content
      inputParameters:
      - name: file_id
        in: path
      operations:
      - name: get-file-content
        method: GET
Open in Framework → View in Fleet → box-document-download.yml

Retrieves a Salesforce account summary for an institutional client, returning AUM, relationship tier, and contact details.

naftiko: '0.5'
info:
  label: Salesforce Client Account Summary
  description: Retrieves a Salesforce account summary for an institutional client, returning AUM, relationship tier, and contact details.
  tags:
  - sales
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: crm
    port: 8080
    tools:
    - name: get-client-account
      description: Fetch a Salesforce account record for an institutional client by account ID.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account identifier.
      call: salesforce.get-account
      with:
        account_id: '{{account_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://blackrock.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
Open in Framework → View in Fleet → salesforce-client-account-summary.yml

Runs a Splunk search query against BlackRock security logs to investigate access events and anomalies.

naftiko: '0.5'
info:
  label: Splunk Security Log Query
  description: Runs a Splunk search query against BlackRock security logs to investigate access events and anomalies.
  tags:
  - security
  - splunk
capability:
  exposes:
  - type: mcp
    namespace: security-logs
    port: 8080
    tools:
    - name: search-security-logs
      description: Execute a Splunk search query against security event indexes.
      inputParameters:
      - name: search_query
        in: body
        type: string
        description: The Splunk SPL search query.
      call: splunk.create-search
      with:
        search: '{{search_query}}'
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.blackrock.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search-jobs
      path: /search/jobs
      operations:
      - name: create-search
        method: POST
Open in Framework → View in Fleet → splunk-security-log-query.yml

Retrieves pending expense reports from SAP Concur, matches them against budget codes in Snowflake, and creates Workday journal entries for approved expenses.

naftiko: '0.5'
info:
  label: SAP Concur Expense Report Sync
  description: Retrieves pending expense reports from SAP Concur, matches them against budget codes in Snowflake, and creates Workday journal entries for approved expenses.
  tags:
  - finance
  - expenses
  - sap-concur
  - snowflake
  - workday
capability:
  exposes:
  - type: mcp
    namespace: expense-sync
    port: 8080
    tools:
    - name: sync-expenses
      description: Pull Concur expenses, validate budgets, and post to Workday.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The SAP Concur expense report ID.
      steps:
      - name: get-expense-report
        type: call
        call: concur.get-report
        with:
          report_id: '{{report_id}}'
      - name: validate-budget
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT budget_code, remaining_amount FROM finance.budgets WHERE cost_center = '{{get-expense-report.cost_center}}'
      - name: post-journal
        type: call
        call: workday.create-journal
        with:
          cost_center: '{{get-expense-report.cost_center}}'
          amount: '{{get-expense-report.total_amount}}'
          description: 'Expense report {{report_id}}: {{get-expense-report.purpose}}'
  consumes:
  - type: http
    namespace: concur
    baseUri: https://us2.api.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: reports
      path: /expense/reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-report
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://blackrock.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: journals
      path: /financial-management/journal-entries
      operations:
      - name: create-journal
        method: POST
Open in Framework → View in Fleet → sap-concur-expense-report-sync.yml

Retrieves fundamental financial data for a company from FactSet, including revenue, earnings, P/E ratio, and market cap.

naftiko: '0.5'
info:
  label: FactSet Company Fundamentals Lookup
  description: Retrieves fundamental financial data for a company from FactSet, including revenue, earnings, P/E ratio, and market cap.
  tags:
  - research
  - factset
capability:
  exposes:
  - type: mcp
    namespace: factset-fundamentals
    port: 8080
    tools:
    - name: get-fundamentals
      description: Retrieve key fundamental metrics for a company from FactSet given a ticker symbol.
      inputParameters:
      - name: ticker
        in: body
        type: string
        description: The equity ticker symbol.
      call: factset.get-fundamentals
      with:
        ticker: '{{ticker}}'
  consumes:
  - type: http
    namespace: factset
    baseUri: https://api.factset.com/content/factset-fundamentals/v2
    authentication:
      type: basic
      username: $secrets.factset_user
      password: $secrets.factset_password
    resources:
    - name: fundamentals
      path: /fundamentals?ids={{ticker}}
      inputParameters:
      - name: ticker
        in: query
      operations:
      - name: get-fundamentals
        method: GET
Open in Framework → View in Fleet → factset-company-fundamentals-lookup.yml

Retrieves approved invoices from Coupa, validates against Oracle Financials GL codes, posts journal entries in Workday, and notifies the accounts payable team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Coupa Invoice Processing Pipeline
  description: Retrieves approved invoices from Coupa, validates against Oracle Financials GL codes, posts journal entries in Workday, and notifies the accounts payable team via Microsoft Teams.
  tags:
  - finance
  - accounts-payable
  - coupa
  - oracle-financials
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: invoice-processing
    port: 8080
    tools:
    - name: process-invoice
      description: Validate and post approved Coupa invoices to Workday with GL verification.
      inputParameters:
      - name: invoice_id
        in: body
        type: string
        description: The Coupa invoice ID.
      - name: ap_channel_id
        in: body
        type: string
        description: Teams channel for AP notifications.
      steps:
      - name: get-invoice
        type: call
        call: coupa.get-invoice
        with:
          invoice_id: '{{invoice_id}}'
      - name: validate-gl
        type: call
        call: oracle.validate-gl-code
        with:
          gl_code: '{{get-invoice.gl_code}}'
      - name: post-journal
        type: call
        call: workday.create-journal
        with:
          amount: '{{get-invoice.total}}'
          description: Coupa invoice {{invoice_id}} - {{get-invoice.supplier_name}}
          gl_code: '{{get-invoice.gl_code}}'
      - name: notify-ap
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{ap_channel_id}}'
          text: 'Invoice {{invoice_id}} from {{get-invoice.supplier_name}} posted. Amount: {{get-invoice.total}}. Journal: {{post-journal.journal_id}}.'
  consumes:
  - type: http
    namespace: coupa
    baseUri: https://blackrock.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: oracle
    baseUri: https://oracle-fin.blackrock.com/fscmRestApi/resources/v1
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: gl-codes
      path: /generalLedgerAccounts/{{gl_code}}
      inputParameters:
      - name: gl_code
        in: path
      operations:
      - name: validate-gl-code
        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: journals
      path: /financial-management/journal-entries
      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: channel-messages
      path: /teams/{{channel_id}}/channels/General/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → coupa-invoice-processing-pipeline.yml

Triggers a Tableau Server extract refresh for a specified risk analytics workbook to ensure dashboards reflect the latest data.

naftiko: '0.5'
info:
  label: Tableau Risk Dashboard Refresh
  description: Triggers a Tableau Server extract refresh for a specified risk analytics workbook to ensure dashboards reflect the latest data.
  tags:
  - analytics
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: analytics-refresh
    port: 8080
    tools:
    - name: refresh-risk-dashboard
      description: Trigger an extract refresh on a Tableau workbook by datasource ID.
      inputParameters:
      - name: datasource_id
        in: body
        type: string
        description: The Tableau datasource LUID.
      call: tableau.refresh-datasource
      with:
        datasource_id: '{{datasource_id}}'
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://tableau.blackrock.com/api/3.21
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /sites/default/datasources/{{datasource_id}}/refresh
      inputParameters:
      - name: datasource_id
        in: path
      operations:
      - name: refresh-datasource
        method: POST
Open in Framework → View in Fleet → tableau-risk-dashboard-refresh.yml

Before submitting a trade through Bloomberg EMSX, validates the order against Aladdin compliance rules. If the order passes, submits to EMSX; if it fails, creates a Jira compliance review ticket and notifies the trader via Microsoft Teams.

naftiko: '0.5'
info:
  label: Trade Compliance Pre-Check and EMSX Submission
  description: Before submitting a trade through Bloomberg EMSX, validates the order against Aladdin compliance rules. If the order passes, submits to EMSX; if it fails, creates a Jira compliance review ticket and notifies the trader via Microsoft Teams.
  tags:
  - trading
  - compliance
  - aladdin
  - bloomberg-emsx
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: compliant-trade
    port: 8080
    tools:
    - name: submit-compliant-trade
      description: Validate a trade against compliance rules and submit to EMSX if approved, or escalate if rejected.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The Aladdin portfolio identifier.
      - name: ticker
        in: body
        type: string
        description: Security ticker symbol.
      - name: side
        in: body
        type: string
        description: BUY or SELL.
      - name: quantity
        in: body
        type: integer
        description: Number of shares.
      - name: trader_email
        in: body
        type: string
        description: Email of the trader for notification.
      steps:
      - name: compliance-check
        type: call
        call: aladdin.check-compliance
        with:
          portfolio_id: '{{portfolio_id}}'
          ticker: '{{ticker}}'
          side: '{{side}}'
          quantity: '{{quantity}}'
      - name: submit-order
        type: call
        call: emsx.create-order
        with:
          ticker: '{{ticker}}'
          side: '{{side}}'
          quantity: '{{quantity}}'
          order_type: MARKET
      - name: notify-trader
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{trader_email}}'
          text: 'Trade {{side}} {{quantity}} {{ticker}} for portfolio {{portfolio_id}} submitted. EMSX order ref: {{submit-order.order_id}}.'
  consumes:
  - type: http
    namespace: aladdin
    baseUri: https://aladdin.blackrock.com/api/v2
    authentication:
      type: bearer
      token: $secrets.aladdin_token
    resources:
    - name: compliance
      path: /compliance/check
      operations:
      - name: check-compliance
        method: POST
  - type: http
    namespace: emsx
    baseUri: https://bsapi.bloomberg.com/emsapi/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_emsx_token
    resources:
    - name: orders
      path: /orders
      operations:
      - name: create-order
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → trade-compliance-pre-check-and-emsx-submission.yml

Posts notifications to Microsoft Teams channels for investment team alerts and portfolio updates.

naftiko: '0.5'
info:
  label: Microsoft Teams Channel Notification
  description: Posts notifications to Microsoft Teams channels for investment team alerts and portfolio updates.
  tags:
  - messaging
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: msteams
    port: 8080
    tools:
    - name: post-message
      description: Post a message to a Microsoft Teams channel.
      inputParameters:
      - name: channel_id
        in: body
        type: string
        description: The Teams channel ID.
      - name: text
        in: body
        type: string
        description: Message text.
      call: msteams.post-channel-message
      with:
        channel_id: '{{channel_id}}'
        text: '{{text}}'
      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/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → microsoft-teams-channel-notification.yml

Tracks private market deal progress by fetching deal data from Salesforce, updating Aladdin with valuation, logging milestones in Confluence, and alerting the deal team via Teams.

naftiko: '0.5'
info:
  label: Private Markets Deal Tracking Pipeline
  description: Tracks private market deal progress by fetching deal data from Salesforce, updating Aladdin with valuation, logging milestones in Confluence, and alerting the deal team via Teams.
  tags:
  - alternatives
  - salesforce
  - aladdin
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: deal-tracking
    port: 8080
    tools:
    - name: update-deal-status
      description: Update deal tracking across Salesforce, Aladdin, Confluence, and Teams.
      inputParameters:
      - name: deal_id
        in: body
        type: string
        description: The Salesforce deal record ID.
      - name: valuation
        in: body
        type: number
        description: Updated deal valuation.
      - name: status
        in: body
        type: string
        description: Deal status (pipeline, due_diligence, committed, closed).
      steps:
      - name: get-deal
        type: call
        call: salesforce.get-deal
        with:
          deal_id: '{{deal_id}}'
      - name: update-valuation
        type: call
        call: aladdin.update-private-asset
        with:
          asset_ref: '{{get-deal.Aladdin_Ref__c}}'
          valuation: '{{valuation}}'
          status: '{{status}}'
      - name: log-milestone
        type: call
        call: confluence.create-page
        with:
          space_key: DEALS
          title: 'Deal Update: {{get-deal.Name}} — {{status}}'
          body: 'Valuation: ${{valuation}}. Status: {{status}}. Updated by: {{get-deal.Owner.Name}}.'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-deal.Owner.Email}}'
          text: 'Deal {{get-deal.Name}} updated to {{status}}. Valuation: ${{valuation}}. Confluence: {{log-milestone.url}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://blackrock.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: deals
      path: /sobjects/Deal__c/{{deal_id}}
      inputParameters:
      - name: deal_id
        in: path
      operations:
      - name: get-deal
        method: GET
  - type: http
    namespace: aladdin
    baseUri: https://aladdin.blackrock.com/api/v2
    authentication:
      type: bearer
      token: $secrets.aladdin_token
    resources:
    - name: private-assets
      path: /private-assets/{{asset_ref}}
      inputParameters:
      - name: asset_ref
        in: path
      operations:
      - name: update-private-asset
        method: PATCH
  - type: http
    namespace: confluence
    baseUri: https://blackrock.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → private-markets-deal-tracking-pipeline.yml

Executes an FX trade via Tradeweb, books the trade in Aladdin, generates a SWIFT confirmation, and logs the settlement in ServiceNow.

naftiko: '0.5'
info:
  label: FX Trade Execution and Settlement
  description: Executes an FX trade via Tradeweb, books the trade in Aladdin, generates a SWIFT confirmation, and logs the settlement in ServiceNow.
  tags:
  - fx-trading
  - tradeweb
  - aladdin
  - swift
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: fx-execution
    port: 8080
    tools:
    - name: execute-fx-trade
      description: Execute an FX trade and process through booking, confirmation, and settlement tracking.
      inputParameters:
      - name: currency_pair
        in: body
        type: string
        description: Currency pair (e.g. EUR/USD).
      - name: amount
        in: body
        type: number
        description: Notional amount.
      - name: direction
        in: body
        type: string
        description: BUY or SELL.
      - name: portfolio_id
        in: body
        type: string
        description: Aladdin portfolio ID.
      steps:
      - name: execute-trade
        type: call
        call: tradeweb.submit-rfq
        with:
          currency_pair: '{{currency_pair}}'
          amount: '{{amount}}'
          direction: '{{direction}}'
      - name: book-trade
        type: call
        call: aladdin.create-trade
        with:
          portfolio_id: '{{portfolio_id}}'
          instrument: '{{currency_pair}}'
          quantity: '{{amount}}'
          price: '{{execute-trade.rate}}'
      - name: send-confirmation
        type: call
        call: swift.send-mt300
        with:
          trade_ref: '{{book-trade.trade_id}}'
          counterparty_bic: '{{execute-trade.counterparty_bic}}'
          amount: '{{amount}}'
          rate: '{{execute-trade.rate}}'
      - name: track-settlement
        type: call
        call: servicenow.create-task
        with:
          short_description: 'FX settlement: {{currency_pair}} {{amount}} @ {{execute-trade.rate}}'
          description: 'Trade: {{book-trade.trade_id}}. SWIFT: {{send-confirmation.reference}}. Settlement date: {{execute-trade.settlement_date}}.'
          category: fx_settlement
  consumes:
  - type: http
    namespace: tradeweb
    baseUri: https://api.tradeweb.com/v1
    authentication:
      type: bearer
      token: $secrets.tradeweb_token
    resources:
    - name: rfqs
      path: /fx/rfq
      operations:
      - name: submit-rfq
        method: POST
  - type: http
    namespace: aladdin
    baseUri: https://aladdin.blackrock.com/api/v2
    authentication:
      type: bearer
      token: $secrets.aladdin_token
    resources:
    - name: trades
      path: /portfolios/{{portfolio_id}}/trades
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: create-trade
        method: POST
  - type: http
    namespace: swift
    baseUri: https://swift.blackrock.com/api/v1
    authentication:
      type: bearer
      token: $secrets.swift_token
    resources:
    - name: messages
      path: /messages/mt300
      operations:
      - name: send-mt300
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://blackrock.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → fx-trade-execution-and-settlement.yml

Retrieves the signing status of a DocuSign envelope used for IMA or subscription agreements, returning recipient status and completion timestamps.

naftiko: '0.5'
info:
  label: DocuSign Envelope Status
  description: Retrieves the signing status of a DocuSign envelope used for IMA or subscription agreements, returning recipient status and completion timestamps.
  tags:
  - legal
  - docusign
capability:
  exposes:
  - type: mcp
    namespace: docusign
    port: 8080
    tools:
    - name: get-envelope-status
      description: Look up the current status of a DocuSign envelope by envelope ID.
      inputParameters:
      - name: envelope_id
        in: body
        type: string
        description: The DocuSign envelope identifier.
      call: docusign.get-envelope
      with:
        envelope_id: '{{envelope_id}}'
  consumes:
  - type: http
    namespace: docusign
    baseUri: https://na4.docusign.net/restapi/v2.1/accounts/$secrets.docusign_account_id
    authentication:
      type: bearer
      token: $secrets.docusign_token
    resources:
    - name: envelopes
      path: /envelopes/{{envelope_id}}
      inputParameters:
      - name: envelope_id
        in: path
      operations:
      - name: get-envelope
        method: GET
Open in Framework → View in Fleet → docusign-envelope-status.yml

Fetches candidate applications from Workday Recruiting, scores them using an internal ML model on Databricks, and updates candidate status back in Workday.

naftiko: '0.5'
info:
  label: Workday Recruiting Candidate Pipeline
  description: Fetches candidate applications from Workday Recruiting, scores them using an internal ML model on Databricks, and updates candidate status back in Workday.
  tags:
  - hr
  - recruiting
  - workday-recruiting
  - databricks
capability:
  exposes:
  - type: mcp
    namespace: recruiting-pipeline
    port: 8080
    tools:
    - name: score-candidates
      description: Fetch candidates from Workday Recruiting, score via ML, and update statuses.
      inputParameters:
      - name: job_requisition_id
        in: body
        type: string
        description: The Workday job requisition ID.
      steps:
      - name: get-candidates
        type: call
        call: workday-recruiting.get-applications
        with:
          requisition_id: '{{job_requisition_id}}'
      - name: score-candidates
        type: call
        call: databricks.run-inference
        with:
          model_name: candidate-scoring
          input_data: '{{get-candidates.applications}}'
      - name: update-status
        type: call
        call: workday-recruiting.update-application
        with:
          requisition_id: '{{job_requisition_id}}'
          scores: '{{score-candidates.predictions}}'
  consumes:
  - type: http
    namespace: workday-recruiting
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1/recruiting
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: applications
      path: /requisitions/{{requisition_id}}/applications
      inputParameters:
      - name: requisition_id
        in: path
      operations:
      - name: get-applications
        method: GET
    - name: update
      path: /requisitions/{{requisition_id}}/applications
      inputParameters:
      - name: requisition_id
        in: path
      operations:
      - name: update-application
        method: PATCH
  - type: http
    namespace: databricks
    baseUri: https://blackrock.cloud.databricks.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: serving
      path: /serving-endpoints/{{model_name}}/invocations
      inputParameters:
      - name: model_name
        in: path
      operations:
      - name: run-inference
        method: POST
Open in Framework → View in Fleet → workday-recruiting-candidate-pipeline.yml

Triggers a refresh of a Power BI dataset used for portfolio performance reporting.

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

Fetches current portfolio holdings from BlackRock's Aladdin platform for a given portfolio ID, returning positions, asset classes, and market values.

naftiko: '0.5'
info:
  label: Aladdin Portfolio Holdings Retrieval
  description: Fetches current portfolio holdings from BlackRock's Aladdin platform for a given portfolio ID, returning positions, asset classes, and market values.
  tags:
  - portfolio-management
  - aladdin
capability:
  exposes:
  - type: mcp
    namespace: aladdin-portfolio
    port: 8080
    tools:
    - name: get-portfolio-holdings
      description: Retrieve all current holdings for a specified Aladdin portfolio, including ticker, quantity, market value, and asset class.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The Aladdin portfolio identifier.
      call: aladdin.get-holdings
      with:
        portfolio_id: '{{portfolio_id}}'
  consumes:
  - type: http
    namespace: aladdin
    baseUri: https://aladdin.blackrock.com/api/v2/portfolios
    authentication:
      type: bearer
      token: $secrets.aladdin_token
    resources:
    - name: holdings
      path: /{{portfolio_id}}/holdings
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: get-holdings
        method: GET
Open in Framework → View in Fleet → aladdin-portfolio-holdings-retrieval.yml

Extracts positions from Aladdin, generates regulatory report data in Snowflake, exports to Azure Blob Storage, and creates a Confluence page with the filing summary.

naftiko: '0.5'
info:
  label: Regulatory Reporting Automation
  description: Extracts positions from Aladdin, generates regulatory report data in Snowflake, exports to Azure Blob Storage, and creates a Confluence page with the filing summary.
  tags:
  - regulatory
  - aladdin
  - snowflake
  - azure-blob-storage
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: reg-reporting
    port: 8080
    tools:
    - name: generate-regulatory-report
      description: Generate and file a regulatory report with supporting documentation.
      inputParameters:
      - name: report_type
        in: body
        type: string
        description: Regulatory report type (e.g. 13F, N-PORT, PF).
      - name: reporting_period
        in: body
        type: string
        description: Reporting period end date in YYYY-MM-DD.
      steps:
      - name: extract-positions
        type: call
        call: aladdin.get-all-positions
        with:
          as_of_date: '{{reporting_period}}'
      - name: generate-report
        type: call
        call: snowflake.execute-statement
        with:
          statement: CALL REG.GENERATE_REPORT('{{report_type}}', '{{reporting_period}}')
      - name: export-filing
        type: call
        call: azure-blob.upload
        with:
          container: regulatory-filings
          blob_name: '{{report_type}}/{{reporting_period}}/filing.xml'
          content: '{{generate-report.filing_xml}}'
      - name: create-summary
        type: call
        call: confluence.create-page
        with:
          space_key: REG
          title: '{{report_type}} Filing — {{reporting_period}}'
          body: 'Filing complete. Report: {{export-filing.url}}. Total positions: {{extract-positions.count}}. Generated: {{generate-report.timestamp}}.'
  consumes:
  - type: http
    namespace: aladdin
    baseUri: https://aladdin.blackrock.com/api/v2
    authentication:
      type: bearer
      token: $secrets.aladdin_token
    resources:
    - name: positions
      path: /positions
      inputParameters:
      - name: as_of_date
        in: query
      operations:
      - name: get-all-positions
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://blackrock.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: azure-blob
    baseUri: https://blackrockdata.blob.core.windows.net
    authentication:
      type: bearer
      token: $secrets.azure_storage_token
    resources:
    - name: blobs
      path: /{{container}}/{{blob_name}}
      inputParameters:
      - name: container
        in: path
      - name: blob_name
        in: path
      operations:
      - name: upload
        method: PUT
  - type: http
    namespace: confluence
    baseUri: https://blackrock.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → regulatory-reporting-automation.yml

When a critical ServiceNow incident is created for Aladdin infrastructure, queries Datadog for related metrics, creates a Jira investigation ticket, and posts a summary to the operations Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Incident-Triggered Runbook Executor
  description: When a critical ServiceNow incident is created for Aladdin infrastructure, queries Datadog for related metrics, creates a Jira investigation ticket, and posts a summary to the operations Microsoft Teams channel.
  tags:
  - operations
  - incident-response
  - servicenow
  - datadog
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: incident-runbook
    port: 8080
    tools:
    - name: execute-incident-runbook
      description: Orchestrate incident investigation across ServiceNow, Datadog, Jira, and Teams.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number.
      - name: ops_channel_id
        in: body
        type: string
        description: The Teams channel ID for operations alerts.
      steps:
      - name: get-incident
        type: call
        call: servicenow.get-incident
        with:
          incident_number: '{{incident_number}}'
      - name: query-metrics
        type: call
        call: datadog.query-metrics
        with:
          query: avg:system.cpu.user{service:{{get-incident.cmdb_ci}}}
          from: '{{get-incident.opened_at}}'
      - name: create-investigation
        type: call
        call: jira.create-issue
        with:
          project: OPS
          summary: 'Investigate: {{get-incident.short_description}}'
          description: 'ServiceNow {{incident_number}}. CPU metrics: {{query-metrics.series}}'
          issue_type: Task
      - name: post-summary
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{ops_channel_id}}'
          text: 'Incident {{incident_number}}: {{get-incident.short_description}}. Jira: {{create-investigation.key}}. Datadog metrics attached.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://blackrock.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: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: query
      path: /query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: jira
    baseUri: https://blackrock.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/General/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → incident-triggered-runbook-executor.yml

When an Aladdin compliance breach is detected, logs the violation in ServiceNow, notifies the portfolio manager via Teams, and creates a Jira ticket for the compliance team.

naftiko: '0.5'
info:
  label: Compliance Breach Remediation Workflow
  description: When an Aladdin compliance breach is detected, logs the violation in ServiceNow, notifies the portfolio manager via Teams, and creates a Jira ticket for the compliance team.
  tags:
  - compliance
  - aladdin
  - servicenow
  - microsoft-teams
  - jira
capability:
  exposes:
  - type: mcp
    namespace: compliance-breach
    port: 8080
    tools:
    - name: remediate-breach
      description: Process a compliance breach by logging, notifying, and tracking remediation.
      inputParameters:
      - name: breach_id
        in: body
        type: string
        description: The Aladdin compliance breach identifier.
      - name: portfolio_manager_email
        in: body
        type: string
        description: Email of the portfolio manager.
      steps:
      - name: get-breach
        type: call
        call: aladdin.get-breach
        with:
          breach_id: '{{breach_id}}'
      - name: log-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Compliance breach {{breach_id}}: {{get-breach.rule_name}}'
          description: 'Portfolio {{get-breach.portfolio_id}} breached rule {{get-breach.rule_name}}. Exposure: {{get-breach.current_value}} vs limit {{get-breach.limit_value}}.'
          category: compliance
      - name: notify-pm
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{portfolio_manager_email}}'
          text: 'Compliance breach on portfolio {{get-breach.portfolio_id}}: {{get-breach.rule_name}}. Incident: {{log-incident.number}}.'
      - name: create-remediation-ticket
        type: call
        call: jira.create-issue
        with:
          project: COMP
          summary: Remediate breach {{breach_id}} — {{get-breach.rule_name}}
          description: 'Breach details: {{get-breach.rule_name}} on portfolio {{get-breach.portfolio_id}}. ServiceNow: {{log-incident.number}}.'
          issue_type: Task
  consumes:
  - type: http
    namespace: aladdin
    baseUri: https://aladdin.blackrock.com/api/v2
    authentication:
      type: bearer
      token: $secrets.aladdin_token
    resources:
    - name: breaches
      path: /compliance/breaches/{{breach_id}}
      inputParameters:
      - name: breach_id
        in: path
      operations:
      - name: get-breach
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://blackrock.service-now.com/api/now
    authentication:
      type: 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
  - type: http
    namespace: jira
    baseUri: https://blackrock.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → compliance-breach-remediation-workflow.yml

Creates a ServiceNow incident for BlackRock technology operations, assigning severity, category, and support group.

naftiko: '0.5'
info:
  label: ServiceNow Incident Creation
  description: Creates a ServiceNow incident for BlackRock technology operations, assigning severity, category, and support group.
  tags:
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: itsm
    port: 8080
    tools:
    - name: create-incident
      description: Open a new ServiceNow incident with a short description, category, and assigned group.
      inputParameters:
      - name: short_description
        in: body
        type: string
        description: Brief summary of the incident.
      - name: category
        in: body
        type: string
        description: Incident category.
      - name: assigned_group
        in: body
        type: string
        description: Support group to assign.
      call: servicenow.create-incident
      with:
        short_description: '{{short_description}}'
        category: '{{category}}'
        assigned_group: '{{assigned_group}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://blackrock.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → servicenow-incident-creation.yml

Submits a Request for Quote on Tradeweb for a fixed income security, retrieves dealer responses, selects the best quote, and logs the trade to Snowflake.

naftiko: '0.5'
info:
  label: Tradeweb Fixed Income RFQ
  description: Submits a Request for Quote on Tradeweb for a fixed income security, retrieves dealer responses, selects the best quote, and logs the trade to Snowflake.
  tags:
  - trading
  - fixed-income
  - tradeweb
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: tradeweb-rfq
    port: 8080
    tools:
    - name: submit-rfq
      description: Submit an RFQ on Tradeweb and process dealer quotes.
      inputParameters:
      - name: security_id
        in: body
        type: string
        description: Bond CUSIP or ISIN.
      - name: side
        in: body
        type: string
        description: BUY or SELL.
      - name: quantity
        in: body
        type: number
        description: Face value.
      - name: dealers
        in: body
        type: string
        description: Comma-separated dealer codes.
      steps:
      - name: create-rfq
        type: call
        call: tradeweb.create-rfq
        with:
          security_id: '{{security_id}}'
          side: '{{side}}'
          quantity: '{{quantity}}'
          dealers: '{{dealers}}'
      - name: get-quotes
        type: call
        call: tradeweb.get-quotes
        with:
          rfq_id: '{{create-rfq.rfq_id}}'
      - name: log-trade
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO trading.rfq_log VALUES ('{{create-rfq.rfq_id}}', '{{security_id}}', '{{side}}', {{quantity}}, '{{get-quotes.best_dealer}}', {{get-quotes.best_price}}, CURRENT_TIMESTAMP())
  consumes:
  - type: http
    namespace: tradeweb
    baseUri: https://api.tradeweb.com/v1
    authentication:
      type: bearer
      token: $secrets.tradeweb_token
    resources:
    - name: rfqs
      path: /rfqs
      operations:
      - name: create-rfq
        method: POST
    - name: quotes
      path: /rfqs/{{rfq_id}}/quotes
      inputParameters:
      - name: rfq_id
        in: path
      operations:
      - name: get-quotes
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://blackrock.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → tradeweb-fixed-income-rfq.yml

Triggers an Apache Airflow DAG for overnight batch processing of portfolio valuations, monitors its status, and posts completion to Kafka for downstream consumers.

naftiko: '0.5'
info:
  label: Apache Airflow DAG Trigger and Monitor
  description: Triggers an Apache Airflow DAG for overnight batch processing of portfolio valuations, monitors its status, and posts completion to Kafka for downstream consumers.
  tags:
  - data-engineering
  - batch-processing
  - apache-airflow
  - apache-kafka
capability:
  exposes:
  - type: mcp
    namespace: airflow-orchestration
    port: 8080
    tools:
    - name: trigger-valuation-dag
      description: Trigger and monitor an Airflow DAG for portfolio valuation processing.
      inputParameters:
      - name: dag_id
        in: body
        type: string
        description: The Airflow DAG identifier.
      - name: portfolio_id
        in: body
        type: string
        description: Portfolio to process.
      steps:
      - name: trigger-dag
        type: call
        call: airflow.trigger-dag
        with:
          dag_id: '{{dag_id}}'
          conf: '{"portfolio_id": "{{portfolio_id}}"}'
      - name: get-dag-status
        type: call
        call: airflow.get-dag-run
        with:
          dag_id: '{{dag_id}}'
          run_id: '{{trigger-dag.dag_run_id}}'
      - name: publish-completion
        type: call
        call: kafka.produce-message
        with:
          topic: batch.valuation.complete
          key: '{{portfolio_id}}'
          value: '{"dag_id": "{{dag_id}}", "status": "{{get-dag-status.state}}", "portfolio_id": "{{portfolio_id}}"}'
  consumes:
  - type: http
    namespace: airflow
    baseUri: https://airflow.blackrock.com/api/v1
    authentication:
      type: bearer
      token: $secrets.airflow_token
    resources:
    - name: dag-runs
      path: /dags/{{dag_id}}/dagRuns
      inputParameters:
      - name: dag_id
        in: path
      operations:
      - name: trigger-dag
        method: POST
    - name: dag-run-status
      path: /dags/{{dag_id}}/dagRuns/{{run_id}}
      inputParameters:
      - name: dag_id
        in: path
      - name: run_id
        in: path
      operations:
      - name: get-dag-run
        method: GET
  - type: http
    namespace: kafka
    baseUri: https://kafka-rest.blackrock.com/v3
    authentication:
      type: bearer
      token: $secrets.kafka_rest_token
    resources:
    - name: records
      path: /clusters/main/topics/{{topic}}/records
      inputParameters:
      - name: topic
        in: path
      operations:
      - name: produce-message
        method: POST
Open in Framework → View in Fleet → apache-airflow-dag-trigger-and-monitor.yml

Reconciles ETF portfolio positions between Aladdin and SimCorp Dimension, identifies breaks, logs discrepancies in Snowflake, and alerts operations via Slack.

naftiko: '0.5'
info:
  label: ETF Daily Reconciliation Pipeline
  description: Reconciles ETF portfolio positions between Aladdin and SimCorp Dimension, identifies breaks, logs discrepancies in Snowflake, and alerts operations via Slack.
  tags:
  - etf-operations
  - aladdin
  - simcorp-dimension
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: etf-recon
    port: 8080
    tools:
    - name: run-daily-reconciliation
      description: Reconcile ETF positions between Aladdin and SimCorp, log breaks, and alert operations.
      inputParameters:
      - name: fund_id
        in: body
        type: string
        description: The ETF fund identifier.
      - name: recon_date
        in: body
        type: string
        description: Reconciliation date in YYYY-MM-DD format.
      steps:
      - name: get-aladdin-positions
        type: call
        call: aladdin.get-holdings
        with:
          portfolio_id: '{{fund_id}}'
      - name: get-simcorp-positions
        type: call
        call: simcorp.get-positions
        with:
          portfolio_code: '{{fund_id}}'
          as_of_date: '{{recon_date}}'
      - name: log-breaks
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO RECON.BREAKS SELECT * FROM TABLE(COMPARE_POSITIONS('{{fund_id}}', '{{recon_date}}'))
      - name: alert-ops
        type: call
        call: slack.post-message
        with:
          channel: '#etf-operations'
          text: Reconciliation complete for {{fund_id}} on {{recon_date}}. Review breaks in Snowflake RECON.BREAKS table.
  consumes:
  - type: http
    namespace: aladdin
    baseUri: https://aladdin.blackrock.com/api/v2
    authentication:
      type: bearer
      token: $secrets.aladdin_token
    resources:
    - name: holdings
      path: /portfolios/{{portfolio_id}}/holdings
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: get-holdings
        method: GET
  - type: http
    namespace: simcorp
    baseUri: https://simcorp.blackrock.com/api/v2
    authentication:
      type: bearer
      token: $secrets.simcorp_token
    resources:
    - name: positions
      path: /portfolios/{{portfolio_code}}/positions
      inputParameters:
      - name: portfolio_code
        in: path
      - name: as_of_date
        in: query
      operations:
      - name: get-positions
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://blackrock.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → etf-daily-reconciliation-pipeline.yml

Retrieves MSCI index constituent data and weightings for benchmark tracking and portfolio construction.

naftiko: '0.5'
info:
  label: MSCI Index Data Retrieval
  description: Retrieves MSCI index constituent data and weightings for benchmark tracking and portfolio construction.
  tags:
  - index-data
  - msci
capability:
  exposes:
  - type: mcp
    namespace: msci
    port: 8080
    tools:
    - name: get-index-data
      description: Retrieve MSCI index constituent data.
      inputParameters:
      - name: index_code
        in: body
        type: string
        description: The MSCI index code.
      call: msci.get-constituents
      with:
        index_code: '{{index_code}}'
      outputParameters:
      - name: constituents
        type: array
        mapping: $.constituents
      - name: total_weight
        type: number
        mapping: $.totalWeight
  consumes:
  - type: http
    namespace: msci
    baseUri: https://api.msci.com/v1
    authentication:
      type: bearer
      token: $secrets.msci_token
    resources:
    - name: indices
      path: /indices/{{index_code}}/constituents
      inputParameters:
      - name: index_code
        in: path
      operations:
      - name: get-constituents
        method: GET
Open in Framework → View in Fleet → msci-index-data-retrieval.yml

Checks merchant website performance via Cloudflare analytics, tests checkout flow latency with Datadog synthetic, generates recommendations, and sends via HubSpot.

naftiko: '0.5'
info:
  label: Merchant Website Performance Audit
  description: Checks merchant website performance via Cloudflare analytics, tests checkout flow latency with Datadog synthetic, generates recommendations, and sends via HubSpot.
  tags:
  - performance
  - cloudflare
  - datadog
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: site-audit
    port: 8080
    tools:
    - name: audit-performance
      description: Audit merchant website and checkout performance with recommendations.
      inputParameters:
      - name: merchant_domain
        in: body
        type: string
        description: Merchant website domain.
      - name: merchant_email
        in: body
        type: string
        description: Merchant email.
      steps:
      - name: get-analytics
        type: call
        call: cloudflare.get-zone-analytics
        with:
          zone_id: $secrets.cloudflare_zone_id
          since: -7d
      - name: check-latency
        type: call
        call: datadog.get-synthetics
        with:
          public_id: checkout-{{merchant_domain}}
      - name: send-report
        type: call
        call: hubspot.send-email
        with:
          to: '{{merchant_email}}'
          subject: Website Performance Report
          body: 'Page load: {{get-analytics.avg_load_time}}ms. Checkout latency: {{check-latency.avg_duration}}ms. Total requests: {{get-analytics.total_requests}}.'
  consumes:
  - type: http
    namespace: cloudflare
    baseUri: https://api.cloudflare.com/client/v4
    authentication:
      type: bearer
      token: $secrets.cloudflare_token
    resources:
    - name: analytics
      path: /zones/{{zone_id}}/analytics/dashboard
      inputParameters:
      - name: zone_id
        in: path
      - name: since
        in: query
      operations:
      - name: get-zone-analytics
        method: GET
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: synthetics
      path: /synthetics/tests/{{public_id}}/results
      inputParameters:
      - name: public_id
        in: path
      operations:
      - name: get-synthetics
        method: GET
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: emails
      path: /marketing/v3/transactional/single-email/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → merchant-website-performance-audit.yml

When a new merchant applies, validates their identity through the Square Merchants API, cross-references with Mastercard sanctions screening, and logs the KYC decision in PostgreSQL.

naftiko: '0.5'
info:
  label: Compliance KYC Verification Pipeline
  description: When a new merchant applies, validates their identity through the Square Merchants API, cross-references with Mastercard sanctions screening, and logs the KYC decision in PostgreSQL.
  tags:
  - compliance
  - kyc
  - square
  - mastercard
  - postgresql
  - fintech
capability:
  exposes:
  - type: mcp
    namespace: kyc-verification
    port: 8080
    tools:
    - name: verify-merchant-kyc
      description: Run KYC checks on a merchant application using Square and Mastercard, then log the result.
      inputParameters:
      - name: merchant_id
        in: body
        type: string
        description: The Square merchant ID.
      - name: business_name
        in: body
        type: string
        description: The registered business name.
      - name: country
        in: body
        type: string
        description: Country of incorporation.
      steps:
      - name: get-merchant
        type: call
        call: square.get-merchant
        with:
          merchant_id: '{{merchant_id}}'
      - name: sanctions-check
        type: call
        call: mastercard.screen-entity
        with:
          entity_name: '{{business_name}}'
          country: '{{country}}'
      - name: log-kyc-result
        type: call
        call: postgresql.insert-row
        with:
          table: kyc_decisions
          merchant_id: '{{merchant_id}}'
          business_name: '{{business_name}}'
          sanctions_status: '{{sanctions-check.status}}'
          merchant_status: '{{get-merchant.merchant.status}}'
          decision_date: '{{now}}'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: merchants
      path: /merchants/{{merchant_id}}
      inputParameters:
      - name: merchant_id
        in: path
      operations:
      - name: get-merchant
        method: GET
  - type: http
    namespace: mastercard
    baseUri: https://api.mastercard.com/screening/v1
    authentication:
      type: oauth1
      consumerKey: $secrets.mastercard_consumer_key
      signingKey: $secrets.mastercard_signing_key
    resources:
    - name: entities
      path: /entities/screen
      operations:
      - name: screen-entity
        method: POST
  - type: http
    namespace: postgresql
    baseUri: https://block-data.internal/api/v1
    authentication:
      type: bearer
      token: $secrets.internal_db_token
    resources:
    - name: rows
      path: /tables/{{table}}/rows
      inputParameters:
      - name: table
        in: path
      operations:
      - name: insert-row
        method: POST
Open in Framework → View in Fleet → compliance-kyc-verification-pipeline.yml

Queries Datadog for payment processing error rates across Square services, returning error counts, rates, and top error codes for a given time window.

naftiko: '0.5'
info:
  label: Datadog Payment Error Rate
  description: Queries Datadog for payment processing error rates across Square services, returning error counts, rates, and top error codes for a given time window.
  tags:
  - observability
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: payment-errors
    port: 8080
    tools:
    - name: get-error-rate
      description: Retrieve payment error rate metrics from Datadog.
      inputParameters:
      - name: service
        in: body
        type: string
        description: The payment service name.
      - name: period
        in: body
        type: string
        description: Time period to query (e.g. 1h, 6h, 24h).
      call: datadog.query-metrics
      with:
        query: sum:payments.errors{service:{{service}}}.as_rate()
        from: '{{period}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /query
      inputParameters:
      - name: query
        in: query
      - name: from
        in: query
      operations:
      - name: query-metrics
        method: GET
Open in Framework → View in Fleet → datadog-payment-error-rate.yml

Monitors CloudWatch metrics for payment service load, scales EC2 instances via CloudFormation, updates the load balancer in F5, and logs the scaling event in ServiceNow.

naftiko: '0.5'
info:
  label: Infrastructure Scaling Automation
  description: Monitors CloudWatch metrics for payment service load, scales EC2 instances via CloudFormation, updates the load balancer in F5, and logs the scaling event in ServiceNow.
  tags:
  - infrastructure
  - cloudwatch
  - cloudformation
  - f5-networks
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: infra-scaling
    port: 8080
    tools:
    - name: auto-scale-service
      description: Monitor load and scale payment infrastructure with tracking.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: Payment service name.
      - name: target_capacity
        in: body
        type: integer
        description: Target instance count.
      steps:
      - name: check-load
        type: call
        call: cloudwatch.get-metrics
        with:
          namespace: Payments
          metric_name: RequestCount
          dimensions: Service={{service_name}}
      - name: scale-instances
        type: call
        call: cloudformation.update-stack
        with:
          stack_name: '{{service_name}}-stack'
          parameter_overrides: DesiredCapacity={{target_capacity}}
      - name: update-lb
        type: call
        call: f5.update-pool
        with:
          pool_name: '{{service_name}}-pool'
          member_count: '{{target_capacity}}'
      - name: log-event
        type: call
        call: servicenow.create-change-request
        with:
          short_description: 'Auto-scale: {{service_name}} to {{target_capacity}} instances'
          description: 'Load: {{check-load.average}}. Scaled from current to {{target_capacity}} instances.'
          category: auto_scaling
  consumes:
  - type: http
    namespace: cloudwatch
    baseUri: https://monitoring.us-east-1.amazonaws.com
    authentication:
      type: aws-sigv4
      region: us-east-1
      access_key: $secrets.aws_access_key
      secret_key: $secrets.aws_secret_key
    resources:
    - name: metrics
      path: /
      operations:
      - name: get-metrics
        method: GET
  - type: http
    namespace: cloudformation
    baseUri: https://cloudformation.us-east-1.amazonaws.com
    authentication:
      type: aws-sigv4
      region: us-east-1
      access_key: $secrets.aws_access_key
      secret_key: $secrets.aws_secret_key
    resources:
    - name: stacks
      path: /
      operations:
      - name: update-stack
        method: POST
  - type: http
    namespace: f5
    baseUri: https://f5.block.xyz/mgmt/tm/ltm
    authentication:
      type: basic
      username: $secrets.f5_user
      password: $secrets.f5_password
    resources:
    - name: pools
      path: /pool/{{pool_name}}
      inputParameters:
      - name: pool_name
        in: path
      operations:
      - name: update-pool
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://block.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-request
        method: POST
Open in Framework → View in Fleet → infrastructure-scaling-automation.yml

Deploys a canary release via GitLab CI, monitors error rates in Datadog, promotes or rolls back based on metrics, and notifies the team via Slack.

naftiko: '0.5'
info:
  label: Microservice Canary Deployment Pipeline
  description: Deploys a canary release via GitLab CI, monitors error rates in Datadog, promotes or rolls back based on metrics, and notifies the team via Slack.
  tags:
  - devops
  - gitlab
  - datadog
  - slack
capability:
  exposes:
  - type: mcp
    namespace: canary-deploy
    port: 8080
    tools:
    - name: deploy-canary
      description: Execute a canary deployment with automated monitoring and rollback.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: GitLab project ID.
      - name: ref
        in: body
        type: string
        description: Git branch or tag to deploy.
      - name: service_name
        in: body
        type: string
        description: Service name for monitoring.
      steps:
      - name: trigger-pipeline
        type: call
        call: gitlab.create-pipeline
        with:
          project_id: '{{project_id}}'
          ref: '{{ref}}'
          variables: DEPLOY_TYPE=canary
      - name: monitor-canary
        type: call
        call: datadog.query-metrics
        with:
          query: sum:http.errors{service:{{service_name}},version:canary}.as_rate()
          period: 10m
      - name: promote-canary
        type: call
        call: gitlab.create-pipeline
        with:
          project_id: '{{project_id}}'
          ref: '{{ref}}'
          variables: DEPLOY_TYPE=promote
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: '#deployments'
          text: 'Canary deployment for {{service_name}} ({{ref}}) promoted to production. Error rate: {{monitor-canary.value}}. Pipeline: {{trigger-pipeline.id}}.'
  consumes:
  - type: http
    namespace: gitlab
    baseUri: https://gitlab.block.xyz/api/v4
    authentication:
      type: bearer
      token: $secrets.gitlab_token
    resources:
    - name: pipelines
      path: /projects/{{project_id}}/pipeline
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: create-pipeline
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /query
      inputParameters:
      - name: query
        in: query
      - name: period
        in: query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → microservice-canary-deployment-pipeline.yml

Creates a Cloudflare WAF rule to protect Block's payment API endpoints from suspicious traffic patterns.

naftiko: '0.5'
info:
  label: Cloudflare WAF Rule for Payment Endpoints
  description: Creates a Cloudflare WAF rule to protect Block's payment API endpoints from suspicious traffic patterns.
  tags:
  - security
  - cloudflare
  - payments
  - waf
capability:
  exposes:
  - type: mcp
    namespace: waf-management
    port: 8080
    tools:
    - name: create-payment-waf-rule
      description: Create a Cloudflare WAF rule to protect payment endpoints.
      inputParameters:
      - name: zone_id
        in: body
        type: string
        description: The Cloudflare zone ID.
      - name: rule_expression
        in: body
        type: string
        description: The WAF rule expression (Cloudflare filter syntax).
      - name: action
        in: body
        type: string
        description: The action to take (block, challenge, managed_challenge).
      call: cloudflare.create-firewall-rule
      with:
        zone_id: '{{zone_id}}'
        filter:
          expression: '{{rule_expression}}'
        action: '{{action}}'
  consumes:
  - type: http
    namespace: cloudflare
    baseUri: https://api.cloudflare.com/client/v4
    authentication:
      type: bearer
      token: $secrets.cloudflare_api_token
    resources:
    - name: firewall-rules
      path: /zones/{{zone_id}}/firewall/rules
      inputParameters:
      - name: zone_id
        in: path
      operations:
      - name: create-firewall-rule
        method: POST
Open in Framework → View in Fleet → cloudflare-waf-rule-for-payment-endpoints.yml

When a BigCommerce order is placed, creates a corresponding Square order and payment, then updates the BigCommerce order with the Square payment reference.

naftiko: '0.5'
info:
  label: BigCommerce Order to Square Sync
  description: When a BigCommerce order is placed, creates a corresponding Square order and payment, then updates the BigCommerce order with the Square payment reference.
  tags:
  - ecommerce
  - bigcommerce
  - square
  - order-sync
capability:
  exposes:
  - type: mcp
    namespace: bigcommerce-square-sync
    port: 8080
    tools:
    - name: sync-bigcommerce-order
      description: Sync a BigCommerce order into Square and update the source order with payment details.
      inputParameters:
      - name: bigcommerce_order_id
        in: body
        type: string
        description: The BigCommerce order ID.
      - name: location_id
        in: body
        type: string
        description: The Square location ID for the order.
      steps:
      - name: get-bc-order
        type: call
        call: bigcommerce.get-order
        with:
          order_id: '{{bigcommerce_order_id}}'
      - name: create-square-order
        type: call
        call: square.create-order
        with:
          order:
            location_id: '{{location_id}}'
            reference_id: bc-{{bigcommerce_order_id}}
            line_items:
            - name: '{{get-bc-order.items.0.name}}'
              quantity: '{{get-bc-order.items.0.quantity}}'
              base_price_money:
                amount: '{{get-bc-order.total_inc_tax_cents}}'
                currency: '{{get-bc-order.currency_code}}'
      - name: update-bc-order
        type: call
        call: bigcommerce.update-order
        with:
          order_id: '{{bigcommerce_order_id}}'
          staff_notes: 'Square order: {{create-square-order.order.id}}'
  consumes:
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/$secrets.bigcommerce_store_hash/v2
    authentication:
      type: bearer
      token: $secrets.bigcommerce_access_token
    resources:
    - name: orders
      path: /orders/{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
      - name: update-order
        method: PUT
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: orders
      path: /orders
      operations:
      - name: create-order
        method: POST
Open in Framework → View in Fleet → bigcommerce-order-to-square-sync.yml

Creates a Square loyalty promotion, syncs eligible customers to MailChimp, launches an email campaign, and tracks results in Google Analytics.

naftiko: '0.5'
info:
  label: Merchant Loyalty Campaign Launcher
  description: Creates a Square loyalty promotion, syncs eligible customers to MailChimp, launches an email campaign, and tracks results in Google Analytics.
  tags:
  - loyalty
  - square
  - mailchimp
  - google-analytics
capability:
  exposes:
  - type: mcp
    namespace: loyalty-campaign
    port: 8080
    tools:
    - name: launch-campaign
      description: Create a loyalty promotion and launch a targeted email campaign.
      inputParameters:
      - name: program_id
        in: body
        type: string
        description: Square loyalty program ID.
      - name: promotion_name
        in: body
        type: string
        description: Name of the promotion.
      - name: points_multiplier
        in: body
        type: integer
        description: Points multiplier for the promotion.
      steps:
      - name: create-promotion
        type: call
        call: square.create-loyalty-promotion
        with:
          program_id: '{{program_id}}'
          name: '{{promotion_name}}'
          incentive_points_multiplier: '{{points_multiplier}}'
      - name: get-members
        type: call
        call: square.list-loyalty-accounts
        with:
          program_id: '{{program_id}}'
      - name: send-campaign
        type: call
        call: mailchimp.create-campaign
        with:
          list_id: loyalty-members
          subject: '{{promotion_name}} — Earn {{points_multiplier}}x Points!'
          body: Start earning {{points_multiplier}}x loyalty points today! Promotion runs through {{create-promotion.end_date}}.
      - name: track-launch
        type: call
        call: google-analytics.send-event
        with:
          event_name: loyalty_campaign_launched
          program_id: '{{program_id}}'
          promotion_id: '{{create-promotion.id}}'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: loyalty-promotions
      path: /loyalty/programs/{{program_id}}/promotions
      inputParameters:
      - name: program_id
        in: path
      operations:
      - name: create-loyalty-promotion
        method: POST
    - name: loyalty-accounts
      path: /loyalty/accounts/search
      operations:
      - name: list-loyalty-accounts
        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
  - type: http
    namespace: google-analytics
    baseUri: https://www.google-analytics.com
    authentication:
      type: apiKey
      name: measurement_id
      in: query
      value: $secrets.ga_measurement_id
    resources:
    - name: events
      path: /mp/collect
      operations:
      - name: send-event
        method: POST
Open in Framework → View in Fleet → merchant-loyalty-campaign-launcher.yml

Fetches merchant reviews from ZoomInfo, analyzes sentiment, updates the HubSpot contact record with NPS data, and posts a summary to the merchant success Slack channel.

naftiko: '0.5'
info:
  label: Merchant Social Review Monitor
  description: Fetches merchant reviews from ZoomInfo, analyzes sentiment, updates the HubSpot contact record with NPS data, and posts a summary to the merchant success Slack channel.
  tags:
  - merchant-success
  - zoominfo
  - hubspot
  - slack
capability:
  exposes:
  - type: mcp
    namespace: review-monitor
    port: 8080
    tools:
    - name: monitor-reviews
      description: Collect and analyze merchant reviews with CRM update and team notification.
      inputParameters:
      - name: merchant_domain
        in: body
        type: string
        description: Merchant website domain.
      - name: hubspot_contact_id
        in: body
        type: string
        description: HubSpot contact ID.
      steps:
      - name: get-company-info
        type: call
        call: zoominfo.get-company
        with:
          domain: '{{merchant_domain}}'
      - name: get-reviews
        type: call
        call: zoominfo.get-reviews
        with:
          company_id: '{{get-company-info.id}}'
      - name: update-crm
        type: call
        call: hubspot.update-contact
        with:
          contact_id: '{{hubspot_contact_id}}'
          properties:
            review_count: '{{get-reviews.total_count}}'
            avg_rating: '{{get-reviews.average_rating}}'
      - name: post-summary
        type: call
        call: slack.post-message
        with:
          channel: '#merchant-success'
          text: 'Review update for {{merchant_domain}}: {{get-reviews.total_count}} reviews, avg {{get-reviews.average_rating}}/5. CRM updated.'
  consumes:
  - type: http
    namespace: zoominfo
    baseUri: https://api.zoominfo.com
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: companies
      path: /lookup/company
      inputParameters:
      - name: domain
        in: query
      operations:
      - name: get-company
        method: GET
    - name: reviews
      path: /companies/{{company_id}}/reviews
      inputParameters:
      - name: company_id
        in: path
      operations:
      - name: get-reviews
        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/{{contact_id}}
      inputParameters:
      - name: contact_id
        in: path
      operations:
      - name: update-contact
        method: PATCH
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → merchant-social-review-monitor.yml

Aggregates sales data across all Square locations, calculates KPIs, stores the report in S3, and distributes via MailChimp to the merchant's management team.

naftiko: '0.5'
info:
  label: Merchant Multi-Location Reporting
  description: Aggregates sales data across all Square locations, calculates KPIs, stores the report in S3, and distributes via MailChimp to the merchant's management team.
  tags:
  - reporting
  - square
  - amazon-s3
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: multi-location-report
    port: 8080
    tools:
    - name: generate-multi-location-report
      description: Generate a consolidated multi-location sales report.
      inputParameters:
      - name: merchant_id
        in: body
        type: string
        description: Square merchant ID.
      - name: period
        in: body
        type: string
        description: Reporting period (daily, weekly, monthly).
      - name: distribution_list
        in: body
        type: string
        description: Comma-separated email list.
      steps:
      - name: list-locations
        type: call
        call: square.list-locations
        with:
          merchant_id: '{{merchant_id}}'
      - name: get-sales
        type: call
        call: square.list-payments
        with:
          merchant_id: '{{merchant_id}}'
          period: '{{period}}'
      - name: store-report
        type: call
        call: s3.put-object
        with:
          bucket: merchant-reports
          key: '{{merchant_id}}/{{period}}/multi-location.json'
          body: '{{get-sales.summary}}'
      - name: distribute
        type: call
        call: mailchimp.send-transactional
        with:
          to: '{{distribution_list}}'
          subject: Multi-Location Report — {{period}}
          body: 'Locations: {{list-locations.count}}. Total revenue: ${{get-sales.total_amount}}. Top location: {{get-sales.top_location}}.'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: locations
      path: /locations
      operations:
      - name: list-locations
        method: GET
    - name: payments
      path: /payments
      inputParameters:
      - name: merchant_id
        in: query
      - name: period
        in: query
      operations:
      - name: list-payments
        method: GET
  - type: http
    namespace: s3
    baseUri: https://s3.amazonaws.com
    authentication:
      type: aws-sigv4
      region: us-east-1
      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: mailchimp
    baseUri: https://mandrillapp.com/api/1.0
    authentication:
      type: apiKey
      name: key
      in: body
      value: $secrets.mailchimp_transactional_key
    resources:
    - name: messages
      path: /messages/send
      operations:
      - name: send-transactional
        method: POST
Open in Framework → View in Fleet → merchant-multi-location-reporting.yml

Pulls Square transaction analytics for a location, transforms the data, and sends it to Google Analytics for merchant business intelligence.

naftiko: '0.5'
info:
  label: Merchant Analytics to Google Analytics
  description: Pulls Square transaction analytics for a location, transforms the data, and sends it to Google Analytics for merchant business intelligence.
  tags:
  - analytics
  - square
  - google-analytics
  - merchant-services
capability:
  exposes:
  - type: mcp
    namespace: merchant-analytics
    port: 8080
    tools:
    - name: sync-sales-to-ga
      description: Push Square transaction data to Google Analytics for a merchant location.
      inputParameters:
      - name: location_id
        in: body
        type: string
        description: The Square location ID.
      - name: ga_tracking_id
        in: body
        type: string
        description: The Google Analytics tracking ID.
      - name: date
        in: body
        type: string
        description: Report date in YYYY-MM-DD format.
      steps:
      - name: list-payments
        type: call
        call: square.list-payments
        with:
          location_id: '{{location_id}}'
          begin_time: '{{date}}T00:00:00Z'
          end_time: '{{date}}T23:59:59Z'
      - name: send-to-ga
        type: call
        call: google-analytics.send-event
        with:
          tracking_id: '{{ga_tracking_id}}'
          event_category: sales
          event_action: daily_summary
          event_label: '{{location_id}}'
          event_value: '{{list-payments.total_count}}'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: payments
      path: /payments
      operations:
      - name: list-payments
        method: GET
  - type: http
    namespace: google-analytics
    baseUri: https://www.google-analytics.com
    authentication:
      type: none
    resources:
    - name: collect
      path: /collect
      operations:
      - name: send-event
        method: POST
Open in Framework → View in Fleet → merchant-analytics-to-google-analytics.yml

Enrolls a Cash App user in direct deposit by verifying identity, provisioning a routing number, updating the user profile, and sending confirmation via SendGrid.

naftiko: '0.5'
info:
  label: Cash App Direct Deposit Enrollment
  description: Enrolls a Cash App user in direct deposit by verifying identity, provisioning a routing number, updating the user profile, and sending confirmation via SendGrid.
  tags:
  - banking
  - cash-app
  - sendgrid
capability:
  exposes:
  - type: mcp
    namespace: direct-deposit
    port: 8080
    tools:
    - name: enroll-direct-deposit
      description: Set up direct deposit for a Cash App user with identity verification and confirmation.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: Cash App user identifier.
      - name: user_email
        in: body
        type: string
        description: User email for confirmation.
      steps:
      - name: verify-identity
        type: call
        call: cashapp.verify-identity
        with:
          user_id: '{{user_id}}'
      - name: provision-routing
        type: call
        call: cashapp.create-direct-deposit
        with:
          user_id: '{{user_id}}'
      - name: send-confirmation
        type: call
        call: sendgrid.send-email
        with:
          to: '{{user_email}}'
          subject: Direct Deposit Activated
          body: 'Your direct deposit is set up! Routing: {{provision-routing.routing_number}}. Account: {{provision-routing.account_number_last4}}.'
  consumes:
  - type: http
    namespace: cashapp
    baseUri: https://api.cash.app/v1
    authentication:
      type: bearer
      token: $secrets.cashapp_api_token
    resources:
    - name: identity
      path: /users/{{user_id}}/verify
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: verify-identity
        method: POST
    - name: direct-deposit
      path: /users/{{user_id}}/direct-deposit
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: create-direct-deposit
        method: POST
  - type: http
    namespace: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → cash-app-direct-deposit-enrollment.yml

Pulls the daily payment summary for a Square location, formats a sales report, and posts it to the merchant's LinkedIn page and HubSpot CRM contact timeline.

naftiko: '0.5'
info:
  label: Merchant Daily Sales Report
  description: Pulls the daily payment summary for a Square location, formats a sales report, and posts it to the merchant's LinkedIn page and HubSpot CRM contact timeline.
  tags:
  - reporting
  - square
  - linkedin
  - hubspot
  - merchant-services
capability:
  exposes:
  - type: mcp
    namespace: daily-sales
    port: 8080
    tools:
    - name: generate-daily-sales-report
      description: Aggregate daily sales from Square, post to LinkedIn, and update HubSpot.
      inputParameters:
      - name: location_id
        in: body
        type: string
        description: The Square location ID.
      - name: report_date
        in: body
        type: string
        description: The date for the report in YYYY-MM-DD format.
      - name: hubspot_contact_id
        in: body
        type: string
        description: The HubSpot contact ID for the merchant.
      steps:
      - name: list-payments
        type: call
        call: square.list-payments
        with:
          location_id: '{{location_id}}'
          begin_time: '{{report_date}}T00:00:00Z'
          end_time: '{{report_date}}T23:59:59Z'
      - name: post-to-linkedin
        type: call
        call: linkedin.create-post
        with:
          text: 'Daily sales update for {{report_date}}: {{list-payments.total_count}} transactions processed. Powered by Square.'
      - name: update-hubspot
        type: call
        call: hubspot.create-engagement
        with:
          contact_id: '{{hubspot_contact_id}}'
          type: NOTE
          body: 'Daily sales report ({{report_date}}): {{list-payments.total_count}} payments, total volume available in Square dashboard for location {{location_id}}.'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: payments
      path: /payments
      operations:
      - name: list-payments
        method: GET
  - 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
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: engagements
      path: /engagements/v1/engagements
      operations:
      - name: create-engagement
        method: POST
Open in Framework → View in Fleet → merchant-daily-sales-report.yml

Aggregates payment data from Square, enriches with Google Analytics session data, generates a report in Google Analytics, and sends the summary via MailChimp.

naftiko: '0.5'
info:
  label: Merchant Revenue Report Pipeline
  description: Aggregates payment data from Square, enriches with Google Analytics session data, generates a report in Google Analytics, and sends the summary via MailChimp.
  tags:
  - analytics
  - square
  - google-analytics
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: revenue-report
    port: 8080
    tools:
    - name: generate-revenue-report
      description: Generate and distribute a merchant revenue report with web analytics.
      inputParameters:
      - name: location_id
        in: body
        type: string
        description: The Square location identifier.
      - name: period
        in: body
        type: string
        description: Reporting period (daily, weekly, monthly).
      - name: merchant_email
        in: body
        type: string
        description: Merchant email for report delivery.
      steps:
      - name: get-payments
        type: call
        call: square.list-payments
        with:
          location_id: '{{location_id}}'
          period: '{{period}}'
      - name: get-analytics
        type: call
        call: google-analytics.get-report
        with:
          property_id: '{{location_id}}'
          period: '{{period}}'
      - name: track-event
        type: call
        call: google-analytics.send-event
        with:
          event_name: revenue_report_generated
          location_id: '{{location_id}}'
      - name: send-report
        type: call
        call: mailchimp.send-transactional
        with:
          to: '{{merchant_email}}'
          subject: Revenue Report — {{period}}
          body: 'Total revenue: ${{get-payments.total_amount}}. Transactions: {{get-payments.count}}. Sessions: {{get-analytics.sessions}}. Conversion: {{get-analytics.conversion_rate}}%.'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: payments
      path: /payments
      inputParameters:
      - name: location_id
        in: query
      - name: period
        in: query
      operations:
      - name: list-payments
        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: get-report
        method: POST
    - name: events
      path: /properties/{{property_id}}/events
      inputParameters:
      - name: property_id
        in: path
      operations:
      - name: send-event
        method: POST
  - type: http
    namespace: mailchimp
    baseUri: https://mandrillapp.com/api/1.0
    authentication:
      type: apiKey
      name: key
      in: body
      value: $secrets.mailchimp_transactional_key
    resources:
    - name: messages
      path: /messages/send
      operations:
      - name: send-transactional
        method: POST
Open in Framework → View in Fleet → merchant-revenue-report-pipeline.yml

Creates a HubSpot contact when a new merchant lead signs up for Square, enriches with ZoomInfo data, and sends a welcome email via MailChimp.

naftiko: '0.5'
info:
  label: HubSpot Merchant Lead Capture
  description: Creates a HubSpot contact when a new merchant lead signs up for Square, enriches with ZoomInfo data, and sends a welcome email via MailChimp.
  tags:
  - sales
  - hubspot
  - zoominfo
  - mailchimp
  - merchant-services
capability:
  exposes:
  - type: mcp
    namespace: lead-capture
    port: 8080
    tools:
    - name: capture-merchant-lead
      description: Create a CRM contact, enrich with firmographics, and send a welcome campaign.
      inputParameters:
      - name: email
        in: body
        type: string
        description: The merchant lead's email address.
      - name: business_name
        in: body
        type: string
        description: The business name.
      - name: first_name
        in: body
        type: string
        description: Contact first name.
      - name: last_name
        in: body
        type: string
        description: Contact last name.
      steps:
      - name: create-contact
        type: call
        call: hubspot.create-contact
        with:
          properties:
            email: '{{email}}'
            firstname: '{{first_name}}'
            lastname: '{{last_name}}'
            company: '{{business_name}}'
      - name: enrich
        type: call
        call: zoominfo.search-company
        with:
          companyName: '{{business_name}}'
      - name: send-welcome
        type: call
        call: mailchimp.send-transactional
        with:
          to: '{{email}}'
          subject: Welcome to Square, {{first_name}}!
          body: Thank you for your interest in Square. We see {{business_name}} is in the {{enrich.data.0.industry}} industry with approximately {{enrich.data.0.employeeCount}} employees. Let us tailor a solution for you.
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /crm/v3/objects/contacts
      operations:
      - name: create-contact
        method: POST
  - type: http
    namespace: zoominfo
    baseUri: https://api.zoominfo.com/search
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: companies
      path: /company
      operations:
      - name: search-company
        method: POST
  - type: http
    namespace: mailchimp
    baseUri: https://mandrillapp.com/api/1.0
    authentication:
      type: apiKey
      name: key
      in: body
      value: $secrets.mandrill_api_key
    resources:
    - name: messages
      path: /messages/send
      operations:
      - name: send-transactional
        method: POST
Open in Framework → View in Fleet → hubspot-merchant-lead-capture.yml

When a payment dispute is filed, retrieves dispute details from Square, collects evidence from S3, submits the response, and updates the merchant via HubSpot.

naftiko: '0.5'
info:
  label: Merchant Dispute Resolution Orchestrator
  description: When a payment dispute is filed, retrieves dispute details from Square, collects evidence from S3, submits the response, and updates the merchant via HubSpot.
  tags:
  - disputes
  - square
  - amazon-s3
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: dispute-resolution
    port: 8080
    tools:
    - name: resolve-dispute
      description: Gather evidence and submit a dispute response for a Square payment dispute.
      inputParameters:
      - name: dispute_id
        in: body
        type: string
        description: The Square dispute identifier.
      - name: merchant_email
        in: body
        type: string
        description: Merchant contact email.
      steps:
      - name: get-dispute
        type: call
        call: square.get-dispute
        with:
          dispute_id: '{{dispute_id}}'
      - name: fetch-evidence
        type: call
        call: s3.get-object
        with:
          bucket: dispute-evidence
          key: '{{get-dispute.payment_id}}/evidence.pdf'
      - name: submit-response
        type: call
        call: square.submit-evidence
        with:
          dispute_id: '{{dispute_id}}'
          evidence_type: GENERIC_EVIDENCE
          content: '{{fetch-evidence.body}}'
      - name: notify-merchant
        type: call
        call: hubspot.send-email
        with:
          to: '{{merchant_email}}'
          subject: Dispute {{dispute_id}} — Evidence Submitted
          body: 'We have submitted evidence for dispute {{dispute_id}} (${{get-dispute.amount}}). Current status: {{get-dispute.state}}.'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: disputes
      path: /disputes/{{dispute_id}}
      inputParameters:
      - name: dispute_id
        in: path
      operations:
      - name: get-dispute
        method: GET
    - name: evidence
      path: /disputes/{{dispute_id}}/evidence
      inputParameters:
      - name: dispute_id
        in: path
      operations:
      - name: submit-evidence
        method: POST
  - type: http
    namespace: s3
    baseUri: https://s3.amazonaws.com
    authentication:
      type: aws-sigv4
      region: us-east-1
      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: get-object
        method: GET
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: emails
      path: /marketing/v3/transactional/single-email/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → merchant-dispute-resolution-orchestrator.yml

Creates a Square invoice for a customer, attaches line items, and publishes it for email delivery.

naftiko: '0.5'
info:
  label: Square Invoice Creator
  description: Creates a Square invoice for a customer, attaches line items, and publishes it for email delivery.
  tags:
  - invoices
  - square
  - merchant-services
capability:
  exposes:
  - type: mcp
    namespace: square-invoices
    port: 8080
    tools:
    - name: create-and-publish-invoice
      description: Create a Square invoice with line items and publish it immediately for delivery to the customer.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The Square customer ID to invoice.
      - name: location_id
        in: body
        type: string
        description: The Square location ID for the invoice.
      - name: line_item_name
        in: body
        type: string
        description: Name of the line item.
      - name: amount_cents
        in: body
        type: integer
        description: The line item amount in cents.
      steps:
      - name: create-invoice
        type: call
        call: square.create-invoice
        with:
          invoice:
            location_id: '{{location_id}}'
            primary_recipient:
              customer_id: '{{customer_id}}'
            payment_requests:
            - request_type: BALANCE
              due_date: '{{due_date}}'
      - name: publish-invoice
        type: call
        call: square.publish-invoice
        with:
          invoice_id: '{{create-invoice.invoice.id}}'
          version: '{{create-invoice.invoice.version}}'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: invoices
      path: /invoices
      operations:
      - name: create-invoice
        method: POST
    - name: invoice-publish
      path: /invoices/{{invoice_id}}/publish
      inputParameters:
      - name: invoice_id
        in: path
      operations:
      - name: publish-invoice
        method: POST
Open in Framework → View in Fleet → square-invoice-creator.yml

When a chargeback threshold is breached, queries Elasticsearch for recent dispute patterns, opens a Datadog alert, and creates a ServiceNow escalation ticket for risk review.

naftiko: '0.5'
info:
  label: Merchant Chargeback Alert Pipeline
  description: When a chargeback threshold is breached, queries Elasticsearch for recent dispute patterns, opens a Datadog alert, and creates a ServiceNow escalation ticket for risk review.
  tags:
  - chargebacks
  - risk
  - elasticsearch
  - datadog
  - servicenow
  - merchant-services
capability:
  exposes:
  - type: mcp
    namespace: chargeback-alerts
    port: 8080
    tools:
    - name: escalate-chargeback-risk
      description: Analyze chargeback patterns and escalate to risk operations when threshold is breached.
      inputParameters:
      - name: merchant_id
        in: body
        type: string
        description: The Square merchant ID.
      - name: dispute_count
        in: body
        type: integer
        description: Number of disputes in the current period.
      - name: threshold
        in: body
        type: integer
        description: The chargeback count threshold that was breached.
      steps:
      - name: search-disputes
        type: call
        call: elasticsearch.search
        with:
          index: square-disputes-*
          query:
            bool:
              filter:
              - term:
                  merchant_id: '{{merchant_id}}'
              - range:
                  created_at:
                    gte: now-30d
      - name: create-alert
        type: call
        call: datadog.create-event
        with:
          title: 'Chargeback threshold breached: merchant {{merchant_id}}'
          text: '{{dispute_count}} disputes in 30 days (threshold: {{threshold}}). Top dispute reasons from search: {{search-disputes.hits.total.value}} hits.'
          alert_type: warning
      - name: open-escalation
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Chargeback risk escalation: merchant {{merchant_id}}'
          description: 'Merchant {{merchant_id}} breached chargeback threshold ({{dispute_count}}/{{threshold}}). Pattern analysis available in Elasticsearch. Datadog event: {{create-alert.event.url}}.'
          category: risk_escalation
          assigned_group: Risk_Operations
          urgency: '2'
  consumes:
  - type: http
    namespace: elasticsearch
    baseUri: https://block-es.internal:9200
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: search
      path: /{{index}}/_search
      inputParameters:
      - name: index
        in: path
      operations:
      - name: search
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://block.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → merchant-chargeback-alert-pipeline.yml

Fetches the current Bitcoin-to-USD exchange rate from the Block Bitcoin API for use in Cash App pricing and merchant settlement calculations.

naftiko: '0.5'
info:
  label: Bitcoin Price Ticker
  description: Fetches the current Bitcoin-to-USD exchange rate from the Block Bitcoin API for use in Cash App pricing and merchant settlement calculations.
  tags:
  - bitcoin
  - crypto
  - fintech
  - cash-app
capability:
  exposes:
  - type: mcp
    namespace: bitcoin-pricing
    port: 8080
    tools:
    - name: get-btc-usd-price
      description: Retrieve the current BTC/USD exchange rate.
      inputParameters: []
      call: bitcoin.get-price
      with:
        currency_pair: BTC-USD
  consumes:
  - type: http
    namespace: bitcoin
    baseUri: https://api.blockchain.info/v2
    authentication:
      type: bearer
      token: $secrets.blockchain_api_token
    resources:
    - name: ticker
      path: /ticker
      operations:
      - name: get-price
        method: GET
Open in Framework → View in Fleet → bitcoin-price-ticker.yml

Manages API key rotation by generating a new key in Square, updating the secret in AWS Secrets Manager, notifying the developer via SendGrid, and logging in ServiceNow.

naftiko: '0.5'
info:
  label: Developer API Key Lifecycle Pipeline
  description: Manages API key rotation by generating a new key in Square, updating the secret in AWS Secrets Manager, notifying the developer via SendGrid, and logging in ServiceNow.
  tags:
  - developer-platform
  - square
  - amazon-web-services
  - sendgrid
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: api-key-lifecycle
    port: 8080
    tools:
    - name: rotate-api-key
      description: Rotate a developer API key with secret storage update and notification.
      inputParameters:
      - name: application_id
        in: body
        type: string
        description: The Square application identifier.
      - name: developer_email
        in: body
        type: string
        description: Developer contact email.
      steps:
      - name: generate-key
        type: call
        call: square.rotate-access-token
        with:
          application_id: '{{application_id}}'
      - name: store-secret
        type: call
        call: aws-secrets.update-secret
        with:
          secret_id: square/{{application_id}}/access-token
          secret_value: '{{generate-key.access_token}}'
      - name: notify-developer
        type: call
        call: sendgrid.send-email
        with:
          to: '{{developer_email}}'
          subject: API Key Rotated — {{application_id}}
          body: 'Your Square API key has been rotated. Please update your integration. New key prefix: {{generate-key.token_prefix}}.'
      - name: log-rotation
        type: call
        call: servicenow.create-change-request
        with:
          short_description: 'API key rotation: {{application_id}}'
          description: 'API key rotated for application {{application_id}}. Developer: {{developer_email}}.'
          category: security
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: oauth
      path: /oauth2/token/revoke
      operations:
      - name: rotate-access-token
        method: POST
  - type: http
    namespace: aws-secrets
    baseUri: https://secretsmanager.us-east-1.amazonaws.com
    authentication:
      type: aws-sigv4
      region: us-east-1
      access_key: $secrets.aws_access_key
      secret_key: $secrets.aws_secret_key
    resources:
    - name: secrets
      path: /
      operations:
      - name: update-secret
        method: POST
  - type: http
    namespace: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://block.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-request
        method: POST
Open in Framework → View in Fleet → developer-api-key-lifecycle-pipeline.yml

Provisions a new Square Terminal device, configures it for the merchant location, registers in ServiceNow asset management, and sends setup instructions via SendGrid.

naftiko: '0.5'
info:
  label: Square POS Deployment Pipeline
  description: Provisions a new Square Terminal device, configures it for the merchant location, registers in ServiceNow asset management, and sends setup instructions via SendGrid.
  tags:
  - hardware
  - square
  - servicenow
  - sendgrid
capability:
  exposes:
  - type: mcp
    namespace: pos-deployment
    port: 8080
    tools:
    - name: deploy-terminal
      description: Provision and configure a Square Terminal for a merchant location.
      inputParameters:
      - name: location_id
        in: body
        type: string
        description: Square location ID.
      - name: device_code
        in: body
        type: string
        description: Terminal device code.
      - name: merchant_email
        in: body
        type: string
        description: Merchant email.
      steps:
      - name: create-device-code
        type: call
        call: square.create-device-code
        with:
          location_id: '{{location_id}}'
          product_type: TERMINAL_API
      - name: register-asset
        type: call
        call: servicenow.create-asset
        with:
          name: Square Terminal — {{location_id}}
          asset_tag: '{{device_code}}'
          category: POS Hardware
      - name: send-instructions
        type: call
        call: sendgrid.send-email
        with:
          to: '{{merchant_email}}'
          subject: 'Square Terminal Setup — Device Code: {{create-device-code.code}}'
          body: 'Your Square Terminal is ready. Enter code {{create-device-code.code}} on your terminal to activate. Asset ID: {{register-asset.asset_id}}.'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: devices
      path: /devices/codes
      operations:
      - name: create-device-code
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://block.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: assets
      path: /table/alm_hardware
      operations:
      - name: create-asset
        method: POST
  - type: http
    namespace: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → square-pos-deployment-pipeline.yml

Fetches payout details from the Square Payouts API including destination bank account, amount, and arrival date.

naftiko: '0.5'
info:
  label: Square Payout Details Retrieval
  description: Fetches payout details from the Square Payouts API including destination bank account, amount, and arrival date.
  tags:
  - payouts
  - square
  - settlement
  - fintech
capability:
  exposes:
  - type: mcp
    namespace: square-payouts
    port: 8080
    tools:
    - name: get-payout
      description: Retrieve a Square payout by ID.
      inputParameters:
      - name: payout_id
        in: body
        type: string
        description: The Square payout ID.
      call: square.get-payout
      with:
        payout_id: '{{payout_id}}'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: payouts
      path: /payouts/{{payout_id}}
      inputParameters:
      - name: payout_id
        in: path
      operations:
      - name: get-payout
        method: GET
Open in Framework → View in Fleet → square-payout-details-retrieval.yml

Reconciles Square payment settlements against bank deposits, identifies discrepancies, logs in S3, and alerts the finance team via Slack.

naftiko: '0.5'
info:
  label: Merchant Settlement Reconciliation Pipeline
  description: Reconciles Square payment settlements against bank deposits, identifies discrepancies, logs in S3, and alerts the finance team via Slack.
  tags:
  - finance
  - square
  - amazon-s3
  - slack
capability:
  exposes:
  - type: mcp
    namespace: settlement-recon
    port: 8080
    tools:
    - name: reconcile-settlements
      description: Reconcile Square settlements against bank records with discrepancy tracking.
      inputParameters:
      - name: location_id
        in: body
        type: string
        description: Square location ID.
      - name: settlement_date
        in: body
        type: string
        description: Settlement date YYYY-MM-DD.
      steps:
      - name: get-payouts
        type: call
        call: square.list-payouts
        with:
          location_id: '{{location_id}}'
          begin_time: '{{settlement_date}}'
      - name: get-payments
        type: call
        call: square.list-payments
        with:
          location_id: '{{location_id}}'
          begin_time: '{{settlement_date}}'
      - name: store-recon
        type: call
        call: s3.put-object
        with:
          bucket: settlement-reconciliation
          key: '{{location_id}}/{{settlement_date}}/recon.json'
          body: '{{get-payouts.summary}}'
      - name: alert-finance
        type: call
        call: slack.post-message
        with:
          channel: '#finance-ops'
          text: 'Settlement reconciliation for {{location_id}} on {{settlement_date}}: Total settled: ${{get-payouts.total_amount}}. Payments: ${{get-payments.total_amount}}.'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: payouts
      path: /payouts
      inputParameters:
      - name: location_id
        in: query
      - name: begin_time
        in: query
      operations:
      - name: list-payouts
        method: GET
    - name: payments
      path: /payments
      inputParameters:
      - name: location_id
        in: query
      - name: begin_time
        in: query
      operations:
      - name: list-payments
        method: GET
  - type: http
    namespace: s3
    baseUri: https://s3.amazonaws.com
    authentication:
      type: aws-sigv4
      region: us-east-1
      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: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → merchant-settlement-reconciliation-pipeline.yml

When a payment dispute is opened, fetches the dispute details from Square, retrieves related order evidence, and submits the evidence package back to the Disputes API.

naftiko: '0.5'
info:
  label: Square Dispute Evidence Submission
  description: When a payment dispute is opened, fetches the dispute details from Square, retrieves related order evidence, and submits the evidence package back to the Disputes API.
  tags:
  - disputes
  - square
  - risk
  - merchant-services
capability:
  exposes:
  - type: mcp
    namespace: square-disputes
    port: 8080
    tools:
    - name: submit-dispute-evidence
      description: Gather order evidence for a Square dispute and submit it to the Disputes API.
      inputParameters:
      - name: dispute_id
        in: body
        type: string
        description: The Square dispute ID.
      steps:
      - name: get-dispute
        type: call
        call: square.get-dispute
        with:
          dispute_id: '{{dispute_id}}'
      - name: get-order-evidence
        type: call
        call: square.get-order
        with:
          order_id: '{{get-dispute.dispute.order_id}}'
      - name: submit-evidence
        type: call
        call: square.create-dispute-evidence-text
        with:
          dispute_id: '{{dispute_id}}'
          evidence_type: GENERIC_EVIDENCE
          evidence_text: 'Order {{get-order-evidence.order.id}} fulfilled on {{get-order-evidence.order.fulfillments.0.updated_at}}. Total: {{get-order-evidence.order.total_money.amount}} {{get-order-evidence.order.total_money.currency}}.'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: disputes
      path: /disputes/{{dispute_id}}
      inputParameters:
      - name: dispute_id
        in: path
      operations:
      - name: get-dispute
        method: GET
    - name: orders
      path: /orders/{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
    - name: dispute-evidence
      path: /disputes/{{dispute_id}}/evidence-text
      inputParameters:
      - name: dispute_id
        in: path
      operations:
      - name: create-dispute-evidence-text
        method: POST
Open in Framework → View in Fleet → square-dispute-evidence-submission.yml

Retrieves the balance and status of a Square gift card by its GAN (gift card account number).

naftiko: '0.5'
info:
  label: Square Gift Card Balance
  description: Retrieves the balance and status of a Square gift card by its GAN (gift card account number).
  tags:
  - gift-cards
  - square
  - merchant-services
capability:
  exposes:
  - type: mcp
    namespace: square-gift-cards
    port: 8080
    tools:
    - name: get-gift-card-balance
      description: Look up a Square gift card balance by GAN.
      inputParameters:
      - name: gan
        in: body
        type: string
        description: The gift card account number.
      call: square.retrieve-gift-card-from-gan
      with:
        gan: '{{gan}}'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: gift-cards
      path: /gift-cards/from-gan
      operations:
      - name: retrieve-gift-card-from-gan
        method: POST
Open in Framework → View in Fleet → square-gift-card-balance.yml

Creates a Square Online Checkout payment link for a given amount, item name, and merchant location.

naftiko: '0.5'
info:
  label: Square Checkout Link Generator
  description: Creates a Square Online Checkout payment link for a given amount, item name, and merchant location.
  tags:
  - checkout
  - square
  - ecommerce
  - payments
capability:
  exposes:
  - type: mcp
    namespace: square-checkout
    port: 8080
    tools:
    - name: create-checkout-link
      description: Generate a Square payment link for online checkout.
      inputParameters:
      - name: location_id
        in: body
        type: string
        description: The Square location ID.
      - name: item_name
        in: body
        type: string
        description: The item name for the checkout.
      - name: amount_cents
        in: body
        type: integer
        description: The amount in cents.
      - name: currency
        in: body
        type: string
        description: ISO 4217 currency code.
      call: square.create-payment-link
      with:
        quick_pay:
          name: '{{item_name}}'
          price_money:
            amount: '{{amount_cents}}'
            currency: '{{currency}}'
          location_id: '{{location_id}}'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: payment-links
      path: /online-checkout/payment-links
      operations:
      - name: create-payment-link
        method: POST
Open in Framework → View in Fleet → square-checkout-link-generator.yml

Retrieves a team member profile from Square by team member ID, returning name, role, assigned locations, and wage settings.

naftiko: '0.5'
info:
  label: Square Team Member Lookup
  description: Retrieves a team member profile from Square by team member ID, returning name, role, assigned locations, and wage settings.
  tags:
  - workforce
  - square
capability:
  exposes:
  - type: mcp
    namespace: square-team
    port: 8080
    tools:
    - name: get-team-member
      description: Look up a Square team member by ID.
      inputParameters:
      - name: team_member_id
        in: body
        type: string
        description: The Square team member identifier.
      call: square.get-team-member
      with:
        team_member_id: '{{team_member_id}}'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: team-members
      path: /team-members/{{team_member_id}}
      inputParameters:
      - name: team_member_id
        in: path
      operations:
      - name: get-team-member
        method: GET
Open in Framework → View in Fleet → square-team-member-lookup.yml

Monitors Lightning Network channel capacity, rebalances channels when liquidity is low, logs actions in CloudWatch, and notifies the infrastructure team via Slack.

naftiko: '0.5'
info:
  label: Bitcoin Lightning Channel Management
  description: Monitors Lightning Network channel capacity, rebalances channels when liquidity is low, logs actions in CloudWatch, and notifies the infrastructure team via Slack.
  tags:
  - bitcoin
  - lightning-network
  - cloudwatch
  - slack
capability:
  exposes:
  - type: mcp
    namespace: lightning-channels
    port: 8080
    tools:
    - name: manage-channels
      description: Monitor and rebalance Lightning Network channels with logging and alerting.
      inputParameters:
      - name: node_id
        in: body
        type: string
        description: Lightning node public key.
      - name: min_capacity_sats
        in: body
        type: integer
        description: Minimum channel capacity in satoshis.
      steps:
      - name: get-channels
        type: call
        call: lightning.list-channels
        with:
          node_id: '{{node_id}}'
      - name: rebalance
        type: call
        call: lightning.rebalance-channel
        with:
          node_id: '{{node_id}}'
          min_capacity: '{{min_capacity_sats}}'
      - name: log-metrics
        type: call
        call: cloudwatch.put-metric
        with:
          namespace: Lightning/Channels
          metric_name: ChannelCapacity
          value: '{{rebalance.total_capacity}}'
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: '#lightning-ops'
          text: 'Lightning channel rebalance complete. Node: {{node_id}}. Channels rebalanced: {{rebalance.count}}. Total capacity: {{rebalance.total_capacity}} sats.'
  consumes:
  - type: http
    namespace: lightning
    baseUri: https://lightning.block.xyz/api/v1
    authentication:
      type: bearer
      token: $secrets.lightning_api_token
    resources:
    - name: channels
      path: /nodes/{{node_id}}/channels
      inputParameters:
      - name: node_id
        in: path
      operations:
      - name: list-channels
        method: GET
    - name: rebalance
      path: /nodes/{{node_id}}/rebalance
      inputParameters:
      - name: node_id
        in: path
      operations:
      - name: rebalance-channel
        method: POST
  - type: http
    namespace: cloudwatch
    baseUri: https://monitoring.us-east-1.amazonaws.com
    authentication:
      type: aws-sigv4
      region: us-east-1
      access_key: $secrets.aws_access_key
      secret_key: $secrets.aws_secret_key
    resources:
    - name: metrics
      path: /
      operations:
      - name: put-metric
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → bitcoin-lightning-channel-management.yml

Checks the status of an Afterpay buy-now-pay-later order by token, returning payment schedule, installment amounts, and current payment status.

naftiko: '0.5'
info:
  label: Afterpay Payment Status
  description: Checks the status of an Afterpay buy-now-pay-later order by token, returning payment schedule, installment amounts, and current payment status.
  tags:
  - payments
  - afterpay
capability:
  exposes:
  - type: mcp
    namespace: afterpay
    port: 8080
    tools:
    - name: get-payment-status
      description: Retrieve Afterpay order status by order token.
      inputParameters:
      - name: token
        in: body
        type: string
        description: The Afterpay order token.
      call: afterpay.get-order
      with:
        token: '{{token}}'
  consumes:
  - type: http
    namespace: afterpay
    baseUri: https://global-api.afterpay.com/v2
    authentication:
      type: basic
      username: $secrets.afterpay_merchant_id
      password: $secrets.afterpay_secret_key
    resources:
    - name: orders
      path: /payments/{{token}}
      inputParameters:
      - name: token
        in: path
      operations:
      - name: get-order
        method: GET
Open in Framework → View in Fleet → afterpay-payment-status.yml

Retrieves the latest commit status and branch protection details for a Block GitHub repository, returning CI check results and merge requirements.

naftiko: '0.5'
info:
  label: GitHub Repository Status
  description: Retrieves the latest commit status and branch protection details for a Block GitHub repository, returning CI check results and merge requirements.
  tags:
  - devops
  - github
capability:
  exposes:
  - type: mcp
    namespace: github-repo
    port: 8080
    tools:
    - name: get-repo-status
      description: Get the latest commit status for a repository branch.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: Repository name in owner/repo format.
      - name: branch
        in: body
        type: string
        description: Branch name.
      call: github.get-status
      with:
        repo: '{{repo}}'
        branch: '{{branch}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: statuses
      path: /repos/{{repo}}/commits/{{branch}}/status
      inputParameters:
      - name: repo
        in: path
      - name: branch
        in: path
      operations:
      - name: get-status
        method: GET
Open in Framework → View in Fleet → github-repository-status.yml

Accepts a payment in a foreign currency, converts the amount using real-time exchange rates, processes the payment in Square, and logs the conversion in PostgreSQL.

naftiko: '0.5'
info:
  label: Multi-Currency Payment Conversion
  description: Accepts a payment in a foreign currency, converts the amount using real-time exchange rates, processes the payment in Square, and logs the conversion in PostgreSQL.
  tags:
  - multi-currency
  - payments
  - square
  - postgresql
  - fintech
capability:
  exposes:
  - type: mcp
    namespace: currency-payments
    port: 8080
    tools:
    - name: process-multicurrency-payment
      description: Convert and process a foreign currency payment through Square.
      inputParameters:
      - name: source_id
        in: body
        type: string
        description: The Square payment source token.
      - name: amount
        in: body
        type: integer
        description: The amount in the source currency's smallest denomination.
      - name: source_currency
        in: body
        type: string
        description: The source ISO 4217 currency code.
      - name: target_currency
        in: body
        type: string
        description: The target ISO 4217 currency code (typically USD).
      steps:
      - name: get-exchange-rate
        type: call
        call: exchangerate.get-rate
        with:
          base: '{{source_currency}}'
          target: '{{target_currency}}'
      - name: process-payment
        type: call
        call: square.create-payment
        with:
          source_id: '{{source_id}}'
          amount_money:
            amount: '{{amount}}'
            currency: '{{source_currency}}'
      - name: log-conversion
        type: call
        call: postgresql.insert-row
        with:
          table: currency_conversions
          payment_id: '{{process-payment.payment.id}}'
          source_amount: '{{amount}}'
          source_currency: '{{source_currency}}'
          exchange_rate: '{{get-exchange-rate.rate}}'
          target_currency: '{{target_currency}}'
  consumes:
  - type: http
    namespace: exchangerate
    baseUri: https://api.exchangerate.host
    authentication:
      type: apiKey
      name: access_key
      in: query
      value: $secrets.exchangerate_key
    resources:
    - name: rates
      path: /convert
      operations:
      - name: get-rate
        method: GET
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: payments
      path: /payments
      operations:
      - name: create-payment
        method: POST
  - type: http
    namespace: postgresql
    baseUri: https://block-data.internal/api/v1
    authentication:
      type: bearer
      token: $secrets.internal_db_token
    resources:
    - name: rows
      path: /tables/{{table}}/rows
      inputParameters:
      - name: table
        in: path
      operations:
      - name: insert-row
        method: POST
Open in Framework → View in Fleet → multi-currency-payment-conversion.yml

Creates discount codes in Square, builds a customer segment in MailChimp, launches an email campaign, and tracks redemptions in Google Analytics.

naftiko: '0.5'
info:
  label: Merchant Coupon Distribution Workflow
  description: Creates discount codes in Square, builds a customer segment in MailChimp, launches an email campaign, and tracks redemptions in Google Analytics.
  tags:
  - promotions
  - square
  - mailchimp
  - google-analytics
capability:
  exposes:
  - type: mcp
    namespace: coupon-distribution
    port: 8080
    tools:
    - name: distribute-coupons
      description: Create discount codes and distribute via targeted email campaign.
      inputParameters:
      - name: discount_name
        in: body
        type: string
        description: Name of the discount.
      - name: percentage_off
        in: body
        type: integer
        description: Discount percentage.
      - name: location_id
        in: body
        type: string
        description: Square location ID.
      steps:
      - name: create-discount
        type: call
        call: square.create-catalog-discount
        with:
          name: '{{discount_name}}'
          percentage: '{{percentage_off}}'
      - name: get-customers
        type: call
        call: square.search-customers
        with:
          location_ids: '{{location_id}}'
      - name: send-campaign
        type: call
        call: mailchimp.create-campaign
        with:
          list_id: active-customers
          subject: '{{discount_name}} — {{percentage_off}}% Off!'
          body: Use code {{create-discount.code}} for {{percentage_off}}% off your next purchase!
      - name: track-launch
        type: call
        call: google-analytics.send-event
        with:
          event_name: coupon_campaign_launched
          discount: '{{discount_name}}'
          recipients: '{{get-customers.count}}'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: catalog
      path: /catalog/object
      operations:
      - name: create-catalog-discount
        method: POST
    - name: customers
      path: /customers/search
      operations:
      - name: search-customers
        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
  - type: http
    namespace: google-analytics
    baseUri: https://www.google-analytics.com
    authentication:
      type: apiKey
      name: measurement_id
      in: query
      value: $secrets.ga_measurement_id
    resources:
    - name: events
      path: /mp/collect
      operations:
      - name: send-event
        method: POST
Open in Framework → View in Fleet → merchant-coupon-distribution-workflow.yml

Enriches a Square merchant profile with firmographic data from ZoomInfo including employee count, revenue, and industry classification.

naftiko: '0.5'
info:
  label: ZoomInfo Merchant Enrichment
  description: Enriches a Square merchant profile with firmographic data from ZoomInfo including employee count, revenue, and industry classification.
  tags:
  - enrichment
  - zoominfo
  - square
  - merchant-services
capability:
  exposes:
  - type: mcp
    namespace: merchant-enrichment
    port: 8080
    tools:
    - name: enrich-merchant
      description: Enrich a Square merchant with ZoomInfo firmographic data.
      inputParameters:
      - name: merchant_id
        in: body
        type: string
        description: The Square merchant ID.
      - name: business_name
        in: body
        type: string
        description: The merchant's business name for ZoomInfo lookup.
      steps:
      - name: get-merchant
        type: call
        call: square.get-merchant
        with:
          merchant_id: '{{merchant_id}}'
      - name: enrich-company
        type: call
        call: zoominfo.search-company
        with:
          companyName: '{{business_name}}'
      - name: update-merchant-note
        type: call
        call: square.update-merchant-note
        with:
          merchant_id: '{{merchant_id}}'
          note: 'ZoomInfo: {{enrich-company.data.0.employeeCount}} employees, {{enrich-company.data.0.revenue}} revenue, Industry: {{enrich-company.data.0.industry}}.'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: merchants
      path: /merchants/{{merchant_id}}
      inputParameters:
      - name: merchant_id
        in: path
      operations:
      - name: get-merchant
        method: GET
      - name: update-merchant-note
        method: PUT
  - type: http
    namespace: zoominfo
    baseUri: https://api.zoominfo.com/search
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: companies
      path: /company
      operations:
      - name: search-company
        method: POST
Open in Framework → View in Fleet → zoominfo-merchant-enrichment.yml

Uploads a compliance document to the Block SharePoint compliance library and creates a metadata record for audit tracking.

naftiko: '0.5'
info:
  label: SharePoint Compliance Document Upload
  description: Uploads a compliance document to the Block SharePoint compliance library and creates a metadata record for audit tracking.
  tags:
  - compliance
  - sharepoint
  - documents
capability:
  exposes:
  - type: mcp
    namespace: compliance-docs
    port: 8080
    tools:
    - name: upload-compliance-doc
      description: Upload a compliance document to SharePoint.
      inputParameters:
      - name: document_name
        in: body
        type: string
        description: The document file name.
      - name: folder_path
        in: body
        type: string
        description: The SharePoint folder path.
      - name: content_base64
        in: body
        type: string
        description: The document content in base64 encoding.
      call: sharepoint.upload-file
      with:
        site_id: block_compliance
        folder_path: '{{folder_path}}'
        file_name: '{{document_name}}'
        content: '{{content_base64}}'
  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
Open in Framework → View in Fleet → sharepoint-compliance-document-upload.yml

When a payment processing outage is detected via Datadog, creates a ServiceNow P1 incident, posts a status update to the Square developer status page, and alerts the on-call team in CloudWatch.

naftiko: '0.5'
info:
  label: Incident Response for Payment Outage
  description: When a payment processing outage is detected via Datadog, creates a ServiceNow P1 incident, posts a status update to the Square developer status page, and alerts the on-call team in CloudWatch.
  tags:
  - incident-response
  - datadog
  - servicenow
  - cloudwatch
  - payments
capability:
  exposes:
  - type: mcp
    namespace: incident-response
    port: 8080
    tools:
    - name: trigger-payment-outage-response
      description: Orchestrate the incident response flow for a payment processing outage.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The Datadog alert ID.
      - name: severity
        in: body
        type: string
        description: Incident severity (P1, P2, P3).
      - name: affected_service
        in: body
        type: string
        description: The affected service name.
      steps:
      - name: get-alert
        type: call
        call: datadog.get-event
        with:
          event_id: '{{alert_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: '{{severity}} Payment outage: {{affected_service}}'
          description: 'Datadog alert {{alert_id}} triggered. Service: {{affected_service}}. Alert details: {{get-alert.event.text}}.'
          urgency: '1'
          category: payment_outage
          assigned_group: Payments_Oncall
      - name: log-incident
        type: call
        call: cloudwatch.put-log-event
        with:
          logGroupName: /block/incidents
          logStreamName: payment-outages
          message: '{{severity}} incident {{create-incident.number}} created for {{affected_service}}. Datadog alert: {{alert_id}}.'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: events
      path: /events/{{event_id}}
      inputParameters:
      - name: event_id
        in: path
      operations:
      - name: get-event
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://block.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: cloudwatch
    baseUri: https://logs.us-east-1.amazonaws.com
    authentication:
      type: awsSigV4
      accessKeyId: $secrets.aws_access_key_id
      secretAccessKey: $secrets.aws_secret_access_key
      region: us-east-1
      service: logs
    resources:
    - name: log-events
      path: /
      operations:
      - name: put-log-event
        method: POST
Open in Framework → View in Fleet → incident-response-for-payment-outage.yml

Retrieves team member hours from Square, calculates payroll, processes payments via Cash App for Business, and archives records in S3.

naftiko: '0.5'
info:
  label: Square Payroll Processing Pipeline
  description: Retrieves team member hours from Square, calculates payroll, processes payments via Cash App for Business, and archives records in S3.
  tags:
  - payroll
  - square
  - cash-app
  - amazon-s3
capability:
  exposes:
  - type: mcp
    namespace: payroll-processing
    port: 8080
    tools:
    - name: process-payroll
      description: Calculate and process payroll for Square team members.
      inputParameters:
      - name: location_id
        in: body
        type: string
        description: Square location ID.
      - name: pay_period_end
        in: body
        type: string
        description: Pay period end date YYYY-MM-DD.
      steps:
      - name: get-timecards
        type: call
        call: square.search-shifts
        with:
          location_ids: '{{location_id}}'
          end_at: '{{pay_period_end}}'
      - name: calculate-payroll
        type: call
        call: square.calculate-pay
        with:
          shifts: '{{get-timecards.shifts}}'
      - name: process-payments
        type: call
        call: cashapp.batch-pay
        with:
          payments: '{{calculate-payroll.payment_list}}'
      - name: archive-records
        type: call
        call: s3.put-object
        with:
          bucket: payroll-records
          key: '{{location_id}}/{{pay_period_end}}/payroll.json'
          body: '{{calculate-payroll.summary}}'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: shifts
      path: /labor/shifts/search
      operations:
      - name: search-shifts
        method: POST
    - name: payroll
      path: /labor/payroll/calculate
      operations:
      - name: calculate-pay
        method: POST
  - type: http
    namespace: cashapp
    baseUri: https://api.cash.app/v1
    authentication:
      type: bearer
      token: $secrets.cashapp_api_token
    resources:
    - name: payments
      path: /payments/batch
      operations:
      - name: batch-pay
        method: POST
  - type: http
    namespace: s3
    baseUri: https://s3.amazonaws.com
    authentication:
      type: aws-sigv4
      region: us-east-1
      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
Open in Framework → View in Fleet → square-payroll-processing-pipeline.yml

Searches the TIDAL music catalog by query string, returning matching tracks with artist, album, and streaming URL information.

naftiko: '0.5'
info:
  label: TIDAL Track Search
  description: Searches the TIDAL music catalog by query string, returning matching tracks with artist, album, and streaming URL information.
  tags:
  - music
  - tidal
capability:
  exposes:
  - type: mcp
    namespace: tidal
    port: 8080
    tools:
    - name: search-tracks
      description: Search TIDAL music catalog for tracks matching a query.
      inputParameters:
      - name: query
        in: body
        type: string
        description: Search query string.
      call: tidal.search
      with:
        query: '{{query}}'
        type: tracks
  consumes:
  - type: http
    namespace: tidal
    baseUri: https://openapi.tidal.com/v2
    authentication:
      type: bearer
      token: $secrets.tidal_api_token
    resources:
    - name: search
      path: /searchresults/{{query}}
      inputParameters:
      - name: query
        in: path
      - name: type
        in: query
      operations:
      - name: search
        method: GET
Open in Framework → View in Fleet → tidal-track-search.yml

Issues a refund against a completed Square payment, logs the refund in PostgreSQL for audit, and notifies the merchant via ServiceNow.

naftiko: '0.5'
info:
  label: Square Refund Processor
  description: Issues a refund against a completed Square payment, logs the refund in PostgreSQL for audit, and notifies the merchant via ServiceNow.
  tags:
  - refunds
  - square
  - postgresql
  - servicenow
  - merchant-services
capability:
  exposes:
  - type: mcp
    namespace: square-refunds
    port: 8080
    tools:
    - name: process-refund
      description: Refund a completed payment, persist the refund record, and notify merchant support.
      inputParameters:
      - name: payment_id
        in: body
        type: string
        description: The Square payment ID to refund.
      - name: amount_cents
        in: body
        type: integer
        description: The refund amount in cents.
      - name: currency
        in: body
        type: string
        description: ISO 4217 currency code.
      - name: reason
        in: body
        type: string
        description: Reason for the refund.
      steps:
      - name: issue-refund
        type: call
        call: square.create-refund
        with:
          payment_id: '{{payment_id}}'
          amount_money:
            amount: '{{amount_cents}}'
            currency: '{{currency}}'
          reason: '{{reason}}'
      - name: log-refund
        type: call
        call: postgresql.insert-refund
        with:
          table: refund_audit_log
          payment_id: '{{payment_id}}'
          refund_id: '{{issue-refund.refund.id}}'
          amount: '{{amount_cents}}'
          reason: '{{reason}}'
      - name: notify-support
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Refund processed: {{issue-refund.refund.id}}'
          description: 'Refund of {{amount_cents}} {{currency}} issued against payment {{payment_id}}. Reason: {{reason}}.'
          category: refund_processing
          assigned_group: Merchant_Support
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: refunds
      path: /refunds
      operations:
      - name: create-refund
        method: POST
  - type: http
    namespace: postgresql
    baseUri: https://block-data.internal/api/v1
    authentication:
      type: bearer
      token: $secrets.internal_db_token
    resources:
    - name: refund-records
      path: /tables/{{table}}/rows
      inputParameters:
      - name: table
        in: path
      operations:
      - name: insert-refund
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://block.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → square-refund-processor.yml

Rotates a Square developer application OAuth token, stores the new credentials in AWS Secrets Manager, and logs the rotation event in CloudWatch.

naftiko: '0.5'
info:
  label: Developer Application Key Rotation
  description: Rotates a Square developer application OAuth token, stores the new credentials in AWS Secrets Manager, and logs the rotation event in CloudWatch.
  tags:
  - developer-platform
  - security
  - square
  - amazon-web-services
  - cloudwatch
capability:
  exposes:
  - type: mcp
    namespace: key-rotation
    port: 8080
    tools:
    - name: rotate-oauth-token
      description: Rotate a Square OAuth token, update secrets storage, and log the rotation.
      inputParameters:
      - name: application_id
        in: body
        type: string
        description: The Square application ID.
      - name: current_refresh_token
        in: body
        type: string
        description: The current OAuth refresh token.
      steps:
      - name: refresh-token
        type: call
        call: square.obtain-token
        with:
          client_id: '{{application_id}}'
          grant_type: refresh_token
          refresh_token: '{{current_refresh_token}}'
      - name: store-secret
        type: call
        call: aws.update-secret
        with:
          SecretId: square/oauth/{{application_id}}
          SecretString: '{"access_token":"{{refresh-token.access_token}}","refresh_token":"{{refresh-token.refresh_token}}"}'
      - name: log-rotation
        type: call
        call: cloudwatch.put-log-event
        with:
          logGroupName: /block/key-rotation
          logStreamName: square-oauth
          message: Token rotated for application {{application_id}} at {{refresh-token.expires_at}}.
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/oauth2
    authentication:
      type: bearer
      token: $secrets.square_client_secret
    resources:
    - name: token
      path: /token
      operations:
      - name: obtain-token
        method: POST
  - type: http
    namespace: aws
    baseUri: https://secretsmanager.us-east-1.amazonaws.com
    authentication:
      type: awsSigV4
      accessKeyId: $secrets.aws_access_key_id
      secretAccessKey: $secrets.aws_secret_access_key
      region: us-east-1
      service: secretsmanager
    resources:
    - name: secrets
      path: /
      operations:
      - name: update-secret
        method: POST
  - type: http
    namespace: cloudwatch
    baseUri: https://logs.us-east-1.amazonaws.com
    authentication:
      type: awsSigV4
      accessKeyId: $secrets.aws_access_key_id
      secretAccessKey: $secrets.aws_secret_access_key
      region: us-east-1
      service: logs
    resources:
    - name: log-events
      path: /
      operations:
      - name: put-log-event
        method: POST
Open in Framework → View in Fleet → developer-application-key-rotation.yml

Scores a transaction through Mastercard's fraud detection API and, if the risk score exceeds a threshold, blocks the payment in Square and logs the event in Elasticsearch.

naftiko: '0.5'
info:
  label: Mastercard Transaction Risk Scoring
  description: Scores a transaction through Mastercard's fraud detection API and, if the risk score exceeds a threshold, blocks the payment in Square and logs the event in Elasticsearch.
  tags:
  - fraud
  - risk
  - mastercard
  - square
  - elasticsearch
capability:
  exposes:
  - type: mcp
    namespace: fraud-scoring
    port: 8080
    tools:
    - name: score-and-block-transaction
      description: Score a transaction for fraud via Mastercard and block it in Square if risk is high.
      inputParameters:
      - name: payment_id
        in: body
        type: string
        description: The Square payment ID.
      - name: card_number_hash
        in: body
        type: string
        description: SHA-256 hash of the card number.
      - name: amount_cents
        in: body
        type: integer
        description: Transaction amount in cents.
      - name: merchant_category_code
        in: body
        type: string
        description: The MCC for the merchant.
      steps:
      - name: score-transaction
        type: call
        call: mastercard.score-transaction
        with:
          cardNumberHash: '{{card_number_hash}}'
          amount: '{{amount_cents}}'
          mcc: '{{merchant_category_code}}'
      - name: cancel-payment
        type: call
        call: square.cancel-payment
        with:
          payment_id: '{{payment_id}}'
      - name: log-fraud-event
        type: call
        call: elasticsearch.index-document
        with:
          index: fraud-events
          document:
            payment_id: '{{payment_id}}'
            risk_score: '{{score-transaction.riskScore}}'
            action: blocked
            mcc: '{{merchant_category_code}}'
  consumes:
  - type: http
    namespace: mastercard
    baseUri: https://api.mastercard.com/fraud/merchant/v3
    authentication:
      type: oauth1
      consumerKey: $secrets.mastercard_consumer_key
      signingKey: $secrets.mastercard_signing_key
    resources:
    - name: scoring
      path: /score
      operations:
      - name: score-transaction
        method: POST
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: payments
      path: /payments/{{payment_id}}/cancel
      inputParameters:
      - name: payment_id
        in: path
      operations:
      - name: cancel-payment
        method: POST
  - type: http
    namespace: elasticsearch
    baseUri: https://block-es.internal:9200
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: documents
      path: /{{index}}/_doc
      inputParameters:
      - name: index
        in: path
      operations:
      - name: index-document
        method: POST
Open in Framework → View in Fleet → mastercard-transaction-risk-scoring.yml

Retrieves an appointment booking from Square Bookings API by booking ID, returning service details, staff assignment, and appointment time.

naftiko: '0.5'
info:
  label: Square Booking Retrieval
  description: Retrieves an appointment booking from Square Bookings API by booking ID, returning service details, staff assignment, and appointment time.
  tags:
  - appointments
  - square
capability:
  exposes:
  - type: mcp
    namespace: square-bookings
    port: 8080
    tools:
    - name: get-booking
      description: Look up a Square appointment booking by booking ID.
      inputParameters:
      - name: booking_id
        in: body
        type: string
        description: The Square booking identifier.
      call: square.get-booking
      with:
        booking_id: '{{booking_id}}'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: bookings
      path: /bookings/{{booking_id}}
      inputParameters:
      - name: booking_id
        in: path
      operations:
      - name: get-booking
        method: GET
Open in Framework → View in Fleet → square-booking-retrieval.yml

Syncs product catalog between Square and BigCommerce, updates inventory counts, and notifies the merchant via MailChimp when sync completes.

naftiko: '0.5'
info:
  label: Square Catalog Sync Pipeline
  description: Syncs product catalog between Square and BigCommerce, updates inventory counts, and notifies the merchant via MailChimp when sync completes.
  tags:
  - catalog
  - square
  - bigcommerce
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: catalog-sync
    port: 8080
    tools:
    - name: sync-catalog
      description: Synchronize product catalog between Square and BigCommerce with merchant notification.
      inputParameters:
      - name: location_id
        in: body
        type: string
        description: The Square location identifier.
      - name: merchant_email
        in: body
        type: string
        description: Merchant email for notification.
      steps:
      - name: get-catalog
        type: call
        call: square.list-catalog
        with:
          types: ITEM
      - name: sync-to-bigcommerce
        type: call
        call: bigcommerce.batch-update-products
        with:
          products: '{{get-catalog.objects}}'
      - name: sync-inventory
        type: call
        call: square.get-inventory-counts
        with:
          location_ids: '{{location_id}}'
      - name: notify-merchant
        type: call
        call: mailchimp.send-transactional
        with:
          to: '{{merchant_email}}'
          subject: Catalog Sync Complete
          body: Synced {{get-catalog.total_count}} items to BigCommerce. Inventory updated for location {{location_id}}.
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: catalog
      path: /catalog/list
      inputParameters:
      - name: types
        in: query
      operations:
      - name: list-catalog
        method: GET
    - name: inventory
      path: /inventory/counts/batch-retrieve
      operations:
      - name: get-inventory-counts
        method: POST
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/$secrets.bigcommerce_store_hash/v3
    authentication:
      type: apiKey
      name: X-Auth-Token
      in: header
      value: $secrets.bigcommerce_token
    resources:
    - name: products
      path: /catalog/products
      operations:
      - name: batch-update-products
        method: PUT
  - type: http
    namespace: mailchimp
    baseUri: https://mandrillapp.com/api/1.0
    authentication:
      type: apiKey
      name: key
      in: body
      value: $secrets.mailchimp_transactional_key
    resources:
    - name: messages
      path: /messages/send
      operations:
      - name: send-transactional
        method: POST
Open in Framework → View in Fleet → square-catalog-sync-pipeline.yml

Screens a Cash App user against sanctions lists, logs results in S3, creates a compliance case in ServiceNow, and alerts the compliance team via Slack.

naftiko: '0.5'
info:
  label: Compliance AML Screening Pipeline
  description: Screens a Cash App user against sanctions lists, logs results in S3, creates a compliance case in ServiceNow, and alerts the compliance team via Slack.
  tags:
  - compliance
  - cash-app
  - amazon-s3
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: aml-screening
    port: 8080
    tools:
    - name: screen-user
      description: Run AML screening for a Cash App user with case creation and alerting.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: Cash App user identifier.
      - name: full_name
        in: body
        type: string
        description: User full legal name.
      steps:
      - name: run-screening
        type: call
        call: cashapp.screen-user
        with:
          user_id: '{{user_id}}'
          name: '{{full_name}}'
      - name: store-results
        type: call
        call: s3.put-object
        with:
          bucket: compliance-screening
          key: aml/{{user_id}}/{{run-screening.screening_id}}.json
          body: '{{run-screening.results}}'
      - name: create-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'AML screening: {{full_name}} ({{user_id}})'
          description: 'Screening ID: {{run-screening.screening_id}}. Matches: {{run-screening.match_count}}. Results stored in S3.'
          category: compliance
      - name: alert-compliance
        type: call
        call: slack.post-message
        with:
          channel: '#compliance-alerts'
          text: 'AML screening complete: {{full_name}}. Matches: {{run-screening.match_count}}. Case: {{create-case.number}}.'
  consumes:
  - type: http
    namespace: cashapp
    baseUri: https://api.cash.app/v1
    authentication:
      type: bearer
      token: $secrets.cashapp_api_token
    resources:
    - name: screening
      path: /compliance/screen
      operations:
      - name: screen-user
        method: POST
  - type: http
    namespace: s3
    baseUri: https://s3.amazonaws.com
    authentication:
      type: aws-sigv4
      region: us-east-1
      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: servicenow
    baseUri: https://block.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → compliance-aml-screening-pipeline.yml

Monitors Square inventory levels, identifies low-stock items, creates purchase orders in BigCommerce, and alerts the merchant via MailChimp.

naftiko: '0.5'
info:
  label: Merchant Inventory Alert Pipeline
  description: Monitors Square inventory levels, identifies low-stock items, creates purchase orders in BigCommerce, and alerts the merchant via MailChimp.
  tags:
  - inventory
  - square
  - bigcommerce
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: inventory-alerts
    port: 8080
    tools:
    - name: check-inventory-alerts
      description: Check inventory levels and create purchase orders for low-stock items.
      inputParameters:
      - name: location_id
        in: body
        type: string
        description: Square location ID.
      - name: threshold
        in: body
        type: integer
        description: Minimum stock threshold.
      - name: merchant_email
        in: body
        type: string
        description: Merchant email for alerts.
      steps:
      - name: get-counts
        type: call
        call: square.get-inventory-counts
        with:
          location_ids: '{{location_id}}'
      - name: get-catalog
        type: call
        call: square.list-catalog
        with:
          types: ITEM
      - name: create-po
        type: call
        call: bigcommerce.create-order
        with:
          items: '{{get-counts.low_stock_items}}'
          threshold: '{{threshold}}'
      - name: alert-merchant
        type: call
        call: mailchimp.send-transactional
        with:
          to: '{{merchant_email}}'
          subject: Low Inventory Alert — {{get-counts.low_stock_count}} items
          body: '{{get-counts.low_stock_count}} items below threshold of {{threshold}} units. Purchase order created: {{create-po.order_id}}.'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: inventory
      path: /inventory/counts/batch-retrieve
      operations:
      - name: get-inventory-counts
        method: POST
    - name: catalog
      path: /catalog/list
      inputParameters:
      - name: types
        in: query
      operations:
      - name: list-catalog
        method: GET
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/$secrets.bigcommerce_store_hash/v2
    authentication:
      type: apiKey
      name: X-Auth-Token
      in: header
      value: $secrets.bigcommerce_token
    resources:
    - name: orders
      path: /orders
      operations:
      - name: create-order
        method: POST
  - type: http
    namespace: mailchimp
    baseUri: https://mandrillapp.com/api/1.0
    authentication:
      type: apiKey
      name: key
      in: body
      value: $secrets.mailchimp_transactional_key
    resources:
    - name: messages
      path: /messages/send
      operations:
      - name: send-transactional
        method: POST
Open in Framework → View in Fleet → merchant-inventory-alert-pipeline.yml

Processes a Bitcoin purchase through Cash App by verifying the user, fetching the current price from Bloomberg, executing the buy, and sending a receipt via SendGrid.

naftiko: '0.5'
info:
  label: Cash App Bitcoin Purchase Flow
  description: Processes a Bitcoin purchase through Cash App by verifying the user, fetching the current price from Bloomberg, executing the buy, and sending a receipt via SendGrid.
  tags:
  - bitcoin
  - cash-app
  - bloomberg
  - sendgrid
capability:
  exposes:
  - type: mcp
    namespace: btc-purchase
    port: 8080
    tools:
    - name: purchase-bitcoin
      description: Execute a Bitcoin purchase with price verification and receipt delivery.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: Cash App user ID.
      - name: amount_usd
        in: body
        type: number
        description: Amount in USD to spend.
      - name: user_email
        in: body
        type: string
        description: User email for receipt.
      steps:
      - name: verify-user
        type: call
        call: cashapp.verify-identity
        with:
          user_id: '{{user_id}}'
      - name: get-price
        type: call
        call: bloomberg.get-quote
        with:
          ticker: XBTUSD
      - name: execute-buy
        type: call
        call: cashapp.buy-bitcoin
        with:
          user_id: '{{user_id}}'
          amount_usd: '{{amount_usd}}'
          price: '{{get-price.last_price}}'
      - name: send-receipt
        type: call
        call: sendgrid.send-email
        with:
          to: '{{user_email}}'
          subject: Bitcoin Purchase Confirmation
          body: 'You purchased {{execute-buy.btc_amount}} BTC at ${{get-price.last_price}} for ${{amount_usd}}. Transaction: {{execute-buy.transaction_id}}.'
  consumes:
  - type: http
    namespace: cashapp
    baseUri: https://api.cash.app/v1
    authentication:
      type: bearer
      token: $secrets.cashapp_api_token
    resources:
    - name: identity
      path: /users/{{user_id}}/verify
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: verify-identity
        method: POST
    - name: bitcoin
      path: /bitcoin/buy
      operations:
      - name: buy-bitcoin
        method: POST
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/fields
    authentication:
      type: bearer
      token: $secrets.bloomberg_api_key
    resources:
    - name: quotes
      path: /snapshots/{{ticker}}
      inputParameters:
      - name: ticker
        in: path
      operations:
      - name: get-quote
        method: GET
  - type: http
    namespace: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → cash-app-bitcoin-purchase-flow.yml

When a merchant submits a support request, classifies the issue via Elasticsearch similarity search, routes to the correct ServiceNow queue, and sends a confirmation via Square Messages.

naftiko: '0.5'
info:
  label: Merchant Support Ticket Triage
  description: When a merchant submits a support request, classifies the issue via Elasticsearch similarity search, routes to the correct ServiceNow queue, and sends a confirmation via Square Messages.
  tags:
  - support
  - servicenow
  - elasticsearch
  - square
  - merchant-services
capability:
  exposes:
  - type: mcp
    namespace: support-triage
    port: 8080
    tools:
    - name: triage-support-request
      description: Classify a merchant support request and route to the appropriate team.
      inputParameters:
      - name: merchant_id
        in: body
        type: string
        description: The Square merchant ID.
      - name: subject
        in: body
        type: string
        description: Support request subject line.
      - name: description
        in: body
        type: string
        description: Detailed description of the issue.
      steps:
      - name: classify-issue
        type: call
        call: elasticsearch.search
        with:
          index: support-templates
          query:
            more_like_this:
              fields:
              - subject
              - description
              like: '{{subject}} {{description}}'
              min_term_freq: 1
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: '{{subject}}'
          description: 'Merchant: {{merchant_id}}. {{description}}. Classified as: {{classify-issue.hits.hits.0._source.category}}.'
          category: '{{classify-issue.hits.hits.0._source.category}}'
          assigned_group: '{{classify-issue.hits.hits.0._source.assigned_group}}'
      - name: confirm-to-merchant
        type: call
        call: square.send-message
        with:
          merchant_id: '{{merchant_id}}'
          text: 'We''ve received your support request: {{subject}}. Your ticket number is {{create-ticket.number}}. Our team will respond shortly.'
  consumes:
  - type: http
    namespace: elasticsearch
    baseUri: https://block-es.internal:9200
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: search
      path: /{{index}}/_search
      inputParameters:
      - name: index
        in: path
      operations:
      - name: search
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://block.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: messages
      path: /merchants/{{merchant_id}}/messages
      inputParameters:
      - name: merchant_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → merchant-support-ticket-triage.yml

Retrieves the current Bitcoin wallet balance for a Cash App business account, converts to USD, and logs the balance snapshot in PostgreSQL.

naftiko: '0.5'
info:
  label: Bitcoin Wallet Balance Check
  description: Retrieves the current Bitcoin wallet balance for a Cash App business account, converts to USD, and logs the balance snapshot in PostgreSQL.
  tags:
  - bitcoin
  - crypto
  - cash-app
  - postgresql
  - fintech
capability:
  exposes:
  - type: mcp
    namespace: btc-wallet
    port: 8080
    tools:
    - name: check-btc-balance
      description: Fetch BTC wallet balance, convert to USD, and log the snapshot.
      inputParameters:
      - name: wallet_address
        in: body
        type: string
        description: The Bitcoin wallet address.
      steps:
      - name: get-balance
        type: call
        call: bitcoin.get-wallet-balance
        with:
          address: '{{wallet_address}}'
      - name: get-rate
        type: call
        call: bitcoin.get-price
        with:
          currency_pair: BTC-USD
      - name: log-snapshot
        type: call
        call: postgresql.insert-row
        with:
          table: btc_balance_snapshots
          wallet_address: '{{wallet_address}}'
          btc_balance: '{{get-balance.balance}}'
          usd_rate: '{{get-rate.USD.last}}'
          snapshot_time: '{{now}}'
  consumes:
  - type: http
    namespace: bitcoin
    baseUri: https://api.blockchain.info/v2
    authentication:
      type: bearer
      token: $secrets.blockchain_api_token
    resources:
    - name: wallet
      path: /address/{{address}}/balance
      inputParameters:
      - name: address
        in: path
      operations:
      - name: get-wallet-balance
        method: GET
    - name: ticker
      path: /ticker
      operations:
      - name: get-price
        method: GET
  - type: http
    namespace: postgresql
    baseUri: https://block-data.internal/api/v1
    authentication:
      type: bearer
      token: $secrets.internal_db_token
    resources:
    - name: rows
      path: /tables/{{table}}/rows
      inputParameters:
      - name: table
        in: path
      operations:
      - name: insert-row
        method: POST
Open in Framework → View in Fleet → bitcoin-wallet-balance-check.yml

Fetches order details from Square Orders API by order ID, returning line items, totals, fulfillment status, and payment references.

naftiko: '0.5'
info:
  label: Square Order Retrieval
  description: Fetches order details from Square Orders API by order ID, returning line items, totals, fulfillment status, and payment references.
  tags:
  - orders
  - square
capability:
  exposes:
  - type: mcp
    namespace: square-orders
    port: 8080
    tools:
    - name: get-order
      description: Retrieve a Square order by order ID.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The Square order identifier.
      call: square.get-order
      with:
        order_id: '{{order_id}}'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: orders
      path: /orders/{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
Open in Framework → View in Fleet → square-order-retrieval.yml

Onboards a new Afterpay merchant by creating the account, configuring webhooks, setting up a Datadog monitor, and notifying the partnerships team via HubSpot.

naftiko: '0.5'
info:
  label: Afterpay Merchant Integration Orchestrator
  description: Onboards a new Afterpay merchant by creating the account, configuring webhooks, setting up a Datadog monitor, and notifying the partnerships team via HubSpot.
  tags:
  - onboarding
  - afterpay
  - datadog
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: afterpay-onboarding
    port: 8080
    tools:
    - name: onboard-afterpay-merchant
      description: Provision a new Afterpay merchant with monitoring and CRM updates.
      inputParameters:
      - name: merchant_name
        in: body
        type: string
        description: Merchant business name.
      - name: webhook_url
        in: body
        type: string
        description: Merchant webhook endpoint URL.
      - name: partner_email
        in: body
        type: string
        description: Partnership manager email.
      steps:
      - name: create-merchant
        type: call
        call: afterpay.create-merchant
        with:
          name: '{{merchant_name}}'
          webhook_url: '{{webhook_url}}'
      - name: create-monitor
        type: call
        call: datadog.create-monitor
        with:
          name: Afterpay — {{merchant_name}} Error Rate
          query: sum(last_5m):sum:afterpay.errors{merchant:{{create-merchant.merchant_id}}}.as_rate() > 0.05
          type: metric alert
      - name: update-crm
        type: call
        call: hubspot.create-deal
        with:
          dealname: 'Afterpay Integration: {{merchant_name}}'
          pipeline: afterpay-partnerships
          dealstage: live
      - name: notify-partner
        type: call
        call: hubspot.send-email
        with:
          to: '{{partner_email}}'
          subject: 'Afterpay Integration Live: {{merchant_name}}'
          body: 'Merchant {{merchant_name}} is live on Afterpay. ID: {{create-merchant.merchant_id}}. Monitor: {{create-monitor.id}}.'
  consumes:
  - type: http
    namespace: afterpay
    baseUri: https://global-api.afterpay.com/v2
    authentication:
      type: basic
      username: $secrets.afterpay_merchant_id
      password: $secrets.afterpay_secret_key
    resources:
    - name: merchants
      path: /merchants
      operations:
      - name: create-merchant
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: monitors
      path: /monitor
      operations:
      - name: create-monitor
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: deals
      path: /crm/v3/objects/deals
      operations:
      - name: create-deal
        method: POST
    - name: emails
      path: /marketing/v3/transactional/single-email/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → afterpay-merchant-integration-orchestrator.yml

Retrieves the current inventory count for a catalog item variation at a specific Square location.

naftiko: '0.5'
info:
  label: Square Inventory Count
  description: Retrieves the current inventory count for a catalog item variation at a specific Square location.
  tags:
  - inventory
  - square
  - merchant-services
capability:
  exposes:
  - type: mcp
    namespace: square-inventory
    port: 8080
    tools:
    - name: get-inventory-count
      description: Retrieve the inventory count for a catalog item variation at a location.
      inputParameters:
      - name: catalog_object_id
        in: body
        type: string
        description: The catalog object ID of the item variation.
      - name: location_id
        in: body
        type: string
        description: The Square location ID.
      call: square.get-inventory-count
      with:
        catalog_object_id: '{{catalog_object_id}}'
        location_ids:
        - '{{location_id}}'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: inventory
      path: /inventory/counts/batch-retrieve
      operations:
      - name: get-inventory-count
        method: POST
Open in Framework → View in Fleet → square-inventory-count.yml

Retrieves vendor details from Square by vendor ID, returning company name, contact information, and account status for supply chain management.

naftiko: '0.5'
info:
  label: Square Vendor Lookup
  description: Retrieves vendor details from Square by vendor ID, returning company name, contact information, and account status for supply chain management.
  tags:
  - supply-chain
  - square
capability:
  exposes:
  - type: mcp
    namespace: square-vendors
    port: 8080
    tools:
    - name: get-vendor
      description: Look up a Square vendor by vendor ID.
      inputParameters:
      - name: vendor_id
        in: body
        type: string
        description: The Square vendor identifier.
      call: square.get-vendor
      with:
        vendor_id: '{{vendor_id}}'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: vendors
      path: /vendors/{{vendor_id}}
      inputParameters:
      - name: vendor_id
        in: path
      operations:
      - name: get-vendor
        method: GET
Open in Framework → View in Fleet → square-vendor-lookup.yml

Retrieves merchant segment data from Square, creates a MailChimp campaign targeting those merchants, and logs the campaign in HubSpot.

naftiko: '0.5'
info:
  label: Merchant Email Campaign via MailChimp
  description: Retrieves merchant segment data from Square, creates a MailChimp campaign targeting those merchants, and logs the campaign in HubSpot.
  tags:
  - marketing
  - mailchimp
  - square
  - hubspot
  - merchant-services
capability:
  exposes:
  - type: mcp
    namespace: merchant-campaigns
    port: 8080
    tools:
    - name: launch-merchant-campaign
      description: Build and send a MailChimp campaign for a Square merchant segment and log in HubSpot.
      inputParameters:
      - name: segment_id
        in: body
        type: string
        description: The Square customer segment ID.
      - name: campaign_subject
        in: body
        type: string
        description: Email subject line for the campaign.
      - name: mailchimp_list_id
        in: body
        type: string
        description: The MailChimp audience list ID.
      steps:
      - name: get-segment
        type: call
        call: square.get-customer-segment
        with:
          segment_id: '{{segment_id}}'
      - name: create-campaign
        type: call
        call: mailchimp.create-campaign
        with:
          type: regular
          recipients:
            list_id: '{{mailchimp_list_id}}'
          settings:
            subject_line: '{{campaign_subject}}'
            from_name: Block Merchant Services
      - name: log-in-hubspot
        type: call
        call: hubspot.create-engagement
        with:
          type: NOTE
          body: 'MailChimp campaign {{create-campaign.id}} launched for segment {{segment_id}} ({{get-segment.segment.name}}). Subject: {{campaign_subject}}.'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: customer-segments
      path: /customers/segments/{{segment_id}}
      inputParameters:
      - name: segment_id
        in: path
      operations:
      - name: get-customer-segment
        method: GET
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: basic
      username: anystring
      password: $secrets.mailchimp_api_key
    resources:
    - name: campaigns
      path: /campaigns
      operations:
      - name: create-campaign
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: engagements
      path: /engagements/v1/engagements
      operations:
      - name: create-engagement
        method: POST
Open in Framework → View in Fleet → merchant-email-campaign-via-mailchimp.yml

Queries Spring Boot Actuator health endpoints across Block's payment microservices and aggregates the results into Datadog for centralized monitoring.

naftiko: '0.5'
info:
  label: Spring Boot Microservice Health Aggregator
  description: Queries Spring Boot Actuator health endpoints across Block's payment microservices and aggregates the results into Datadog for centralized monitoring.
  tags:
  - health-checks
  - spring-boot
  - datadog
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: service-health
    port: 8080
    tools:
    - name: check-and-report-health
      description: Query a Spring Boot service health endpoint and report to Datadog.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The internal service name.
      - name: service_url
        in: body
        type: string
        description: The base URL of the Spring Boot service.
      steps:
      - name: get-health
        type: call
        call: springboot.get-health
        with:
          service_url: '{{service_url}}'
      - name: report-to-datadog
        type: call
        call: datadog.submit-metric
        with:
          series:
          - metric: block.service.health
            points:
            - - '{{now_epoch}}'
              - 1
            tags:
            - service:{{service_name}}
            - status:{{get-health.status}}
  consumes:
  - type: http
    namespace: springboot
    baseUri: '{{service_url}}'
    authentication:
      type: bearer
      token: $secrets.internal_service_token
    resources:
    - name: actuator
      path: /actuator/health
      operations:
      - name: get-health
        method: GET
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /series
      operations:
      - name: submit-metric
        method: POST
Open in Framework → View in Fleet → spring-boot-microservice-health-aggregator.yml

After a Kotlin SDK build passes quality gates in GitLab, tags the release in GitLab, uploads the artifact to Amazon S3, and creates a YouTube developer tutorial notification.

naftiko: '0.5'
info:
  label: Kotlin SDK Release Publisher
  description: After a Kotlin SDK build passes quality gates in GitLab, tags the release in GitLab, uploads the artifact to Amazon S3, and creates a YouTube developer tutorial notification.
  tags:
  - developer-platform
  - kotlin
  - gitlab
  - amazon-s3
  - youtube
  - sdk
capability:
  exposes:
  - type: mcp
    namespace: sdk-release
    port: 8080
    tools:
    - name: publish-kotlin-sdk
      description: Tag, archive, and announce a new Kotlin SDK release.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GitLab project ID.
      - name: version
        in: body
        type: string
        description: The semantic version for the release.
      - name: release_notes
        in: body
        type: string
        description: Release notes for the changelog.
      steps:
      - name: create-release
        type: call
        call: gitlab.create-release
        with:
          project_id: '{{project_id}}'
          tag_name: v{{version}}
          description: '{{release_notes}}'
      - name: upload-artifact
        type: call
        call: s3.put-object
        with:
          Bucket: block-sdk-releases
          Key: kotlin/square-sdk-{{version}}.jar
          ContentType: application/java-archive
      - name: post-announcement
        type: call
        call: youtube.insert-community-post
        with:
          text: Square Kotlin SDK v{{version}} is now available! Check the changelog and migration guide in our developer docs.
  consumes:
  - type: http
    namespace: gitlab
    baseUri: https://gitlab.block.internal/api/v4
    authentication:
      type: bearer
      token: $secrets.gitlab_token
    resources:
    - name: releases
      path: /projects/{{project_id}}/releases
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: create-release
        method: POST
  - type: http
    namespace: s3
    baseUri: https://s3.us-east-1.amazonaws.com
    authentication:
      type: awsSigV4
      accessKeyId: $secrets.aws_access_key_id
      secretAccessKey: $secrets.aws_secret_access_key
      region: us-east-1
      service: s3
    resources:
    - name: objects
      path: /{{Bucket}}/{{Key}}
      inputParameters:
      - name: Bucket
        in: path
      - name: Key
        in: path
      operations:
      - name: put-object
        method: PUT
  - type: http
    namespace: youtube
    baseUri: https://www.googleapis.com/youtube/v3
    authentication:
      type: bearer
      token: $secrets.youtube_token
    resources:
    - name: community-posts
      path: /activities
      operations:
      - name: insert-community-post
        method: POST
Open in Framework → View in Fleet → kotlin-sdk-release-publisher.yml

Runs an Elasticsearch aggregation query over recent transactions to detect velocity anomalies, then enriches suspicious transactions with Mastercard data and alerts the risk team via ServiceNow.

naftiko: '0.5'
info:
  label: Transaction Fraud Pattern Detection
  description: Runs an Elasticsearch aggregation query over recent transactions to detect velocity anomalies, then enriches suspicious transactions with Mastercard data and alerts the risk team via ServiceNow.
  tags:
  - fraud-detection
  - elasticsearch
  - mastercard
  - servicenow
  - risk
capability:
  exposes:
  - type: mcp
    namespace: fraud-detection
    port: 8080
    tools:
    - name: detect-velocity-anomalies
      description: Detect transaction velocity anomalies and escalate suspicious patterns.
      inputParameters:
      - name: merchant_id
        in: body
        type: string
        description: The Square merchant ID to analyze.
      - name: time_window
        in: body
        type: string
        description: The time window for analysis (e.g. 1h, 6h, 24h).
      steps:
      - name: aggregate-transactions
        type: call
        call: elasticsearch.search
        with:
          index: square-transactions-*
          query:
            bool:
              filter:
              - term:
                  merchant_id: '{{merchant_id}}'
              - range:
                  created_at:
                    gte: now-{{time_window}}
          aggs:
            velocity:
              date_histogram:
                field: created_at
                fixed_interval: 5m
      - name: check-mastercard
        type: call
        call: mastercard.get-merchant-risk
        with:
          merchant_id: '{{merchant_id}}'
      - name: alert-risk-team
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Velocity anomaly detected: merchant {{merchant_id}}'
          description: 'Transaction velocity analysis for past {{time_window}}: {{aggregate-transactions.aggregations.velocity.buckets.length}} intervals analyzed. Mastercard risk score: {{check-mastercard.riskScore}}.'
          category: fraud_detection
          assigned_group: Risk_Operations
          urgency: '2'
  consumes:
  - type: http
    namespace: elasticsearch
    baseUri: https://block-es.internal:9200
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: search
      path: /{{index}}/_search
      inputParameters:
      - name: index
        in: path
      operations:
      - name: search
        method: POST
  - type: http
    namespace: mastercard
    baseUri: https://api.mastercard.com/fraud/merchant/v3
    authentication:
      type: oauth1
      consumerKey: $secrets.mastercard_consumer_key
      signingKey: $secrets.mastercard_signing_key
    resources:
    - name: merchant-risk
      path: /merchant-risk
      operations:
      - name: get-merchant-risk
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://block.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → transaction-fraud-pattern-detection.yml

Queries CloudWatch metrics for Block's Bitcoin node infrastructure, returning block height sync status, peer connections, and mempool size.

naftiko: '0.5'
info:
  label: CloudWatch Bitcoin Node Monitor
  description: Queries CloudWatch metrics for Block's Bitcoin node infrastructure, returning block height sync status, peer connections, and mempool size.
  tags:
  - bitcoin
  - cloudwatch
capability:
  exposes:
  - type: mcp
    namespace: btc-node-monitor
    port: 8080
    tools:
    - name: get-node-metrics
      description: Retrieve CloudWatch metrics for Bitcoin node health.
      inputParameters:
      - name: node_id
        in: body
        type: string
        description: The Bitcoin node instance identifier.
      call: cloudwatch.get-metrics
      with:
        namespace: Bitcoin/Nodes
        dimensions: NodeId={{node_id}}
  consumes:
  - type: http
    namespace: cloudwatch
    baseUri: https://monitoring.us-east-1.amazonaws.com
    authentication:
      type: aws-sigv4
      region: us-east-1
      access_key: $secrets.aws_access_key
      secret_key: $secrets.aws_secret_key
    resources:
    - name: metrics
      path: /
      inputParameters:
      - name: namespace
        in: query
      - name: dimensions
        in: query
      operations:
      - name: get-metrics
        method: GET
Open in Framework → View in Fleet → cloudwatch-bitcoin-node-monitor.yml

Aggregates merchant payment data from Square, generates 1099-K reports, stores in S3, and notifies merchants via SendGrid when reports are ready.

naftiko: '0.5'
info:
  label: Merchant Tax Reporting Pipeline
  description: Aggregates merchant payment data from Square, generates 1099-K reports, stores in S3, and notifies merchants via SendGrid when reports are ready.
  tags:
  - tax
  - square
  - amazon-s3
  - sendgrid
capability:
  exposes:
  - type: mcp
    namespace: tax-reporting
    port: 8080
    tools:
    - name: generate-tax-report
      description: Generate and distribute merchant tax reports.
      inputParameters:
      - name: merchant_id
        in: body
        type: string
        description: Square merchant identifier.
      - name: tax_year
        in: body
        type: string
        description: Tax year (e.g. 2025).
      - name: merchant_email
        in: body
        type: string
        description: Merchant email.
      steps:
      - name: get-payments
        type: call
        call: square.list-payments
        with:
          merchant_id: '{{merchant_id}}'
          year: '{{tax_year}}'
      - name: generate-1099k
        type: call
        call: square.generate-tax-form
        with:
          merchant_id: '{{merchant_id}}'
          year: '{{tax_year}}'
          total_gross: '{{get-payments.total_gross}}'
      - name: store-report
        type: call
        call: s3.put-object
        with:
          bucket: tax-reports
          key: '{{tax_year}}/{{merchant_id}}/1099-K.pdf'
          body: '{{generate-1099k.document}}'
      - name: notify-merchant
        type: call
        call: sendgrid.send-email
        with:
          to: '{{merchant_email}}'
          subject: Your {{tax_year}} 1099-K is Ready
          body: 'Your 1099-K tax form for {{tax_year}} is now available. Total gross payments: ${{get-payments.total_gross}}. Download from your Square Dashboard.'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: payments
      path: /payments
      inputParameters:
      - name: merchant_id
        in: query
      - name: year
        in: query
      operations:
      - name: list-payments
        method: GET
    - name: tax
      path: /tax/forms/generate
      operations:
      - name: generate-tax-form
        method: POST
  - type: http
    namespace: s3
    baseUri: https://s3.amazonaws.com
    authentication:
      type: aws-sigv4
      region: us-east-1
      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: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → merchant-tax-reporting-pipeline.yml

Checks the status of an AWS CloudFormation stack deployment used for Block's infrastructure provisioning.

naftiko: '0.5'
info:
  label: CloudFormation Stack Deployment Status
  description: Checks the status of an AWS CloudFormation stack deployment used for Block's infrastructure provisioning.
  tags:
  - infrastructure
  - cloudformation
  - amazon-web-services
capability:
  exposes:
  - type: mcp
    namespace: infra-stacks
    port: 8080
    tools:
    - name: get-stack-status
      description: Retrieve the status of a CloudFormation stack.
      inputParameters:
      - name: stack_name
        in: body
        type: string
        description: The CloudFormation stack name.
      call: cloudformation.describe-stack
      with:
        StackName: '{{stack_name}}'
  consumes:
  - type: http
    namespace: cloudformation
    baseUri: https://cloudformation.us-east-1.amazonaws.com
    authentication:
      type: awsSigV4
      accessKeyId: $secrets.aws_access_key_id
      secretAccessKey: $secrets.aws_secret_access_key
      region: us-east-1
      service: cloudformation
    resources:
    - name: stacks
      path: /
      operations:
      - name: describe-stack
        method: GET
Open in Framework → View in Fleet → cloudformation-stack-deployment-status.yml

Retrieves subscription details from Square Subscriptions API by subscription ID, returning plan, billing cycle, and next charge date.

naftiko: '0.5'
info:
  label: Square Subscription Lookup
  description: Retrieves subscription details from Square Subscriptions API by subscription ID, returning plan, billing cycle, and next charge date.
  tags:
  - subscriptions
  - square
capability:
  exposes:
  - type: mcp
    namespace: square-subscriptions
    port: 8080
    tools:
    - name: get-subscription
      description: Look up a Square subscription by subscription ID.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: The Square subscription identifier.
      call: square.get-subscription
      with:
        subscription_id: '{{subscription_id}}'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: subscriptions
      path: /subscriptions/{{subscription_id}}
      inputParameters:
      - name: subscription_id
        in: path
      operations:
      - name: get-subscription
        method: GET
Open in Framework → View in Fleet → square-subscription-lookup.yml

Investigates a flagged Cash App transaction by retrieving details, running risk scoring via Mastercard, logging findings in ServiceNow, and alerting the fraud team via Slack.

naftiko: '0.5'
info:
  label: Cash App Fraud Investigation Pipeline
  description: Investigates a flagged Cash App transaction by retrieving details, running risk scoring via Mastercard, logging findings in ServiceNow, and alerting the fraud team via Slack.
  tags:
  - fraud
  - cash-app
  - mastercard
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: fraud-investigation
    port: 8080
    tools:
    - name: investigate-transaction
      description: Investigate a flagged transaction across Cash App, Mastercard risk, and ServiceNow.
      inputParameters:
      - name: transaction_id
        in: body
        type: string
        description: The Cash App transaction identifier.
      steps:
      - name: get-transaction
        type: call
        call: cashapp.get-transaction
        with:
          transaction_id: '{{transaction_id}}'
      - name: score-risk
        type: call
        call: mastercard.score-transaction
        with:
          amount: '{{get-transaction.amount}}'
          merchant_category: '{{get-transaction.merchant_category}}'
          country: '{{get-transaction.country}}'
      - name: log-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Fraud investigation: txn {{transaction_id}}'
          description: 'Amount: ${{get-transaction.amount}}. Risk score: {{score-risk.score}}. Category: {{get-transaction.merchant_category}}.'
          category: fraud
          urgency: '1'
      - name: alert-team
        type: call
        call: slack.post-message
        with:
          channel: '#fraud-ops'
          text: 'Fraud case opened: {{transaction_id}}. Amount: ${{get-transaction.amount}}. Risk: {{score-risk.score}}. ServiceNow: {{log-case.number}}.'
  consumes:
  - type: http
    namespace: cashapp
    baseUri: https://api.cash.app/v1
    authentication:
      type: bearer
      token: $secrets.cashapp_api_token
    resources:
    - name: transactions
      path: /transactions/{{transaction_id}}
      inputParameters:
      - name: transaction_id
        in: path
      operations:
      - name: get-transaction
        method: GET
  - type: http
    namespace: mastercard
    baseUri: https://api.mastercard.com/fraud/v1
    authentication:
      type: oauth1
      consumer_key: $secrets.mastercard_consumer_key
      signing_key: $secrets.mastercard_signing_key
    resources:
    - name: scoring
      path: /transaction-risk
      operations:
      - name: score-transaction
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://block.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → cash-app-fraud-investigation-pipeline.yml

Creates a payment through the Square Payments API given a source token, amount, and currency. Returns the payment ID, status, and receipt URL for merchant reconciliation.

naftiko: '0.5'
info:
  label: Square Payment Processing
  description: Creates a payment through the Square Payments API given a source token, amount, and currency. Returns the payment ID, status, and receipt URL for merchant reconciliation.
  tags:
  - payments
  - square
  - merchant-services
capability:
  exposes:
  - type: mcp
    namespace: square-payments
    port: 8080
    tools:
    - name: create-payment
      description: Process a payment through Square given a source token, amount in cents, and currency code.
      inputParameters:
      - name: source_id
        in: body
        type: string
        description: The payment source token from the Square Web Payments SDK.
      - name: amount_cents
        in: body
        type: integer
        description: The payment amount in the smallest currency denomination.
      - name: currency
        in: body
        type: string
        description: ISO 4217 currency code (e.g. USD).
      call: square.create-payment
      with:
        source_id: '{{source_id}}'
        amount_money:
          amount: '{{amount_cents}}'
          currency: '{{currency}}'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: payments
      path: /payments
      operations:
      - name: create-payment
        method: POST
Open in Framework → View in Fleet → square-payment-processing.yml

Retrieves a customer's Square Loyalty points balance by account ID.

naftiko: '0.5'
info:
  label: Square Loyalty Points Balance
  description: Retrieves a customer's Square Loyalty points balance by account ID.
  tags:
  - loyalty
  - square
  - merchant-services
capability:
  exposes:
  - type: mcp
    namespace: square-loyalty
    port: 8080
    tools:
    - name: get-loyalty-balance
      description: Look up the points balance for a Square Loyalty account.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Square Loyalty account ID.
      call: square.get-loyalty-account
      with:
        account_id: '{{account_id}}'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: loyalty-accounts
      path: /loyalty/accounts/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-loyalty-account
        method: GET
Open in Framework → View in Fleet → square-loyalty-points-balance.yml

Calculates artist streaming royalties from TIDAL play data, processes payments via Cash App for Business, stores reports in S3, and sends statements via SendGrid.

naftiko: '0.5'
info:
  label: TIDAL Artist Royalty Pipeline
  description: Calculates artist streaming royalties from TIDAL play data, processes payments via Cash App for Business, stores reports in S3, and sends statements via SendGrid.
  tags:
  - music
  - tidal
  - cash-app
  - amazon-s3
  - sendgrid
capability:
  exposes:
  - type: mcp
    namespace: artist-royalties
    port: 8080
    tools:
    - name: process-royalties
      description: Calculate and distribute artist royalties with reporting.
      inputParameters:
      - name: artist_id
        in: body
        type: string
        description: TIDAL artist identifier.
      - name: period
        in: body
        type: string
        description: Royalty period YYYY-MM.
      - name: artist_email
        in: body
        type: string
        description: Artist email.
      steps:
      - name: get-streams
        type: call
        call: tidal.get-artist-streams
        with:
          artist_id: '{{artist_id}}'
          period: '{{period}}'
      - name: process-payment
        type: call
        call: cashapp.send-payment
        with:
          recipient_id: '{{artist_id}}'
          amount: '{{get-streams.royalty_amount}}'
      - name: store-statement
        type: call
        call: s3.put-object
        with:
          bucket: royalty-statements
          key: '{{artist_id}}/{{period}}/statement.json'
          body: '{{get-streams.statement}}'
      - name: send-statement
        type: call
        call: sendgrid.send-email
        with:
          to: '{{artist_email}}'
          subject: Royalty Statement — {{period}}
          body: 'Your TIDAL royalty statement for {{period}} is ready. Total streams: {{get-streams.total_streams}}. Royalties: ${{get-streams.royalty_amount}}.'
  consumes:
  - type: http
    namespace: tidal
    baseUri: https://openapi.tidal.com/v2
    authentication:
      type: bearer
      token: $secrets.tidal_api_token
    resources:
    - name: streams
      path: /artists/{{artist_id}}/streams
      inputParameters:
      - name: artist_id
        in: path
      - name: period
        in: query
      operations:
      - name: get-artist-streams
        method: GET
  - type: http
    namespace: cashapp
    baseUri: https://api.cash.app/v1
    authentication:
      type: bearer
      token: $secrets.cashapp_api_token
    resources:
    - name: payments
      path: /payments
      operations:
      - name: send-payment
        method: POST
  - type: http
    namespace: s3
    baseUri: https://s3.amazonaws.com
    authentication:
      type: aws-sigv4
      region: us-east-1
      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: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → tidal-artist-royalty-pipeline.yml

Retrieves the status of the latest GitLab CI pipeline for a Block payment service repository.

naftiko: '0.5'
info:
  label: GitLab CI Pipeline Status
  description: Retrieves the status of the latest GitLab CI pipeline for a Block payment service repository.
  tags:
  - ci-cd
  - gitlab
  - developer-platform
capability:
  exposes:
  - type: mcp
    namespace: gitlab-ci
    port: 8080
    tools:
    - name: get-pipeline-status
      description: Fetch the latest GitLab CI pipeline status for a project.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GitLab project ID.
      call: gitlab.get-latest-pipeline
      with:
        project_id: '{{project_id}}'
  consumes:
  - type: http
    namespace: gitlab
    baseUri: https://gitlab.block.internal/api/v4
    authentication:
      type: bearer
      token: $secrets.gitlab_token
    resources:
    - name: pipelines
      path: /projects/{{project_id}}/pipelines/latest
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-latest-pipeline
        method: GET
Open in Framework → View in Fleet → gitlab-ci-pipeline-status.yml

Retrieves bank account details linked to a Square merchant account, returning account type, status, and routing information for settlement configuration.

naftiko: '0.5'
info:
  label: Square Bank Account Lookup
  description: Retrieves bank account details linked to a Square merchant account, returning account type, status, and routing information for settlement configuration.
  tags:
  - banking
  - square
capability:
  exposes:
  - type: mcp
    namespace: square-banking
    port: 8080
    tools:
    - name: get-bank-account
      description: Look up a linked bank account by bank account ID.
      inputParameters:
      - name: bank_account_id
        in: body
        type: string
        description: The Square bank account identifier.
      call: square.get-bank-account
      with:
        bank_account_id: '{{bank_account_id}}'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: bank-accounts
      path: /bank-accounts/{{bank_account_id}}
      inputParameters:
      - name: bank_account_id
        in: path
      operations:
      - name: get-bank-account
        method: GET
Open in Framework → View in Fleet → square-bank-account-lookup.yml

Creates a customer appointment in Square Bookings, sends confirmation via SendGrid, adds a calendar event via Google Calendar, and updates the CRM in HubSpot.

naftiko: '0.5'
info:
  label: Square Appointment Booking Flow
  description: Creates a customer appointment in Square Bookings, sends confirmation via SendGrid, adds a calendar event via Google Calendar, and updates the CRM in HubSpot.
  tags:
  - appointments
  - square
  - sendgrid
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: appointment-flow
    port: 8080
    tools:
    - name: book-appointment
      description: Create an appointment with confirmation email, calendar sync, and CRM update.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: Square customer ID.
      - name: service_variation_id
        in: body
        type: string
        description: Square service variation ID.
      - name: start_at
        in: body
        type: string
        description: Appointment start time ISO 8601.
      - name: customer_email
        in: body
        type: string
        description: Customer email.
      steps:
      - name: create-booking
        type: call
        call: square.create-booking
        with:
          customer_id: '{{customer_id}}'
          service_variation_id: '{{service_variation_id}}'
          start_at: '{{start_at}}'
      - name: send-confirmation
        type: call
        call: sendgrid.send-email
        with:
          to: '{{customer_email}}'
          subject: Appointment Confirmed — {{create-booking.start_at}}
          body: 'Your appointment is confirmed for {{create-booking.start_at}}. Booking ID: {{create-booking.id}}.'
      - name: update-crm
        type: call
        call: hubspot.create-engagement
        with:
          type: MEETING
          contact_email: '{{customer_email}}'
          title: 'Appointment: {{create-booking.service_name}}'
          start_time: '{{start_at}}'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: bookings
      path: /bookings
      operations:
      - name: create-booking
        method: POST
  - type: http
    namespace: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: engagements
      path: /crm/v3/objects/meetings
      operations:
      - name: create-engagement
        method: POST
Open in Framework → View in Fleet → square-appointment-booking-flow.yml

Monitors Square inventory counts, and when stock falls below a threshold, sends a reorder notification via MailChimp to the supplier and creates a ServiceNow procurement request.

naftiko: '0.5'
info:
  label: Low Inventory Reorder Alert
  description: Monitors Square inventory counts, and when stock falls below a threshold, sends a reorder notification via MailChimp to the supplier and creates a ServiceNow procurement request.
  tags:
  - inventory
  - square
  - mailchimp
  - servicenow
  - merchant-services
capability:
  exposes:
  - type: mcp
    namespace: inventory-alerts
    port: 8080
    tools:
    - name: trigger-reorder-alert
      description: Check inventory and trigger reorder notifications when stock is low.
      inputParameters:
      - name: catalog_object_id
        in: body
        type: string
        description: The Square catalog item variation ID.
      - name: location_id
        in: body
        type: string
        description: The Square location ID.
      - name: supplier_email
        in: body
        type: string
        description: The supplier's email address.
      - name: item_name
        in: body
        type: string
        description: The product name for the reorder.
      steps:
      - name: get-count
        type: call
        call: square.get-inventory-count
        with:
          catalog_object_id: '{{catalog_object_id}}'
          location_ids:
          - '{{location_id}}'
      - name: send-supplier-email
        type: call
        call: mailchimp.send-transactional
        with:
          to: '{{supplier_email}}'
          subject: 'Reorder Request: {{item_name}}'
          body: Current stock for {{item_name}} at location {{location_id}} is {{get-count.counts.0.quantity}}. Please prepare a reorder shipment.
      - name: create-procurement-request
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Reorder needed: {{item_name}}'
          description: 'Inventory for {{item_name}} ({{catalog_object_id}}) at location {{location_id}} is {{get-count.counts.0.quantity}} units. Supplier notified: {{supplier_email}}.'
          category: procurement
          assigned_group: Supply_Chain
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: inventory
      path: /inventory/counts/batch-retrieve
      operations:
      - name: get-inventory-count
        method: POST
  - type: http
    namespace: mailchimp
    baseUri: https://mandrillapp.com/api/1.0
    authentication:
      type: apiKey
      name: key
      in: body
      value: $secrets.mandrill_api_key
    resources:
    - name: messages
      path: /messages/send
      operations:
      - name: send-transactional
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://block.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → low-inventory-reorder-alert.yml

Retrieves a customer profile from the Square Customer Directory by customer ID, returning contact details, preferences, and transaction history summary.

naftiko: '0.5'
info:
  label: Square Customer Lookup
  description: Retrieves a customer profile from the Square Customer Directory by customer ID, returning contact details, preferences, and transaction history summary.
  tags:
  - customers
  - square
capability:
  exposes:
  - type: mcp
    namespace: square-customers
    port: 8080
    tools:
    - name: get-customer
      description: Look up a Square customer by customer ID.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The Square customer identifier.
      call: square.get-customer
      with:
        customer_id: '{{customer_id}}'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: customers
      path: /customers/{{customer_id}}
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: get-customer
        method: GET
Open in Framework → View in Fleet → square-customer-lookup.yml

Processes a refund through Square Payments API, updates the order status, logs the refund in S3, and notifies the customer via SendGrid.

naftiko: '0.5'
info:
  label: Merchant Refund Workflow
  description: Processes a refund through Square Payments API, updates the order status, logs the refund in S3, and notifies the customer via SendGrid.
  tags:
  - refunds
  - square
  - amazon-s3
  - sendgrid
capability:
  exposes:
  - type: mcp
    namespace: refund-workflow
    port: 8080
    tools:
    - name: process-refund
      description: Process a payment refund with order update, audit logging, and customer notification.
      inputParameters:
      - name: payment_id
        in: body
        type: string
        description: Square payment ID.
      - name: amount_cents
        in: body
        type: integer
        description: Refund amount in cents.
      - name: reason
        in: body
        type: string
        description: Refund reason.
      - name: customer_email
        in: body
        type: string
        description: Customer email.
      steps:
      - name: create-refund
        type: call
        call: square.create-refund
        with:
          payment_id: '{{payment_id}}'
          amount_money:
            amount: '{{amount_cents}}'
            currency: USD
          reason: '{{reason}}'
      - name: get-payment
        type: call
        call: square.get-payment
        with:
          payment_id: '{{payment_id}}'
      - name: log-refund
        type: call
        call: s3.put-object
        with:
          bucket: refund-records
          key: '{{payment_id}}/{{create-refund.refund_id}}.json'
          body: '{{create-refund.summary}}'
      - name: notify-customer
        type: call
        call: sendgrid.send-email
        with:
          to: '{{customer_email}}'
          subject: Refund Processed — ${{amount_cents}}
          body: 'Your refund of ${{amount_cents}} has been processed. Refund ID: {{create-refund.refund_id}}. Please allow 5-10 business days.'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: refunds
      path: /refunds
      operations:
      - name: create-refund
        method: POST
    - name: payments
      path: /payments/{{payment_id}}
      inputParameters:
      - name: payment_id
        in: path
      operations:
      - name: get-payment
        method: GET
  - type: http
    namespace: s3
    baseUri: https://s3.amazonaws.com
    authentication:
      type: aws-sigv4
      region: us-east-1
      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: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → merchant-refund-workflow.yml

Retrieves details for a Square merchant location by location ID, returning address, business hours, capabilities, and currency.

naftiko: '0.5'
info:
  label: Square Location Details
  description: Retrieves details for a Square merchant location by location ID, returning address, business hours, capabilities, and currency.
  tags:
  - merchant-services
  - square
capability:
  exposes:
  - type: mcp
    namespace: square-locations
    port: 8080
    tools:
    - name: get-location
      description: Look up a Square location by location ID.
      inputParameters:
      - name: location_id
        in: body
        type: string
        description: The Square location identifier.
      call: square.get-location
      with:
        location_id: '{{location_id}}'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: locations
      path: /locations/{{location_id}}
      inputParameters:
      - name: location_id
        in: path
      operations:
      - name: get-location
        method: GET
Open in Framework → View in Fleet → square-location-details.yml

Provisions a Square Online store for a merchant, syncs the catalog, configures Cloudflare DNS, and sends launch instructions via HubSpot.

naftiko: '0.5'
info:
  label: Square Online Store Provisioning
  description: Provisions a Square Online store for a merchant, syncs the catalog, configures Cloudflare DNS, and sends launch instructions via HubSpot.
  tags:
  - ecommerce
  - square
  - cloudflare
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: online-store
    port: 8080
    tools:
    - name: provision-online-store
      description: Set up a Square Online store with DNS and catalog sync.
      inputParameters:
      - name: location_id
        in: body
        type: string
        description: Square location ID.
      - name: custom_domain
        in: body
        type: string
        description: Custom domain name.
      - name: merchant_email
        in: body
        type: string
        description: Merchant email.
      steps:
      - name: create-site
        type: call
        call: square.create-online-site
        with:
          location_id: '{{location_id}}'
      - name: sync-catalog
        type: call
        call: square.sync-catalog-to-online
        with:
          site_id: '{{create-site.site_id}}'
          location_id: '{{location_id}}'
      - name: configure-dns
        type: call
        call: cloudflare.create-dns-record
        with:
          zone_id: $secrets.cloudflare_zone_id
          type: CNAME
          name: '{{custom_domain}}'
          content: '{{create-site.cname_target}}'
      - name: send-launch-info
        type: call
        call: hubspot.send-email
        with:
          to: '{{merchant_email}}'
          subject: Your Square Online Store is Live!
          body: 'Your online store is live at {{custom_domain}}. {{sync-catalog.item_count}} items synced. Site ID: {{create-site.site_id}}.'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: sites
      path: /online/sites
      operations:
      - name: create-online-site
        method: POST
    - name: catalog-sync
      path: /online/sites/{{site_id}}/catalog/sync
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: sync-catalog-to-online
        method: POST
  - type: http
    namespace: cloudflare
    baseUri: https://api.cloudflare.com/client/v4
    authentication:
      type: bearer
      token: $secrets.cloudflare_token
    resources:
    - name: dns
      path: /zones/{{zone_id}}/dns_records
      inputParameters:
      - name: zone_id
        in: path
      operations:
      - name: create-dns-record
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: emails
      path: /marketing/v3/transactional/single-email/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → square-online-store-provisioning.yml

Creates a terminal checkout action on a Square Terminal device and monitors the result. Returns the checkout status and payment receipt.

naftiko: '0.5'
info:
  label: Square Terminal Checkout
  description: Creates a terminal checkout action on a Square Terminal device and monitors the result. Returns the checkout status and payment receipt.
  tags:
  - terminal
  - square
  - point-of-sale
capability:
  exposes:
  - type: mcp
    namespace: square-terminal
    port: 8080
    tools:
    - name: create-terminal-checkout
      description: Initiate a checkout on a Square Terminal device.
      inputParameters:
      - name: device_id
        in: body
        type: string
        description: The Square Terminal device ID.
      - name: amount_cents
        in: body
        type: integer
        description: The checkout amount in cents.
      - name: currency
        in: body
        type: string
        description: ISO 4217 currency code.
      steps:
      - name: create-checkout
        type: call
        call: square.create-terminal-checkout
        with:
          checkout:
            amount_money:
              amount: '{{amount_cents}}'
              currency: '{{currency}}'
            device_options:
              device_id: '{{device_id}}'
      - name: get-checkout-status
        type: call
        call: square.get-terminal-checkout
        with:
          checkout_id: '{{create-checkout.checkout.id}}'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: terminal-checkouts
      path: /terminals/checkouts
      operations:
      - name: create-terminal-checkout
        method: POST
    - name: terminal-checkout
      path: /terminals/checkouts/{{checkout_id}}
      inputParameters:
      - name: checkout_id
        in: path
      operations:
      - name: get-terminal-checkout
        method: GET
Open in Framework → View in Fleet → square-terminal-checkout.yml

Fetches Bloomberg Intelligence market data for treasury management decisions related to Block's cash reserves and Bitcoin holdings.

naftiko: '0.5'
info:
  label: Bloomberg Market Data for Treasury
  description: Fetches Bloomberg Intelligence market data for treasury management decisions related to Block's cash reserves and Bitcoin holdings.
  tags:
  - treasury
  - bloomberg-intelligence
  - fintech
capability:
  exposes:
  - type: mcp
    namespace: treasury-data
    port: 8080
    tools:
    - name: get-market-data
      description: Retrieve Bloomberg market data for a given security ticker.
      inputParameters:
      - name: ticker
        in: body
        type: string
        description: The Bloomberg security ticker (e.g. SQ US Equity, XBTUSD).
      call: bloomberg.get-security-data
      with:
        securities:
        - '{{ticker}}'
        fields:
        - PX_LAST
        - PX_VOLUME
        - VOLATILITY_30D
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://bql.bloomberg.com/api/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: security-data
      path: /data
      operations:
      - name: get-security-data
        method: POST
Open in Framework → View in Fleet → bloomberg-market-data-for-treasury.yml

Retrieves a support ticket from ServiceNow, looks up the Cash App user profile, generates a response draft via OpenAI, and notifies the support lead via Slack.

naftiko: '0.5'
info:
  label: Cash App Customer Support Escalation
  description: Retrieves a support ticket from ServiceNow, looks up the Cash App user profile, generates a response draft via OpenAI, and notifies the support lead via Slack.
  tags:
  - support
  - servicenow
  - cash-app
  - openai
  - slack
capability:
  exposes:
  - type: mcp
    namespace: support-escalation
    port: 8080
    tools:
    - name: escalate-ticket
      description: Escalate a support ticket with AI-assisted response drafting.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number.
      - name: user_id
        in: body
        type: string
        description: Cash App user ID.
      steps:
      - name: get-ticket
        type: call
        call: servicenow.get-incident
        with:
          number: '{{incident_number}}'
      - name: get-user
        type: call
        call: cashapp.get-user-profile
        with:
          user_id: '{{user_id}}'
      - name: draft-response
        type: call
        call: openai.create-completion
        with:
          model: gpt-4
          prompt: 'Draft a support response for: {{get-ticket.description}}. User: {{get-user.display_name}}. Account status: {{get-user.status}}.'
      - name: notify-lead
        type: call
        call: slack.post-message
        with:
          channel: '#support-escalations'
          text: 'Escalation: {{incident_number}}. User: {{get-user.display_name}}. Issue: {{get-ticket.short_description}}. Draft response ready for review.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://block.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      inputParameters:
      - name: number
        in: query
      operations:
      - name: get-incident
        method: GET
  - type: http
    namespace: cashapp
    baseUri: https://api.cash.app/v1
    authentication:
      type: bearer
      token: $secrets.cashapp_api_token
    resources:
    - name: users
      path: /users/{{user_id}}
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: get-user-profile
        method: GET
  - type: http
    namespace: openai
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_api_key
    resources:
    - name: completions
      path: /chat/completions
      operations:
      - name: create-completion
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → cash-app-customer-support-escalation.yml

Queries CloudWatch metrics for Square payment API p99 latency and triggers a Datadog alert when the threshold is exceeded.

naftiko: '0.5'
info:
  label: CloudWatch Payment Latency Monitor
  description: Queries CloudWatch metrics for Square payment API p99 latency and triggers a Datadog alert when the threshold is exceeded.
  tags:
  - monitoring
  - cloudwatch
  - datadog
  - payments
  - observability
capability:
  exposes:
  - type: mcp
    namespace: latency-monitor
    port: 8080
    tools:
    - name: check-payment-latency
      description: Query CloudWatch for payment API latency and alert via Datadog if above threshold.
      inputParameters:
      - name: metric_name
        in: body
        type: string
        description: The CloudWatch metric name.
      - name: threshold_ms
        in: body
        type: integer
        description: The latency threshold in milliseconds.
      steps:
      - name: get-metric
        type: call
        call: cloudwatch.get-metric-statistics
        with:
          Namespace: Block/Payments
          MetricName: '{{metric_name}}'
          Period: 300
          Statistics:
          - p99
      - name: create-alert
        type: call
        call: datadog.create-event
        with:
          title: 'Payment latency alert: {{metric_name}} p99 exceeded {{threshold_ms}}ms'
          text: 'CloudWatch metric {{metric_name}} p99 value: {{get-metric.Datapoints.0.p99}}ms (threshold: {{threshold_ms}}ms).'
          alert_type: warning
          tags:
          - service:payments
          - metric:{{metric_name}}
  consumes:
  - type: http
    namespace: cloudwatch
    baseUri: https://monitoring.us-east-1.amazonaws.com
    authentication:
      type: awsSigV4
      accessKeyId: $secrets.aws_access_key_id
      secretAccessKey: $secrets.aws_secret_access_key
      region: us-east-1
      service: monitoring
    resources:
    - name: metrics
      path: /
      operations:
      - name: get-metric-statistics
        method: GET
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → cloudwatch-payment-latency-monitor.yml

Receives a Square webhook event type and ID, retrieves the event payload, and indexes it into Elasticsearch for observability.

naftiko: '0.5'
info:
  label: Square Webhook Event Log
  description: Receives a Square webhook event type and ID, retrieves the event payload, and indexes it into Elasticsearch for observability.
  tags:
  - webhooks
  - square
  - elasticsearch
  - observability
capability:
  exposes:
  - type: mcp
    namespace: square-webhooks
    port: 8080
    tools:
    - name: log-webhook-event
      description: Retrieve a Square webhook event and index it in Elasticsearch.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The Square webhook event ID.
      - name: event_type
        in: body
        type: string
        description: The webhook event type (e.g. payment.completed).
      steps:
      - name: get-event
        type: call
        call: square.get-webhook-event
        with:
          event_id: '{{event_id}}'
      - name: index-event
        type: call
        call: elasticsearch.index-document
        with:
          index: square-webhook-events
          document:
            event_id: '{{event_id}}'
            event_type: '{{event_type}}'
            payload: '{{get-event.event}}'
            indexed_at: '{{now}}'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: webhook-events
      path: /webhooks/event-types/{{event_id}}
      inputParameters:
      - name: event_id
        in: path
      operations:
      - name: get-webhook-event
        method: GET
  - type: http
    namespace: elasticsearch
    baseUri: https://block-es.internal:9200
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: documents
      path: /{{index}}/_doc
      inputParameters:
      - name: index
        in: path
      operations:
      - name: index-document
        method: POST
Open in Framework → View in Fleet → square-webhook-event-log.yml

Retrieves a Datadog APM trace by trace ID for debugging Square API latency issues.

naftiko: '0.5'
info:
  label: Datadog APM Trace Lookup
  description: Retrieves a Datadog APM trace by trace ID for debugging Square API latency issues.
  tags:
  - observability
  - datadog
  - debugging
capability:
  exposes:
  - type: mcp
    namespace: apm-traces
    port: 8080
    tools:
    - name: get-trace
      description: Retrieve a Datadog APM trace by its ID.
      inputParameters:
      - name: trace_id
        in: body
        type: string
        description: The Datadog trace ID.
      call: datadog.get-trace
      with:
        trace_id: '{{trace_id}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: traces
      path: /traces/{{trace_id}}
      inputParameters:
      - name: trace_id
        in: path
      operations:
      - name: get-trace
        method: GET
Open in Framework → View in Fleet → datadog-apm-trace-lookup.yml

After a payment completes, calculates loyalty points and adds them to the customer's Square Loyalty account.

naftiko: '0.5'
info:
  label: Square Loyalty Points Accumulation
  description: After a payment completes, calculates loyalty points and adds them to the customer's Square Loyalty account.
  tags:
  - loyalty
  - square
  - merchant-services
capability:
  exposes:
  - type: mcp
    namespace: loyalty-earn
    port: 8080
    tools:
    - name: accrue-loyalty-points
      description: Calculate and add loyalty points to a customer account after payment.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Square Loyalty account ID.
      - name: order_id
        in: body
        type: string
        description: The Square order ID that earned the points.
      - name: location_id
        in: body
        type: string
        description: The Square location ID.
      steps:
      - name: calculate-points
        type: call
        call: square.calculate-loyalty-points
        with:
          order_id: '{{order_id}}'
          loyalty_account_id: '{{account_id}}'
      - name: accumulate-points
        type: call
        call: square.accumulate-loyalty-points
        with:
          account_id: '{{account_id}}'
          accumulate_points:
            order_id: '{{order_id}}'
            points: '{{calculate-points.points}}'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: loyalty-calculate
      path: /loyalty/programs/{{program_id}}/calculate
      operations:
      - name: calculate-loyalty-points
        method: POST
    - name: loyalty-accumulate
      path: /loyalty/accounts/{{account_id}}/accumulate
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: accumulate-loyalty-points
        method: POST
Open in Framework → View in Fleet → square-loyalty-points-accumulation.yml

When a new hire is added, provisions laptop and equipment in ServiceNow, creates shipping labels, and sends onboarding instructions via SendGrid.

naftiko: '0.5'
info:
  label: Employee Equipment Provisioning Workflow
  description: When a new hire is added, provisions laptop and equipment in ServiceNow, creates shipping labels, and sends onboarding instructions via SendGrid.
  tags:
  - hr
  - servicenow
  - sendgrid
capability:
  exposes:
  - type: mcp
    namespace: equipment-provisioning
    port: 8080
    tools:
    - name: provision-equipment
      description: Provision and ship equipment for a new Block employee.
      inputParameters:
      - name: employee_name
        in: body
        type: string
        description: New hire full name.
      - name: employee_email
        in: body
        type: string
        description: New hire email.
      - name: shipping_address
        in: body
        type: string
        description: Shipping address for equipment delivery.
      steps:
      - name: create-request
        type: call
        call: servicenow.create-request
        with:
          short_description: Equipment for {{employee_name}}
          description: 'Laptop, monitor, and peripherals for new hire {{employee_name}}. Ship to: {{shipping_address}}.'
          category: hardware
      - name: create-asset
        type: call
        call: servicenow.create-asset
        with:
          name: Laptop — {{employee_name}}
          assigned_to: '{{employee_email}}'
          category: Laptop
      - name: send-instructions
        type: call
        call: sendgrid.send-email
        with:
          to: '{{employee_email}}'
          subject: Welcome to Block — Equipment Shipping
          body: 'Welcome {{employee_name}}! Your equipment is being prepared. Request: {{create-request.number}}. Shipping to: {{shipping_address}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://block.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
    - name: assets
      path: /table/alm_hardware
      operations:
      - name: create-asset
        method: POST
  - type: http
    namespace: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → employee-equipment-provisioning-workflow.yml

When a new merchant signs up, creates the Square location, provisions a Datadog dashboard for transaction monitoring, and opens a ServiceNow onboarding ticket.

naftiko: '0.5'
info:
  label: Merchant Onboarding Orchestrator
  description: When a new merchant signs up, creates the Square location, provisions a Datadog dashboard for transaction monitoring, and opens a ServiceNow onboarding ticket.
  tags:
  - onboarding
  - square
  - datadog
  - servicenow
  - merchant-services
capability:
  exposes:
  - type: mcp
    namespace: merchant-onboarding
    port: 8080
    tools:
    - name: onboard-merchant
      description: Provision a new merchant with a Square location, monitoring dashboard, and support ticket.
      inputParameters:
      - name: business_name
        in: body
        type: string
        description: The merchant's business name.
      - name: address_line
        in: body
        type: string
        description: Street address for the new location.
      - name: city
        in: body
        type: string
        description: City for the new location.
      - name: state
        in: body
        type: string
        description: State or province.
      - name: country
        in: body
        type: string
        description: ISO 3166-1 alpha-2 country code.
      steps:
      - name: create-location
        type: call
        call: square.create-location
        with:
          location:
            name: '{{business_name}}'
            address:
              address_line_1: '{{address_line}}'
              locality: '{{city}}'
              administrative_district_level_1: '{{state}}'
              country: '{{country}}'
      - name: create-dashboard
        type: call
        call: datadog.create-dashboard
        with:
          title: Merchant Monitoring — {{business_name}}
          description: Transaction and error rate monitoring for location {{create-location.location.id}}.
          layout_type: ordered
      - name: open-onboarding-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'New merchant onboarding: {{business_name}}'
          description: 'Location {{create-location.location.id}} provisioned. Dashboard: {{create-dashboard.url}}. Address: {{address_line}}, {{city}}, {{state}}.'
          category: merchant_onboarding
          assigned_group: Merchant_Success
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: locations
      path: /locations
      operations:
      - name: create-location
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: dashboards
      path: /dashboard
      operations:
      - name: create-dashboard
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://block.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → merchant-onboarding-orchestrator.yml

Given a Square payment ID, fetches the payment, retrieves the corresponding payout from the Payouts API, and logs the reconciliation record in PostgreSQL.

naftiko: '0.5'
info:
  label: Payment-to-Settlement Reconciliation
  description: Given a Square payment ID, fetches the payment, retrieves the corresponding payout from the Payouts API, and logs the reconciliation record in PostgreSQL.
  tags:
  - settlement
  - reconciliation
  - square
  - postgresql
  - fintech
capability:
  exposes:
  - type: mcp
    namespace: settlement-recon
    port: 8080
    tools:
    - name: reconcile-payment-payout
      description: Match a Square payment to its payout and log the reconciliation.
      inputParameters:
      - name: payment_id
        in: body
        type: string
        description: The Square payment ID to reconcile.
      steps:
      - name: get-payment
        type: call
        call: square.get-payment
        with:
          payment_id: '{{payment_id}}'
      - name: list-payouts
        type: call
        call: square.list-payout-entries
        with:
          payout_id: '{{get-payment.payment.payout_id}}'
      - name: log-reconciliation
        type: call
        call: postgresql.insert-row
        with:
          table: payment_reconciliation
          payment_id: '{{payment_id}}'
          payout_id: '{{get-payment.payment.payout_id}}'
          amount: '{{get-payment.payment.total_money.amount}}'
          settled_at: '{{list-payouts.payout_entries.0.effective_at}}'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: payments
      path: /payments/{{payment_id}}
      inputParameters:
      - name: payment_id
        in: path
      operations:
      - name: get-payment
        method: GET
    - name: payout-entries
      path: /payouts/{{payout_id}}/payout-entries
      inputParameters:
      - name: payout_id
        in: path
      operations:
      - name: list-payout-entries
        method: GET
  - type: http
    namespace: postgresql
    baseUri: https://block-data.internal/api/v1
    authentication:
      type: bearer
      token: $secrets.internal_db_token
    resources:
    - name: rows
      path: /tables/{{table}}/rows
      inputParameters:
      - name: table
        in: path
      operations:
      - name: insert-row
        method: POST
Open in Framework → View in Fleet → payment-to-settlement-reconciliation.yml

Checks Bitcoin price via Bloomberg, evaluates treasury allocation, executes a rebalance trade, and logs the transaction in Snowflake for audit.

naftiko: '0.5'
info:
  label: Bitcoin Treasury Rebalance Workflow
  description: Checks Bitcoin price via Bloomberg, evaluates treasury allocation, executes a rebalance trade, and logs the transaction in Snowflake for audit.
  tags:
  - treasury
  - bitcoin
  - bloomberg
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: btc-treasury
    port: 8080
    tools:
    - name: rebalance-treasury
      description: Evaluate and execute a Bitcoin treasury rebalance with audit logging.
      inputParameters:
      - name: target_allocation_pct
        in: body
        type: number
        description: Target Bitcoin allocation percentage.
      - name: treasury_account
        in: body
        type: string
        description: Treasury account identifier.
      steps:
      - name: get-btc-price
        type: call
        call: bloomberg.get-quote
        with:
          ticker: XBTUSD
      - name: get-holdings
        type: call
        call: treasury.get-balance
        with:
          account: '{{treasury_account}}'
      - name: execute-trade
        type: call
        call: treasury.execute-trade
        with:
          asset: BTC
          target_pct: '{{target_allocation_pct}}'
          current_price: '{{get-btc-price.last_price}}'
      - name: log-audit
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO TREASURY.REBALANCE_LOG (account, asset, price, amount, timestamp) VALUES ('{{treasury_account}}', 'BTC', {{get-btc-price.last_price}}, {{execute-trade.amount}}, CURRENT_TIMESTAMP())
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/fields
    authentication:
      type: bearer
      token: $secrets.bloomberg_api_key
    resources:
    - name: quotes
      path: /snapshots/{{ticker}}
      inputParameters:
      - name: ticker
        in: path
      operations:
      - name: get-quote
        method: GET
  - type: http
    namespace: treasury
    baseUri: https://treasury.block.xyz/api/v1
    authentication:
      type: bearer
      token: $secrets.treasury_api_token
    resources:
    - name: balances
      path: /accounts/{{account}}/balance
      inputParameters:
      - name: account
        in: path
      operations:
      - name: get-balance
        method: GET
    - name: trades
      path: /trades
      operations:
      - name: execute-trade
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://block.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
Open in Framework → View in Fleet → bitcoin-treasury-rebalance-workflow.yml

Creates a batch of Square gift cards, links them to a loyalty promotion, distributes activation codes via MailChimp, and tracks redemption in Google Analytics.

naftiko: '0.5'
info:
  label: Square Gift Card Campaign Orchestrator
  description: Creates a batch of Square gift cards, links them to a loyalty promotion, distributes activation codes via MailChimp, and tracks redemption in Google Analytics.
  tags:
  - gift-cards
  - square
  - mailchimp
  - google-analytics
capability:
  exposes:
  - type: mcp
    namespace: gift-card-campaign
    port: 8080
    tools:
    - name: launch-gift-card-campaign
      description: Create gift cards and launch a distribution campaign.
      inputParameters:
      - name: amount_cents
        in: body
        type: integer
        description: Gift card value in cents.
      - name: quantity
        in: body
        type: integer
        description: Number of gift cards to create.
      - name: campaign_name
        in: body
        type: string
        description: Marketing campaign name.
      steps:
      - name: create-cards
        type: call
        call: square.create-gift-card-batch
        with:
          amount: '{{amount_cents}}'
          quantity: '{{quantity}}'
      - name: create-campaign
        type: call
        call: mailchimp.create-campaign
        with:
          list_id: gift-card-recipients
          subject: '{{campaign_name}} — Complimentary Gift Card!'
          body: 'You have received a ${{amount_cents}} gift card! Redeem with code: {{create-cards.activation_codes}}.'
      - name: track-campaign
        type: call
        call: google-analytics.send-event
        with:
          event_name: gift_card_campaign_launched
          campaign: '{{campaign_name}}'
          value: '{{quantity}}'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: gift-cards
      path: /gift-cards
      operations:
      - name: create-gift-card-batch
        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
  - type: http
    namespace: google-analytics
    baseUri: https://www.google-analytics.com
    authentication:
      type: apiKey
      name: measurement_id
      in: query
      value: $secrets.ga_measurement_id
    resources:
    - name: events
      path: /mp/collect
      operations:
      - name: send-event
        method: POST
Open in Framework → View in Fleet → square-gift-card-campaign-orchestrator.yml

Monitors payment gateway health via Datadog, triggers failover to backup gateway via F5 load balancer, opens a ServiceNow incident, and alerts the payments team via Slack.

naftiko: '0.5'
info:
  label: Payment Gateway Failover Pipeline
  description: Monitors payment gateway health via Datadog, triggers failover to backup gateway via F5 load balancer, opens a ServiceNow incident, and alerts the payments team via Slack.
  tags:
  - reliability
  - datadog
  - f5-networks
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: gateway-failover
    port: 8080
    tools:
    - name: trigger-failover
      description: Execute payment gateway failover with incident tracking and notification.
      inputParameters:
      - name: gateway_name
        in: body
        type: string
        description: The payment gateway service name.
      steps:
      - name: check-health
        type: call
        call: datadog.get-monitors
        with:
          tags: service:{{gateway_name}}
      - name: switch-pool
        type: call
        call: f5.update-pool
        with:
          pool_name: '{{gateway_name}}-pool'
          action: failover
      - name: open-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Payment gateway failover: {{gateway_name}}'
          description: Gateway {{gateway_name}} failing health checks. Failover initiated to backup pool.
          urgency: '1'
          impact: '1'
      - name: alert-team
        type: call
        call: slack.post-message
        with:
          channel: '#payments-oncall'
          text: 'FAILOVER: {{gateway_name}} switched to backup. Incident: {{open-incident.number}}. Monitor status: {{check-health.overall_state}}.'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: monitors
      path: /monitor
      inputParameters:
      - name: tags
        in: query
      operations:
      - name: get-monitors
        method: GET
  - type: http
    namespace: f5
    baseUri: https://f5.block.xyz/mgmt/tm/ltm
    authentication:
      type: basic
      username: $secrets.f5_user
      password: $secrets.f5_password
    resources:
    - name: pools
      path: /pool/{{pool_name}}
      inputParameters:
      - name: pool_name
        in: path
      operations:
      - name: update-pool
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://block.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → payment-gateway-failover-pipeline.yml

Fetches a catalog item from the Square Catalog API by object ID, returning the item name, variations, pricing, and inventory state.

naftiko: '0.5'
info:
  label: Square Catalog Item Retrieval
  description: Fetches a catalog item from the Square Catalog API by object ID, returning the item name, variations, pricing, and inventory state.
  tags:
  - catalog
  - square
  - merchant-services
capability:
  exposes:
  - type: mcp
    namespace: square-catalog
    port: 8080
    tools:
    - name: get-catalog-item
      description: Retrieve a Square catalog object by its ID.
      inputParameters:
      - name: object_id
        in: body
        type: string
        description: The Square catalog object ID.
      call: square.get-catalog-object
      with:
        object_id: '{{object_id}}'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: catalog
      path: /catalog/object/{{object_id}}
      inputParameters:
      - name: object_id
        in: path
      operations:
      - name: get-catalog-object
        method: GET
Open in Framework → View in Fleet → square-catalog-item-retrieval.yml

After a new React Native SDK build completes in GitLab, runs SonarQube analysis and posts the build artifact details to the Square developer documentation portal.

naftiko: '0.5'
info:
  label: React Native SDK Build Verification
  description: After a new React Native SDK build completes in GitLab, runs SonarQube analysis and posts the build artifact details to the Square developer documentation portal.
  tags:
  - developer-platform
  - react-native
  - gitlab
  - sonarqube
  - sdk
capability:
  exposes:
  - type: mcp
    namespace: sdk-build
    port: 8080
    tools:
    - name: verify-sdk-build
      description: Run quality analysis on a React Native SDK build and publish verification to the dev portal.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GitLab project ID for the SDK.
      - name: pipeline_id
        in: body
        type: string
        description: The GitLab pipeline ID.
      - name: sonar_project_key
        in: body
        type: string
        description: The SonarQube project key.
      steps:
      - name: get-pipeline
        type: call
        call: gitlab.get-pipeline
        with:
          project_id: '{{project_id}}'
          pipeline_id: '{{pipeline_id}}'
      - name: get-quality
        type: call
        call: sonarqube.get-quality-gate
        with:
          projectKey: '{{sonar_project_key}}'
      - name: get-artifacts
        type: call
        call: gitlab.list-pipeline-artifacts
        with:
          project_id: '{{project_id}}'
          pipeline_id: '{{pipeline_id}}'
  consumes:
  - type: http
    namespace: gitlab
    baseUri: https://gitlab.block.internal/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
    - name: artifacts
      path: /projects/{{project_id}}/pipelines/{{pipeline_id}}/artifacts
      inputParameters:
      - name: project_id
        in: path
      - name: pipeline_id
        in: path
      operations:
      - name: list-pipeline-artifacts
        method: GET
  - type: http
    namespace: sonarqube
    baseUri: https://sonar.block.internal/api
    authentication:
      type: bearer
      token: $secrets.sonarqube_token
    resources:
    - name: quality-gates
      path: /qualitygates/project_status
      operations:
      - name: get-quality-gate
        method: GET
Open in Framework → View in Fleet → react-native-sdk-build-verification.yml

Runs PCI compliance checks on merchant payment endpoints via Cloudflare, scans infrastructure with SonarQube, logs findings in SharePoint, and notifies via ServiceNow.

naftiko: '0.5'
info:
  label: Merchant PCI Compliance Audit
  description: Runs PCI compliance checks on merchant payment endpoints via Cloudflare, scans infrastructure with SonarQube, logs findings in SharePoint, and notifies via ServiceNow.
  tags:
  - compliance
  - cloudflare
  - sonarqube
  - sharepoint
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: pci-audit
    port: 8080
    tools:
    - name: audit-pci-compliance
      description: Run PCI compliance audit with security scanning and findings documentation.
      inputParameters:
      - name: merchant_id
        in: body
        type: string
        description: Square merchant identifier.
      - name: domain
        in: body
        type: string
        description: Merchant payment domain.
      steps:
      - name: check-tls
        type: call
        call: cloudflare.get-ssl-verification
        with:
          zone_id: $secrets.cloudflare_zone_id
          hostname: '{{domain}}'
      - name: scan-code
        type: call
        call: sonarqube.get-vulnerabilities
        with:
          project_key: merchant-{{merchant_id}}
      - name: store-report
        type: call
        call: sharepoint.create-file
        with:
          site_id: compliance
          folder_path: PCI/{{merchant_id}}
          file_name: audit-report.json
          content: 'TLS: {{check-tls.status}}. Vulnerabilities: {{scan-code.total}}.'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'PCI audit: merchant {{merchant_id}}'
          description: 'TLS status: {{check-tls.status}}. Code vulnerabilities: {{scan-code.total}}. Report: {{store-report.url}}.'
          category: compliance
  consumes:
  - type: http
    namespace: cloudflare
    baseUri: https://api.cloudflare.com/client/v4
    authentication:
      type: bearer
      token: $secrets.cloudflare_token
    resources:
    - name: ssl
      path: /zones/{{zone_id}}/ssl/verification
      inputParameters:
      - name: zone_id
        in: path
      operations:
      - name: get-ssl-verification
        method: GET
  - type: http
    namespace: sonarqube
    baseUri: https://sonar.block.xyz/api
    authentication:
      type: bearer
      token: $secrets.sonarqube_token
    resources:
    - name: issues
      path: /issues/search
      inputParameters:
      - name: project_key
        in: query
      operations:
      - name: get-vulnerabilities
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: create-file
        method: PUT
  - type: http
    namespace: servicenow
    baseUri: https://block.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → merchant-pci-compliance-audit.yml

Triggers a database backup via AWS RDS, verifies backup integrity, stores verification logs in S3, and notifies the DBA team via Slack.

naftiko: '0.5'
info:
  label: Database Backup Verification Pipeline
  description: Triggers a database backup via AWS RDS, verifies backup integrity, stores verification logs in S3, and notifies the DBA team via Slack.
  tags:
  - database
  - amazon-web-services
  - amazon-s3
  - slack
capability:
  exposes:
  - type: mcp
    namespace: db-backup
    port: 8080
    tools:
    - name: verify-backup
      description: Trigger and verify a database backup with logging and notification.
      inputParameters:
      - name: db_instance_id
        in: body
        type: string
        description: RDS database instance identifier.
      steps:
      - name: create-snapshot
        type: call
        call: rds.create-snapshot
        with:
          db_instance_id: '{{db_instance_id}}'
          snapshot_id: '{{db_instance_id}}-backup'
      - name: verify-snapshot
        type: call
        call: rds.describe-snapshot
        with:
          snapshot_id: '{{create-snapshot.snapshot_id}}'
      - name: log-result
        type: call
        call: s3.put-object
        with:
          bucket: backup-verification
          key: '{{db_instance_id}}/{{create-snapshot.snapshot_id}}.json'
          body: '{{verify-snapshot.status}}'
      - name: notify-dba
        type: call
        call: slack.post-message
        with:
          channel: '#dba-ops'
          text: 'Backup verified: {{db_instance_id}}. Snapshot: {{create-snapshot.snapshot_id}}. Status: {{verify-snapshot.status}}. Size: {{verify-snapshot.allocated_storage}}GB.'
  consumes:
  - type: http
    namespace: rds
    baseUri: https://rds.us-east-1.amazonaws.com
    authentication:
      type: aws-sigv4
      region: us-east-1
      access_key: $secrets.aws_access_key
      secret_key: $secrets.aws_secret_key
    resources:
    - name: snapshots
      path: /
      operations:
      - name: create-snapshot
        method: POST
      - name: describe-snapshot
        method: GET
  - type: http
    namespace: s3
    baseUri: https://s3.amazonaws.com
    authentication:
      type: aws-sigv4
      region: us-east-1
      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: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → database-backup-verification-pipeline.yml

Exports a batch of Square transactions for a date range and archives them as a JSON file in Amazon S3 for long-term storage and compliance.

naftiko: '0.5'
info:
  label: S3 Transaction Archive
  description: Exports a batch of Square transactions for a date range and archives them as a JSON file in Amazon S3 for long-term storage and compliance.
  tags:
  - archival
  - square
  - amazon-s3
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: transaction-archive
    port: 8080
    tools:
    - name: archive-transactions
      description: Export Square transactions and store in S3 for archival.
      inputParameters:
      - name: location_id
        in: body
        type: string
        description: The Square location 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.
      steps:
      - name: list-payments
        type: call
        call: square.list-payments
        with:
          location_id: '{{location_id}}'
          begin_time: '{{start_date}}T00:00:00Z'
          end_time: '{{end_date}}T23:59:59Z'
      - name: upload-to-s3
        type: call
        call: s3.put-object
        with:
          Bucket: block-transaction-archives
          Key: '{{location_id}}/{{start_date}}_{{end_date}}.json'
          Body: '{{list-payments}}'
          ContentType: application/json
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: payments
      path: /payments
      operations:
      - name: list-payments
        method: GET
  - type: http
    namespace: s3
    baseUri: https://s3.us-east-1.amazonaws.com
    authentication:
      type: awsSigV4
      accessKeyId: $secrets.aws_access_key_id
      secretAccessKey: $secrets.aws_secret_access_key
      region: us-east-1
      service: s3
    resources:
    - name: objects
      path: /{{Bucket}}/{{Key}}
      inputParameters:
      - name: Bucket
        in: path
      - name: Key
        in: path
      operations:
      - name: put-object
        method: PUT
Open in Framework → View in Fleet → s3-transaction-archive.yml

Retrieves the health status of F5 load balancer pool members for Block's payment API gateway.

naftiko: '0.5'
info:
  label: F5 Load Balancer Pool Status
  description: Retrieves the health status of F5 load balancer pool members for Block's payment API gateway.
  tags:
  - load-balancing
  - f5-networks
  - infrastructure
  - payments
capability:
  exposes:
  - type: mcp
    namespace: f5-health
    port: 8080
    tools:
    - name: get-pool-status
      description: Retrieve F5 load balancer pool member health.
      inputParameters:
      - name: pool_name
        in: body
        type: string
        description: The F5 pool name.
      call: f5.get-pool-members
      with:
        pool_name: '{{pool_name}}'
  consumes:
  - type: http
    namespace: f5
    baseUri: https://f5-bigip.block.internal/mgmt/tm/ltm
    authentication:
      type: basic
      username: $secrets.f5_user
      password: $secrets.f5_password
    resources:
    - name: pool-members
      path: /pool/~Common~{{pool_name}}/members
      inputParameters:
      - name: pool_name
        in: path
      operations:
      - name: get-pool-members
        method: GET
Open in Framework → View in Fleet → f5-load-balancer-pool-status.yml

When a Square merchant updates their business profile, syncs the updated business name, description, and hours to their Instagram, Twitter, and Meta business pages.

naftiko: '0.5'
info:
  label: Merchant Social Media Sync
  description: When a Square merchant updates their business profile, syncs the updated business name, description, and hours to their Instagram, Twitter, and Meta business pages.
  tags:
  - social-media
  - square
  - instagram
  - twitter
  - meta
  - merchant-services
capability:
  exposes:
  - type: mcp
    namespace: social-sync
    port: 8080
    tools:
    - name: sync-merchant-profile
      description: Sync a Square merchant profile update to social media platforms.
      inputParameters:
      - name: location_id
        in: body
        type: string
        description: The Square location ID.
      - name: instagram_account_id
        in: body
        type: string
        description: The Instagram business account ID.
      - name: twitter_user_id
        in: body
        type: string
        description: The Twitter/X user ID.
      steps:
      - name: get-location
        type: call
        call: square.get-location
        with:
          location_id: '{{location_id}}'
      - name: update-instagram
        type: call
        call: meta.update-business-profile
        with:
          account_id: '{{instagram_account_id}}'
          bio: '{{get-location.location.description}}'
          name: '{{get-location.location.name}}'
      - name: post-twitter-update
        type: call
        call: twitter.create-tweet
        with:
          text: We've updated our profile! Visit us at {{get-location.location.name}}, {{get-location.location.address.address_line_1}}, {{get-location.location.address.locality}}.
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: locations
      path: /locations/{{location_id}}
      inputParameters:
      - name: location_id
        in: path
      operations:
      - name: get-location
        method: GET
  - type: http
    namespace: meta
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_page_token
    resources:
    - name: accounts
      path: /{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: update-business-profile
        method: POST
  - type: http
    namespace: twitter
    baseUri: https://api.twitter.com/2
    authentication:
      type: bearer
      token: $secrets.twitter_bearer_token
    resources:
    - name: tweets
      path: /tweets
      operations:
      - name: create-tweet
        method: POST
Open in Framework → View in Fleet → merchant-social-media-sync.yml

Polls Spring Boot actuator endpoints across payment microservices, aggregates health data in Datadog, creates alerts for unhealthy services, and posts status to Slack.

naftiko: '0.5'
info:
  label: Spring Boot Service Health Aggregator Pipeline
  description: Polls Spring Boot actuator endpoints across payment microservices, aggregates health data in Datadog, creates alerts for unhealthy services, and posts status to Slack.
  tags:
  - observability
  - spring-boot
  - datadog
  - slack
capability:
  exposes:
  - type: mcp
    namespace: health-aggregator
    port: 8080
    tools:
    - name: aggregate-health
      description: Aggregate health status across Spring Boot microservices with alerting.
      inputParameters:
      - name: service_group
        in: body
        type: string
        description: Service group name (e.g. payments, identity).
      steps:
      - name: get-services
        type: call
        call: datadog.search-services
        with:
          query: group:{{service_group}}
      - name: check-health
        type: call
        call: datadog.query-metrics
        with:
          query: avg:spring.health{group:{{service_group}}} by {service}
          period: 5m
      - name: create-alert
        type: call
        call: datadog.create-monitor
        with:
          name: 'Health degradation: {{service_group}}'
          query: avg(last_5m):avg:spring.health{group:{{service_group}}} < 1
          type: metric alert
      - name: post-status
        type: call
        call: slack.post-message
        with:
          channel: '#platform-health'
          text: 'Health check for {{service_group}}: {{check-health.healthy_count}}/{{check-health.total_count}} services healthy.'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: services
      path: /service_dependencies
      operations:
      - name: search-services
        method: GET
    - name: metrics
      path: /query
      inputParameters:
      - name: query
        in: query
      - name: period
        in: query
      operations:
      - name: query-metrics
        method: GET
    - name: monitors
      path: /monitor
      operations:
      - name: create-monitor
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → spring-boot-service-health-aggregator-pipeline.yml

Retrieves the SonarQube quality gate status for a Square developer SDK project and posts the result to the Bitbucket pull request.

naftiko: '0.5'
info:
  label: SonarQube Code Quality Gate Check
  description: Retrieves the SonarQube quality gate status for a Square developer SDK project and posts the result to the Bitbucket pull request.
  tags:
  - code-quality
  - sonarqube
  - bitbucket
  - developer-platform
capability:
  exposes:
  - type: mcp
    namespace: code-quality
    port: 8080
    tools:
    - name: check-quality-gate
      description: Fetch SonarQube quality gate status and update the Bitbucket PR.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The SonarQube project key.
      - name: pr_id
        in: body
        type: string
        description: The Bitbucket pull request ID.
      - name: repo_slug
        in: body
        type: string
        description: The Bitbucket repository slug.
      steps:
      - name: get-quality-gate
        type: call
        call: sonarqube.get-quality-gate
        with:
          projectKey: '{{project_key}}'
      - name: post-pr-comment
        type: call
        call: bitbucket.create-pr-comment
        with:
          repo_slug: '{{repo_slug}}'
          pull_request_id: '{{pr_id}}'
          content: 'SonarQube Quality Gate: {{get-quality-gate.projectStatus.status}}. Details: {{get-quality-gate.projectStatus.conditions}}'
  consumes:
  - type: http
    namespace: sonarqube
    baseUri: https://sonar.block.internal/api
    authentication:
      type: bearer
      token: $secrets.sonarqube_token
    resources:
    - name: quality-gates
      path: /qualitygates/project_status
      operations:
      - name: get-quality-gate
        method: GET
  - type: http
    namespace: bitbucket
    baseUri: https://api.bitbucket.org/2.0/repositories/block
    authentication:
      type: bearer
      token: $secrets.bitbucket_token
    resources:
    - name: pr-comments
      path: /{{repo_slug}}/pullrequests/{{pull_request_id}}/comments
      inputParameters:
      - name: repo_slug
        in: path
      - name: pull_request_id
        in: path
      operations:
      - name: create-pr-comment
        method: POST
Open in Framework → View in Fleet → sonarqube-code-quality-gate-check.yml

Checks the status of a Cash App Pay transaction by payment ID, returning approval state, sender, and settlement timestamp.

naftiko: '0.5'
info:
  label: Cash App Pay Status Check
  description: Checks the status of a Cash App Pay transaction by payment ID, returning approval state, sender, and settlement timestamp.
  tags:
  - payments
  - cash-app
  - fintech
capability:
  exposes:
  - type: mcp
    namespace: cashapp-payments
    port: 8080
    tools:
    - name: get-cashapp-payment
      description: Retrieve the status and details of a Cash App Pay payment.
      inputParameters:
      - name: payment_id
        in: body
        type: string
        description: The Cash App payment identifier.
      call: square.get-payment
      with:
        payment_id: '{{payment_id}}'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: payments
      path: /payments/{{payment_id}}
      inputParameters:
      - name: payment_id
        in: path
      operations:
      - name: get-payment
        method: GET
Open in Framework → View in Fleet → cash-app-pay-status-check.yml

Cancels a Square subscription, processes the final prorated refund, updates the customer record, and logs the churn event in Elasticsearch.

naftiko: '0.5'
info:
  label: Merchant Subscription Cancellation Flow
  description: Cancels a Square subscription, processes the final prorated refund, updates the customer record, and logs the churn event in Elasticsearch.
  tags:
  - subscriptions
  - churn
  - square
  - elasticsearch
  - merchant-services
capability:
  exposes:
  - type: mcp
    namespace: subscription-cancel
    port: 8080
    tools:
    - name: cancel-subscription-flow
      description: Cancel a subscription, issue final refund, update customer, and log the churn.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: The Square subscription ID.
      - name: customer_id
        in: body
        type: string
        description: The Square customer ID.
      - name: reason
        in: body
        type: string
        description: Reason for cancellation.
      steps:
      - name: cancel-subscription
        type: call
        call: square.cancel-subscription
        with:
          subscription_id: '{{subscription_id}}'
      - name: update-customer
        type: call
        call: square.update-customer
        with:
          customer_id: '{{customer_id}}'
          note: 'Subscription {{subscription_id}} cancelled. Reason: {{reason}}.'
      - name: log-churn
        type: call
        call: elasticsearch.index-document
        with:
          index: subscription-churn
          document:
            subscription_id: '{{subscription_id}}'
            customer_id: '{{customer_id}}'
            reason: '{{reason}}'
            cancelled_date: '{{cancel-subscription.subscription.canceled_date}}'
  consumes:
  - type: http
    namespace: square
    baseUri: https://connect.squareup.com/v2
    authentication:
      type: bearer
      token: $secrets.square_access_token
    resources:
    - name: subscriptions
      path: /subscriptions/{{subscription_id}}/cancel
      inputParameters:
      - name: subscription_id
        in: path
      operations:
      - name: cancel-subscription
        method: POST
    - name: customers
      path: /customers/{{customer_id}}
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: update-customer
        method: PUT
  - type: http
    namespace: elasticsearch
    baseUri: https://block-es.internal:9200
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: documents
      path: /{{index}}/_doc
      inputParameters:
      - name: index
        in: path
      operations:
      - name: index-document
        method: POST
Open in Framework → View in Fleet → merchant-subscription-cancellation-flow.yml

Queries Palo Alto Networks Panorama for active firewall rules protecting Block's payment processing network perimeter.

naftiko: '0.5'
info:
  label: Palo Alto Networks Firewall Rule Check
  description: Queries Palo Alto Networks Panorama for active firewall rules protecting Block's payment processing network perimeter.
  tags:
  - security
  - palo-alto-networks
  - infrastructure
  - payments
capability:
  exposes:
  - type: mcp
    namespace: pan-firewall
    port: 8080
    tools:
    - name: get-firewall-rules
      description: Retrieve active firewall rules from Palo Alto Panorama.
      inputParameters:
      - name: device_group
        in: body
        type: string
        description: The Panorama device group name.
      call: paloalto.get-security-rules
      with:
        device_group: '{{device_group}}'
  consumes:
  - type: http
    namespace: paloalto
    baseUri: https://panorama.block.internal/restapi/v10.2
    authentication:
      type: apiKey
      name: X-PAN-KEY
      in: header
      value: $secrets.panorama_api_key
    resources:
    - name: security-rules
      path: /Policies/SecurityRules
      operations:
      - name: get-security-rules
        method: GET
Open in Framework → View in Fleet → palo-alto-networks-firewall-rule-check.yml

Verifies a Cash App account by cashtag, returning account status, verification level, and basic profile information for compliance checks.

naftiko: '0.5'
info:
  label: Cash App Account Verification
  description: Verifies a Cash App account by cashtag, returning account status, verification level, and basic profile information for compliance checks.
  tags:
  - verification
  - cash-app
capability:
  exposes:
  - type: mcp
    namespace: cash-app-verify
    port: 8080
    tools:
    - name: verify-account
      description: Verify a Cash App account by cashtag.
      inputParameters:
      - name: cashtag
        in: body
        type: string
        description: The Cash App cashtag (e.g. $username).
      call: cashapp.verify-account
      with:
        cashtag: '{{cashtag}}'
  consumes:
  - type: http
    namespace: cashapp
    baseUri: https://api.cash.app/v1
    authentication:
      type: bearer
      token: $secrets.cashapp_api_token
    resources:
    - name: accounts
      path: /accounts/verify
      inputParameters:
      - name: cashtag
        in: query
      operations:
      - name: verify-account
        method: GET
Open in Framework → View in Fleet → cash-app-account-verification.yml

Queries recent Cash App P2P transfers for a given cashtag, enriches with Bitcoin conversion rates, and stores the summary in PostgreSQL for compliance reporting.

naftiko: '0.5'
info:
  label: Cash App Peer-to-Peer Transfer Tracker
  description: Queries recent Cash App P2P transfers for a given cashtag, enriches with Bitcoin conversion rates, and stores the summary in PostgreSQL for compliance reporting.
  tags:
  - cash-app
  - bitcoin
  - postgresql
  - compliance
  - fintech
capability:
  exposes:
  - type: mcp
    namespace: cashapp-p2p
    port: 8080
    tools:
    - name: track-p2p-transfers
      description: Query recent P2P transfers, enrich with BTC rates, and store for compliance.
      inputParameters:
      - name: cashtag
        in: body
        type: string
        description: The Cash App cashtag to query.
      - 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-transfers
        type: call
        call: cashapp.list-transfers
        with:
          cashtag: '{{cashtag}}'
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: get-btc-rate
        type: call
        call: bitcoin.get-price
        with:
          currency_pair: BTC-USD
      - name: store-summary
        type: call
        call: postgresql.insert-row
        with:
          table: p2p_transfer_audit
          cashtag: '{{cashtag}}'
          period_start: '{{start_date}}'
          period_end: '{{end_date}}'
          transfer_count: '{{get-transfers.total_count}}'
          total_usd: '{{get-transfers.total_amount}}'
          btc_rate_at_query: '{{get-btc-rate.USD.last}}'
  consumes:
  - type: http
    namespace: cashapp
    baseUri: https://api.cash.app/v1
    authentication:
      type: bearer
      token: $secrets.cashapp_api_token
    resources:
    - name: transfers
      path: /transfers
      operations:
      - name: list-transfers
        method: GET
  - type: http
    namespace: bitcoin
    baseUri: https://api.blockchain.info/v2
    authentication:
      type: bearer
      token: $secrets.blockchain_api_token
    resources:
    - name: ticker
      path: /ticker
      operations:
      - name: get-price
        method: GET
  - type: http
    namespace: postgresql
    baseUri: https://block-data.internal/api/v1
    authentication:
      type: bearer
      token: $secrets.internal_db_token
    resources:
    - name: rows
      path: /tables/{{table}}/rows
      inputParameters:
      - name: table
        in: path
      operations:
      - name: insert-row
        method: POST
Open in Framework → View in Fleet → cash-app-peer-to-peer-transfer-tracker.yml

Validates a new SDK release by running SonarQube quality checks, verifying GitLab CI tests pass, publishing the artifact, and notifying developers via Slack.

naftiko: '0.5'
info:
  label: SDK Release Validation Pipeline
  description: Validates a new SDK release by running SonarQube quality checks, verifying GitLab CI tests pass, publishing the artifact, and notifying developers via Slack.
  tags:
  - developer-platform
  - sonarqube
  - gitlab
  - slack
capability:
  exposes:
  - type: mcp
    namespace: sdk-release
    port: 8080
    tools:
    - name: validate-and-release
      description: Validate code quality, run tests, and publish an SDK release.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: GitLab project ID.
      - name: version
        in: body
        type: string
        description: SDK version to release.
      steps:
      - name: quality-check
        type: call
        call: sonarqube.get-quality-gate
        with:
          project_key: '{{project_id}}'
      - name: run-tests
        type: call
        call: gitlab.create-pipeline
        with:
          project_id: '{{project_id}}'
          ref: v{{version}}
          variables: RELEASE=true
      - name: publish-artifact
        type: call
        call: gitlab.create-release
        with:
          project_id: '{{project_id}}'
          tag_name: v{{version}}
          description: 'SDK Release v{{version}}. Quality gate: {{quality-check.status}}.'
      - name: announce-release
        type: call
        call: slack.post-message
        with:
          channel: '#developer-platform'
          text: 'SDK v{{version}} released! Quality: {{quality-check.status}}. Pipeline: {{run-tests.id}}. Download: {{publish-artifact.assets_url}}.'
  consumes:
  - type: http
    namespace: sonarqube
    baseUri: https://sonar.block.xyz/api
    authentication:
      type: bearer
      token: $secrets.sonarqube_token
    resources:
    - name: quality-gates
      path: /qualitygates/project_status
      inputParameters:
      - name: project_key
        in: query
      operations:
      - name: get-quality-gate
        method: GET
  - type: http
    namespace: gitlab
    baseUri: https://gitlab.block.xyz/api/v4
    authentication:
      type: bearer
      token: $secrets.gitlab_token
    resources:
    - name: pipelines
      path: /projects/{{project_id}}/pipeline
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: create-pipeline
        method: POST
    - name: releases
      path: /projects/{{project_id}}/releases
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: create-release
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → sdk-release-validation-pipeline.yml

Creates a new Terraform Cloud workspace for a given project, links the GitHub repository, and notifies the infrastructure team via Slack.

naftiko: '0.5'
info:
  label: Terraform Cloud Workspace Provisioner
  description: Creates a new Terraform Cloud workspace for a given project, links the GitHub repository, and notifies the infrastructure team via Slack.
  tags:
  - cloud
  - infrastructure
  - terraform
  - github
  - slack
capability:
  exposes:
  - type: mcp
    namespace: infra-provisioning
    port: 8080
    tools:
    - name: provision-terraform-workspace
      description: Given a workspace name, GitHub repository, and Terraform organization, create a new Terraform Cloud workspace linked to the repository and notify the infrastructure team in Slack. Use when a new project or service requires cloud infrastructure.
      inputParameters:
      - name: workspace_name
        in: body
        type: string
        description: The desired Terraform Cloud workspace name, e.g. 'bloomberg-trading-api-prod'.
      - name: github_repo
        in: body
        type: string
        description: The GitHub repository to link, e.g. 'bloomberg/trading-api'.
      - name: tf_org
        in: body
        type: string
        description: The Terraform Cloud organization name.
      steps:
      - name: create-workspace
        type: call
        call: terraform.create-workspace
        with:
          name: '{{workspace_name}}'
          organization: '{{tf_org}}'
      - name: link-vcs
        type: call
        call: terraform-vcs.link-vcs-repo
        with:
          workspace_id: '{{create-workspace.id}}'
          repo: '{{github_repo}}'
      - name: notify-infra
        type: call
        call: slack.post-message
        with:
          channel: infrastructure
          text: Terraform workspace {{workspace_name}} created and linked to {{github_repo}}.
  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
      inputParameters:
      - name: organization
        in: path
      operations:
      - name: create-workspace
        method: POST
  - type: http
    namespace: terraform-vcs
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: workspace-vcs
      path: /workspaces/{{workspace_id}}/relationships/vars
      inputParameters:
      - name: workspace_id
        in: path
      operations:
      - name: link-vcs-repo
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → terraform-cloud-workspace-provisioner.yml

When a role change is detected in Workday, updates Okta group memberships, adjusts GitHub team assignments, and notifies the employee and manager on Slack.

naftiko: '0.5'
info:
  label: Employee Role Change Access Update
  description: When a role change is detected in Workday, updates Okta group memberships, adjusts GitHub team assignments, and notifies the employee and manager on Slack.
  tags:
  - hr
  - workday
  - okta
  - github
  - slack
capability:
  exposes:
  - type: mcp
    namespace: role-change-ops
    port: 8080
    tools:
    - name: update-access-on-role-change
      description: Given a Workday role change event, update Okta groups, GitHub teams, and notify via Slack.
      inputParameters:
      - name: employee_email
        in: body
        type: string
        description: The employee's email.
      - name: new_role
        in: body
        type: string
        description: The new role title.
      - name: new_department
        in: body
        type: string
        description: The new department.
      steps:
      - name: update-okta
        type: call
        call: okta-role.update-user-groups
        with:
          email: '{{employee_email}}'
          department: '{{new_department}}'
      - name: update-github
        type: call
        call: gh-role.update-team-membership
        with:
          username: '{{employee_email}}'
          team: '{{new_department}}'
      - name: notify-change
        type: call
        call: slack-role.post-message
        with:
          channel: it-provisioning
          text: 'Role change processed: {{employee_email}} moved to {{new_role}} in {{new_department}}. Okta and GitHub access updated.'
  consumes:
  - type: http
    namespace: okta-role
    baseUri: https://bloomberg.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: groups
      path: /users/{{email}}/groups
      inputParameters:
      - name: email
        in: path
      operations:
      - name: update-user-groups
        method: PUT
  - type: http
    namespace: gh-role
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: teams
      path: /orgs/bloomberg/teams/{{team}}/memberships/{{username}}
      inputParameters:
      - name: team
        in: path
      - name: username
        in: path
      operations:
      - name: update-team-membership
        method: PUT
  - type: http
    namespace: slack-role
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → employee-role-change-access-update.yml

Retrieves p99 and p50 latency metrics for Bloomberg API endpoints from Datadog for performance monitoring.

naftiko: '0.5'
info:
  label: Datadog API Latency Check
  description: Retrieves p99 and p50 latency metrics for Bloomberg API endpoints from Datadog for performance monitoring.
  tags:
  - observability
  - datadog
  - api-performance
  - latency
capability:
  exposes:
  - type: mcp
    namespace: api-perf
    port: 8080
    tools:
    - name: get-api-latency
      description: Given a Bloomberg API service name, return p50 and p99 latency metrics from Datadog. Use for SLA compliance checks.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The Bloomberg API service name in Datadog.
      call: dd-latency.get-metrics
      with:
        service: '{{service_name}}'
      outputParameters:
      - name: p50_ms
        type: number
        mapping: $.series[0].pointlist[-1][1]
      - name: p99_ms
        type: number
        mapping: $.series[1].pointlist[-1][1]
  consumes:
  - type: http
    namespace: dd-latency
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: metrics
      path: /query
      operations:
      - name: get-metrics
        method: GET
Open in Framework → View in Fleet → datadog-api-latency-check.yml

Launches a quarterly Okta access review campaign, generates a user access report, sends review requests to managers via Slack, and tracks completion in Jira.

naftiko: '0.5'
info:
  label: Okta Access Certification Campaign
  description: Launches a quarterly Okta access review campaign, generates a user access report, sends review requests to managers via Slack, and tracks completion in Jira.
  tags:
  - identity
  - okta
  - slack
  - jira
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: access-cert
    port: 8080
    tools:
    - name: launch-access-certification
      description: Launch a quarterly access certification campaign across Okta, send review requests, and track in Jira.
      inputParameters:
      - name: quarter
        in: body
        type: string
        description: The quarter for the review, e.g. 'Q1-2026'.
      - name: app_name
        in: body
        type: string
        description: The Okta application to review.
      steps:
      - name: get-app-users
        type: call
        call: okta-cert.get-app-users
        with:
          app_name: '{{app_name}}'
      - name: create-tracking-epic
        type: call
        call: jira-cert.create-issue
        with:
          project: SEC
          summary: 'Access certification: {{app_name}} {{quarter}}'
          description: 'Quarterly access review for {{app_name}}. Users: {{get-app-users.count}}'
          issue_type: Epic
      - name: notify-managers
        type: call
        call: slack-cert.post-message
        with:
          channel: access-reviews
          text: 'Quarterly access certification launched: {{app_name}} ({{quarter}}). {{get-app-users.count}} users to review. Epic: {{create-tracking-epic.key}}'
  consumes:
  - type: http
    namespace: okta-cert
    baseUri: https://bloomberg.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: app-users
      path: /apps/{{app_name}}/users
      inputParameters:
      - name: app_name
        in: path
      operations:
      - name: get-app-users
        method: GET
  - type: http
    namespace: jira-cert
    baseUri: https://bloomberg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-cert
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → okta-access-certification-campaign.yml

When a Snowflake data pipeline misses its SLA, creates a PagerDuty incident, opens a Jira ticket, and posts an alert to the data engineering Slack channel.

naftiko: '0.5'
info:
  label: Snowflake Data Pipeline SLA Breach Handler
  description: When a Snowflake data pipeline misses its SLA, creates a PagerDuty incident, opens a Jira ticket, and posts an alert to the data engineering Slack channel.
  tags:
  - data-engineering
  - snowflake
  - pagerduty
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: pipeline-sla
    port: 8080
    tools:
    - name: handle-pipeline-sla-breach
      description: Given a Snowflake pipeline SLA breach, create a PagerDuty incident, Jira ticket, and Slack alert.
      inputParameters:
      - name: pipeline_name
        in: body
        type: string
        description: The name of the pipeline that missed SLA.
      - name: expected_completion
        in: body
        type: string
        description: The expected completion time.
      - name: actual_status
        in: body
        type: string
        description: The current pipeline status.
      steps:
      - name: page-oncall
        type: call
        call: pd-pipeline.create-incident
        with:
          title: 'Pipeline SLA breach: {{pipeline_name}}'
          service_id: $secrets.pagerduty_data_service
          urgency: high
      - name: create-ticket
        type: call
        call: jira-pipeline.create-issue
        with:
          project: DATA
          summary: 'SLA breach: {{pipeline_name}}'
          description: 'Expected: {{expected_completion}}. Status: {{actual_status}}. PagerDuty: {{page-oncall.incident_url}}'
          priority: Critical
      - name: alert-team
        type: call
        call: slack-pipeline.post-message
        with:
          channel: data-engineering-alerts
          text: 'PIPELINE SLA BREACH: {{pipeline_name}}. Expected by {{expected_completion}}, status: {{actual_status}}. Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: pd-pipeline
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: jira-pipeline
    baseUri: https://bloomberg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-pipeline
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → snowflake-data-pipeline-sla-breach-handler.yml

When SAP detects a budget overrun for a cost center, creates a Jira ticket for finance review, notifies the cost center manager on Slack, and logs the event in ServiceNow.

naftiko: '0.5'
info:
  label: SAP Budget Overrun Escalation
  description: When SAP detects a budget overrun for a cost center, creates a Jira ticket for finance review, notifies the cost center manager on Slack, and logs the event in ServiceNow.
  tags:
  - finance
  - sap
  - jira
  - slack
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: finance-ops
    port: 8080
    tools:
    - name: escalate-budget-overrun
      description: Given a cost center and overrun amount, create a Jira finance ticket, notify the manager via Slack, and log in ServiceNow.
      inputParameters:
      - name: cost_center
        in: body
        type: string
        description: The SAP cost center ID.
      - name: overrun_amount
        in: body
        type: string
        description: The budget overrun amount.
      - name: manager_email
        in: body
        type: string
        description: Email of the cost center manager.
      steps:
      - name: create-finance-ticket
        type: call
        call: jira-fin.create-issue
        with:
          project: FIN
          summary: 'Budget overrun: Cost center {{cost_center}} exceeded by {{overrun_amount}}'
          description: 'Manager: {{manager_email}}. Review and approve variance or identify reallocation.'
          priority: High
      - name: notify-manager
        type: call
        call: slack-fin.post-message
        with:
          channel: finance-alerts
          text: 'Budget overrun detected: Cost center {{cost_center}} exceeded by {{overrun_amount}}. Jira: {{create-finance-ticket.key}}. Please review.'
      - name: log-event
        type: call
        call: snow-fin.create-incident
        with:
          short_description: 'Budget overrun: {{cost_center}}'
          description: 'Overrun: {{overrun_amount}}. Jira: {{create-finance-ticket.key}}'
          category: finance
  consumes:
  - type: http
    namespace: jira-fin
    baseUri: https://bloomberg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-fin
    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: snow-fin
    baseUri: https://bloomberg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → sap-budget-overrun-escalation.yml

When SAP Concur flags an expense report anomaly, creates a Jira audit ticket, notifies the employee's manager on Slack, and opens a ServiceNow compliance case.

naftiko: '0.5'
info:
  label: SAP Concur Expense Anomaly Handler
  description: When SAP Concur flags an expense report anomaly, creates a Jira audit ticket, notifies the employee's manager on Slack, and opens a ServiceNow compliance case.
  tags:
  - finance
  - sap-concur
  - jira
  - slack
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: expense-ops
    port: 8080
    tools:
    - name: handle-expense-anomaly
      description: Given an expense report anomaly from SAP Concur, create a Jira audit ticket, notify the manager, and log a compliance case.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The SAP Concur expense report ID.
      - name: employee_name
        in: body
        type: string
        description: The employee who submitted the report.
      - name: anomaly_type
        in: body
        type: string
        description: The type of anomaly detected.
      steps:
      - name: create-audit-ticket
        type: call
        call: jira-audit.create-issue
        with:
          project: AUDIT
          summary: 'Expense anomaly: {{anomaly_type}} - {{employee_name}}'
          description: 'Report: {{report_id}}. Employee: {{employee_name}}. Anomaly: {{anomaly_type}}'
          priority: High
      - name: notify-manager
        type: call
        call: slack-audit.post-message
        with:
          channel: expense-compliance
          text: 'Expense anomaly detected: {{employee_name}} report {{report_id}}. Type: {{anomaly_type}}. Jira: {{create-audit-ticket.key}}'
      - name: log-compliance-case
        type: call
        call: snow-audit.create-incident
        with:
          short_description: 'Expense anomaly: {{anomaly_type}} - {{employee_name}}'
          description: 'Report: {{report_id}}. Jira: {{create-audit-ticket.key}}'
          category: compliance
  consumes:
  - type: http
    namespace: jira-audit
    baseUri: https://bloomberg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-audit
    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: snow-audit
    baseUri: https://bloomberg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → sap-concur-expense-anomaly-handler.yml

When a Bloomberg index rebalance is detected, retrieves updated constituents, generates an impact analysis via Anthropic, and distributes to portfolio managers via Slack.

naftiko: '0.5'
info:
  label: Bloomberg Index Rebalance Notification
  description: When a Bloomberg index rebalance is detected, retrieves updated constituents, generates an impact analysis via Anthropic, and distributes to portfolio managers via Slack.
  tags:
  - financial-data
  - bloomberg-indices
  - anthropic
  - slack
  - portfolio
capability:
  exposes:
  - type: mcp
    namespace: index-rebalance
    port: 8080
    tools:
    - name: notify-index-rebalance
      description: Given a Bloomberg index ticker with a pending rebalance, retrieve new constituents, analyze impact, and notify portfolio managers.
      inputParameters:
      - name: index_ticker
        in: body
        type: string
        description: The Bloomberg index ticker.
      - name: rebalance_date
        in: body
        type: string
        description: The effective rebalance date.
      steps:
      - name: get-changes
        type: call
        call: bbg-idx-rebal.get-rebalance-changes
        with:
          ticker: '{{index_ticker}}'
          date: '{{rebalance_date}}'
      - name: analyze-impact
        type: call
        call: anthropic-idx.create-message
        with:
          model: claude-opus-4-5
          max_tokens: 2048
          system: You are a portfolio analyst. Summarize index rebalance changes and their impact on tracking portfolios.
          content: 'Analyze these rebalance changes for {{index_ticker}} effective {{rebalance_date}}: {{get-changes.data}}'
      - name: notify-pm
        type: call
        call: slack-pm.post-message
        with:
          channel: portfolio-management
          text: 'Index Rebalance: {{index_ticker}} effective {{rebalance_date}}. Impact: {{analyze-impact.content}}'
  consumes:
  - type: http
    namespace: bbg-idx-rebal
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/data
    authentication:
      type: bearer
      token: $secrets.bloomberg_data_token
    resources:
    - name: rebalance
      path: /indices/{{ticker}}/rebalance
      inputParameters:
      - name: ticker
        in: path
      operations:
      - name: get-rebalance-changes
        method: GET
  - type: http
    namespace: anthropic-idx
    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: slack-pm
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → bloomberg-index-rebalance-notification.yml

Retrieves the list of Okta groups a user belongs to for access review and compliance checks.

naftiko: '0.5'
info:
  label: Okta User Group Membership Lookup
  description: Retrieves the list of Okta groups a user belongs to for access review and compliance checks.
  tags:
  - identity
  - okta
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: identity-ops
    port: 8080
    tools:
    - name: get-user-groups
      description: Given an Okta user email, return the list of groups they belong to. Use for quarterly access reviews.
      inputParameters:
      - name: user_email
        in: body
        type: string
        description: The user's email address in Okta.
      call: okta-groups.get-user-groups
      with:
        email: '{{user_email}}'
      outputParameters:
      - name: groups
        type: array
        mapping: $.groups[*].profile.name
  consumes:
  - type: http
    namespace: okta-groups
    baseUri: https://bloomberg.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: user-groups
      path: /users/{{email}}/groups
      inputParameters:
      - name: email
        in: path
      operations:
      - name: get-user-groups
        method: GET
Open in Framework → View in Fleet → okta-user-group-membership-lookup.yml

Gathers KPI data from Snowflake, generates an executive summary via Anthropic Claude, and distributes the digest via Slack and Microsoft Teams to leadership.

naftiko: '0.5'
info:
  label: Weekly Executive KPI Dashboard Digest
  description: Gathers KPI data from Snowflake, generates an executive summary via Anthropic Claude, and distributes the digest via Slack and Microsoft Teams to leadership.
  tags:
  - reporting
  - snowflake
  - anthropic
  - slack
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: exec-reporting
    port: 8080
    tools:
    - name: generate-kpi-digest
      description: Query Snowflake for KPIs, generate an executive summary via Anthropic, and distribute via Slack and Teams.
      inputParameters:
      - name: week_ending
        in: body
        type: string
        description: The week ending date in YYYY-MM-DD format.
      steps:
      - name: query-kpis
        type: call
        call: snowflake-kpi.execute-query
        with:
          query: SELECT metric_name, current_value, target_value, pct_change FROM analytics.executive_kpis WHERE week_ending = '{{week_ending}}'
      - name: generate-summary
        type: call
        call: anthropic-kpi.create-message
        with:
          model: claude-opus-4-5
          max_tokens: 2048
          system: You are an executive briefing writer. Create a concise, action-oriented KPI summary for senior leadership.
          content: 'Create an executive KPI digest for week ending {{week_ending}}: {{query-kpis.data}}'
      - name: post-to-slack
        type: call
        call: slack-exec.post-message
        with:
          channel: executive-briefings
          text: 'Weekly KPI Digest ({{week_ending}}): {{generate-summary.content}}'
  consumes:
  - type: http
    namespace: snowflake-kpi
    baseUri: https://bloomberg.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: anthropic-kpi
    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: slack-exec
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → weekly-executive-kpi-dashboard-digest.yml

When Bloomberg Valuation Service detects a pricing discrepancy, creates a Jira investigation ticket, notifies the valuation team on Slack, and logs the event in Snowflake for audit.

naftiko: '0.5'
info:
  label: Bloomberg Valuation Discrepancy Alert
  description: When Bloomberg Valuation Service detects a pricing discrepancy, creates a Jira investigation ticket, notifies the valuation team on Slack, and logs the event in Snowflake for audit.
  tags:
  - financial-data
  - bloomberg-valuation-service-bval
  - jira
  - slack
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: valuation-ops
    port: 8080
    tools:
    - name: handle-valuation-discrepancy
      description: Given a BVAL pricing discrepancy, create a Jira ticket, alert the valuation team, and log to Snowflake.
      inputParameters:
      - name: security_id
        in: body
        type: string
        description: The security identifier with the discrepancy.
      - name: expected_price
        in: body
        type: string
        description: The expected price.
      - name: actual_price
        in: body
        type: string
        description: The actual Bloomberg BVAL price.
      steps:
      - name: create-ticket
        type: call
        call: jira-val.create-issue
        with:
          project: VAL
          summary: 'BVAL discrepancy: {{security_id}} (expected: {{expected_price}}, actual: {{actual_price}})'
          description: 'Security: {{security_id}}. Expected: {{expected_price}}. BVAL: {{actual_price}}.'
          priority: High
      - name: notify-team
        type: call
        call: slack-val.post-message
        with:
          channel: valuation-team
          text: 'BVAL discrepancy: {{security_id}}. Expected: {{expected_price}}, Actual: {{actual_price}}. Jira: {{create-ticket.key}}'
      - name: log-audit
        type: call
        call: snowflake-val.insert-rows
        with:
          table: BLOOMBERG.AUDIT.VALUATION_DISCREPANCIES
          data: '{"security": "{{security_id}}", "expected": "{{expected_price}}", "actual": "{{actual_price}}", "jira": "{{create-ticket.key}}"}'
  consumes:
  - type: http
    namespace: jira-val
    baseUri: https://bloomberg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-val
    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: snowflake-val
    baseUri: https://bloomberg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: rows
      path: /databases/bloomberg/schemas/audit/tables/valuation_discrepancies/insertRows
      operations:
      - name: insert-rows
        method: POST
Open in Framework → View in Fleet → bloomberg-valuation-discrepancy-alert.yml

When a Salesforce opportunity is marked as Closed-Won, triggers a welcome email via HubSpot, creates an onboarding project in Jira, and notifies the account team on Slack.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Closure Workflow
  description: When a Salesforce opportunity is marked as Closed-Won, triggers a welcome email via HubSpot, creates an onboarding project in Jira, and notifies the account team on Slack.
  tags:
  - crm
  - salesforce
  - hubspot
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: deal-ops
    port: 8080
    tools:
    - name: process-opportunity-closure
      description: Given a closed-won Salesforce opportunity, trigger client onboarding via HubSpot, Jira, and Slack.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID.
      - name: account_name
        in: body
        type: string
        description: The account name for the closed deal.
      - name: deal_value
        in: body
        type: string
        description: The deal value.
      steps:
      - name: send-welcome
        type: call
        call: hubspot-onboard.send-email
        with:
          template: client-welcome
          account: '{{account_name}}'
      - name: create-onboarding-project
        type: call
        call: jira-onboard.create-issue
        with:
          project: ONBOARD
          summary: 'Client onboarding: {{account_name}}'
          description: 'Opportunity: {{opportunity_id}}. Value: {{deal_value}}.'
          issue_type: Epic
      - name: notify-team
        type: call
        call: slack-deals.post-message
        with:
          channel: deal-wins
          text: 'Closed-Won: {{account_name}} ({{deal_value}}). Onboarding started. Jira: {{create-onboarding-project.key}}'
  consumes:
  - type: http
    namespace: hubspot-onboard
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: emails
      path: /marketing/v3/transactional/single-email/send
      operations:
      - name: send-email
        method: POST
  - type: http
    namespace: jira-onboard
    baseUri: https://bloomberg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-deals
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-opportunity-closure-workflow.yml

Creates a vendor record in SAP, provisions access in Okta, creates an onboarding checklist in Jira, and notifies procurement on Slack.

naftiko: '0.5'
info:
  label: New Vendor Onboarding Orchestrator
  description: Creates a vendor record in SAP, provisions access in Okta, creates an onboarding checklist in Jira, and notifies procurement on Slack.
  tags:
  - procurement
  - sap
  - okta
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: vendor-onboard
    port: 8080
    tools:
    - name: onboard-new-vendor
      description: Given vendor details, create SAP record, provision Okta access, create Jira checklist, and notify procurement.
      inputParameters:
      - name: vendor_name
        in: body
        type: string
        description: The vendor company name.
      - name: contact_email
        in: body
        type: string
        description: The vendor primary contact email.
      - name: service_category
        in: body
        type: string
        description: The vendor service category.
      steps:
      - name: create-sap-vendor
        type: call
        call: sap-vendor.create-business-partner
        with:
          name: '{{vendor_name}}'
          email: '{{contact_email}}'
          category: '{{service_category}}'
      - name: provision-access
        type: call
        call: okta-vendor.create-user
        with:
          email: '{{contact_email}}'
          group: external-vendors
      - name: create-checklist
        type: call
        call: jira-vendor.create-issue
        with:
          project: PROC
          summary: 'Vendor onboarding: {{vendor_name}}'
          description: 'Contact: {{contact_email}}. Category: {{service_category}}. SAP: {{create-sap-vendor.vendor_id}}'
          issue_type: Task
      - name: notify-procurement
        type: call
        call: slack-vendor.post-message
        with:
          channel: procurement
          text: 'New vendor onboarded: {{vendor_name}} ({{service_category}}). SAP: {{create-sap-vendor.vendor_id}}. Jira: {{create-checklist.key}}'
  consumes:
  - type: http
    namespace: sap-vendor
    baseUri: https://sap.bloomberg.com/sap/opu/odata/sap
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: partners
      path: /API_BUSINESS_PARTNER/A_BusinessPartner
      operations:
      - name: create-business-partner
        method: POST
  - type: http
    namespace: okta-vendor
    baseUri: https://bloomberg.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: users
      path: /users
      operations:
      - name: create-user
        method: POST
  - type: http
    namespace: jira-vendor
    baseUri: https://bloomberg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-vendor
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → new-vendor-onboarding-orchestrator.yml

Monitors Bloomberg Tax for upcoming filing deadlines, creates Jira tasks for each deadline, and sends reminders to the tax team via Slack.

naftiko: '0.5'
info:
  label: Bloomberg Tax Filing Deadline Tracker
  description: Monitors Bloomberg Tax for upcoming filing deadlines, creates Jira tasks for each deadline, and sends reminders to the tax team via Slack.
  tags:
  - compliance
  - bloomberg-tax-btax
  - jira
  - slack
  - tax
capability:
  exposes:
  - type: mcp
    namespace: tax-ops
    port: 8080
    tools:
    - name: track-tax-deadlines
      description: Given a jurisdiction and date range, retrieve Bloomberg Tax filing deadlines, create Jira tasks, and notify the tax team.
      inputParameters:
      - name: jurisdiction
        in: body
        type: string
        description: The tax jurisdiction, e.g. 'US-Federal'.
      - name: days_ahead
        in: body
        type: string
        description: Number of days ahead to look for deadlines.
      steps:
      - name: get-deadlines
        type: call
        call: btax-deadlines.get-upcoming
        with:
          jurisdiction: '{{jurisdiction}}'
          days: '{{days_ahead}}'
      - name: create-tasks
        type: call
        call: jira-tax.create-issue
        with:
          project: TAX
          summary: 'Tax filing deadline: {{jurisdiction}} - {{get-deadlines.next_deadline}}'
          description: 'Deadline: {{get-deadlines.next_deadline}}. Filing: {{get-deadlines.filing_type}}'
          priority: High
      - name: notify-team
        type: call
        call: slack-tax.post-message
        with:
          channel: tax-compliance
          text: 'Upcoming tax deadline: {{jurisdiction}} - {{get-deadlines.filing_type}} due {{get-deadlines.next_deadline}}. Jira: {{create-tasks.key}}'
  consumes:
  - type: http
    namespace: btax-deadlines
    baseUri: https://api.tax.bloomberg.com/v1
    authentication:
      type: bearer
      token: $secrets.btax_token
    resources:
    - name: deadlines
      path: /deadlines
      operations:
      - name: get-upcoming
        method: GET
  - type: http
    namespace: jira-tax
    baseUri: https://bloomberg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-tax
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → bloomberg-tax-filing-deadline-tracker.yml

Queries SAP for budget and actuals data by cost center, computes variance, and publishes a formatted Power BI dataset and Slack summary for finance leadership.

naftiko: '0.5'
info:
  label: SAP Budget vs Actuals Variance Report
  description: Queries SAP for budget and actuals data by cost center, computes variance, and publishes a formatted Power BI dataset and Slack summary for finance leadership.
  tags:
  - finance
  - erp
  - sap
  - reporting
  - budgeting
capability:
  exposes:
  - type: mcp
    namespace: finance-reporting
    port: 8080
    tools:
    - name: publish-budget-variance
      description: Given a SAP controlling area and fiscal period, retrieve budget and actuals by cost center, calculate variance percentages, and post a summary to the finance Slack channel. Use monthly for budget review cycles.
      inputParameters:
      - name: controlling_area
        in: body
        type: string
        description: The SAP controlling area code, e.g. '1000'.
      - name: fiscal_period
        in: body
        type: string
        description: The fiscal period in YYYYMM format, e.g. '202603'.
      steps:
      - name: get-actuals
        type: call
        call: sap.get-cost-center-actuals
        with:
          controlling_area: '{{controlling_area}}'
          period: '{{fiscal_period}}'
      - name: post-finance-summary
        type: call
        call: slack.post-message
        with:
          channel: finance-leadership
          text: 'Budget variance report for period {{fiscal_period}}: Total actuals {{get-actuals.total_actual}}, budget {{get-actuals.total_budget}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://bloomberg-s4.sap.com/sap/opu/odata/sap/FCO_PI_CONTROLLING_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: cost-center-actuals
      path: /CostCenterActualsSet
      operations:
      - name: get-cost-center-actuals
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → sap-budget-vs-actuals-variance-report.yml

Monitors Tableau dashboard last refresh times, and when data is stale beyond threshold, creates a Jira ticket and notifies the dashboard owner on Slack.

naftiko: '0.5'
info:
  label: Tableau Dashboard Stale Data Alert
  description: Monitors Tableau dashboard last refresh times, and when data is stale beyond threshold, creates a Jira ticket and notifies the dashboard owner on Slack.
  tags:
  - analytics
  - tableau
  - jira
  - slack
  - data-freshness
capability:
  exposes:
  - type: mcp
    namespace: dashboard-ops
    port: 8080
    tools:
    - name: alert-stale-dashboard
      description: Given a Tableau workbook ID with stale data, create a Jira ticket and notify the owner via Slack.
      inputParameters:
      - name: workbook_id
        in: body
        type: string
        description: The Tableau workbook ID.
      - name: last_refresh
        in: body
        type: string
        description: The last refresh timestamp.
      - name: owner_email
        in: body
        type: string
        description: Email of the dashboard owner.
      steps:
      - name: create-ticket
        type: call
        call: jira-dash.create-issue
        with:
          project: BI
          summary: 'Stale dashboard data: workbook {{workbook_id}}'
          description: 'Last refresh: {{last_refresh}}. Owner: {{owner_email}}.'
          priority: Medium
      - name: notify-owner
        type: call
        call: slack-dash.post-message
        with:
          channel: bi-alerts
          text: 'Dashboard {{workbook_id}} has stale data (last refresh: {{last_refresh}}). Jira: {{create-ticket.key}}. Please investigate.'
  consumes:
  - type: http
    namespace: jira-dash
    baseUri: https://bloomberg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-dash
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → tableau-dashboard-stale-data-alert.yml

Monitors Snowflake for long-running queries exceeding execution thresholds and alerts the data platform team in Slack with query details and user attribution.

naftiko: '0.5'
info:
  label: Snowflake Query Performance Monitor
  description: Monitors Snowflake for long-running queries exceeding execution thresholds and alerts the data platform team in Slack with query details and user attribution.
  tags:
  - data
  - analytics
  - snowflake
  - slack
  - monitoring
  - performance
capability:
  exposes:
  - type: mcp
    namespace: data-monitoring
    port: 8080
    tools:
    - name: monitor-query-performance
      description: Query Snowflake's QUERY_HISTORY view for executions exceeding a given duration threshold in the past hour, and post a Slack alert listing offending queries and users. Use for scheduled data platform health monitoring.
      inputParameters:
      - name: threshold_seconds
        in: body
        type: integer
        description: The execution time threshold in seconds; queries exceeding this will be reported.
      steps:
      - name: get-slow-queries
        type: call
        call: snowflake.query-history
        with:
          threshold: '{{threshold_seconds}}'
      - name: post-alert
        type: call
        call: slack.post-message
        with:
          channel: data-platform-ops
          text: 'Slow query alert: {{get-slow-queries.count}} queries exceeded {{threshold_seconds}}s in the last hour.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bloomberg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: query-history
      path: /databases/snowflake/schemas/account_usage/tables/query_history/rows
      operations:
      - name: query-history
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → snowflake-query-performance-monitor.yml

When a hiring manager approves a new headcount request in Workday, creates a linked Greenhouse job requisition and posts it to LinkedIn.

naftiko: '0.5'
info:
  label: Open Role Requisition Creator
  description: When a hiring manager approves a new headcount request in Workday, creates a linked Greenhouse job requisition and posts it to LinkedIn.
  tags:
  - hr
  - recruiting
  - workday
  - greenhouse
  - linkedin
capability:
  exposes:
  - type: mcp
    namespace: recruiting
    port: 8080
    tools:
    - name: create-requisition
      description: Given a department, role title, level, and hiring manager Workday ID, create a Greenhouse job requisition and post the opening to LinkedIn. Invoke when a headcount request has been approved.
      inputParameters:
      - name: role_title
        in: body
        type: string
        description: The job title for the open role, e.g. 'Senior Software Engineer'.
      - name: department
        in: body
        type: string
        description: The Bloomberg department code, e.g. 'BTECH-CORE'.
      - name: hiring_manager_id
        in: body
        type: string
        description: The Workday worker ID of the hiring manager.
      steps:
      - name: get-manager
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{hiring_manager_id}}'
      - name: create-job
        type: call
        call: greenhouse.create-job
        with:
          title: '{{role_title}}'
          department: '{{department}}'
          hiring_manager_name: '{{get-manager.full_name}}'
      - name: post-to-linkedin
        type: call
        call: linkedin.create-job-posting
        with:
          job_id: '{{create-job.id}}'
          title: '{{role_title}}'
          company_id: $secrets.bloomberg_linkedin_company_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: /bloomberg/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: greenhouse
    baseUri: https://harvest.greenhouse.io/v1
    authentication:
      type: basic
      username: $secrets.greenhouse_api_key
      password: ''
    resources:
    - name: jobs
      path: /jobs
      operations:
      - name: create-job
        method: POST
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: job-postings
      path: /jobPostings
      operations:
      - name: create-job-posting
        method: POST
Open in Framework → View in Fleet → open-role-requisition-creator.yml

Returns current headcount by department and cost center from Workday, formatted for finance reporting and headcount planning.

naftiko: '0.5'
info:
  label: Payroll Headcount Snapshot
  description: Returns current headcount by department and cost center from Workday, formatted for finance reporting and headcount planning.
  tags:
  - hr
  - finance
  - workday
  - reporting
  - headcount
capability:
  exposes:
  - type: mcp
    namespace: hr-reporting
    port: 8080
    tools:
    - name: get-headcount-snapshot
      description: Returns a list of all active employees grouped by department and cost center from Workday. Use for headcount planning, finance reporting, and cost center analysis.
      call: workday.list-workers
      outputParameters:
      - name: employees
        type: array
        mapping: $.data[*]
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /bloomberg/workers
      operations:
      - name: list-workers
        method: GET
Open in Framework → View in Fleet → payroll-headcount-snapshot.yml

Monitors Bloomberg Instant Messaging for compliance keywords, flags messages for review, creates Jira compliance tickets, and alerts the compliance team on Slack.

naftiko: '0.5'
info:
  label: Bloomberg Instant Messaging Compliance Monitor
  description: Monitors Bloomberg Instant Messaging for compliance keywords, flags messages for review, creates Jira compliance tickets, and alerts the compliance team on Slack.
  tags:
  - compliance
  - bloomberg-instant-messaging
  - jira
  - slack
  - surveillance
capability:
  exposes:
  - type: mcp
    namespace: msg-compliance
    port: 8080
    tools:
    - name: flag-compliance-message
      description: Given a flagged Bloomberg IB message, create a Jira compliance ticket and alert the compliance team.
      inputParameters:
      - name: message_id
        in: body
        type: string
        description: The Bloomberg IB message ID.
      - name: keyword_matched
        in: body
        type: string
        description: The compliance keyword that was matched.
      - name: sender
        in: body
        type: string
        description: The message sender identifier.
      steps:
      - name: create-compliance-ticket
        type: call
        call: jira-comp.create-issue
        with:
          project: COMPLIANCE
          summary: 'IB message flagged: keyword ''{{keyword_matched}}'' from {{sender}}'
          description: 'Message ID: {{message_id}}. Keyword: {{keyword_matched}}. Sender: {{sender}}'
          priority: High
      - name: alert-compliance
        type: call
        call: slack-comp.post-message
        with:
          channel: compliance-surveillance
          text: 'Flagged IB message: {{sender}} triggered keyword ''{{keyword_matched}}''. Jira: {{create-compliance-ticket.key}}'
  consumes:
  - type: http
    namespace: jira-comp
    baseUri: https://bloomberg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-comp
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → bloomberg-instant-messaging-compliance-monitor.yml

Fetches current SLO compliance metrics from Datadog for all production services and publishes a compliance summary to the engineering Confluence space.

naftiko: '0.5'
info:
  label: Datadog SLO Compliance Report
  description: Fetches current SLO compliance metrics from Datadog for all production services and publishes a compliance summary to the engineering Confluence space.
  tags:
  - observability
  - datadog
  - confluence
  - reporting
  - slo
capability:
  exposes:
  - type: mcp
    namespace: slo-reporting
    port: 8080
    tools:
    - name: publish-slo-report
      description: Fetch all SLO compliance metrics from Datadog for production services and publish a structured compliance report to Confluence. Use weekly before reliability review meetings.
      inputParameters:
      - name: confluence_page_id
        in: body
        type: string
        description: The Confluence page ID where the SLO report will be updated.
      steps:
      - name: get-slos
        type: call
        call: datadog.list-slos
        with:
          tags: env:production
      - name: update-report
        type: call
        call: confluence.update-page
        with:
          page_id: '{{confluence_page_id}}'
          content: 'SLO Report: {{get-slos.count}} SLOs in scope.'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: slos
      path: /slo
      operations:
      - name: list-slos
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://bloomberg.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: pages
      path: /content/{{page_id}}
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: update-page
        method: PUT
Open in Framework → View in Fleet → datadog-slo-compliance-report.yml

Analyzes Bloomberg Terminal usage from enterprise data, identifies underutilized licenses, generates a reallocation recommendation via Anthropic, and notifies stakeholders on Slack.

naftiko: '0.5'
info:
  label: Bloomberg Terminal License Optimization
  description: Analyzes Bloomberg Terminal usage from enterprise data, identifies underutilized licenses, generates a reallocation recommendation via Anthropic, and notifies stakeholders on Slack.
  tags:
  - licensing
  - bloomberg-terminal
  - bloomberg-enterprise
  - anthropic
  - cost-management
capability:
  exposes:
  - type: mcp
    namespace: license-ops
    port: 8080
    tools:
    - name: optimize-terminal-licenses
      description: Analyze Bloomberg Terminal usage, identify underutilized licenses, and recommend reallocations.
      inputParameters:
      - name: usage_period
        in: body
        type: string
        description: Usage period to analyze, e.g. 'Q1-2026'.
      steps:
      - name: get-usage
        type: call
        call: bbg-enterprise.get-terminal-usage
        with:
          period: '{{usage_period}}'
      - name: analyze-usage
        type: call
        call: anthropic-license.create-message
        with:
          model: claude-opus-4-5
          max_tokens: 2048
          system: You are a Bloomberg Terminal license optimization specialist. Identify underutilized licenses and recommend reallocations.
          content: 'Analyze this Terminal usage data and recommend optimizations: {{get-usage.data}}'
      - name: notify-stakeholders
        type: call
        call: slack-license.post-message
        with:
          channel: vendor-management
          text: 'Bloomberg Terminal license review for {{usage_period}} complete. Recommendations: {{analyze-usage.content}}'
  consumes:
  - type: http
    namespace: bbg-enterprise
    baseUri: https://api.bloomberg.com/enterprise/v1
    authentication:
      type: apikey
      key: X-Bloomberg-Key
      value: $secrets.bloomberg_enterprise_key
      placement: header
    resources:
    - name: usage
      path: /terminal/usage
      operations:
      - name: get-terminal-usage
        method: GET
  - type: http
    namespace: anthropic-license
    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: slack-license
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → bloomberg-terminal-license-optimization.yml

Aggregates customer feedback from Salesforce cases, analyzes themes and sentiment via Anthropic Claude, and publishes a weekly insights report to Confluence.

naftiko: '0.5'
info:
  label: Customer Feedback Analysis Pipeline
  description: Aggregates customer feedback from Salesforce cases, analyzes themes and sentiment via Anthropic Claude, and publishes a weekly insights report to Confluence.
  tags:
  - customer-experience
  - salesforce
  - anthropic
  - confluence
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: feedback-ops
    port: 8080
    tools:
    - name: analyze-customer-feedback
      description: Aggregate Salesforce cases, analyze feedback sentiment and themes via Anthropic, and publish insights to Confluence.
      inputParameters:
      - name: date_range
        in: body
        type: string
        description: The date range for feedback analysis, e.g. 'last_7_days'.
      steps:
      - name: get-cases
        type: call
        call: sf-feedback.query-cases
        with:
          query: SELECT Subject, Description, CreatedDate FROM Case WHERE CreatedDate = LAST_N_DAYS:7
      - name: analyze-themes
        type: call
        call: anthropic-feedback.create-message
        with:
          model: claude-opus-4-5
          max_tokens: 4096
          system: You are a customer experience analyst. Identify themes, sentiment trends, and actionable insights from customer feedback.
          content: 'Analyze these customer cases from the past week: {{get-cases.records}}'
      - name: publish-report
        type: call
        call: confluence-feedback.create-page
        with:
          space: CX
          title: Weekly Customer Feedback Report - {{date_range}}
          body: '{{analyze-themes.content}}'
  consumes:
  - type: http
    namespace: sf-feedback
    baseUri: https://bloomberg.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query
      operations:
      - name: query-cases
        method: GET
  - type: http
    namespace: anthropic-feedback
    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: confluence-feedback
    baseUri: https://bloomberg.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → customer-feedback-analysis-pipeline.yml

When a new compliance training course is published in Workday Learning, enrolls all eligible employees and sends reminders via Slack and Microsoft Teams.

naftiko: '0.5'
info:
  label: Compliance Training Enrollment Notifier
  description: When a new compliance training course is published in Workday Learning, enrolls all eligible employees and sends reminders via Slack and Microsoft Teams.
  tags:
  - compliance
  - workday
  - slack
  - microsoft-teams
  - training
capability:
  exposes:
  - type: mcp
    namespace: compliance-ops
    port: 8080
    tools:
    - name: notify-compliance-training
      description: Given a Workday Learning course ID, enroll eligible employees and send notifications via Slack and Teams.
      inputParameters:
      - name: course_id
        in: body
        type: string
        description: The Workday Learning course ID.
      - name: department
        in: body
        type: string
        description: Target department for enrollment.
      steps:
      - name: get-eligible
        type: call
        call: workday-learn.get-eligible-workers
        with:
          course_id: '{{course_id}}'
          department: '{{department}}'
      - name: notify-slack
        type: call
        call: slack-compliance.post-message
        with:
          channel: compliance-training
          text: 'New mandatory training: Course {{course_id}} assigned to {{department}}. {{get-eligible.count}} employees enrolled. Deadline: 30 days.'
      - name: notify-teams
        type: call
        call: teams-compliance.post-channel-message
        with:
          channel_id: compliance-announcements
          text: 'Compliance Training Alert: Course {{course_id}} is now available for {{department}}. Please complete within 30 days.'
  consumes:
  - type: http
    namespace: workday-learn
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1/bloomberg
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: courses
      path: /learning/courses/{{course_id}}/eligible
      inputParameters:
      - name: course_id
        in: path
      operations:
      - name: get-eligible-workers
        method: GET
  - type: http
    namespace: slack-compliance
    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: teams-compliance
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{team_id}/channels/{channel_id}/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → compliance-training-enrollment-notifier.yml

Fetches all users assigned to a specific Okta application and generates a Confluence access review report for compliance auditing.

naftiko: '0.5'
info:
  label: Okta User Access Review
  description: Fetches all users assigned to a specific Okta application and generates a Confluence access review report for compliance auditing.
  tags:
  - identity
  - security
  - okta
  - confluence
  - compliance
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: identity-compliance
    port: 8080
    tools:
    - name: run-access-review
      description: Given an Okta application ID and Confluence page ID, fetch all users assigned to the application and update the Confluence access review page with current membership. Use for quarterly access reviews and compliance audits.
      inputParameters:
      - name: okta_app_id
        in: body
        type: string
        description: The Okta application ID to review, e.g. '0oa1b2c3d4e5f6g7h8i9'.
      - name: confluence_page_id
        in: body
        type: string
        description: The Confluence page ID where the access review report will be published.
      steps:
      - name: list-app-users
        type: call
        call: okta.list-app-users
        with:
          app_id: '{{okta_app_id}}'
      - name: update-report
        type: call
        call: confluence.update-page
        with:
          page_id: '{{confluence_page_id}}'
          content: 'Access review for app {{okta_app_id}}: {{list-app-users.count}} users as of today.'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://bloomberg.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: app-users
      path: /apps/{{app_id}}/users
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: list-app-users
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://bloomberg.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: pages
      path: /content/{{page_id}}
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: update-page
        method: PUT
Open in Framework → View in Fleet → okta-user-access-review.yml

Retrieves the latest Bloomberg Economics forecast data, generates an analyst brief via Anthropic Claude, and distributes via Slack and Confluence to the research team.

naftiko: '0.5'
info:
  label: Bloomberg Economics Forecast Distributor
  description: Retrieves the latest Bloomberg Economics forecast data, generates an analyst brief via Anthropic Claude, and distributes via Slack and Confluence to the research team.
  tags:
  - economics
  - bloomberg-economics
  - anthropic
  - slack
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: econ-ops
    port: 8080
    tools:
    - name: distribute-economics-forecast
      description: Retrieve Bloomberg Economics forecasts, generate an analyst brief, and distribute to the research team.
      inputParameters:
      - name: indicator
        in: body
        type: string
        description: The economic indicator, e.g. 'GDP', 'CPI', 'unemployment'.
      - name: region
        in: body
        type: string
        description: The region, e.g. 'US', 'EU', 'Global'.
      steps:
      - name: get-forecast
        type: call
        call: bbg-econ.get-forecast
        with:
          indicator: '{{indicator}}'
          region: '{{region}}'
      - name: generate-brief
        type: call
        call: anthropic-econ.create-message
        with:
          model: claude-opus-4-5
          max_tokens: 2048
          system: You are a macroeconomist. Write a concise analyst brief on the latest economic forecast data.
          content: 'Generate an analyst brief for {{region}} {{indicator}} forecast: {{get-forecast.data}}'
      - name: distribute
        type: call
        call: slack-econ.post-message
        with:
          channel: economics-research
          text: 'Economics Forecast Update: {{region}} {{indicator}}. {{generate-brief.content}}'
  consumes:
  - type: http
    namespace: bbg-econ
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/data
    authentication:
      type: bearer
      token: $secrets.bloomberg_data_token
    resources:
    - name: forecasts
      path: /economics/forecasts
      operations:
      - name: get-forecast
        method: GET
  - type: http
    namespace: anthropic-econ
    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: slack-econ
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → bloomberg-economics-forecast-distributor.yml

When a Grafana alert fires, looks up the associated runbook in Confluence, posts the relevant remediation steps to Slack, and creates a ServiceNow incident.

naftiko: '0.5'
info:
  label: Grafana Alert to Runbook Executor
  description: When a Grafana alert fires, looks up the associated runbook in Confluence, posts the relevant remediation steps to Slack, and creates a ServiceNow incident.
  tags:
  - observability
  - grafana
  - confluence
  - slack
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: runbook-ops
    port: 8080
    tools:
    - name: execute-runbook-for-alert
      description: Given a Grafana alert, find the Confluence runbook, post remediation steps to Slack, and create a ServiceNow incident.
      inputParameters:
      - name: alert_name
        in: body
        type: string
        description: The Grafana alert rule name.
      - name: runbook_page_id
        in: body
        type: string
        description: The Confluence runbook page ID.
      steps:
      - name: get-runbook
        type: call
        call: confluence-rb.get-page
        with:
          page_id: '{{runbook_page_id}}'
      - name: post-remediation
        type: call
        call: slack-rb.post-message
        with:
          channel: sre-incidents
          text: 'Alert: {{alert_name}}. Runbook: {{get-runbook.title}}. Steps: {{get-runbook.body}}'
      - name: create-incident
        type: call
        call: snow-rb.create-incident
        with:
          short_description: 'Grafana alert: {{alert_name}}'
          description: 'Runbook: {{get-runbook.title}}. Auto-posted to #sre-incidents.'
  consumes:
  - type: http
    namespace: confluence-rb
    baseUri: https://bloomberg.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: slack-rb
    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: snow-rb
    baseUri: https://bloomberg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → grafana-alert-to-runbook-executor.yml

Queries Snowflake credit usage, identifies top-spending warehouses, generates a cost optimization report via Anthropic, and publishes to Confluence.

naftiko: '0.5'
info:
  label: Snowflake Cost Optimization Report
  description: Queries Snowflake credit usage, identifies top-spending warehouses, generates a cost optimization report via Anthropic, and publishes to Confluence.
  tags:
  - cost-management
  - snowflake
  - anthropic
  - confluence
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: cost-ops
    port: 8080
    tools:
    - name: generate-cost-report
      description: Query Snowflake credit usage, generate optimization recommendations via Anthropic, and publish to Confluence.
      inputParameters:
      - name: time_period
        in: body
        type: string
        description: The time period to analyze, e.g. 'last_30_days'.
      steps:
      - name: query-usage
        type: call
        call: snowflake-cost.execute-query
        with:
          query: SELECT warehouse_name, SUM(credits_used) FROM snowflake.account_usage.warehouse_metering_history WHERE start_time > DATEADD(day, -30, CURRENT_TIMESTAMP()) GROUP BY 1 ORDER BY 2 DESC
      - name: generate-recommendations
        type: call
        call: anthropic-cost.create-message
        with:
          model: claude-opus-4-5
          max_tokens: 2048
          system: You are a cloud cost optimization expert. Analyze Snowflake usage and provide actionable recommendations.
          content: 'Analyze this Snowflake credit usage and suggest optimizations: {{query-usage.data}}'
      - name: publish-report
        type: call
        call: confluence-cost.create-page
        with:
          space: FINOPS
          title: Snowflake Cost Optimization Report - {{time_period}}
          body: '{{generate-recommendations.content}}'
  consumes:
  - type: http
    namespace: snowflake-cost
    baseUri: https://bloomberg.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: anthropic-cost
    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: confluence-cost
    baseUri: https://bloomberg.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → snowflake-cost-optimization-report.yml

When Terraform detects infrastructure drift, creates a Jira remediation ticket, posts the drift diff to Slack, and opens a ServiceNow change request for re-alignment.

naftiko: '0.5'
info:
  label: Infrastructure Drift Detection Response
  description: When Terraform detects infrastructure drift, creates a Jira remediation ticket, posts the drift diff to Slack, and opens a ServiceNow change request for re-alignment.
  tags:
  - infrastructure
  - terraform
  - jira
  - slack
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: drift-ops
    port: 8080
    tools:
    - name: handle-drift-detection
      description: Given a Terraform workspace with drift, create a Jira ticket, notify Slack, and open a ServiceNow change request.
      inputParameters:
      - name: workspace_name
        in: body
        type: string
        description: The Terraform workspace with detected drift.
      - name: drift_summary
        in: body
        type: string
        description: Summary of the infrastructure drift detected.
      steps:
      - name: create-ticket
        type: call
        call: jira-infra.create-issue
        with:
          project: INFRA
          summary: 'Infrastructure drift: {{workspace_name}}'
          description: '{{drift_summary}}'
          priority: High
      - name: notify-team
        type: call
        call: slack-infra.post-message
        with:
          channel: infrastructure-alerts
          text: 'Drift detected in {{workspace_name}}: {{drift_summary}}. Jira: {{create-ticket.key}}'
      - name: create-change
        type: call
        call: snow-infra.create-change
        with:
          short_description: 'Remediate drift: {{workspace_name}}'
          description: 'Drift: {{drift_summary}}. Jira: {{create-ticket.key}}'
          type: standard
  consumes:
  - type: http
    namespace: jira-infra
    baseUri: https://bloomberg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-infra
    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: snow-infra
    baseUri: https://bloomberg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
Open in Framework → View in Fleet → infrastructure-drift-detection-response.yml

When Datadog detects an elevated SLO burn rate, creates a PagerDuty incident, opens a Jira ticket with burn rate context, and posts to the SRE Slack channel.

naftiko: '0.5'
info:
  label: Datadog SLO Burn Rate Alert Handler
  description: When Datadog detects an elevated SLO burn rate, creates a PagerDuty incident, opens a Jira ticket with burn rate context, and posts to the SRE Slack channel.
  tags:
  - reliability
  - datadog
  - pagerduty
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: slo-ops
    port: 8080
    tools:
    - name: handle-slo-burn-rate
      description: Given a Datadog SLO burn rate alert, create a PagerDuty incident, Jira ticket, and Slack notification.
      inputParameters:
      - name: slo_name
        in: body
        type: string
        description: The Datadog SLO name.
      - name: burn_rate
        in: body
        type: string
        description: The current burn rate multiplier.
      - name: remaining_budget
        in: body
        type: string
        description: The remaining error budget percentage.
      steps:
      - name: page-sre
        type: call
        call: pd-slo.create-incident
        with:
          title: 'SLO burn rate alert: {{slo_name}} at {{burn_rate}}x'
          service_id: $secrets.pagerduty_sre_service
          urgency: high
      - name: create-ticket
        type: call
        call: jira-slo.create-issue
        with:
          project: SRE
          summary: 'SLO burn rate: {{slo_name}} at {{burn_rate}}x ({{remaining_budget}}% budget remaining)'
          priority: Critical
      - name: alert-sre
        type: call
        call: slack-slo.post-message
        with:
          channel: sre-alerts
          text: 'SLO BURN RATE: {{slo_name}} at {{burn_rate}}x. Budget remaining: {{remaining_budget}}%. PD: {{page-sre.incident_url}}. Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: pd-slo
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: jira-slo
    baseUri: https://bloomberg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-slo
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → datadog-slo-burn-rate-alert-handler.yml

When a new Salesforce lead is created, enriches the record with firmographic data from ZoomInfo and updates the lead score, then routes to the correct sales development representative.

naftiko: '0.5'
info:
  label: Salesforce New Lead Enrichment
  description: When a new Salesforce lead is created, enriches the record with firmographic data from ZoomInfo and updates the lead score, then routes to the correct sales development representative.
  tags:
  - crm
  - sales
  - salesforce
  - zoominfo
  - lead-management
capability:
  exposes:
  - type: mcp
    namespace: lead-enrichment
    port: 8080
    tools:
    - name: enrich-new-lead
      description: Given a Salesforce lead ID, look up the company and contact in ZoomInfo to get firmographic data, update the Salesforce lead with enriched fields, and assign to the appropriate SDR. Use when a new inbound lead is created.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: The Salesforce Lead ID (18-character).
      steps:
      - name: get-lead
        type: call
        call: salesforce.get-lead
        with:
          lead_id: '{{lead_id}}'
      - name: enrich-company
        type: call
        call: zoominfo.search-company
        with:
          name: '{{get-lead.Company}}'
          domain: '{{get-lead.Website}}'
      - name: update-lead
        type: call
        call: salesforce-update.update-lead
        with:
          lead_id: '{{lead_id}}'
          NumberOfEmployees: '{{enrich-company.employeeCount}}'
          AnnualRevenue: '{{enrich-company.revenue}}'
          Industry: '{{enrich-company.industry}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://bloomberg.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: get-lead
        method: GET
  - type: http
    namespace: zoominfo
    baseUri: https://api.zoominfo.com/search
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: company-search
      path: /company
      operations:
      - name: search-company
        method: POST
  - type: http
    namespace: salesforce-update
    baseUri: https://bloomberg.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: lead-update
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: update-lead
        method: PATCH
Open in Framework → View in Fleet → salesforce-new-lead-enrichment.yml

On a new pull request in GitHub, triggers a Veracode static analysis scan and posts results back as a PR comment; blocks merge if critical vulnerabilities are found.

naftiko: '0.5'
info:
  label: GitHub Pull Request Security Scan Gate
  description: On a new pull request in GitHub, triggers a Veracode static analysis scan and posts results back as a PR comment; blocks merge if critical vulnerabilities are found.
  tags:
  - devops
  - security
  - github
  - veracode
  - code-quality
capability:
  exposes:
  - type: mcp
    namespace: security-scanning
    port: 8080
    tools:
    - name: scan-pull-request
      description: Given a GitHub repository and pull request number, trigger a Veracode SAST scan and post the findings as a PR review comment. Use when a PR targets main or release branches.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository full name, e.g. 'bloomberg/bde'.
      - name: pr_number
        in: body
        type: integer
        description: The GitHub pull request number.
      - name: commit_sha
        in: body
        type: string
        description: The HEAD commit SHA of the pull request.
      steps:
      - name: trigger-scan
        type: call
        call: veracode.create-scan
        with:
          repo: '{{repo}}'
          ref: '{{commit_sha}}'
      - name: post-pr-comment
        type: call
        call: github.create-pr-review
        with:
          repo: '{{repo}}'
          pull_number: '{{pr_number}}'
          commit_id: '{{commit_sha}}'
          body: 'Veracode scan {{trigger-scan.scan_id}} complete. Findings: {{trigger-scan.finding_count}}. Status: {{trigger-scan.policy_compliance_status}}'
  consumes:
  - type: http
    namespace: veracode
    baseUri: https://analysiscenter.veracode.com/api/5.0
    authentication:
      type: basic
      username: $secrets.veracode_api_id
      password: $secrets.veracode_api_key
    resources:
    - name: scans
      path: /createbuild.do
      operations:
      - name: create-scan
        method: POST
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: pull-request-reviews
      path: /repos/{{repo}}/pulls/{{pull_number}}/reviews
      inputParameters:
      - name: repo
        in: path
      - name: pull_number
        in: path
      operations:
      - name: create-pr-review
        method: POST
Open in Framework → View in Fleet → github-pull-request-security-scan-gate.yml

Fetches key account health metrics from Salesforce CRM for a given client, enriches with recent news from Bloomberg Terminal API, and delivers a briefing to the account manager via Slack.

naftiko: '0.5'
info:
  label: Salesforce Account Health Digest
  description: Fetches key account health metrics from Salesforce CRM for a given client, enriches with recent news from Bloomberg Terminal API, and delivers a briefing to the account manager via Slack.
  tags:
  - crm
  - sales
  - salesforce
  - slack
  - reporting
  - account-management
capability:
  exposes:
  - type: mcp
    namespace: crm-reporting
    port: 8080
    tools:
    - name: digest-account-health
      description: Given a Salesforce account ID, retrieve account health data including open opportunities and recent activity, then post an account briefing to the responsible account manager's Slack DM. Use before client meetings or for weekly account reviews.
      inputParameters:
      - name: salesforce_account_id
        in: body
        type: string
        description: The Salesforce Account ID (18-character), e.g. '0010000000ABcDEFGH'.
      - name: account_manager_slack_id
        in: body
        type: string
        description: The Slack user ID of the account manager to receive the briefing.
      steps:
      - name: get-account
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{salesforce_account_id}}'
      - name: get-opportunities
        type: call
        call: salesforce-opps.list-opportunities
        with:
          account_id: '{{salesforce_account_id}}'
      - name: post-briefing
        type: call
        call: slack.post-dm
        with:
          user_id: '{{account_manager_slack_id}}'
          text: 'Account brief for {{get-account.Name}}: {{get-opportunities.count}} open opportunities totaling ${{get-opportunities.total_amount}}. Last activity: {{get-account.LastActivityDate}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://bloomberg.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: salesforce-opps
    baseUri: https://bloomberg.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity
      operations:
      - name: list-opportunities
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: dm-messages
      path: /chat.postMessage
      operations:
      - name: post-dm
        method: POST
Open in Framework → View in Fleet → salesforce-account-health-digest.yml

Retrieves the current active Terminal session count and license utilization from Bloomberg Enterprise for capacity reporting.

naftiko: '0.5'
info:
  label: Bloomberg Terminal Session Lookup
  description: Retrieves the current active Terminal session count and license utilization from Bloomberg Enterprise for capacity reporting.
  tags:
  - bloomberg-terminal
  - licensing
  - bloomberg-enterprise
capability:
  exposes:
  - type: mcp
    namespace: terminal-ops
    port: 8080
    tools:
    - name: get-terminal-sessions
      description: Given a date range, return active Bloomberg Terminal session counts and license usage. Use for capacity planning and compliance audits.
      inputParameters:
      - name: date_from
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: date_to
        in: body
        type: string
        description: End date in YYYY-MM-DD format.
      call: bloomberg-terminal.get-sessions
      with:
        date_from: '{{date_from}}'
        date_to: '{{date_to}}'
      outputParameters:
      - name: active_sessions
        type: integer
        mapping: $.total_active
      - name: license_utilization
        type: string
        mapping: $.utilization_pct
  consumes:
  - type: http
    namespace: bloomberg-terminal
    baseUri: https://api.bloomberg.com/enterprise/v1
    authentication:
      type: apikey
      key: X-Bloomberg-Key
      value: $secrets.bloomberg_enterprise_key
      placement: header
    resources:
    - name: sessions
      path: /terminal/sessions
      operations:
      - name: get-sessions
        method: GET
Open in Framework → View in Fleet → bloomberg-terminal-session-lookup.yml

Rotates Bloomberg API keys in HashiCorp Vault, updates the key in the Bloomberg API gateway, verifies connectivity, and notifies the platform team on Slack.

naftiko: '0.5'
info:
  label: Bloomberg API Key Rotation Orchestrator
  description: Rotates Bloomberg API keys in HashiCorp Vault, updates the key in the Bloomberg API gateway, verifies connectivity, and notifies the platform team on Slack.
  tags:
  - security
  - hashicorp-vault
  - bloomberg-apis
  - slack
  - key-management
capability:
  exposes:
  - type: mcp
    namespace: key-rotation
    port: 8080
    tools:
    - name: rotate-api-key
      description: Given a Bloomberg API key name, rotate it in Vault, update the gateway, and notify the platform team.
      inputParameters:
      - name: key_name
        in: body
        type: string
        description: The Bloomberg API key identifier to rotate.
      - name: environment
        in: body
        type: string
        description: 'Target environment: production, staging, or development.'
      steps:
      - name: rotate-vault-secret
        type: call
        call: vault-rotate.update-secret
        with:
          path: secret/bloomberg/api-keys/{{key_name}}
          environment: '{{environment}}'
      - name: update-gateway
        type: call
        call: bbg-gateway.update-key
        with:
          key_name: '{{key_name}}'
          new_key: '{{rotate-vault-secret.new_key}}'
      - name: notify-platform
        type: call
        call: slack-platform.post-message
        with:
          channel: platform-engineering
          text: 'API key rotated: {{key_name}} in {{environment}}. Vault updated. Gateway verified.'
  consumes:
  - type: http
    namespace: vault-rotate
    baseUri: https://vault.bloomberg.com/v1
    authentication:
      type: bearer
      token: $secrets.vault_token
    resources:
    - name: secrets
      path: /{{path}}
      inputParameters:
      - name: path
        in: path
      operations:
      - name: update-secret
        method: PUT
  - type: http
    namespace: bbg-gateway
    baseUri: https://api.bloomberg.com/gateway/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_gateway_token
    resources:
    - name: keys
      path: /keys/{{key_name}}
      inputParameters:
      - name: key_name
        in: path
      operations:
      - name: update-key
        method: PUT
  - type: http
    namespace: slack-platform
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → bloomberg-api-key-rotation-orchestrator.yml

When a GitHub Actions workflow fails, captures the failure log, creates a Jira bug ticket, and notifies the responsible team on Slack.

naftiko: '0.5'
info:
  label: GitHub Actions Workflow Failure Response
  description: When a GitHub Actions workflow fails, captures the failure log, creates a Jira bug ticket, and notifies the responsible team on Slack.
  tags:
  - cicd
  - github
  - jira
  - slack
  - automation
capability:
  exposes:
  - type: mcp
    namespace: gha-ops
    port: 8080
    tools:
    - name: handle-workflow-failure
      description: Given a failed GitHub Actions run, capture error details, create a Jira ticket, and notify Slack.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository name.
      - name: run_id
        in: body
        type: string
        description: The GitHub Actions workflow run ID.
      - name: workflow_name
        in: body
        type: string
        description: The workflow name.
      steps:
      - name: get-run
        type: call
        call: gh-actions.get-workflow-run
        with:
          repo: '{{repo}}'
          run_id: '{{run_id}}'
      - name: create-ticket
        type: call
        call: jira-gha.create-issue
        with:
          project: CICD
          summary: 'GHA failure: {{workflow_name}} in {{repo}}'
          description: 'Run: {{run_id}}. Status: {{get-run.conclusion}}. URL: {{get-run.html_url}}'
          priority: High
      - name: notify-team
        type: call
        call: slack-gha.post-message
        with:
          channel: cicd-alerts
          text: 'GHA failure: {{workflow_name}} in {{repo}}. Run: {{get-run.html_url}}. Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: gh-actions
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: runs
      path: /repos/{{repo}}/actions/runs/{{run_id}}
      inputParameters:
      - name: repo
        in: path
      - name: run_id
        in: path
      operations:
      - name: get-workflow-run
        method: GET
  - type: http
    namespace: jira-gha
    baseUri: https://bloomberg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-gha
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → github-actions-workflow-failure-response.yml

Provisions a new Bloomberg Enterprise Data feed by creating the Snowflake target tables, configuring the data pipeline in Databricks, and notifying stakeholders on Slack.

naftiko: '0.5'
info:
  label: Bloomberg Enterprise Data Feed Onboarding
  description: Provisions a new Bloomberg Enterprise Data feed by creating the Snowflake target tables, configuring the data pipeline in Databricks, and notifying stakeholders on Slack.
  tags:
  - data-engineering
  - bloomberg-enterprise-data
  - snowflake
  - databricks
  - slack
capability:
  exposes:
  - type: mcp
    namespace: feed-onboard
    port: 8080
    tools:
    - name: onboard-data-feed
      description: Given a new Bloomberg Enterprise Data feed name, create Snowflake tables, configure Databricks pipeline, and notify stakeholders.
      inputParameters:
      - name: feed_name
        in: body
        type: string
        description: The Bloomberg Enterprise Data feed name.
      - name: target_schema
        in: body
        type: string
        description: The target Snowflake schema.
      steps:
      - name: create-tables
        type: call
        call: snowflake-onboard.execute-query
        with:
          query: CREATE TABLE IF NOT EXISTS {{target_schema}}.{{feed_name}} (data VARIANT, loaded_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP())
      - name: configure-pipeline
        type: call
        call: dbx-onboard.create-job
        with:
          name: ingest-{{feed_name}}
          target_table: '{{target_schema}}.{{feed_name}}'
      - name: notify-team
        type: call
        call: slack-onboard.post-message
        with:
          channel: data-engineering
          text: 'New Bloomberg data feed onboarded: {{feed_name}}. Snowflake table: {{target_schema}}.{{feed_name}}. Databricks job: ingest-{{feed_name}}.'
  consumes:
  - type: http
    namespace: snowflake-onboard
    baseUri: https://bloomberg.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: dbx-onboard
    baseUri: https://bloomberg.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/create
      operations:
      - name: create-job
        method: POST
  - type: http
    namespace: slack-onboard
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → bloomberg-enterprise-data-feed-onboarding.yml

Monitors Bloomberg Government for regulatory updates, summarizes changes via Anthropic Claude, creates Jira compliance tasks, and notifies the legal team on Slack.

naftiko: '0.5'
info:
  label: Bloomberg Government Regulatory Update Tracker
  description: Monitors Bloomberg Government for regulatory updates, summarizes changes via Anthropic Claude, creates Jira compliance tasks, and notifies the legal team on Slack.
  tags:
  - regulatory
  - bloomberg-government-bgov
  - anthropic
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: regulatory-ops
    port: 8080
    tools:
    - name: track-regulatory-update
      description: Given a Bloomberg Government regulatory update, summarize via Anthropic, create Jira tasks, and notify the legal team.
      inputParameters:
      - name: regulation_id
        in: body
        type: string
        description: The Bloomberg Government regulation identifier.
      - name: topic
        in: body
        type: string
        description: The regulatory topic area.
      steps:
      - name: get-update
        type: call
        call: bgov-reg.get-regulation
        with:
          regulation_id: '{{regulation_id}}'
      - name: summarize
        type: call
        call: anthropic-reg.create-message
        with:
          model: claude-opus-4-5
          max_tokens: 2048
          system: You are a regulatory analyst. Summarize the regulation and identify action items for compliance.
          content: 'Summarize this regulatory update and list required actions: {{get-update.content}}'
      - name: create-task
        type: call
        call: jira-reg.create-issue
        with:
          project: COMPLIANCE
          summary: 'Regulatory update: {{topic}} ({{regulation_id}})'
          description: '{{summarize.content}}'
          priority: High
      - name: notify-legal
        type: call
        call: slack-reg.post-message
        with:
          channel: legal-regulatory
          text: 'Regulatory update: {{topic}}. Summary: {{summarize.content}}. Jira: {{create-task.key}}'
  consumes:
  - type: http
    namespace: bgov-reg
    baseUri: https://api.bgov.com/v1
    authentication:
      type: bearer
      token: $secrets.bgov_token
    resources:
    - name: regulations
      path: /regulations/{{regulation_id}}
      inputParameters:
      - name: regulation_id
        in: path
      operations:
      - name: get-regulation
        method: GET
  - type: http
    namespace: anthropic-reg
    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: jira-reg
    baseUri: https://bloomberg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-reg
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → bloomberg-government-regulatory-update-tracker.yml

Triggers a Tableau workbook refresh and notifies the business stakeholder via Teams once the data source is updated and the dashboard is ready.

naftiko: '0.5'
info:
  label: Tableau Dashboard Refresh Trigger
  description: Triggers a Tableau workbook refresh and notifies the business stakeholder via Teams once the data source is updated and the dashboard is ready.
  tags:
  - data
  - analytics
  - tableau
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: analytics-reporting
    port: 8080
    tools:
    - name: refresh-dashboard
      description: Given a Tableau workbook ID and datasource ID, trigger a full data refresh and send a Teams notification to the business owner when complete. Use when underlying data has been updated and stakeholders need fresh insights.
      inputParameters:
      - name: workbook_id
        in: body
        type: string
        description: The Tableau workbook LUID to refresh.
      - name: datasource_id
        in: body
        type: string
        description: The Tableau datasource LUID backing the workbook.
      - name: owner_email
        in: body
        type: string
        description: The email of the business owner to notify on completion.
      steps:
      - name: refresh-datasource
        type: call
        call: tableau.refresh-datasource
        with:
          datasource_id: '{{datasource_id}}'
      - name: notify-owner
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{owner_email}}'
          text: Your Tableau dashboard (workbook {{workbook_id}}) has been refreshed with the latest data.
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://10ax.online.tableau.com/api/3.21
    authentication:
      type: apikey
      key: X-Tableau-Auth
      value: $secrets.tableau_token
      placement: header
    resources:
    - name: datasource-refresh
      path: /sites/{{site_id}}/datasources/{{datasource_id}}/refresh
      inputParameters:
      - name: datasource_id
        in: path
      - name: site_id
        in: path
      operations:
      - name: refresh-datasource
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → tableau-dashboard-refresh-trigger.yml

Gathers completion metrics for all stories in a Jira epic, generates a progress summary via Anthropic, and posts to the project's Slack channel.

naftiko: '0.5'
info:
  label: Jira Epic Completion Status Reporter
  description: Gathers completion metrics for all stories in a Jira epic, generates a progress summary via Anthropic, and posts to the project's Slack channel.
  tags:
  - project-management
  - jira
  - anthropic
  - slack
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: project-reporting
    port: 8080
    tools:
    - name: report-epic-status
      description: Given a Jira epic key, gather story completion data, generate a progress summary, and post to Slack.
      inputParameters:
      - name: epic_key
        in: body
        type: string
        description: The Jira epic key, e.g. 'PROJ-100'.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel to post the report.
      steps:
      - name: get-epic-stories
        type: call
        call: jira-epic.search-issues
        with:
          jql: '''Epic Link'' = {{epic_key}}'
      - name: generate-report
        type: call
        call: anthropic-epic.create-message
        with:
          model: claude-opus-4-5
          max_tokens: 1024
          system: You are a project manager. Summarize epic progress with completion percentages and blockers.
          content: 'Summarize progress for epic {{epic_key}}: {{get-epic-stories.issues}}'
      - name: post-report
        type: call
        call: slack-epic.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Epic Status: {{epic_key}} - {{generate-report.content}}'
  consumes:
  - type: http
    namespace: jira-epic
    baseUri: https://bloomberg.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: anthropic-epic
    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: slack-epic
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → jira-epic-completion-status-reporter.yml

Retrieves a vendor invoice from the AP system, validates it against the corresponding purchase order in SAP, and routes it for approval via ServiceNow.

naftiko: '0.5'
info:
  label: Vendor Invoice Processing
  description: Retrieves a vendor invoice from the AP system, validates it against the corresponding purchase order in SAP, and routes it for approval via ServiceNow.
  tags:
  - finance
  - erp
  - sap
  - servicenow
  - accounts-payable
  - approval
capability:
  exposes:
  - type: mcp
    namespace: finance-ap
    port: 8080
    tools:
    - name: process-vendor-invoice
      description: Given a vendor invoice number and SAP purchase order number, retrieve and validate the invoice against the PO, then create a ServiceNow approval workflow. Use for accounts payable invoice processing.
      inputParameters:
      - name: invoice_number
        in: body
        type: string
        description: The vendor invoice number to process.
      - name: po_number
        in: body
        type: string
        description: The SAP purchase order number to validate against.
      steps:
      - name: get-po
        type: call
        call: sap.get-purchase-order
        with:
          po_number: '{{po_number}}'
      - name: submit-approval
        type: call
        call: servicenow.create-approval
        with:
          category: ap_invoice_approval
          short_description: 'Invoice {{invoice_number}} for PO {{po_number}} — Amount: {{get-po.total_amount}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://bloomberg-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: purchase-orders
      path: /A_PurchaseOrder('{{po_number}}')
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-purchase-order
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bloomberg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: approval-requests
      path: /table/sc_request
      operations:
      - name: create-approval
        method: POST
Open in Framework → View in Fleet → vendor-invoice-processing.yml

Fetches follower growth and post engagement metrics from Bloomberg's LinkedIn company page and posts a weekly digest to the marketing Slack channel.

naftiko: '0.5'
info:
  label: LinkedIn Company Page Performance Digest
  description: Fetches follower growth and post engagement metrics from Bloomberg's LinkedIn company page and posts a weekly digest to the marketing Slack channel.
  tags:
  - marketing
  - social
  - linkedin
  - slack
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: social-reporting
    port: 8080
    tools:
    - name: digest-linkedin-performance
      description: Fetch weekly follower growth and top post engagement metrics from Bloomberg's LinkedIn company page and post a summary to the marketing Slack channel. Use for weekly social performance reviews.
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: The start date for the reporting period in ISO 8601 format, e.g. '2026-03-13'.
      - name: end_date
        in: body
        type: string
        description: The end date for the reporting period in ISO 8601 format, e.g. '2026-03-20'.
      steps:
      - name: get-follower-stats
        type: call
        call: linkedin.get-follower-stats
        with:
          organization_id: $secrets.bloomberg_linkedin_org_id
      - name: get-share-stats
        type: call
        call: linkedin-shares.get-share-stats
        with:
          organization_id: $secrets.bloomberg_linkedin_org_id
          start: '{{start_date}}'
          end: '{{end_date}}'
      - name: post-digest
        type: call
        call: slack.post-message
        with:
          channel: marketing-analytics
          text: 'LinkedIn weekly digest ({{start_date}} to {{end_date}}): followers {{get-follower-stats.follower_count}}, impressions {{get-share-stats.impression_count}}, engagement {{get-share-stats.engagement_count}}.'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: follower-stats
      path: /organizationalEntityFollowerStatistics
      operations:
      - name: get-follower-stats
        method: GET
  - type: http
    namespace: linkedin-shares
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: share-stats
      path: /organizationalEntityShareStatistics
      operations:
      - name: get-share-stats
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → linkedin-company-page-performance-digest.yml

When a developer is onboarded to a project team, grants access to the relevant GitHub repositories and sends a Slack confirmation to the team lead.

naftiko: '0.5'
info:
  label: GitHub Repository Access Provisioning
  description: When a developer is onboarded to a project team, grants access to the relevant GitHub repositories and sends a Slack confirmation to the team lead.
  tags:
  - devops
  - identity
  - github
  - slack
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: dev-access
    port: 8080
    tools:
    - name: provision-repo-access
      description: Given a GitHub username, repository list, and permission level, add the user as a collaborator to each specified repository and notify the team lead in Slack. Use when a developer joins a project team.
      inputParameters:
      - name: github_username
        in: body
        type: string
        description: The GitHub username of the developer to provision access for.
      - name: repo_name
        in: body
        type: string
        description: The full repository name including org, e.g. 'bloomberg/bde'.
      - name: permission
        in: body
        type: string
        description: 'Permission level: ''read'', ''triage'', ''write'', ''maintain'', or ''admin''.'
      - name: team_lead_slack_id
        in: body
        type: string
        description: The Slack user ID of the team lead to notify.
      steps:
      - name: add-collaborator
        type: call
        call: github.add-repo-collaborator
        with:
          repo: '{{repo_name}}'
          username: '{{github_username}}'
          permission: '{{permission}}'
      - name: notify-lead
        type: call
        call: slack.send-dm
        with:
          user_id: '{{team_lead_slack_id}}'
          text: '{{github_username}} has been granted {{permission}} access to {{repo_name}}.'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: collaborators
      path: /repos/{{repo}}/collaborators/{{username}}
      inputParameters:
      - name: repo
        in: path
      - name: username
        in: path
      operations:
      - name: add-repo-collaborator
        method: PUT
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: dm
      path: /chat.postMessage
      operations:
      - name: send-dm
        method: POST
Open in Framework → View in Fleet → github-repository-access-provisioning.yml

Scans Terraform plans for security misconfigurations, creates Jira tickets for violations, and posts a scan summary to the infrastructure Slack channel.

naftiko: '0.5'
info:
  label: Terraform Security Scan Gate
  description: Scans Terraform plans for security misconfigurations, creates Jira tickets for violations, and posts a scan summary to the infrastructure Slack channel.
  tags:
  - security
  - terraform
  - jira
  - slack
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: tf-security
    port: 8080
    tools:
    - name: scan-terraform-plan
      description: Given a Terraform Cloud run ID, scan for security violations, create Jira tickets, and notify Slack.
      inputParameters:
      - name: run_id
        in: body
        type: string
        description: The Terraform Cloud run ID to scan.
      - name: workspace
        in: body
        type: string
        description: The Terraform workspace name.
      steps:
      - name: get-plan
        type: call
        call: tfc-scan.get-run-plan
        with:
          run_id: '{{run_id}}'
      - name: create-ticket
        type: call
        call: jira-tfsec.create-issue
        with:
          project: SEC
          summary: 'Terraform security scan: {{workspace}} (run {{run_id}})'
          description: 'Plan changes: {{get-plan.resource_changes}}. Review for security compliance.'
          priority: High
      - name: notify-team
        type: call
        call: slack-tfsec.post-message
        with:
          channel: infrastructure-security
          text: 'Terraform scan: {{workspace}} run {{run_id}}. Changes: {{get-plan.resource_changes}}. Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: tfc-scan
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_cloud_token
    resources:
    - name: runs
      path: /runs/{{run_id}}/plan
      inputParameters:
      - name: run_id
        in: path
      operations:
      - name: get-run-plan
        method: GET
  - type: http
    namespace: jira-tfsec
    baseUri: https://bloomberg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-tfsec
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → terraform-security-scan-gate.yml

Retrieves storage size and object count metrics for an S3 bucket used by Bloomberg data pipelines.

naftiko: '0.5'
info:
  label: AWS S3 Bucket Storage Metrics
  description: Retrieves storage size and object count metrics for an S3 bucket used by Bloomberg data pipelines.
  tags:
  - cloud
  - aws
  - storage
  - cost-management
capability:
  exposes:
  - type: mcp
    namespace: cloud-storage
    port: 8080
    tools:
    - name: get-bucket-metrics
      description: Given an S3 bucket name, return its total storage size and object count. Use for cloud cost monitoring.
      inputParameters:
      - name: bucket_name
        in: body
        type: string
        description: The AWS S3 bucket name.
      call: aws-s3.get-bucket-size
      with:
        bucket: '{{bucket_name}}'
      outputParameters:
      - name: size_gb
        type: number
        mapping: $.Datapoints[0].Average
      - name: object_count
        type: integer
        mapping: $.ObjectCount
  consumes:
  - type: http
    namespace: aws-s3
    baseUri: https://monitoring.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_cloudwatch_key
      placement: header
    resources:
    - name: metrics
      path: /
      operations:
      - name: get-bucket-size
        method: POST
Open in Framework → View in Fleet → aws-s3-bucket-storage-metrics.yml

Updates a Salesforce opportunity to the next stage when a deal milestone is confirmed, and notifies the sales team Slack channel.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Stage Update
  description: Updates a Salesforce opportunity to the next stage when a deal milestone is confirmed, and notifies the sales team Slack channel.
  tags:
  - crm
  - sales
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: crm-ops
    port: 8080
    tools:
    - name: advance-opportunity-stage
      description: Given a Salesforce opportunity ID and new stage name, update the opportunity stage and post a Slack notification to the sales team. Use when a deal milestone is confirmed by the account team.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce Opportunity ID (18-character).
      - name: new_stage
        in: body
        type: string
        description: The new stage name, e.g. 'Proposal/Price Quote', 'Negotiation/Review', 'Closed Won'.
      steps:
      - name: update-opp
        type: call
        call: salesforce.update-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
          StageName: '{{new_stage}}'
      - name: notify-sales
        type: call
        call: slack.post-message
        with:
          channel: sales-wins
          text: 'Opportunity {{opportunity_id}} advanced to stage: {{new_stage}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://bloomberg.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: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-opportunity-stage-update.yml

When a critical GitHub Dependabot alert is opened, creates a Jira security ticket, assigns to the owning team, and posts to the security Slack channel with SLA deadlines.

naftiko: '0.5'
info:
  label: Security Vulnerability Remediation Tracker
  description: When a critical GitHub Dependabot alert is opened, creates a Jira security ticket, assigns to the owning team, and posts to the security Slack channel with SLA deadlines.
  tags:
  - security
  - github
  - jira
  - slack
  - vulnerability-management
capability:
  exposes:
  - type: mcp
    namespace: vuln-ops
    port: 8080
    tools:
    - name: track-vulnerability-remediation
      description: Given a GitHub Dependabot alert, create a Jira security ticket, assign to the owning team, and notify Slack with remediation SLA.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: The GitHub repository with the vulnerability.
      - name: alert_number
        in: body
        type: string
        description: The Dependabot alert number.
      - name: severity
        in: body
        type: string
        description: 'Vulnerability severity: critical, high, medium, low.'
      steps:
      - name: get-alert
        type: call
        call: gh-vuln.get-dependabot-alert
        with:
          repo: '{{repo_name}}'
          alert_number: '{{alert_number}}'
      - name: create-ticket
        type: call
        call: jira-vuln.create-issue
        with:
          project: SEC
          summary: '[{{severity}}] Dependabot: {{get-alert.package}} in {{repo_name}}'
          description: 'CVE: {{get-alert.cve_id}}. Package: {{get-alert.package}}@{{get-alert.vulnerable_version}}. Fix: {{get-alert.patched_version}}.'
          priority: Critical
      - name: notify-security
        type: call
        call: slack-vuln.post-message
        with:
          channel: security-vulnerabilities
          text: '[{{severity}}] Dependabot alert in {{repo_name}}: {{get-alert.package}}. CVE: {{get-alert.cve_id}}. Jira: {{create-ticket.key}}. SLA: 48 hours for critical.'
  consumes:
  - type: http
    namespace: gh-vuln
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: alerts
      path: /repos/{{repo}}/dependabot/alerts/{{alert_number}}
      inputParameters:
      - name: repo
        in: path
      - name: alert_number
        in: path
      operations:
      - name: get-dependabot-alert
        method: GET
  - type: http
    namespace: jira-vuln
    baseUri: https://bloomberg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-vuln
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → security-vulnerability-remediation-tracker.yml

When a new Bloomberg client webinar is created in Zoom, syncs registration data to Salesforce as campaign member records and posts a Slack notification to the events team.

naftiko: '0.5'
info:
  label: Zoom Webinar Registration Sync
  description: When a new Bloomberg client webinar is created in Zoom, syncs registration data to Salesforce as campaign member records and posts a Slack notification to the events team.
  tags:
  - marketing
  - events
  - zoom
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: events-ops
    port: 8080
    tools:
    - name: sync-webinar-registrants
      description: Given a Zoom webinar ID and Salesforce campaign ID, fetch all webinar registrants from Zoom and create corresponding Salesforce campaign member records. Use after webinar registration closes or for real-time sync.
      inputParameters:
      - name: webinar_id
        in: body
        type: string
        description: The Zoom webinar ID.
      - name: salesforce_campaign_id
        in: body
        type: string
        description: The Salesforce campaign ID to sync registrants into.
      steps:
      - name: get-registrants
        type: call
        call: zoom.list-webinar-registrants
        with:
          webinar_id: '{{webinar_id}}'
      - name: create-campaign-members
        type: call
        call: salesforce.create-campaign-members
        with:
          campaign_id: '{{salesforce_campaign_id}}'
          registrant_data: '{{get-registrants.registrants}}'
      - name: notify-events
        type: call
        call: slack.post-message
        with:
          channel: events-team
          text: 'Webinar {{webinar_id}} registrants synced to Salesforce campaign {{salesforce_campaign_id}}: {{get-registrants.total_records}} records.'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_token
    resources:
    - name: webinar-registrants
      path: /webinars/{{webinar_id}}/registrants
      inputParameters:
      - name: webinar_id
        in: path
      operations:
      - name: list-webinar-registrants
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://bloomberg.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaign-members
      path: /sobjects/CampaignMember
      operations:
      - name: create-campaign-members
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → zoom-webinar-registration-sync.yml

Retrieves key financial data points for a company from Bloomberg Company Financials including revenue, EPS, and market cap.

naftiko: '0.5'
info:
  label: Bloomberg Company Financials Lookup
  description: Retrieves key financial data points for a company from Bloomberg Company Financials including revenue, EPS, and market cap.
  tags:
  - financial-data
  - bloomberg-company-financials
  - research
capability:
  exposes:
  - type: mcp
    namespace: company-fin
    port: 8080
    tools:
    - name: get-company-financials
      description: Given a company ticker, return key financial metrics from Bloomberg Company Financials. Use for equity research and due diligence.
      inputParameters:
      - name: ticker
        in: body
        type: string
        description: The Bloomberg company ticker, e.g. 'AAPL US Equity'.
      call: bbg-financials.get-financials
      with:
        ticker: '{{ticker}}'
      outputParameters:
      - name: revenue
        type: number
        mapping: $.revenue
      - name: eps
        type: number
        mapping: $.eps
      - name: market_cap
        type: number
        mapping: $.market_cap
  consumes:
  - type: http
    namespace: bbg-financials
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/data
    authentication:
      type: bearer
      token: $secrets.bloomberg_data_token
    resources:
    - name: financials
      path: /fields/{{ticker}}
      inputParameters:
      - name: ticker
        in: path
      operations:
      - name: get-financials
        method: GET
Open in Framework → View in Fleet → bloomberg-company-financials-lookup.yml

When a Greenhouse candidate advances to the interview stage, fetches available interviewer slots from Microsoft 365 and creates calendar invites for the interview panel.

naftiko: '0.5'
info:
  label: Greenhouse Candidate Interview Scheduler
  description: When a Greenhouse candidate advances to the interview stage, fetches available interviewer slots from Microsoft 365 and creates calendar invites for the interview panel.
  tags:
  - hr
  - recruiting
  - greenhouse
  - microsoft-365
capability:
  exposes:
  - type: mcp
    namespace: recruiting-scheduling
    port: 8080
    tools:
    - name: schedule-interview
      description: Given a Greenhouse application ID and list of interviewer email addresses, retrieve candidate details, find common availability via Microsoft 365, and create calendar invites for the interview panel. Use when a candidate is advanced to interview stage.
      inputParameters:
      - name: application_id
        in: body
        type: string
        description: The Greenhouse application ID for the candidate.
      - name: interviewer_emails
        in: body
        type: string
        description: Comma-separated list of interviewer email addresses.
      - name: interview_date
        in: body
        type: string
        description: Preferred interview date in ISO 8601 format.
      steps:
      - name: get-candidate
        type: call
        call: greenhouse.get-application
        with:
          application_id: '{{application_id}}'
      - name: create-invite
        type: call
        call: msgraph.create-event
        with:
          subject: 'Interview: {{get-candidate.candidate_name}} — {{get-candidate.job_title}}'
          attendees: '{{interviewer_emails}}'
          start: '{{interview_date}}'
  consumes:
  - type: http
    namespace: greenhouse
    baseUri: https://harvest.greenhouse.io/v1
    authentication:
      type: basic
      username: $secrets.greenhouse_api_key
      password: ''
    resources:
    - name: applications
      path: /applications/{{application_id}}
      inputParameters:
      - name: application_id
        in: path
      operations:
      - name: get-application
        method: GET
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: events
      path: /me/events
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → greenhouse-candidate-interview-scheduler.yml

Monitors open GitHub pull requests approaching review SLA, assigns additional reviewers, and sends SLA warnings to the Slack engineering channel.

naftiko: '0.5'
info:
  label: GitHub Code Review SLA Monitor
  description: Monitors open GitHub pull requests approaching review SLA, assigns additional reviewers, and sends SLA warnings to the Slack engineering channel.
  tags:
  - engineering
  - github
  - slack
  - code-review
  - sla
capability:
  exposes:
  - type: mcp
    namespace: review-ops
    port: 8080
    tools:
    - name: monitor-review-sla
      description: Given a GitHub repository, check PRs nearing review SLA breach, assign reviewers, and alert Slack.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: The GitHub repository name.
      - name: sla_hours
        in: body
        type: string
        description: The SLA threshold in hours.
      steps:
      - name: get-open-prs
        type: call
        call: gh-review.list-pull-requests
        with:
          repo: '{{repo_name}}'
          state: open
      - name: alert-team
        type: call
        call: slack-review.post-message
        with:
          channel: engineering-reviews
          text: 'Review SLA warning: {{repo_name}} has PRs approaching {{sla_hours}}h SLA. PRs: {{get-open-prs.count}} pending review.'
  consumes:
  - type: http
    namespace: gh-review
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: pulls
      path: /repos/{{repo}}/pulls
      inputParameters:
      - name: repo
        in: path
      operations:
      - name: list-pull-requests
        method: GET
  - type: http
    namespace: slack-review
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → github-code-review-sla-monitor.yml

Collects performance review data from Workday, generates department-level insights via Anthropic Claude, and publishes the summary to Confluence for HR leadership.

naftiko: '0.5'
info:
  label: Workday Performance Review Aggregator
  description: Collects performance review data from Workday, generates department-level insights via Anthropic Claude, and publishes the summary to Confluence for HR leadership.
  tags:
  - hr
  - workday
  - anthropic
  - confluence
  - performance-management
capability:
  exposes:
  - type: mcp
    namespace: perf-review
    port: 8080
    tools:
    - name: aggregate-performance-reviews
      description: Collect Workday performance reviews for a department, generate insights, and publish to Confluence.
      inputParameters:
      - name: department
        in: body
        type: string
        description: The department name.
      - name: review_cycle
        in: body
        type: string
        description: The review cycle, e.g. 'H1-2026'.
      steps:
      - name: get-reviews
        type: call
        call: workday-perf.get-reviews
        with:
          department: '{{department}}'
          cycle: '{{review_cycle}}'
      - name: generate-insights
        type: call
        call: anthropic-perf.create-message
        with:
          model: claude-opus-4-5
          max_tokens: 2048
          system: You are an HR analytics expert. Summarize performance trends, identify top performers, and flag areas needing attention.
          content: 'Analyze performance review data for {{department}} ({{review_cycle}}): {{get-reviews.data}}'
      - name: publish-summary
        type: call
        call: confluence-perf.create-page
        with:
          space: HR
          title: 'Performance Review Summary: {{department}} - {{review_cycle}}'
          body: '{{generate-insights.content}}'
  consumes:
  - type: http
    namespace: workday-perf
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1/bloomberg
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: reviews
      path: /performance/reviews
      operations:
      - name: get-reviews
        method: GET
  - type: http
    namespace: anthropic-perf
    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: confluence-perf
    baseUri: https://bloomberg.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → workday-performance-review-aggregator.yml

When a breaking Bloomberg News alert is detected, summarizes the impact via Anthropic Claude, posts to relevant Slack channels, and creates a Jira research task for analysts.

naftiko: '0.5'
info:
  label: Bloomberg News Breaking Alert Distributor
  description: When a breaking Bloomberg News alert is detected, summarizes the impact via Anthropic Claude, posts to relevant Slack channels, and creates a Jira research task for analysts.
  tags:
  - news
  - bloomberg-news
  - anthropic
  - slack
  - jira
capability:
  exposes:
  - type: mcp
    namespace: breaking-news
    port: 8080
    tools:
    - name: distribute-breaking-alert
      description: Given a Bloomberg News breaking alert, summarize impact, post to Slack, and create a Jira research task.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The Bloomberg News alert identifier.
      - name: headline
        in: body
        type: string
        description: The breaking news headline.
      steps:
      - name: get-alert-details
        type: call
        call: bbg-breaking.get-alert
        with:
          alert_id: '{{alert_id}}'
      - name: summarize-impact
        type: call
        call: anthropic-break.create-message
        with:
          model: claude-opus-4-5
          max_tokens: 1024
          system: You are a financial news analyst. Provide a brief market impact assessment for this breaking news.
          content: 'Assess market impact of: {{headline}}. Details: {{get-alert-details.body}}'
      - name: post-to-slack
        type: call
        call: slack-break.post-message
        with:
          channel: breaking-news
          text: 'BREAKING: {{headline}}. Impact: {{summarize-impact.content}}'
      - name: create-research-task
        type: call
        call: jira-break.create-issue
        with:
          project: RESEARCH
          summary: 'Research: {{headline}}'
          description: 'Breaking alert: {{alert_id}}. {{summarize-impact.content}}'
          priority: High
  consumes:
  - type: http
    namespace: bbg-breaking
    baseUri: https://api.bloomberg.com/content/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_content_token
    resources:
    - name: alerts
      path: /alerts/{{alert_id}}
      inputParameters:
      - name: alert_id
        in: path
      operations:
      - name: get-alert
        method: GET
  - type: http
    namespace: anthropic-break
    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: slack-break
    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: jira-break
    baseUri: https://bloomberg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → bloomberg-news-breaking-alert-distributor.yml

After a PagerDuty incident is resolved, gathers timeline from PagerDuty, generates a post-mortem via Anthropic Claude, and publishes to Confluence.

naftiko: '0.5'
info:
  label: PagerDuty Incident Post-Mortem Generator
  description: After a PagerDuty incident is resolved, gathers timeline from PagerDuty, generates a post-mortem via Anthropic Claude, and publishes to Confluence.
  tags:
  - incident-response
  - pagerduty
  - anthropic
  - confluence
  - post-mortem
capability:
  exposes:
  - type: mcp
    namespace: postmortem-ops
    port: 8080
    tools:
    - name: generate-post-mortem
      description: Given a resolved PagerDuty incident ID, gather the timeline, generate a post-mortem, and publish to Confluence.
      inputParameters:
      - name: incident_id
        in: body
        type: string
        description: The PagerDuty incident ID.
      steps:
      - name: get-incident
        type: call
        call: pd-pm.get-incident
        with:
          incident_id: '{{incident_id}}'
      - name: generate-report
        type: call
        call: anthropic-pm.create-message
        with:
          model: claude-opus-4-5
          max_tokens: 4096
          system: You are an SRE writing a blameless post-mortem. Include timeline, root cause, impact, and action items.
          content: 'Generate a post-mortem for this incident: {{get-incident.data}}'
      - name: publish-postmortem
        type: call
        call: confluence-pm.create-page
        with:
          space: SRE
          title: 'Post-Mortem: {{get-incident.title}}'
          body: '{{generate-report.content}}'
  consumes:
  - type: http
    namespace: pd-pm
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incidents
      path: /incidents/{{incident_id}}
      inputParameters:
      - name: incident_id
        in: path
      operations:
      - name: get-incident
        method: GET
  - type: http
    namespace: anthropic-pm
    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: confluence-pm
    baseUri: https://bloomberg.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → pagerduty-incident-post-mortem-generator.yml

When a new Salesforce lead is created, enriches it with company data from Bloomberg Enterprise Data, scores the lead, and notifies the sales rep on Slack.

naftiko: '0.5'
info:
  label: Salesforce Lead Qualification Enrichment
  description: When a new Salesforce lead is created, enriches it with company data from Bloomberg Enterprise Data, scores the lead, and notifies the sales rep on Slack.
  tags:
  - crm
  - salesforce
  - bloomberg-enterprise-data
  - slack
  - lead-management
capability:
  exposes:
  - type: mcp
    namespace: lead-ops
    port: 8080
    tools:
    - name: enrich-and-qualify-lead
      description: Given a new Salesforce lead, enrich with Bloomberg data and notify the sales rep.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: The Salesforce lead ID.
      - name: company_name
        in: body
        type: string
        description: The lead's company name.
      steps:
      - name: get-company-data
        type: call
        call: bbg-data.get-company-profile
        with:
          company: '{{company_name}}'
      - name: update-lead
        type: call
        call: sf-lead.update-lead
        with:
          lead_id: '{{lead_id}}'
          industry: '{{get-company-data.industry}}'
          revenue: '{{get-company-data.revenue}}'
      - name: notify-rep
        type: call
        call: slack-sales.post-message
        with:
          channel: sales-leads
          text: 'New enriched lead: {{company_name}}. Industry: {{get-company-data.industry}}. Revenue: {{get-company-data.revenue}}.'
  consumes:
  - type: http
    namespace: bbg-data
    baseUri: https://api.bloomberg.com/enterprise/v1
    authentication:
      type: apikey
      key: X-Bloomberg-Key
      value: $secrets.bloomberg_enterprise_key
      placement: header
    resources:
    - name: companies
      path: /companies/{{company}}
      inputParameters:
      - name: company
        in: path
      operations:
      - name: get-company-profile
        method: GET
  - type: http
    namespace: sf-lead
    baseUri: https://bloomberg.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
  - type: http
    namespace: slack-sales
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-lead-qualification-enrichment.yml

Retrieves the current constituent list and weights for a Bloomberg index for portfolio analysis.

naftiko: '0.5'
info:
  label: Bloomberg Index Composition Lookup
  description: Retrieves the current constituent list and weights for a Bloomberg index for portfolio analysis.
  tags:
  - financial-data
  - bloomberg-indices
  - portfolio
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: index-ops
    port: 8080
    tools:
    - name: get-index-composition
      description: Given a Bloomberg index ticker, return its constituent securities and weights. Use for portfolio rebalancing and benchmark analysis.
      inputParameters:
      - name: index_ticker
        in: body
        type: string
        description: The Bloomberg index ticker, e.g. 'SPX Index'.
      call: bloomberg-idx.get-constituents
      with:
        ticker: '{{index_ticker}}'
      outputParameters:
      - name: constituents
        type: array
        mapping: $.members
      - name: count
        type: integer
        mapping: $.totalMembers
  consumes:
  - type: http
    namespace: bloomberg-idx
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/data
    authentication:
      type: bearer
      token: $secrets.bloomberg_data_token
    resources:
    - name: indices
      path: /indices/{{ticker}}/constituents
      inputParameters:
      - name: ticker
        in: path
      operations:
      - name: get-constituents
        method: GET
Open in Framework → View in Fleet → bloomberg-index-composition-lookup.yml

Gathers compliance evidence from Okta access logs, GitHub audit logs, and ServiceNow change records, assembles an evidence package, and publishes to Confluence.

naftiko: '0.5'
info:
  label: Quarterly Compliance Evidence Collector
  description: Gathers compliance evidence from Okta access logs, GitHub audit logs, and ServiceNow change records, assembles an evidence package, and publishes to Confluence.
  tags:
  - compliance
  - okta
  - github
  - servicenow
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: compliance-evidence
    port: 8080
    tools:
    - name: collect-compliance-evidence
      description: Gather access logs from Okta, audit logs from GitHub, change records from ServiceNow, and publish evidence to Confluence.
      inputParameters:
      - name: quarter
        in: body
        type: string
        description: The quarter for evidence collection, e.g. 'Q1-2026'.
      - name: control_id
        in: body
        type: string
        description: The compliance control ID.
      steps:
      - name: get-access-logs
        type: call
        call: okta-evidence.get-system-log
        with:
          since: '{{quarter}}'
          filter: eventType eq "user.session.start"
      - name: get-audit-logs
        type: call
        call: gh-evidence.get-audit-log
        with:
          org: bloomberg
          since: '{{quarter}}'
      - name: get-changes
        type: call
        call: snow-evidence.get-changes
        with:
          quarter: '{{quarter}}'
      - name: publish-evidence
        type: call
        call: confluence-evidence.create-page
        with:
          space: COMPLIANCE
          title: 'Evidence Package: {{control_id}} - {{quarter}}'
          body: 'Access logs: {{get-access-logs.count}} entries. Audit events: {{get-audit-logs.count}}. Changes: {{get-changes.count}}'
  consumes:
  - type: http
    namespace: okta-evidence
    baseUri: https://bloomberg.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: logs
      path: /logs
      operations:
      - name: get-system-log
        method: GET
  - type: http
    namespace: gh-evidence
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: audit
      path: /orgs/{{org}}/audit-log
      inputParameters:
      - name: org
        in: path
      operations:
      - name: get-audit-log
        method: GET
  - type: http
    namespace: snow-evidence
    baseUri: https://bloomberg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: get-changes
        method: GET
  - type: http
    namespace: confluence-evidence
    baseUri: https://bloomberg.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → quarterly-compliance-evidence-collector.yml

Retrieves Salesforce account details including industry, revenue tier, and account owner for sales enablement workflows.

naftiko: '0.5'
info:
  label: Salesforce Account Lookup
  description: Retrieves Salesforce account details including industry, revenue tier, and account owner for sales enablement workflows.
  tags:
  - crm
  - salesforce
  - account-management
capability:
  exposes:
  - type: mcp
    namespace: crm-ops
    port: 8080
    tools:
    - name: get-account-details
      description: Given a Salesforce account ID, return account details including owner, industry, and tier. Use for account health checks and sales planning.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID.
      call: sf-account.get-account
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.Name
      - name: industry
        type: string
        mapping: $.Industry
      - name: owner
        type: string
        mapping: $.Owner.Name
  consumes:
  - type: http
    namespace: sf-account
    baseUri: https://bloomberg.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
Open in Framework → View in Fleet → salesforce-account-lookup.yml

When a Datadog monitor enters ALERT state for a critical service, retrieves monitor details and creates a PagerDuty incident to wake the responsible on-call team.

naftiko: '0.5'
info:
  label: Datadog Infrastructure Alert Escalation
  description: When a Datadog monitor enters ALERT state for a critical service, retrieves monitor details and creates a PagerDuty incident to wake the responsible on-call team.
  tags:
  - observability
  - datadog
  - pagerduty
  - incident-response
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: observability-ops
    port: 8080
    tools:
    - name: escalate-monitor-alert
      description: Given a Datadog monitor ID in ALERT state, fetch the monitor details and create a PagerDuty incident routed to the correct service. Use for any monitor that crosses critical threshold and needs on-call response.
      inputParameters:
      - name: monitor_id
        in: body
        type: integer
        description: The Datadog monitor ID that entered ALERT state.
      - name: pagerduty_service_id
        in: body
        type: string
        description: The PagerDuty service ID to route the incident to based on monitor ownership.
      steps:
      - name: get-monitor
        type: call
        call: datadog.get-monitor
        with:
          monitor_id: '{{monitor_id}}'
      - name: create-incident
        type: call
        call: pagerduty.create-incident
        with:
          title: '{{get-monitor.name}} — ALERT'
          service_id: '{{pagerduty_service_id}}'
          body: 'Monitor: {{get-monitor.name}}

            Query: {{get-monitor.query}}

            Message: {{get-monitor.message}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor/{{monitor_id}}
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: get-monitor
        method: GET
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → datadog-infrastructure-alert-escalation.yml

Checks Bloomberg AIM for unreconciled trades, creates ServiceNow tickets for discrepancies, and alerts the operations team on Slack.

naftiko: '0.5'
info:
  label: Bloomberg AIM Trade Reconciliation Monitor
  description: Checks Bloomberg AIM for unreconciled trades, creates ServiceNow tickets for discrepancies, and alerts the operations team on Slack.
  tags:
  - trading
  - bloomberg-aim
  - servicenow
  - slack
  - reconciliation
capability:
  exposes:
  - type: mcp
    namespace: trade-recon
    port: 8080
    tools:
    - name: monitor-trade-reconciliation
      description: Given a date, check Bloomberg AIM for unreconciled trades, create ServiceNow tickets, and alert operations.
      inputParameters:
      - name: trade_date
        in: body
        type: string
        description: The trade date to reconcile in YYYY-MM-DD format.
      steps:
      - name: get-unreconciled
        type: call
        call: bbg-aim.get-unreconciled-trades
        with:
          date: '{{trade_date}}'
      - name: create-ticket
        type: call
        call: snow-recon.create-incident
        with:
          short_description: 'Unreconciled trades: {{trade_date}} ({{get-unreconciled.count}} items)'
          description: '{{get-unreconciled.count}} trades unreconciled for {{trade_date}}. Details: {{get-unreconciled.summary}}'
          category: trade_operations
      - name: alert-ops
        type: call
        call: slack-recon.post-message
        with:
          channel: trade-operations
          text: 'Trade Reconciliation Alert: {{get-unreconciled.count}} unreconciled trades for {{trade_date}}. SNOW: {{create-ticket.number}}'
  consumes:
  - type: http
    namespace: bbg-aim
    baseUri: https://api.bloomberg.com/aim/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_aim_token
    resources:
    - name: trades
      path: /reconciliation/unmatched
      operations:
      - name: get-unreconciled-trades
        method: GET
  - type: http
    namespace: snow-recon
    baseUri: https://bloomberg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: slack-recon
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → bloomberg-aim-trade-reconciliation-monitor.yml

When an employee termination is processed in Workday, revokes Okta access, closes all open ServiceNow tickets assigned to the employee, and notifies the IT team via Teams.

naftiko: '0.5'
info:
  label: Employee Offboarding Workflow
  description: When an employee termination is processed in Workday, revokes Okta access, closes all open ServiceNow tickets assigned to the employee, and notifies the IT team via Teams.
  tags:
  - hr
  - offboarding
  - workday
  - okta
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: trigger-offboarding
      description: 'Given a Workday employee ID and termination date, orchestrate the full offboarding: deactivate Okta account, close open ServiceNow tickets, and notify the IT offboarding team in Teams. Use when an employee departure is confirmed.'
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: The Workday worker ID for the departing employee.
      - name: termination_date
        in: body
        type: string
        description: The employee's last working day in ISO 8601 format.
      steps:
      - name: get-employee
        type: call
        call: workday-read.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: deactivate-okta
        type: call
        call: okta.deactivate-user
        with:
          user_login: '{{get-employee.work_email}}'
      - name: close-tickets
        type: call
        call: servicenow-write.close-user-tickets
        with:
          assigned_to: '{{get-employee.work_email}}'
      - name: notify-it
        type: call
        call: msteams-notify.post-channel-message
        with:
          channel_id: $secrets.it_offboarding_channel_id
          text: 'Offboarding initiated for {{get-employee.full_name}} ({{get-employee.work_email}}). Okta deactivated. Termination date: {{termination_date}}.'
  consumes:
  - type: http
    namespace: workday-read
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /bloomberg/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: okta
    baseUri: https://bloomberg.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: users
      path: /users/{{user_login}}/lifecycle/deactivate
      inputParameters:
      - name: user_login
        in: path
      operations:
      - name: deactivate-user
        method: POST
  - type: http
    namespace: servicenow-write
    baseUri: https://bloomberg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: close-user-tickets
        method: PATCH
  - type: http
    namespace: msteams-notify
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → employee-offboarding-workflow.yml

When Datadog detects an AWS cost anomaly exceeding threshold, fetches the cost breakdown, creates a Jira ticket for the owning team, and posts a Slack summary to the FinOps channel.

naftiko: '0.5'
info:
  label: Cloud Cost Anomaly Responder
  description: When Datadog detects an AWS cost anomaly exceeding threshold, fetches the cost breakdown, creates a Jira ticket for the owning team, and posts a Slack summary to the FinOps channel.
  tags:
  - cloud
  - finops
  - datadog
  - aws
  - jira
  - slack
  - cost-management
capability:
  exposes:
  - type: mcp
    namespace: finops-ops
    port: 8080
    tools:
    - name: handle-cost-anomaly
      description: Given a Datadog cost anomaly alert with service name and threshold exceeded amount, fetch the AWS cost breakdown, open a Jira ticket for the owning team, and alert Slack. Use when cloud spend exceeds expected variance.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The AWS service or resource tag name that triggered the anomaly.
      - name: anomaly_amount
        in: body
        type: number
        description: The dollar amount exceeding the expected cost threshold.
      - name: team_tag
        in: body
        type: string
        description: The team ownership tag to route the Jira ticket to the correct group.
      steps:
      - name: get-cost-detail
        type: call
        call: datadog.get-cost-metrics
        with:
          service: '{{service_name}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: FINOPS
          issuetype: Task
          summary: 'Cost anomaly: {{service_name}} exceeded by ${{anomaly_amount}}'
          description: 'Service: {{service_name}}

            Overage: ${{anomaly_amount}}

            Team: {{team_tag}}

            Metrics: {{get-cost-detail.summary}}'
      - name: notify-finops
        type: call
        call: slack.post-message
        with:
          channel: finops-alerts
          text: 'Cost anomaly detected for {{service_name}}: ${{anomaly_amount}} over threshold. Jira: {{create-ticket.key}}.'
  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: metrics
      path: /metrics/query
      operations:
      - name: get-cost-metrics
        method: GET
  - type: http
    namespace: jira
    baseUri: https://bloomberg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → cloud-cost-anomaly-responder.yml

Fetches recent Bloomberg News articles for a given topic, runs sentiment analysis via Anthropic Claude, and stores results in Snowflake for downstream reporting.

naftiko: '0.5'
info:
  label: Bloomberg News Sentiment Pipeline
  description: Fetches recent Bloomberg News articles for a given topic, runs sentiment analysis via Anthropic Claude, and stores results in Snowflake for downstream reporting.
  tags:
  - ai
  - nlp
  - bloomberg-news
  - anthropic
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: news-analytics
    port: 8080
    tools:
    - name: analyze-news-sentiment
      description: Given a news topic and date range, retrieve Bloomberg News articles, analyze sentiment via Anthropic Claude, and store results in Snowflake.
      inputParameters:
      - name: topic
        in: body
        type: string
        description: The news topic or company name to search for.
      - name: date_range
        in: body
        type: string
        description: Date range for articles, e.g. '7d' for last 7 days.
      steps:
      - name: fetch-articles
        type: call
        call: bbg-news.search-articles
        with:
          query: '{{topic}}'
          range: '{{date_range}}'
      - name: analyze-sentiment
        type: call
        call: anthropic-nlp.create-message
        with:
          model: claude-opus-4-5
          max_tokens: 2048
          system: You are a financial sentiment analyst. Classify each article as positive, negative, or neutral with a confidence score.
          content: 'Analyze sentiment for these articles: {{fetch-articles.articles}}'
      - name: store-results
        type: call
        call: snowflake-sent.insert-rows
        with:
          table: BLOOMBERG.ANALYTICS.NEWS_SENTIMENT
          data: '{{analyze-sentiment.content}}'
  consumes:
  - type: http
    namespace: bbg-news
    baseUri: https://api.bloomberg.com/content/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_content_token
    resources:
    - name: articles
      path: /search
      operations:
      - name: search-articles
        method: GET
  - type: http
    namespace: anthropic-nlp
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: messages
      path: /messages
      operations:
      - name: create-message
        method: POST
  - type: http
    namespace: snowflake-sent
    baseUri: https://bloomberg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: rows
      path: /databases/bloomberg/schemas/analytics/tables/news_sentiment/insertRows
      operations:
      - name: insert-rows
        method: POST
Open in Framework → View in Fleet → bloomberg-news-sentiment-pipeline.yml

After a Microsoft Teams meeting, extracts action items using Anthropic Claude, creates Jira tickets for each, and posts a summary to the team's Slack channel.

naftiko: '0.5'
info:
  label: Microsoft Teams Meeting Action Item Tracker
  description: After a Microsoft Teams meeting, extracts action items using Anthropic Claude, creates Jira tickets for each, and posts a summary to the team's Slack channel.
  tags:
  - productivity
  - microsoft-teams
  - anthropic
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: meeting-ops
    port: 8080
    tools:
    - name: extract-meeting-actions
      description: Given a Teams meeting transcript, extract action items via Anthropic, create Jira tickets, and post summary to Slack.
      inputParameters:
      - name: meeting_id
        in: body
        type: string
        description: The Microsoft Teams meeting ID.
      - name: project_key
        in: body
        type: string
        description: The Jira project key for action items.
      steps:
      - name: get-transcript
        type: call
        call: teams-meetings.get-transcript
        with:
          meeting_id: '{{meeting_id}}'
      - name: extract-actions
        type: call
        call: anthropic-actions.create-message
        with:
          model: claude-opus-4-5
          max_tokens: 2048
          system: 'Extract action items from the meeting transcript. Format each as: assignee, task description, due date.'
          content: '{{get-transcript.content}}'
      - name: notify-team
        type: call
        call: slack-meetings.post-message
        with:
          channel: team-actions
          text: 'Meeting action items from {{meeting_id}}: {{extract-actions.content}}'
  consumes:
  - type: http
    namespace: teams-meetings
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: transcripts
      path: /me/onlineMeetings/{{meeting_id}}/transcripts
      inputParameters:
      - name: meeting_id
        in: path
      operations:
      - name: get-transcript
        method: GET
  - type: http
    namespace: anthropic-actions
    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: slack-meetings
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → microsoft-teams-meeting-action-item-tracker.yml

When Bloomberg market data feed latency exceeds threshold in Datadog, creates a P1 ServiceNow incident, alerts the data operations team on Slack, and triggers a PagerDuty page.

naftiko: '0.5'
info:
  label: Market Data Feed Interruption Handler
  description: When Bloomberg market data feed latency exceeds threshold in Datadog, creates a P1 ServiceNow incident, alerts the data operations team on Slack, and triggers a PagerDuty page.
  tags:
  - market-data
  - incident-response
  - datadog
  - servicenow
  - slack
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: feed-ops
    port: 8080
    tools:
    - name: handle-feed-interruption
      description: Given a Datadog alert for market data feed latency, create a P1 incident in ServiceNow, alert the data ops team, and page on-call via PagerDuty.
      inputParameters:
      - name: feed_name
        in: body
        type: string
        description: Name of the affected Bloomberg data feed.
      - name: latency_ms
        in: body
        type: string
        description: The current latency in milliseconds.
      - name: alert_url
        in: body
        type: string
        description: Direct URL to the Datadog alert.
      steps:
      - name: create-incident
        type: call
        call: snow-feed.create-incident
        with:
          short_description: '[P1] Bloomberg data feed interruption: {{feed_name}}'
          description: 'Latency: {{latency_ms}}ms. Alert: {{alert_url}}'
          urgency: '1'
          category: data_feed
      - name: alert-data-ops
        type: call
        call: slack-feed.post-message
        with:
          channel: data-operations
          text: 'FEED ALERT: {{feed_name}} latency at {{latency_ms}}ms. Incident: {{create-incident.number}}. Alert: {{alert_url}}'
      - name: page-oncall
        type: call
        call: pd-feed.create-incident
        with:
          title: 'Bloomberg Feed Interruption: {{feed_name}}'
          service_id: $secrets.pagerduty_data_ops_service
          urgency: high
  consumes:
  - type: http
    namespace: snow-feed
    baseUri: https://bloomberg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: slack-feed
    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: pd-feed
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → market-data-feed-interruption-handler.yml

Executes a Bloomberg Query Language (BQL) query against Bloomberg Data and returns structured financial data results.

naftiko: '0.5'
info:
  label: Bloomberg BQL Query Executor
  description: Executes a Bloomberg Query Language (BQL) query against Bloomberg Data and returns structured financial data results.
  tags:
  - financial-data
  - bloomberg-data
  - bql
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: bql-ops
    port: 8080
    tools:
    - name: execute-bql-query
      description: Given a BQL query string, execute it against Bloomberg Data and return results. Use for programmatic financial data retrieval.
      inputParameters:
      - name: bql_expression
        in: body
        type: string
        description: The BQL query expression, e.g. 'get(px_last) for(['AAPL US Equity'])'.
      call: bloomberg-bql.run-query
      with:
        expression: '{{bql_expression}}'
      outputParameters:
      - name: data
        type: array
        mapping: $.results
      - name: field_count
        type: integer
        mapping: $.fieldCount
  consumes:
  - type: http
    namespace: bloomberg-bql
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/data
    authentication:
      type: bearer
      token: $secrets.bloomberg_data_token
    resources:
    - name: queries
      path: /queries
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → bloomberg-bql-query-executor.yml

Fetches the body content of a Confluence page by ID for use in automated documentation reviews and knowledge base lookups.

naftiko: '0.5'
info:
  label: Confluence Page Content Retrieval
  description: Fetches the body content of a Confluence page by ID for use in automated documentation reviews and knowledge base lookups.
  tags:
  - documentation
  - confluence
  - knowledge-base
capability:
  exposes:
  - type: mcp
    namespace: docs
    port: 8080
    tools:
    - name: get-page-content
      description: Given a Confluence page ID, return the page title and body content. Use for documentation audits or knowledge extraction.
      inputParameters:
      - name: page_id
        in: body
        type: string
        description: The Confluence page ID.
      call: confluence-docs.get-page
      with:
        page_id: '{{page_id}}'
      outputParameters:
      - name: title
        type: string
        mapping: $.title
      - name: body
        type: string
        mapping: $.body.storage.value
  consumes:
  - type: http
    namespace: confluence-docs
    baseUri: https://bloomberg.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
Open in Framework → View in Fleet → confluence-page-content-retrieval.yml

When a data quality check fails in Snowflake for Bloomberg market data, creates a Jira ticket, notifies the data engineering team on Slack, and logs the incident in ServiceNow.

naftiko: '0.5'
info:
  label: Bloomberg Data Quality Alert Handler
  description: When a data quality check fails in Snowflake for Bloomberg market data, creates a Jira ticket, notifies the data engineering team on Slack, and logs the incident in ServiceNow.
  tags:
  - data-quality
  - snowflake
  - jira
  - slack
  - bloomberg-data
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: handle-data-quality-alert
      description: Given a failed data quality check name and affected dataset, create a Jira ticket for data engineering, post to Slack, and log a ServiceNow incident.
      inputParameters:
      - name: check_name
        in: body
        type: string
        description: The name of the failed data quality check.
      - name: dataset
        in: body
        type: string
        description: The affected Snowflake dataset, e.g. 'BLOOMBERG.MARKET_DATA.EQUITIES'.
      - name: error_details
        in: body
        type: string
        description: Details about the data quality failure.
      steps:
      - name: create-jira-ticket
        type: call
        call: jira-dq.create-issue
        with:
          project: DATAQUAL
          summary: 'Data quality failure: {{check_name}} on {{dataset}}'
          description: '{{error_details}}'
          issue_type: Bug
          priority: High
      - name: notify-slack
        type: call
        call: slack-dq.post-message
        with:
          channel: data-quality-alerts
          text: 'Data quality alert: {{check_name}} failed on {{dataset}}. Jira: {{create-jira-ticket.key}}. Details: {{error_details}}'
      - name: log-incident
        type: call
        call: snow-dq.create-incident
        with:
          short_description: 'Data quality failure: {{check_name}}'
          description: 'Dataset: {{dataset}}. Jira: {{create-jira-ticket.key}}. {{error_details}}'
          category: data_quality
  consumes:
  - type: http
    namespace: jira-dq
    baseUri: https://bloomberg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-dq
    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: snow-dq
    baseUri: https://bloomberg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → bloomberg-data-quality-alert-handler.yml

Generates a sprint planning digest from Jira by fetching open issues for a project, grouping by assignee and priority, and posting the summary to the team Slack channel.

naftiko: '0.5'
info:
  label: Jira Sprint Planning Board Digest
  description: Generates a sprint planning digest from Jira by fetching open issues for a project, grouping by assignee and priority, and posting the summary to the team Slack channel.
  tags:
  - devops
  - jira
  - slack
  - sprint-planning
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: sprint-reporting
    port: 8080
    tools:
    - name: digest-sprint-board
      description: Given a Jira project key and sprint ID, fetch all open issues, group by assignee and priority, and post a structured sprint summary to the designated Slack channel. Use at the start of sprint planning sessions.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The Jira project key, e.g. 'BTECH'.
      - name: sprint_id
        in: body
        type: integer
        description: The Jira sprint ID for the planning session.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel name to post the sprint digest to.
      steps:
      - name: get-issues
        type: call
        call: jira.search-issues
        with:
          jql: project={{project_key}} AND sprint={{sprint_id}} AND status != Done
      - name: post-digest
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Sprint {{sprint_id}} digest for {{project_key}}: {{get-issues.total}} open issues.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bloomberg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issue-search
      path: /search
      operations:
      - name: search-issues
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → jira-sprint-planning-board-digest.yml

Retrieves the current status, assignee, and priority of a Jira ticket for use in status reporting and triage workflows.

naftiko: '0.5'
info:
  label: Jira Ticket Status Lookup
  description: Retrieves the current status, assignee, and priority of a Jira ticket for use in status reporting and triage workflows.
  tags:
  - project-management
  - jira
  - ticket-tracking
capability:
  exposes:
  - type: mcp
    namespace: jira-ops
    port: 8080
    tools:
    - name: get-ticket-status
      description: Given a Jira issue key, return its status, assignee, and priority. Use for quick status checks during standups or incident reviews.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: The Jira issue key, e.g. 'BBERG-1234'.
      call: jira-lookup.get-issue
      with:
        issue_key: '{{issue_key}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.fields.status.name
      - name: assignee
        type: string
        mapping: $.fields.assignee.displayName
      - name: priority
        type: string
        mapping: $.fields.priority.name
  consumes:
  - type: http
    namespace: jira-lookup
    baseUri: https://bloomberg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-ticket-status-lookup.yml

When an AWS budget threshold is breached, captures cost breakdown, creates a Jira cost investigation ticket, and alerts the cloud operations team on Slack.

naftiko: '0.5'
info:
  label: AWS Cost Budget Breach Handler
  description: When an AWS budget threshold is breached, captures cost breakdown, creates a Jira cost investigation ticket, and alerts the cloud operations team on Slack.
  tags:
  - cloud
  - aws
  - jira
  - slack
  - cost-management
capability:
  exposes:
  - type: mcp
    namespace: cloud-cost-ops
    port: 8080
    tools:
    - name: handle-budget-breach
      description: Given an AWS budget breach event, create a Jira investigation ticket and alert cloud ops on Slack.
      inputParameters:
      - name: budget_name
        in: body
        type: string
        description: The AWS budget name that was breached.
      - name: actual_spend
        in: body
        type: string
        description: The actual spend amount.
      - name: budget_limit
        in: body
        type: string
        description: The budget limit.
      steps:
      - name: create-ticket
        type: call
        call: jira-cloud.create-issue
        with:
          project: CLOUD
          summary: 'AWS budget breach: {{budget_name}} ({{actual_spend}}/{{budget_limit}})'
          description: 'Budget {{budget_name}} exceeded. Actual: {{actual_spend}}, Limit: {{budget_limit}}.'
          priority: High
      - name: alert-team
        type: call
        call: slack-cloud.post-message
        with:
          channel: cloud-operations
          text: 'AWS BUDGET BREACH: {{budget_name}} at {{actual_spend}} (limit: {{budget_limit}}). Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: jira-cloud
    baseUri: https://bloomberg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-cloud
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → aws-cost-budget-breach-handler.yml

Creates a new Confluence knowledge base article from a structured template when a resolved ServiceNow incident has a post-mortem, ensuring institutional knowledge is captured.

naftiko: '0.5'
info:
  label: Confluence Knowledge Base Article Publisher
  description: Creates a new Confluence knowledge base article from a structured template when a resolved ServiceNow incident has a post-mortem, ensuring institutional knowledge is captured.
  tags:
  - itsm
  - knowledge-management
  - confluence
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: kb-management
    port: 8080
    tools:
    - name: publish-incident-postmortem
      description: Given a resolved ServiceNow incident number and Confluence space key, retrieve the incident details and create a post-mortem knowledge article in Confluence. Use after P1/P2 incidents are resolved to capture learnings.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The resolved ServiceNow incident number, e.g. 'INC0012345'.
      - name: confluence_space_key
        in: body
        type: string
        description: The Confluence space key where the article will be created, e.g. 'INFRA'.
      steps:
      - name: get-incident
        type: call
        call: servicenow.get-incident
        with:
          number: '{{incident_number}}'
      - name: create-article
        type: call
        call: confluence.create-page
        with:
          space_key: '{{confluence_space_key}}'
          title: 'Post-mortem: {{incident_number}} — {{get-incident.short_description}}'
          body: 'Incident: {{incident_number}}

            Description: {{get-incident.short_description}}

            Resolution: {{get-incident.close_notes}}

            Duration: {{get-incident.resolved_at}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bloomberg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: get-incident
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://bloomberg.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → confluence-knowledge-base-article-publisher.yml

Queries Snowflake to detect stale or failed data pipeline runs, and opens a Jira task for the data engineering team when SLA breach is detected.

naftiko: '0.5'
info:
  label: Snowflake Data Pipeline Health Check
  description: Queries Snowflake to detect stale or failed data pipeline runs, and opens a Jira task for the data engineering team when SLA breach is detected.
  tags:
  - data
  - analytics
  - snowflake
  - jira
  - monitoring
  - data-quality
capability:
  exposes:
  - type: mcp
    namespace: data-ops
    port: 8080
    tools:
    - name: check-pipeline-health
      description: Given a Snowflake pipeline name and expected SLA in minutes, check if the most recent run completed within SLA. If breached, create a Jira task for the data engineering team. Use for scheduled data pipeline SLA monitoring.
      inputParameters:
      - name: pipeline_name
        in: body
        type: string
        description: The Snowflake task or pipeline name to check.
      - name: sla_minutes
        in: body
        type: integer
        description: The maximum allowed minutes since last successful run.
      steps:
      - name: check-run
        type: call
        call: snowflake.query-task-history
        with:
          task_name: '{{pipeline_name}}'
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project_key: DATA
          issuetype: Task
          summary: 'Pipeline SLA breach: {{pipeline_name}} exceeded {{sla_minutes}} minutes'
          description: 'Pipeline {{pipeline_name}} last successful run: {{check-run.last_success_time}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bloomberg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: task-history
      path: /databases/bloomberg/schemas/monitoring/tasks/{{task_name}}/history
      inputParameters:
      - name: task_name
        in: path
      operations:
      - name: query-task-history
        method: GET
  - type: http
    namespace: jira
    baseUri: https://bloomberg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → snowflake-data-pipeline-health-check.yml

When a new GitHub release is tagged, generates structured release notes from merged PRs since the last release and publishes them to Confluence and the engineering Slack channel.

naftiko: '0.5'
info:
  label: GitHub Release Notes Publisher
  description: When a new GitHub release is tagged, generates structured release notes from merged PRs since the last release and publishes them to Confluence and the engineering Slack channel.
  tags:
  - devops
  - github
  - confluence
  - slack
  - release-management
capability:
  exposes:
  - type: mcp
    namespace: release-management
    port: 8080
    tools:
    - name: publish-release-notes
      description: Given a GitHub repository and release tag, fetch merged PRs since the previous tag, compile structured release notes, publish to Confluence, and announce in the engineering Slack channel. Use when a new production release is cut.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository full name, e.g. 'bloomberg/bde'.
      - name: release_tag
        in: body
        type: string
        description: The new release tag, e.g. 'v3.2.1'.
      - name: confluence_space_key
        in: body
        type: string
        description: The Confluence space key where release notes will be published.
      steps:
      - name: get-prs
        type: call
        call: github.list-merged-prs
        with:
          repo: '{{repo}}'
          tag: '{{release_tag}}'
      - name: publish-notes
        type: call
        call: confluence.create-page
        with:
          space_key: '{{confluence_space_key}}'
          title: 'Release Notes: {{repo}} {{release_tag}}'
          body: Release {{release_tag}} — {{get-prs.count}} PRs merged.
      - name: announce
        type: call
        call: slack.post-message
        with:
          channel: engineering-releases
          text: '{{repo}} {{release_tag}} released. Release notes: {{publish-notes.url}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: pulls
      path: /repos/{{repo}}/pulls
      inputParameters:
      - name: repo
        in: path
      operations:
      - name: list-merged-prs
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://bloomberg.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → github-release-notes-publisher.yml

When a GitHub Actions pipeline fails on a protected branch, creates a Jira bug, posts an alert to Slack, and logs a PagerDuty incident for on-call engineers.

naftiko: '0.5'
info:
  label: CI/CD Pipeline Failure Handler
  description: When a GitHub Actions pipeline fails on a protected branch, creates a Jira bug, posts an alert to Slack, and logs a PagerDuty incident for on-call engineers.
  tags:
  - devops
  - cicd
  - github
  - jira
  - slack
  - pagerduty
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: devops-ops
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a GitHub Actions pipeline failure event on a protected branch, create a Jira bug, post a Slack alert to the engineering channel, and trigger a PagerDuty incident. Invoke immediately when a critical pipeline fails.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository name, e.g. 'bloomberg/comdb2'.
      - name: branch
        in: body
        type: string
        description: The Git branch where the failure occurred.
      - name: run_id
        in: body
        type: string
        description: The GitHub Actions run ID of the failed workflow.
      - name: commit_sha
        in: body
        type: string
        description: The full Git commit SHA that triggered the pipeline.
      - name: failed_job
        in: body
        type: string
        description: The name of the failed job within the workflow.
      steps:
      - name: create-bug
        type: call
        call: jira.create-issue
        with:
          project_key: ENG
          issuetype: Bug
          summary: '[CI Failure] {{repo}} / {{branch}} — {{failed_job}}'
          description: 'Run: {{run_id}}

            Commit: {{commit_sha}}

            Branch: {{branch}}'
      - name: post-slack
        type: call
        call: slack.post-message
        with:
          channel: engineering-alerts
          text: 'Pipeline failure in {{repo}} on {{branch}}. Job: {{failed_job}} | Jira: {{create-bug.key}} | Run: {{run_id}}'
      - name: trigger-pagerduty
        type: call
        call: pagerduty.create-incident
        with:
          title: 'CI Failure: {{repo}} {{branch}} {{failed_job}}'
          service_id: $secrets.pagerduty_engineering_service_id
          body: 'Jira: {{create-bug.key}} | Run: {{run_id}} | Commit: {{commit_sha}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bloomberg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → ci-cd-pipeline-failure-handler.yml

When a Bloomberg client requests data access, creates a ServiceNow request, triggers manager approval in Slack, and provisions Okta access upon approval.

naftiko: '0.5'
info:
  label: Client Data Access Request Workflow
  description: When a Bloomberg client requests data access, creates a ServiceNow request, triggers manager approval in Slack, and provisions Okta access upon approval.
  tags:
  - access-management
  - servicenow
  - slack
  - okta
  - data-governance
capability:
  exposes:
  - type: mcp
    namespace: data-access
    port: 8080
    tools:
    - name: process-data-access-request
      description: Given a client data access request, create a ServiceNow ticket, notify the data steward for approval, and provision Okta access.
      inputParameters:
      - name: requester_email
        in: body
        type: string
        description: Email of the person requesting access.
      - name: dataset_name
        in: body
        type: string
        description: The Bloomberg dataset being requested.
      - name: business_justification
        in: body
        type: string
        description: Business justification for access.
      steps:
      - name: create-request
        type: call
        call: snow-access.create-request
        with:
          short_description: 'Data access request: {{dataset_name}}'
          description: 'Requester: {{requester_email}}. Dataset: {{dataset_name}}. Justification: {{business_justification}}'
          category: data_access
      - name: notify-steward
        type: call
        call: slack-access.post-message
        with:
          channel: data-governance-approvals
          text: 'New data access request: {{requester_email}} requests access to {{dataset_name}}. SNOW: {{create-request.number}}. Justification: {{business_justification}}'
      - name: provision-access
        type: call
        call: okta-access.add-user-to-group
        with:
          email: '{{requester_email}}'
          group: dataset-{{dataset_name}}-readers
  consumes:
  - type: http
    namespace: snow-access
    baseUri: https://bloomberg.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-access
    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: okta-access
    baseUri: https://bloomberg.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: groups
      path: /groups/{group_id}/users
      operations:
      - name: add-user-to-group
        method: PUT
Open in Framework → View in Fleet → client-data-access-request-workflow.yml

When Okta detects a suspicious login, blocks the session, creates a ServiceNow security incident, and alerts the security team on Slack.

naftiko: '0.5'
info:
  label: Okta Suspicious Login Response
  description: When Okta detects a suspicious login, blocks the session, creates a ServiceNow security incident, and alerts the security team on Slack.
  tags:
  - security
  - okta
  - servicenow
  - slack
  - threat-detection
capability:
  exposes:
  - type: mcp
    namespace: security-response
    port: 8080
    tools:
    - name: handle-suspicious-login
      description: Given an Okta suspicious login event, block the session, create a security incident, and notify the security team.
      inputParameters:
      - name: user_email
        in: body
        type: string
        description: The email of the user with suspicious activity.
      - name: event_type
        in: body
        type: string
        description: The type of suspicious event detected.
      - name: ip_address
        in: body
        type: string
        description: The source IP address.
      steps:
      - name: block-session
        type: call
        call: okta-sec.clear-user-sessions
        with:
          email: '{{user_email}}'
      - name: create-incident
        type: call
        call: snow-sec.create-incident
        with:
          short_description: 'Suspicious login: {{user_email}} from {{ip_address}}'
          description: 'Event: {{event_type}}. User sessions cleared. IP: {{ip_address}}'
          category: security
          urgency: '1'
      - name: alert-security
        type: call
        call: slack-sec.post-message
        with:
          channel: security-alerts
          text: 'SUSPICIOUS LOGIN: {{user_email}} from {{ip_address}}. Event: {{event_type}}. Sessions cleared. Incident: {{create-incident.number}}'
  consumes:
  - type: http
    namespace: okta-sec
    baseUri: https://bloomberg.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: sessions
      path: /users/{{email}}/sessions
      inputParameters:
      - name: email
        in: path
      operations:
      - name: clear-user-sessions
        method: DELETE
  - type: http
    namespace: snow-sec
    baseUri: https://bloomberg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: slack-sec
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → okta-suspicious-login-response.yml

Checks the payment status of a vendor invoice in SAP to verify whether it has been processed or is pending.

naftiko: '0.5'
info:
  label: SAP Vendor Payment Status
  description: Checks the payment status of a vendor invoice in SAP to verify whether it has been processed or is pending.
  tags:
  - erp
  - sap
  - accounts-payable
  - finance
capability:
  exposes:
  - type: mcp
    namespace: ap-ops
    port: 8080
    tools:
    - name: get-payment-status
      description: Given a SAP vendor invoice number, return its payment status and date. Use for vendor payment inquiries.
      inputParameters:
      - name: invoice_number
        in: body
        type: string
        description: The SAP vendor invoice number.
      call: sap-ap.get-invoice-status
      with:
        invoice: '{{invoice_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.payment_status
      - name: payment_date
        type: string
        mapping: $.clearing_date
  consumes:
  - type: http
    namespace: sap-ap
    baseUri: https://sap.bloomberg.com/sap/opu/odata/sap
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: invoices
      path: /API_SUPPLIER_INVOICE_SRV/A_SupplierInvoice('{{invoice}}')
      inputParameters:
      - name: invoice
        in: path
      operations:
      - name: get-invoice-status
        method: GET
Open in Framework → View in Fleet → sap-vendor-payment-status.yml

When a new GitHub release is published, triggers a Harness deployment pipeline, updates the Jira release ticket, and posts deployment status to the engineering Slack channel.

naftiko: '0.5'
info:
  label: GitHub Release Deployment Tracker
  description: When a new GitHub release is published, triggers a Harness deployment pipeline, updates the Jira release ticket, and posts deployment status to the engineering Slack channel.
  tags:
  - cicd
  - github
  - harness
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: deploy-ops
    port: 8080
    tools:
    - name: track-release-deployment
      description: Given a GitHub release tag, trigger the Harness deployment, update Jira, and notify Slack.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository name.
      - name: release_tag
        in: body
        type: string
        description: The release tag, e.g. 'v2.5.0'.
      - name: jira_release_ticket
        in: body
        type: string
        description: The Jira release ticket key.
      steps:
      - name: trigger-deploy
        type: call
        call: harness-deploy.trigger-pipeline
        with:
          pipeline: '{{repo}}-production'
          tag: '{{release_tag}}'
      - name: update-jira
        type: call
        call: jira-release.update-issue
        with:
          issue_key: '{{jira_release_ticket}}'
          status: Deploying
          comment: Deployment triggered for {{release_tag}} via Harness.
      - name: notify-engineering
        type: call
        call: slack-eng.post-message
        with:
          channel: engineering-releases
          text: 'Deployment started: {{repo}} {{release_tag}}. Harness pipeline: {{trigger-deploy.execution_url}}. Jira: {{jira_release_ticket}}'
  consumes:
  - type: http
    namespace: harness-deploy
    baseUri: https://app.harness.io/gateway/api
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.harness_api_key
      placement: header
    resources:
    - name: pipelines
      path: /pipelines/execute
      operations:
      - name: trigger-pipeline
        method: POST
  - type: http
    namespace: jira-release
    baseUri: https://bloomberg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: update-issue
        method: PUT
  - type: http
    namespace: slack-eng
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → github-release-deployment-tracker.yml

Checks whether branch protection rules are enabled on a given GitHub repository's main branch.

naftiko: '0.5'
info:
  label: GitHub Repo Branch Protection Check
  description: Checks whether branch protection rules are enabled on a given GitHub repository's main branch.
  tags:
  - security
  - github
  - compliance
  - branch-protection
capability:
  exposes:
  - type: mcp
    namespace: github-security
    port: 8080
    tools:
    - name: check-branch-protection
      description: Given a GitHub repository name, return the branch protection settings for the main branch. Use during security audits.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: The GitHub repository name, e.g. 'bloomberg/memray'.
      call: gh-protection.get-branch-protection
      with:
        repo: '{{repo_name}}'
      outputParameters:
      - name: enforce_admins
        type: boolean
        mapping: $.enforce_admins.enabled
      - name: required_reviews
        type: integer
        mapping: $.required_pull_request_reviews.required_approving_review_count
  consumes:
  - type: http
    namespace: gh-protection
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: branch-protection
      path: /repos/{{repo}}/branches/main/protection
      inputParameters:
      - name: repo
        in: path
      operations:
      - name: get-branch-protection
        method: GET
Open in Framework → View in Fleet → github-repo-branch-protection-check.yml

Identifies Okta users in a given group who have not enrolled in MFA, sends them a Teams reminder, and escalates to their manager in Workday if enrollment is not completed within 24 hours.

naftiko: '0.5'
info:
  label: Okta MFA Enrollment Enforcement
  description: Identifies Okta users in a given group who have not enrolled in MFA, sends them a Teams reminder, and escalates to their manager in Workday if enrollment is not completed within 24 hours.
  tags:
  - identity
  - security
  - okta
  - workday
  - microsoft-teams
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: security-compliance
    port: 8080
    tools:
    - name: enforce-mfa-enrollment
      description: Given an Okta group ID, find users without MFA enrolled, send them a Teams message requesting enrollment, and identify their Workday managers for escalation. Use for security compliance enforcement cycles.
      inputParameters:
      - name: okta_group_id
        in: body
        type: string
        description: The Okta group ID to audit for MFA enrollment.
      steps:
      - name: list-group-users
        type: call
        call: okta.list-group-members
        with:
          group_id: '{{okta_group_id}}'
      - name: notify-users
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{list-group-users.email}}'
          text: 'Action required: Please enroll in MFA within 24 hours to maintain Bloomberg system access.'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://bloomberg.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: group-members
      path: /groups/{{group_id}}/users
      inputParameters:
      - name: group_id
        in: path
      operations:
      - name: list-group-members
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → okta-mfa-enrollment-enforcement.yml

Executes a parameterized query against Bloomberg market data stored in Snowflake and returns the result set for analytics dashboards.

naftiko: '0.5'
info:
  label: Snowflake Market Data Query
  description: Executes a parameterized query against Bloomberg market data stored in Snowflake and returns the result set for analytics dashboards.
  tags:
  - snowflake
  - market-data
  - analytics
  - financial-data
capability:
  exposes:
  - type: mcp
    namespace: market-data
    port: 8080
    tools:
    - name: query-market-data
      description: Given a SQL query template and parameters, execute against the Bloomberg market data warehouse in Snowflake. Use for ad-hoc market data analysis.
      inputParameters:
      - name: query
        in: body
        type: string
        description: Parameterized SQL query to execute.
      - name: warehouse
        in: body
        type: string
        description: Snowflake warehouse name, e.g. 'BLOOMBERG_ANALYTICS'.
      call: snowflake-mkt.execute-query
      with:
        query: '{{query}}'
        warehouse: '{{warehouse}}'
      outputParameters:
      - name: rows
        type: array
        mapping: $.data
      - name: row_count
        type: integer
        mapping: $.rowCount
  consumes:
  - type: http
    namespace: snowflake-mkt
    baseUri: https://bloomberg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: queries
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → snowflake-market-data-query.yml

Lists all published Tableau workbooks in a specified project for dashboard inventory and governance reporting.

naftiko: '0.5'
info:
  label: Tableau Workbook List
  description: Lists all published Tableau workbooks in a specified project for dashboard inventory and governance reporting.
  tags:
  - analytics
  - tableau
  - governance
capability:
  exposes:
  - type: mcp
    namespace: bi-governance
    port: 8080
    tools:
    - name: list-workbooks
      description: Given a Tableau project name, return all published workbooks. Use for dashboard inventory audits.
      inputParameters:
      - name: project_name
        in: body
        type: string
        description: The Tableau project name.
      call: tableau-list.get-workbooks
      with:
        project: '{{project_name}}'
      outputParameters:
      - name: workbooks
        type: array
        mapping: $.workbooks.workbook
      - name: count
        type: integer
        mapping: $.pagination.totalAvailable
  consumes:
  - type: http
    namespace: tableau-list
    baseUri: https://tableau.bloomberg.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/{site_id}/workbooks
      operations:
      - name: get-workbooks
        method: GET
Open in Framework → View in Fleet → tableau-workbook-list.yml

When a new hire starts, provisions their Okta account, creates GitHub org membership, assigns Jira project access, and notifies the hiring manager on Slack.

naftiko: '0.5'
info:
  label: New Hire IT Provisioning Orchestrator
  description: When a new hire starts, provisions their Okta account, creates GitHub org membership, assigns Jira project access, and notifies the hiring manager on Slack.
  tags:
  - hr
  - onboarding
  - okta
  - github
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: it-provisioning
    port: 8080
    tools:
    - name: provision-new-hire
      description: Given new hire details, create Okta account, add to GitHub org, assign Jira access, and notify hiring manager via Slack.
      inputParameters:
      - name: employee_name
        in: body
        type: string
        description: The new hire's full name.
      - name: email
        in: body
        type: string
        description: The new hire's corporate email.
      - name: department
        in: body
        type: string
        description: The department the new hire is joining.
      - name: manager_slack_id
        in: body
        type: string
        description: Slack user ID of the hiring manager.
      steps:
      - name: create-okta-user
        type: call
        call: okta-prov.create-user
        with:
          email: '{{email}}'
          firstName: '{{employee_name}}'
          department: '{{department}}'
      - name: add-github-member
        type: call
        call: gh-prov.add-org-member
        with:
          username: '{{email}}'
          role: member
      - name: add-jira-access
        type: call
        call: jira-prov.add-user-to-group
        with:
          email: '{{email}}'
          group: '{{department}}-developers'
      - name: notify-manager
        type: call
        call: slack-prov.post-message
        with:
          channel: '{{manager_slack_id}}'
          text: IT provisioning complete for {{employee_name}} ({{email}}). Okta, GitHub, and Jira access have been configured.
  consumes:
  - type: http
    namespace: okta-prov
    baseUri: https://bloomberg.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: users
      path: /users
      operations:
      - name: create-user
        method: POST
  - type: http
    namespace: gh-prov
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: members
      path: /orgs/bloomberg/memberships/{{username}}
      inputParameters:
      - name: username
        in: path
      operations:
      - name: add-org-member
        method: PUT
  - type: http
    namespace: jira-prov
    baseUri: https://bloomberg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: groups
      path: /group/user
      operations:
      - name: add-user-to-group
        method: POST
  - type: http
    namespace: slack-prov
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → new-hire-it-provisioning-orchestrator.yml

Pulls earnings data from Bloomberg Company Financials, generates an executive summary via Anthropic, and publishes it to a Confluence page for analyst review.

naftiko: '0.5'
info:
  label: Quarterly Earnings Report Assembler
  description: Pulls earnings data from Bloomberg Company Financials, generates an executive summary via Anthropic, and publishes it to a Confluence page for analyst review.
  tags:
  - financial-data
  - bloomberg-company-financials
  - anthropic
  - confluence
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: earnings-ops
    port: 8080
    tools:
    - name: assemble-earnings-report
      description: Given a company ticker and quarter, pull Bloomberg earnings data, generate an AI summary, and publish to Confluence.
      inputParameters:
      - name: ticker
        in: body
        type: string
        description: The Bloomberg company ticker, e.g. 'MSFT US Equity'.
      - name: quarter
        in: body
        type: string
        description: The fiscal quarter, e.g. 'Q1 2026'.
      steps:
      - name: pull-earnings
        type: call
        call: bbg-earn.get-earnings
        with:
          ticker: '{{ticker}}'
          period: '{{quarter}}'
      - name: generate-summary
        type: call
        call: anthropic-earn.create-message
        with:
          model: claude-opus-4-5
          max_tokens: 2048
          system: You are a financial analyst. Write a concise earnings summary.
          content: 'Summarize these earnings for {{ticker}} {{quarter}}: {{pull-earnings.data}}'
      - name: publish-page
        type: call
        call: confluence-earn.create-page
        with:
          space: RESEARCH
          title: 'Earnings Summary: {{ticker}} {{quarter}}'
          body: '{{generate-summary.content}}'
  consumes:
  - type: http
    namespace: bbg-earn
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/data
    authentication:
      type: bearer
      token: $secrets.bloomberg_data_token
    resources:
    - name: earnings
      path: /fields/{{ticker}}/earnings
      inputParameters:
      - name: ticker
        in: path
      operations:
      - name: get-earnings
        method: GET
  - type: http
    namespace: anthropic-earn
    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: confluence-earn
    baseUri: https://bloomberg.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → quarterly-earnings-report-assembler.yml

Initiates a performance review cycle in Workday for a given department, creates a tracking Jira epic, and notifies HR business partners via Teams.

naftiko: '0.5'
info:
  label: Workday Performance Review Cycle Kickoff
  description: Initiates a performance review cycle in Workday for a given department, creates a tracking Jira epic, and notifies HR business partners via Teams.
  tags:
  - hr
  - performance-management
  - workday
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-performance
    port: 8080
    tools:
    - name: kickoff-review-cycle
      description: Given a department ID and review cycle period, initiate the performance review process in Workday, create a Jira tracking epic, and notify relevant HR business partners in Teams. Use at the start of each semi-annual review cycle.
      inputParameters:
      - name: department_id
        in: body
        type: string
        description: The Workday department ID for which to initiate the review cycle.
      - name: review_period
        in: body
        type: string
        description: The review period label, e.g. 'H1-2026'.
      steps:
      - name: initiate-review
        type: call
        call: workday.create-review-process
        with:
          department_id: '{{department_id}}'
          period: '{{review_period}}'
      - name: create-epic
        type: call
        call: jira.create-issue
        with:
          project_key: HR
          issuetype: Epic
          summary: Performance Review {{review_period}} — Dept {{department_id}}
      - name: notify-hrbp
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.hrbp_teams_channel_id
          text: 'Performance review cycle {{review_period}} has been initiated for department {{department_id}}. Jira epic: {{create-epic.key}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: review-processes
      path: /bloomberg/performanceManagement/reviewProcesses
      operations:
      - name: create-review-process
        method: POST
  - type: http
    namespace: jira
    baseUri: https://bloomberg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → workday-performance-review-cycle-kickoff.yml

When a change request is submitted in ServiceNow for a production system, retrieves the risk assessment and routes to the appropriate Change Advisory Board approvers via Teams.

naftiko: '0.5'
info:
  label: Change Management Approval Gate
  description: When a change request is submitted in ServiceNow for a production system, retrieves the risk assessment and routes to the appropriate Change Advisory Board approvers via Teams.
  tags:
  - itsm
  - change-management
  - servicenow
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: change-management
    port: 8080
    tools:
    - name: route-change-request
      description: Given a ServiceNow change request number, retrieve the risk level and CAB group, notify the appropriate approvers via Teams, and update the change record with routing confirmation. Use when a change request needs CAB review.
      inputParameters:
      - name: change_number
        in: body
        type: string
        description: The ServiceNow change request number, e.g. 'CHG0001234'.
      steps:
      - name: get-change
        type: call
        call: servicenow.get-change
        with:
          number: '{{change_number}}'
      - name: notify-cab
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.cab_teams_channel_id
          text: 'CAB Review Required: {{change_number}} — {{get-change.short_description}} | Risk: {{get-change.risk}} | Planned: {{get-change.start_date}}'
      - name: update-change
        type: call
        call: servicenow-update.patch-change
        with:
          sys_id: '{{get-change.sys_id}}'
          state: '2'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bloomberg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: get-change
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
  - type: http
    namespace: servicenow-update
    baseUri: https://bloomberg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-patch
      path: /table/change_request/{{sys_id}}
      inputParameters:
      - name: sys_id
        in: path
      operations:
      - name: patch-change
        method: PATCH
Open in Framework → View in Fleet → change-management-approval-gate.yml

Given a batch of Bloomberg news articles, uses the Anthropic API to generate concise executive summaries and stores the results in Snowflake for downstream analytics.

naftiko: '0.5'
info:
  label: AI-Assisted News Article Summarizer
  description: Given a batch of Bloomberg news articles, uses the Anthropic API to generate concise executive summaries and stores the results in Snowflake for downstream analytics.
  tags:
  - ai
  - automation
  - anthropic
  - snowflake
  - content
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: ai-content
    port: 8080
    tools:
    - name: summarize-articles
      description: Given a list of article IDs and a target Snowflake table, retrieve article content, generate executive summaries via Anthropic Claude, and store results in Snowflake. Use for automated editorial summarization pipelines.
      inputParameters:
      - name: article_ids
        in: body
        type: string
        description: Comma-separated list of Bloomberg article IDs to summarize.
      - name: snowflake_table
        in: body
        type: string
        description: The fully-qualified Snowflake table name for storing summaries, e.g. 'BLOOMBERG.CONTENT.ARTICLE_SUMMARIES'.
      steps:
      - name: generate-summary
        type: call
        call: anthropic.create-message
        with:
          model: claude-opus-4-5
          max_tokens: 1024
          system: You are a financial news summarizer. Provide concise executive summaries.
          content: 'Summarize the following Bloomberg articles: {{article_ids}}'
      - name: store-results
        type: call
        call: snowflake.insert-rows
        with:
          table: '{{snowflake_table}}'
          data: '{{generate-summary.content}}'
  consumes:
  - type: http
    namespace: anthropic
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: messages
      path: /messages
      operations:
      - name: create-message
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://bloomberg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: rows
      path: /databases/bloomberg/schemas/content/tables/{{table}}/insertRows
      inputParameters:
      - name: table
        in: path
      operations:
      - name: insert-rows
        method: POST
Open in Framework → View in Fleet → ai-assisted-news-article-summarizer.yml

Monitors Bloomberg EMSX for unusual order patterns, creates a ServiceNow investigation, alerts the trading desk on Slack, and logs the anomaly in Snowflake.

naftiko: '0.5'
info:
  label: Bloomberg EMSX Order Anomaly Detector
  description: Monitors Bloomberg EMSX for unusual order patterns, creates a ServiceNow investigation, alerts the trading desk on Slack, and logs the anomaly in Snowflake.
  tags:
  - trading
  - bloomberg-emsx
  - servicenow
  - slack
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: emsx-ops
    port: 8080
    tools:
    - name: detect-order-anomaly
      description: Given a Bloomberg EMSX order anomaly, create a ServiceNow investigation, alert the trading desk, and log to Snowflake.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The Bloomberg EMSX order ID.
      - name: anomaly_type
        in: body
        type: string
        description: The type of order anomaly detected.
      - name: security
        in: body
        type: string
        description: The affected security ticker.
      steps:
      - name: create-investigation
        type: call
        call: snow-emsx.create-incident
        with:
          short_description: 'EMSX order anomaly: {{anomaly_type}} on {{security}}'
          description: 'Order: {{order_id}}. Anomaly: {{anomaly_type}}. Security: {{security}}'
          category: trading_surveillance
          urgency: '1'
      - name: alert-desk
        type: call
        call: slack-emsx.post-message
        with:
          channel: trading-desk
          text: 'ORDER ANOMALY: {{anomaly_type}} on {{security}} (Order: {{order_id}}). Investigation: {{create-investigation.number}}'
      - name: log-anomaly
        type: call
        call: snowflake-emsx.insert-rows
        with:
          table: BLOOMBERG.SURVEILLANCE.ORDER_ANOMALIES
          data: '{"order_id": "{{order_id}}", "anomaly_type": "{{anomaly_type}}", "security": "{{security}}"}'
  consumes:
  - type: http
    namespace: snow-emsx
    baseUri: https://bloomberg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: slack-emsx
    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: snowflake-emsx
    baseUri: https://bloomberg.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: rows
      path: /databases/bloomberg/schemas/surveillance/tables/order_anomalies/insertRows
      operations:
      - name: insert-rows
        method: POST
Open in Framework → View in Fleet → bloomberg-emsx-order-anomaly-detector.yml

When a Databricks job fails, captures the error log, creates a Jira ticket for the data engineering team, and posts a failure summary to Slack.

naftiko: '0.5'
info:
  label: Databricks Job Failure Response
  description: When a Databricks job fails, captures the error log, creates a Jira ticket for the data engineering team, and posts a failure summary to Slack.
  tags:
  - data-engineering
  - databricks
  - jira
  - slack
  - pipeline
capability:
  exposes:
  - type: mcp
    namespace: data-pipeline-ops
    port: 8080
    tools:
    - name: handle-databricks-failure
      description: Given a failed Databricks run ID, retrieve the error, create a Jira ticket, and notify the data engineering team on Slack.
      inputParameters:
      - name: run_id
        in: body
        type: string
        description: The Databricks job run ID that failed.
      - name: job_name
        in: body
        type: string
        description: The name of the Databricks job.
      steps:
      - name: get-run-details
        type: call
        call: dbx-runs.get-run
        with:
          run_id: '{{run_id}}'
      - name: create-ticket
        type: call
        call: jira-data.create-issue
        with:
          project: DATA
          summary: 'Databricks job failure: {{job_name}}'
          description: 'Run ID: {{run_id}}. Error: {{get-run-details.state.state_message}}'
          priority: High
      - name: notify-team
        type: call
        call: slack-data.post-message
        with:
          channel: data-engineering
          text: 'Databricks job failed: {{job_name}} (Run: {{run_id}}). Error: {{get-run-details.state.state_message}}. Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: dbx-runs
    baseUri: https://bloomberg.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: runs
      path: /jobs/runs/get
      operations:
      - name: get-run
        method: GET
  - type: http
    namespace: jira-data
    baseUri: https://bloomberg.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-data
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → databricks-job-failure-response.yml

When a high-priority ServiceNow incident is raised, looks up the on-call engineer from PagerDuty and assigns the ticket, then posts a Slack alert with full incident context.

naftiko: '0.5'
info:
  label: ServiceNow Incident Triage and Escalation
  description: When a high-priority ServiceNow incident is raised, looks up the on-call engineer from PagerDuty and assigns the ticket, then posts a Slack alert with full incident context.
  tags:
  - itsm
  - incident-response
  - servicenow
  - pagerduty
  - slack
capability:
  exposes:
  - type: mcp
    namespace: itsm-ops
    port: 8080
    tools:
    - name: triage-incident
      description: Given a ServiceNow incident number, fetch incident details, look up the current on-call engineer via PagerDuty, assign the ticket to them, and post a Slack alert. Use for P1/P2 incidents requiring immediate triage.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number, e.g. 'INC0012345'.
      - name: priority
        in: body
        type: string
        description: 'The incident priority level: 1 (Critical), 2 (High), 3 (Medium).'
      steps:
      - name: get-incident
        type: call
        call: servicenow.get-incident
        with:
          number: '{{incident_number}}'
      - name: get-oncall
        type: call
        call: pagerduty.get-oncall-user
        with:
          schedule_id: $secrets.pagerduty_it_schedule_id
      - name: assign-incident
        type: call
        call: servicenow-assign.update-incident
        with:
          sys_id: '{{get-incident.sys_id}}'
          assigned_to: '{{get-oncall.user_email}}'
      - name: alert-slack
        type: call
        call: slack.post-message
        with:
          channel: it-incidents
          text: 'P{{priority}} Incident {{incident_number}}: {{get-incident.short_description}} assigned to {{get-oncall.user_name}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bloomberg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: get-incident
        method: GET
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: oncalls
      path: /oncalls
      operations:
      - name: get-oncall-user
        method: GET
  - type: http
    namespace: servicenow-assign
    baseUri: https://bloomberg.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incident-update
      path: /table/incident/{{sys_id}}
      inputParameters:
      - name: sys_id
        in: path
      operations:
      - name: update-incident
        method: PATCH
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-incident-triage-and-escalation.yml

Triggers an Apache Spark ETL job on Azure Databricks, monitors completion, validates output in PostgreSQL, and notifies the data team via Azure Event Hubs.

naftiko: '0.5'
info:
  label: Spark ETL Job Orchestration
  description: Triggers an Apache Spark ETL job on Azure Databricks, monitors completion, validates output in PostgreSQL, and notifies the data team via Azure Event Hubs.
  tags:
  - data-engineering
  - etl
  - apache-spark
  - azure-databricks
  - postgresql
  - azure-event-hubs
capability:
  exposes:
  - type: mcp
    namespace: etl-ops
    port: 8080
    tools:
    - name: run-etl-pipeline
      description: Run a Spark ETL job on Databricks, validate output data, and notify the data team.
      inputParameters:
      - name: job_name
        in: body
        type: string
        description: The Databricks job name.
      - name: source_table
        in: body
        type: string
        description: The source table for the ETL job.
      - name: target_table
        in: body
        type: string
        description: The target PostgreSQL table.
      steps:
      - name: run-spark-job
        type: call
        call: databricks.run-job
        with:
          job_name: '{{job_name}}'
          parameters: source={{source_table}}&target={{target_table}}
      - name: validate-output
        type: call
        call: postgresql.run-query
        with:
          query: SELECT COUNT(*) as row_count FROM {{target_table}} WHERE load_date = CURRENT_DATE
      - name: notify-team
        type: call
        call: eventhubs.send-event
        with:
          topic: etl-completions
          body: 'ETL job {{job_name}} completed. Databricks run: {{run-spark-job.run_id}}. Target: {{target_table}}. Rows loaded: {{validate-output.row_count}}.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://adb-bnpparibas.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: postgresql
    baseUri: https://pgrest.bnpparibas.net/api/v1
    authentication:
      type: bearer
      token: $secrets.pgrest_token
    resources:
    - name: queries
      path: /rpc/execute_query
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: eventhubs
    baseUri: https://bnpparibas-prod.servicebus.windows.net
    authentication:
      type: bearer
      token: $secrets.eventhubs_sas_token
    resources:
    - name: events
      path: /{{topic}}/messages
      inputParameters:
      - name: topic
        in: path
      operations:
      - name: send-event
        method: POST
Open in Framework → View in Fleet → spark-etl-job-orchestration.yml

On trade execution, captures the trade in Bloomberg AIM, books it in SimCorp Dimension, triggers settlement instruction generation in SAP, and notifies the middle office via ServiceNow.

naftiko: '0.5'
info:
  label: Trade Lifecycle Orchestrator
  description: On trade execution, captures the trade in Bloomberg AIM, books it in SimCorp Dimension, triggers settlement instruction generation in SAP, and notifies the middle office via ServiceNow.
  tags:
  - trading
  - trade-operations
  - bloomberg-aim
  - simcorp-dimension
  - sap
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: trade-lifecycle
    port: 8080
    tools:
    - name: process-trade
      description: Given a trade reference, capture it in Bloomberg AIM, book in SimCorp, generate settlement in SAP, and notify middle office.
      inputParameters:
      - name: trade_ref
        in: body
        type: string
        description: The trade reference identifier from the execution platform.
      - name: portfolio_code
        in: body
        type: string
        description: The portfolio code in SimCorp Dimension.
      - name: trader_id
        in: body
        type: string
        description: The trader's employee ID.
      steps:
      - name: capture-trade
        type: call
        call: bloomberg-aim.get-trade
        with:
          trade_ref: '{{trade_ref}}'
      - name: book-trade
        type: call
        call: simcorp.create-trade
        with:
          portfolio_code: '{{portfolio_code}}'
          instrument: '{{capture-trade.instrument}}'
          quantity: '{{capture-trade.quantity}}'
          price: '{{capture-trade.price}}'
          trade_date: '{{capture-trade.trade_date}}'
      - name: generate-settlement
        type: call
        call: sap.create-settlement
        with:
          trade_id: '{{book-trade.trade_id}}'
          counterparty: '{{capture-trade.counterparty}}'
          settlement_date: '{{capture-trade.settlement_date}}'
          amount: '{{capture-trade.net_amount}}'
      - name: notify-middle-office
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Trade booked: {{trade_ref}} — {{capture-trade.instrument}}'
          description: 'Trade {{trade_ref}} booked in SimCorp ({{book-trade.trade_id}}). Settlement {{generate-settlement.settlement_ref}} due {{capture-trade.settlement_date}}. Amount: {{capture-trade.net_amount}} {{capture-trade.currency}}.'
          assigned_group: Middle_Office
          category: trade_processing
  consumes:
  - type: http
    namespace: bloomberg-aim
    baseUri: https://aim.bloomberg.com/api/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_aim_token
    resources:
    - name: trades
      path: /trades/{{trade_ref}}
      inputParameters:
      - name: trade_ref
        in: path
      operations:
      - name: get-trade
        method: GET
  - type: http
    namespace: simcorp
    baseUri: https://simcorp.bnpparibas.net/api/v2
    authentication:
      type: bearer
      token: $secrets.simcorp_token
    resources:
    - name: trades
      path: /portfolios/{{portfolio_code}}/trades
      inputParameters:
      - name: portfolio_code
        in: path
      operations:
      - name: create-trade
        method: POST
  - type: http
    namespace: sap
    baseUri: https://bnp-s4.sap.com/sap/opu/odata/sap/FI_SETTLEMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: settlements
      path: /A_Settlement
      operations:
      - name: create-settlement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → trade-lifecycle-orchestrator.yml

Retrieves current positions for a given portfolio from SimCorp Dimension, returning instrument, quantity, market value, and currency.

naftiko: '0.5'
info:
  label: SimCorp Dimension Position Lookup
  description: Retrieves current positions for a given portfolio from SimCorp Dimension, returning instrument, quantity, market value, and currency.
  tags:
  - asset-management
  - portfolio-management
  - simcorp-dimension
capability:
  exposes:
  - type: mcp
    namespace: investment-ops
    port: 8080
    tools:
    - name: get-positions
      description: Retrieve current positions for a portfolio from SimCorp Dimension.
      inputParameters:
      - name: portfolio_code
        in: body
        type: string
        description: The SimCorp portfolio code.
      call: simcorp.get-positions
      with:
        portfolio_code: '{{portfolio_code}}'
      outputParameters:
      - name: positions
        type: string
        mapping: $.data.positions
      - name: total_market_value
        type: number
        mapping: $.data.totalMarketValue
  consumes:
  - type: http
    namespace: simcorp
    baseUri: https://simcorp.bnpparibas.net/api/v2
    authentication:
      type: bearer
      token: $secrets.simcorp_token
    resources:
    - name: positions
      path: /portfolios/{{portfolio_code}}/positions
      inputParameters:
      - name: portfolio_code
        in: path
      operations:
      - name: get-positions
        method: GET
Open in Framework → View in Fleet → simcorp-dimension-position-lookup.yml

Retrieves the backlog summary for a Jira project, returning total issues, priority distribution, and sprint velocity.

naftiko: '0.5'
info:
  label: Jira Project Backlog Summary
  description: Retrieves the backlog summary for a Jira project, returning total issues, priority distribution, and sprint velocity.
  tags:
  - project-management
  - jira
capability:
  exposes:
  - type: mcp
    namespace: jira-backlog
    port: 8080
    tools:
    - name: get-backlog
      description: Retrieve backlog summary for a Jira project.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The Jira project key.
      call: jira-backlog.search-issues
      with:
        jql: project = {{project_key}} AND sprint is EMPTY
  consumes:
  - type: http
    namespace: jira-backlog
    baseUri: https://bnpparibas.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
Open in Framework → View in Fleet → jira-project-backlog-summary.yml

Monitors Kafka payment events, scores transactions via Azure Machine Learning, blocks suspicious payments in Temenos, and alerts via ServiceNow.

naftiko: '0.5'
info:
  label: Real-Time Fraud Detection Pipeline
  description: Monitors Kafka payment events, scores transactions via Azure Machine Learning, blocks suspicious payments in Temenos, and alerts via ServiceNow.
  tags:
  - fraud
  - apache-kafka
  - azure-machine-learning
  - temenos-transact
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: fraud-detection
    port: 8080
    tools:
    - name: detect-fraud
      description: Score a transaction for fraud and take action.
      inputParameters:
      - name: transaction_id
        in: body
        type: string
        description: Transaction identifier.
      steps:
      - name: get-event
        type: call
        call: kafka.get-event
        with:
          topic: payments
          key: '{{transaction_id}}'
      - name: score-transaction
        type: call
        call: azure-ml.score
        with:
          features: '{{get-event.payload}}'
      - name: block-payment
        type: call
        call: temenos.hold-transaction
        with:
          transaction_id: '{{transaction_id}}'
          reason: 'Fraud score: {{score-transaction.score}}'
      - name: create-alert
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Fraud alert: {{transaction_id}}'
          description: 'Score: {{score-transaction.score}}. Amount: {{get-event.amount}}.'
          category: fraud
          urgency: '1'
  consumes:
  - type: http
    namespace: kafka
    baseUri: https://kafka-rest.bnpparibas.com/v3
    authentication:
      type: bearer
      token: $secrets.kafka_rest_token
    resources:
    - name: events
      path: /topics/{{topic}}/records/{{key}}
      inputParameters:
      - name: topic
        in: path
      - name: key
        in: path
      operations:
      - name: get-event
        method: GET
  - type: http
    namespace: azure-ml
    baseUri: https://ml-bnp.azureml.net/api/v1
    authentication:
      type: bearer
      token: $secrets.azure_ml_token
    resources:
    - name: scoring
      path: /models/fraud-detector/score
      operations:
      - name: score
        method: POST
  - type: http
    namespace: temenos
    baseUri: https://temenos.bnpparibas.com/api/v1
    authentication:
      type: bearer
      token: $secrets.temenos_token
    resources:
    - name: transactions
      path: /transactions/{{transaction_id}}/hold
      inputParameters:
      - name: transaction_id
        in: path
      operations:
      - name: hold-transaction
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → real-time-fraud-detection-pipeline.yml

Fetches opportunity details from Salesforce CRM by opportunity ID, returning stage, value, and expected close date.

naftiko: '0.5'
info:
  label: Salesforce Client Opportunity Lookup
  description: Fetches opportunity details from Salesforce CRM by opportunity ID, returning stage, value, and expected close date.
  tags:
  - sales
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: salesforce-crm
    port: 8080
    tools:
    - name: get-opportunity
      description: Retrieve a Salesforce opportunity by ID.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity identifier.
      call: salesforce-crm.get-opportunity
      with:
        opportunity_id: '{{opportunity_id}}'
  consumes:
  - type: http
    namespace: salesforce-crm
    baseUri: https://bnpparibas.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
Open in Framework → View in Fleet → salesforce-client-opportunity-lookup.yml

Closes accounts in Temenos, archives records in Azure Blob Storage, updates Salesforce CRM, and completes offboarding in ServiceNow.

naftiko: '0.5'
info:
  label: Client Offboarding Orchestrator
  description: Closes accounts in Temenos, archives records in Azure Blob Storage, updates Salesforce CRM, and completes offboarding in ServiceNow.
  tags:
  - operations
  - temenos-transact
  - azure-blob-storage
  - salesforce
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: client-offboarding
    port: 8080
    tools:
    - name: offboard-client
      description: Close client accounts and archive records.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: Salesforce client ID.
      steps:
      - name: get-client
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{client_id}}'
      - name: close-accounts
        type: call
        call: temenos.close-customer
        with:
          customer_id: '{{get-client.Temenos_ID__c}}'
      - name: archive-records
        type: call
        call: azure-blob.upload
        with:
          container: client-archives
          blob_name: '{{client_id}}/records.json'
      - name: complete-offboarding
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Client offboarding: {{get-client.Name}}'
          description: 'Accounts closed. Records archived. Salesforce: {{client_id}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://bnpparibas.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: temenos
    baseUri: https://temenos.bnpparibas.com/api/v1
    authentication:
      type: bearer
      token: $secrets.temenos_token
    resources:
    - name: customers
      path: /customers/{{customer_id}}/close
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: close-customer
        method: POST
  - type: http
    namespace: azure-blob
    baseUri: https://bnpdata.blob.core.windows.net
    authentication:
      type: bearer
      token: $secrets.azure_storage_token
    resources:
    - name: blobs
      path: /{{container}}/{{blob_name}}
      inputParameters:
      - name: container
        in: path
      - name: blob_name
        in: path
      operations:
      - name: upload
        method: PUT
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → client-offboarding-orchestrator.yml

Fetches FX rates from Bloomberg, executes hedging trades via Tradeweb, books in SimCorp Dimension, and confirms via SWIFT.

naftiko: '0.5'
info:
  label: FX Hedging Execution Workflow
  description: Fetches FX rates from Bloomberg, executes hedging trades via Tradeweb, books in SimCorp Dimension, and confirms via SWIFT.
  tags:
  - fx
  - bloomberg
  - tradeweb
  - simcorp-dimension
  - swift
capability:
  exposes:
  - type: mcp
    namespace: fx-hedging
    port: 8080
    tools:
    - name: execute-hedge
      description: Execute an FX hedge across Bloomberg, Tradeweb, SimCorp, and SWIFT.
      inputParameters:
      - name: currency_pair
        in: body
        type: string
        description: Currency pair (e.g. EUR/USD).
      - name: notional
        in: body
        type: number
        description: Notional amount.
      - name: portfolio_code
        in: body
        type: string
        description: SimCorp portfolio code.
      steps:
      - name: get-rate
        type: call
        call: bloomberg.get-fx-rate
        with:
          pair: '{{currency_pair}}'
      - name: execute-trade
        type: call
        call: tradeweb.submit-rfq
        with:
          currency_pair: '{{currency_pair}}'
          amount: '{{notional}}'
      - name: book-trade
        type: call
        call: simcorp.create-trade
        with:
          portfolio_code: '{{portfolio_code}}'
          instrument: '{{currency_pair}}'
          amount: '{{notional}}'
          rate: '{{execute-trade.rate}}'
      - name: confirm-trade
        type: call
        call: swift.send-mt300
        with:
          trade_ref: '{{book-trade.trade_id}}'
          counterparty: '{{execute-trade.counterparty_bic}}'
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/fields
    authentication:
      type: bearer
      token: $secrets.bloomberg_api_key
    resources:
    - name: fx
      path: /snapshots/{{pair}}
      inputParameters:
      - name: pair
        in: path
      operations:
      - name: get-fx-rate
        method: GET
  - type: http
    namespace: tradeweb
    baseUri: https://api.tradeweb.com/v1
    authentication:
      type: bearer
      token: $secrets.tradeweb_token
    resources:
    - name: rfqs
      path: /fx/rfq
      operations:
      - name: submit-rfq
        method: POST
  - type: http
    namespace: simcorp
    baseUri: https://simcorp.bnpparibas.net/api/v2
    authentication:
      type: bearer
      token: $secrets.simcorp_token
    resources:
    - name: trades
      path: /portfolios/{{portfolio_code}}/trades
      inputParameters:
      - name: portfolio_code
        in: path
      operations:
      - name: create-trade
        method: POST
  - type: http
    namespace: swift
    baseUri: https://swift.bnpparibas.com/api/v1
    authentication:
      type: bearer
      token: $secrets.swift_token
    resources:
    - name: messages
      path: /messages/mt300
      operations:
      - name: send-mt300
        method: POST
Open in Framework → View in Fleet → fx-hedging-execution-workflow.yml

Orchestrates Know Your Customer onboarding by retrieving client data from Salesforce, running screening against Moody's, creating a compliance case in ServiceNow, and notifying the relationship manager via SharePoint.

naftiko: '0.5'
info:
  label: KYC Client Onboarding Pipeline
  description: Orchestrates Know Your Customer onboarding by retrieving client data from Salesforce, running screening against Moody's, creating a compliance case in ServiceNow, and notifying the relationship manager via SharePoint.
  tags:
  - compliance
  - know-your-customer
  - salesforce
  - moodys
  - servicenow
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: kyc-onboarding
    port: 8080
    tools:
    - name: onboard-client
      description: Given a Salesforce account ID, run KYC screening, create compliance case, and provision client documentation folder.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID for the new client.
      - name: compliance_officer_id
        in: body
        type: string
        description: The Workday ID of the assigned compliance officer.
      steps:
      - name: get-client
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{account_id}}'
      - name: screen-entity
        type: call
        call: moodys.screen-entity
        with:
          entity_name: '{{get-client.Name}}'
          country: '{{get-client.BillingCountry}}'
      - name: get-officer
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{compliance_officer_id}}'
      - name: create-case
        type: call
        call: servicenow.create-case
        with:
          short_description: 'KYC onboarding: {{get-client.Name}}'
          description: 'New client KYC screening result: {{screen-entity.risk_level}}. Screening score: {{screen-entity.score}}. Assigned to: {{get-officer.full_name}}.'
          assigned_group: Compliance_KYC
          category: kyc_onboarding
      - name: provision-folder
        type: call
        call: sharepoint.create-folder
        with:
          site_id: compliance_kyc_site
          folder_path: KYC/{{get-client.Name}}_{{account_id}}
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://bnpparibas.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: moodys
    baseUri: https://api.moodys.com/screening/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_key
    resources:
    - name: entities
      path: /screen
      operations:
      - name: screen-entity
        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/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cases
      path: /table/sn_customerservice_case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
Open in Framework → View in Fleet → kyc-client-onboarding-pipeline.yml

Screens outgoing payments against sanctions lists, logs results in Oracle, holds flagged payments in SAP, and alerts compliance via ServiceNow.

naftiko: '0.5'
info:
  label: Payment Sanctions Screening Pipeline
  description: Screens outgoing payments against sanctions lists, logs results in Oracle, holds flagged payments in SAP, and alerts compliance via ServiceNow.
  tags:
  - compliance
  - oracle
  - sap
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: sanctions-screen
    port: 8080
    tools:
    - name: screen-payment
      description: Screen a payment against sanctions with hold and alert capabilities.
      inputParameters:
      - name: payment_ref
        in: body
        type: string
        description: Payment reference.
      - name: beneficiary_name
        in: body
        type: string
        description: Beneficiary name.
      steps:
      - name: run-screening
        type: call
        call: oracle.screen-payment
        with:
          payment_ref: '{{payment_ref}}'
          name: '{{beneficiary_name}}'
      - name: log-result
        type: call
        call: oracle.log-screening
        with:
          payment_ref: '{{payment_ref}}'
          result: '{{run-screening.result}}'
      - name: hold-payment
        type: call
        call: sap.hold-payment
        with:
          payment_ref: '{{payment_ref}}'
          reason: '{{run-screening.match_details}}'
      - name: alert-compliance
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Sanctions hit: {{payment_ref}}'
          description: 'Beneficiary: {{beneficiary_name}}. Match: {{run-screening.match_details}}.'
          category: sanctions
          urgency: '1'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://oracle.bnpparibas.com/fscmRestApi/resources/v1
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: screening
      path: /sanctions/screen
      operations:
      - name: screen-payment
        method: POST
    - name: logs
      path: /sanctions/logs
      operations:
      - name: log-screening
        method: POST
  - type: http
    namespace: sap
    baseUri: https://bnp-s4.sap.com/sap/opu/odata/sap
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: payments
      path: /FI_PAYMENT_SRV/A_Payment
      operations:
      - name: hold-payment
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → payment-sanctions-screening-pipeline.yml

Runs Docker container scans, checks Kubernetes config compliance, logs findings in Elasticsearch, and creates Jira tickets for remediation.

naftiko: '0.5'
info:
  label: Infrastructure Security Scan Pipeline
  description: Runs Docker container scans, checks Kubernetes config compliance, logs findings in Elasticsearch, and creates Jira tickets for remediation.
  tags:
  - security
  - docker
  - kubernetes
  - elasticsearch
  - jira
capability:
  exposes:
  - type: mcp
    namespace: infra-security
    port: 8080
    tools:
    - name: scan-infrastructure
      description: Run security scans across container and Kubernetes infrastructure.
      inputParameters:
      - name: namespace
        in: body
        type: string
        description: Kubernetes namespace to scan.
      steps:
      - name: scan-containers
        type: call
        call: docker.scan-images
        with:
          namespace: '{{namespace}}'
      - name: check-compliance
        type: call
        call: kubernetes.audit-config
        with:
          namespace: '{{namespace}}'
      - name: log-findings
        type: call
        call: elasticsearch.index-document
        with:
          index: security-scans
          body: '{{scan-containers.results}}'
      - name: create-tickets
        type: call
        call: jira.create-issue
        with:
          project: SEC
          summary: 'Security scan: {{namespace}} — {{scan-containers.vulnerability_count}} findings'
          description: 'Container vulns: {{scan-containers.vulnerability_count}}. Config issues: {{check-compliance.issue_count}}.'
          issue_type: Bug
  consumes:
  - type: http
    namespace: docker
    baseUri: https://registry.bnpparibas.com/v2
    authentication:
      type: bearer
      token: $secrets.registry_token
    resources:
    - name: scans
      path: /scans
      operations:
      - name: scan-images
        method: POST
  - type: http
    namespace: kubernetes
    baseUri: https://aks.bnpparibas.com/apis/v1
    authentication:
      type: bearer
      token: $secrets.k8s_token
    resources:
    - name: audit
      path: /namespaces/{{namespace}}/audit
      inputParameters:
      - name: namespace
        in: path
      operations:
      - name: audit-config
        method: GET
  - type: http
    namespace: elasticsearch
    baseUri: https://elastic.bnpparibas.com
    authentication:
      type: basic
      username: $secrets.elastic_user
      password: $secrets.elastic_password
    resources:
    - name: documents
      path: /{{index}}/_doc
      inputParameters:
      - name: index
        in: path
      operations:
      - name: index-document
        method: POST
  - type: http
    namespace: jira
    baseUri: https://bnpparibas.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → infrastructure-security-scan-pipeline.yml

Extracts reporting data from Snowflake, validates via compliance rules in SimCorp Dimension, and submits to regulatory portal with ServiceNow tracking.

naftiko: '0.5'
info:
  label: Regulatory Filing Submission Pipeline
  description: Extracts reporting data from Snowflake, validates via compliance rules in SimCorp Dimension, and submits to regulatory portal with ServiceNow tracking.
  tags:
  - compliance
  - snowflake
  - simcorp-dimension
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: regulatory-filing
    port: 8080
    tools:
    - name: submit-regulatory-filing
      description: Extract, validate, and submit a regulatory filing.
      inputParameters:
      - name: report_code
        in: body
        type: string
        description: Regulatory report code.
      - name: reporting_date
        in: body
        type: string
        description: Reporting date YYYY-MM-DD.
      steps:
      - name: extract-data
        type: call
        call: snowflake-api.run-query
        with:
          query: SELECT * FROM regulatory.{{report_code}} WHERE reporting_date = '{{reporting_date}}'
      - name: validate-positions
        type: call
        call: simcorp-api.get-positions
        with:
          report_code: '{{report_code}}'
          date: '{{reporting_date}}'
      - name: track-submission
        type: call
        call: servicenow-api.create-incident
        with:
          short_description: 'Regulatory filing: {{report_code}} for {{reporting_date}}'
          description: 'Records: {{extract-data.count}}. Positions validated: {{validate-positions.count}}.'
          category: regulatory_filing
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://bnpparibas.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: simcorp-api
    baseUri: https://simcorp.bnpparibas.com/api/v1
    authentication:
      type: bearer
      token: $secrets.simcorp_token
    resources:
    - name: positions
      path: /portfolios/positions
      operations:
      - name: get-positions
        method: GET
  - type: http
    namespace: servicenow-api
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → regulatory-filing-submission-pipeline.yml

On corporate action announcement from Bloomberg, identifies impacted portfolios in SimCorp Dimension, calculates entitlements, books adjustments in SAP, and notifies portfolio managers.

naftiko: '0.5'
info:
  label: Corporate Action Processing Orchestrator
  description: On corporate action announcement from Bloomberg, identifies impacted portfolios in SimCorp Dimension, calculates entitlements, books adjustments in SAP, and notifies portfolio managers.
  tags:
  - corporate-actions
  - asset-management
  - bloomberg
  - simcorp-dimension
  - sap
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: corporate-actions
    port: 8080
    tools:
    - name: process-corporate-action
      description: On corporate action event, identify impacted portfolios, calculate entitlements, book adjustments, and notify managers.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The Bloomberg corporate action event identifier.
      - name: isin
        in: body
        type: string
        description: The ISIN of the affected security.
      steps:
      - name: get-event
        type: call
        call: bloomberg.get-corporate-action
        with:
          event_id: '{{event_id}}'
      - name: find-portfolios
        type: call
        call: simcorp.search-holdings
        with:
          isin: '{{isin}}'
      - name: book-adjustment
        type: call
        call: sap.create-adjustment
        with:
          event_type: '{{get-event.action_type}}'
          isin: '{{isin}}'
          ratio: '{{get-event.ratio}}'
          ex_date: '{{get-event.ex_date}}'
          portfolio_count: '{{find-portfolios.count}}'
      - name: notify-managers
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Corporate action: {{get-event.action_type}} on {{isin}}'
          description: 'Event: {{get-event.description}}. Ex-date: {{get-event.ex_date}}. Ratio: {{get-event.ratio}}. Impacted portfolios: {{find-portfolios.count}}. SAP adjustment ref: {{book-adjustment.adjustment_ref}}.'
          assigned_group: Portfolio_Management
          category: corporate_action
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg
    authentication:
      type: bearer
      token: $secrets.bloomberg_api_key
    resources:
    - name: corporate-actions
      path: /corporate-actions/{{event_id}}
      inputParameters:
      - name: event_id
        in: path
      operations:
      - name: get-corporate-action
        method: GET
  - type: http
    namespace: simcorp
    baseUri: https://simcorp.bnpparibas.net/api/v2
    authentication:
      type: bearer
      token: $secrets.simcorp_token
    resources:
    - name: holdings
      path: /holdings/search
      operations:
      - name: search-holdings
        method: POST
  - type: http
    namespace: sap
    baseUri: https://bnp-s4.sap.com/sap/opu/odata/sap/FI_CORP_ACTION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: adjustments
      path: /A_Adjustment
      operations:
      - name: create-adjustment
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → corporate-action-processing-orchestrator.yml

Queries FactSet for current portfolio holdings by portfolio ID, returning asset allocation, top positions, and total NAV.

naftiko: '0.5'
info:
  label: FactSet Portfolio Holdings
  description: Queries FactSet for current portfolio holdings by portfolio ID, returning asset allocation, top positions, and total NAV.
  tags:
  - asset-management
  - portfolio-management
  - factset
capability:
  exposes:
  - type: mcp
    namespace: portfolio
    port: 8080
    tools:
    - name: get-portfolio-holdings
      description: Retrieve current holdings for a given portfolio from FactSet, including top positions and net asset value.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The FactSet portfolio identifier.
      call: factset.get-holdings
      with:
        portfolio_id: '{{portfolio_id}}'
      outputParameters:
      - name: total_nav
        type: number
        mapping: $.data.totalNAV
      - name: holdings_count
        type: number
        mapping: $.data.holdingsCount
      - name: top_positions
        type: string
        mapping: $.data.topPositions
  consumes:
  - type: http
    namespace: factset
    baseUri: https://api.factset.com/analytics/portfolio/v3
    authentication:
      type: basic
      username: $secrets.factset_user
      password: $secrets.factset_password
    resources:
    - name: holdings
      path: /portfolios/{{portfolio_id}}/holdings
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: get-holdings
        method: GET
Open in Framework → View in Fleet → factset-portfolio-holdings.yml

Triggers a GitHub Actions deployment pipeline, monitors build status, scans with SonarQube for code quality, deploys to Azure Kubernetes Service, and logs the release in ServiceNow.

naftiko: '0.5'
info:
  label: CI/CD Pipeline Deployment Orchestrator
  description: Triggers a GitHub Actions deployment pipeline, monitors build status, scans with SonarQube for code quality, deploys to Azure Kubernetes Service, and logs the release in ServiceNow.
  tags:
  - development
  - ci-cd
  - github-actions
  - sonarqube
  - azure-kubernetes-service
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: cicd
    port: 8080
    tools:
    - name: deploy-service
      description: Trigger a full CI/CD deployment from GitHub Actions through quality gate to AKS, with ServiceNow change tracking.
      inputParameters:
      - name: repository
        in: body
        type: string
        description: The GitHub repository in owner/repo format.
      - name: branch
        in: body
        type: string
        description: The branch to deploy.
      - name: environment
        in: body
        type: string
        description: Target environment (staging, production).
      steps:
      - name: trigger-build
        type: call
        call: github.trigger-workflow
        with:
          repository: '{{repository}}'
          workflow: deploy.yml
          ref: '{{branch}}'
      - name: quality-scan
        type: call
        call: sonarqube.get-quality-gate
        with:
          project_key: '{{repository}}'
      - name: deploy-to-aks
        type: call
        call: aks.create-deployment
        with:
          cluster: bnp-{{environment}}-cluster
          namespace: '{{repository}}'
          image_tag: '{{trigger-build.sha}}'
      - name: log-change
        type: call
        call: servicenow.create-change
        with:
          short_description: 'Deployment: {{repository}} to {{environment}}'
          description: 'Branch: {{branch}}. Commit: {{trigger-build.sha}}. SonarQube gate: {{quality-scan.status}}. AKS deployment: {{deploy-to-aks.deployment_id}}.'
          assigned_group: Platform_Engineering
          category: deployment
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflows
      path: /repos/{{repository}}/actions/workflows/{{workflow}}/dispatches
      inputParameters:
      - name: repository
        in: path
      - name: workflow
        in: path
      operations:
      - name: trigger-workflow
        method: POST
  - type: http
    namespace: sonarqube
    baseUri: https://sonarqube.bnpparibas.net/api
    authentication:
      type: bearer
      token: $secrets.sonarqube_token
    resources:
    - name: quality-gates
      path: /qualitygates/project_status?projectKey={{project_key}}
      inputParameters:
      - name: project_key
        in: path
      operations:
      - name: get-quality-gate
        method: GET
  - type: http
    namespace: aks
    baseUri: https://management.azure.com/subscriptions/{{sub_id}}/resourceGroups/bnp-rg/providers/Microsoft.ContainerService/managedClusters
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: deployments
      path: /{{cluster}}/deployments
      inputParameters:
      - name: cluster
        in: path
      operations:
      - name: create-deployment
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
Open in Framework → View in Fleet → ci-cd-pipeline-deployment-orchestrator.yml

Validates payment in SAP, converts currency via Bloomberg FX, routes through SWIFT, and tracks delivery in ServiceNow.

naftiko: '0.5'
info:
  label: Cross-Border Payment Processing Pipeline
  description: Validates payment in SAP, converts currency via Bloomberg FX, routes through SWIFT, and tracks delivery in ServiceNow.
  tags:
  - payments
  - sap
  - bloomberg
  - swift
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: xborder-payment
    port: 8080
    tools:
    - name: process-cross-border-payment
      description: Process and track a cross-border payment end-to-end.
      inputParameters:
      - name: payment_id
        in: body
        type: string
        description: SAP payment instruction ID.
      steps:
      - name: get-payment
        type: call
        call: sap.get-payment
        with:
          payment_id: '{{payment_id}}'
      - name: get-fx-rate
        type: call
        call: bloomberg.get-fx-rate
        with:
          pair: '{{get-payment.currency_pair}}'
      - name: send-swift
        type: call
        call: swift.send-mt103
        with:
          payment_ref: '{{payment_id}}'
          amount: '{{get-payment.amount}}'
          rate: '{{get-fx-rate.mid}}'
      - name: track-delivery
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Cross-border payment: {{payment_id}}'
          description: 'Amount: {{get-payment.amount}}. FX: {{get-fx-rate.mid}}. SWIFT: {{send-swift.uetr}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://bnp-s4.sap.com/sap/opu/odata/sap
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: payments
      path: /FI_PAYMENT_SRV/A_Payment('{{payment_id}}')
      inputParameters:
      - name: payment_id
        in: path
      operations:
      - name: get-payment
        method: GET
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/fields
    authentication:
      type: bearer
      token: $secrets.bloomberg_api_key
    resources:
    - name: fx
      path: /snapshots/{{pair}}
      inputParameters:
      - name: pair
        in: path
      operations:
      - name: get-fx-rate
        method: GET
  - type: http
    namespace: swift
    baseUri: https://swift.bnpparibas.com/api/v1
    authentication:
      type: bearer
      token: $secrets.swift_token
    resources:
    - name: messages
      path: /messages/mt103
      operations:
      - name: send-mt103
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → cross-border-payment-processing-pipeline.yml

Checks the status of an Azure DevOps build pipeline, returning latest run result, duration, and artifact links.

naftiko: '0.5'
info:
  label: Azure DevOps Pipeline Status
  description: Checks the status of an Azure DevOps build pipeline, returning latest run result, duration, and artifact links.
  tags:
  - cicd
  - azure-devops
capability:
  exposes:
  - type: mcp
    namespace: azdo-pipelines
    port: 8080
    tools:
    - name: get-pipeline-status
      description: Retrieve the latest pipeline run status from Azure DevOps.
      inputParameters:
      - name: project
        in: body
        type: string
        description: Azure DevOps project name.
      - name: pipeline_id
        in: body
        type: string
        description: Pipeline identifier.
      call: azdo-pipelines.get-runs
      with:
        project: '{{project}}'
        pipeline_id: '{{pipeline_id}}'
  consumes:
  - type: http
    namespace: azdo-pipelines
    baseUri: https://dev.azure.com/bnpparibas
    authentication:
      type: bearer
      token: $secrets.azdo_token
    resources:
    - name: runs
      path: /{{project}}/_apis/pipelines/{{pipeline_id}}/runs
      inputParameters:
      - name: project
        in: path
      - name: pipeline_id
        in: path
      operations:
      - name: get-runs
        method: GET
Open in Framework → View in Fleet → azure-devops-pipeline-status.yml

Triggers a Qlik Sense app reload, exports the report as PDF, uploads to SharePoint for stakeholder access, and notifies recipients via Azure Service Bus.

naftiko: '0.5'
info:
  label: Qlik Sense Report Distribution
  description: Triggers a Qlik Sense app reload, exports the report as PDF, uploads to SharePoint for stakeholder access, and notifies recipients via Azure Service Bus.
  tags:
  - analytics
  - reporting
  - qlik-sense
  - sharepoint
  - azure-service-bus
capability:
  exposes:
  - type: mcp
    namespace: report-distribution
    port: 8080
    tools:
    - name: distribute-report
      description: Reload Qlik Sense app, export PDF, upload to SharePoint, and notify stakeholders.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: The Qlik Sense application ID.
      - name: report_name
        in: body
        type: string
        description: The report name for file naming.
      - name: distribution_list
        in: body
        type: string
        description: Comma-separated list of recipient email addresses.
      steps:
      - name: reload-app
        type: call
        call: qlik.reload-app
        with:
          app_id: '{{app_id}}'
      - name: export-pdf
        type: call
        call: qlik.export-report
        with:
          app_id: '{{app_id}}'
          format: pdf
      - name: upload-report
        type: call
        call: sharepoint.create-file
        with:
          site_id: reports_distribution
          file_path: Reports/{{report_name}}/{{report_name}}_latest.pdf
          content_type: application/pdf
      - name: notify-recipients
        type: call
        call: servicebus.send-message
        with:
          queue: report-notifications
          body: 'Report {{report_name}} is ready. Download: {{upload-report.url}}. Recipients: {{distribution_list}}.'
  consumes:
  - type: http
    namespace: qlik
    baseUri: https://qlik.bnpparibas.net/api/v1
    authentication:
      type: bearer
      token: $secrets.qlik_token
    resources:
    - name: apps
      path: /apps/{{app_id}}/reload
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: reload-app
        method: POST
    - name: exports
      path: /apps/{{app_id}}/export/{{format}}
      inputParameters:
      - name: app_id
        in: path
      - name: format
        in: path
      operations:
      - name: export-report
        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: servicebus
    baseUri: https://bnpparibas-prod.servicebus.windows.net
    authentication:
      type: bearer
      token: $secrets.servicebus_sas_token
    resources:
    - name: queues
      path: /{{queue}}/messages
      inputParameters:
      - name: queue
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → qlik-sense-report-distribution.yml

Provisions infrastructure via Terraform, registers resources in ServiceNow CMDB, configures monitoring in Datadog, and notifies the platform team.

naftiko: '0.5'
info:
  label: Terraform Cloud Provisioning Pipeline
  description: Provisions infrastructure via Terraform, registers resources in ServiceNow CMDB, configures monitoring in Datadog, and notifies the platform team.
  tags:
  - infrastructure
  - terraform
  - servicenow
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: infra-provision
    port: 8080
    tools:
    - name: provision-infrastructure
      description: Provision infrastructure with CMDB registration and monitoring setup.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: Terraform workspace ID.
      - name: environment
        in: body
        type: string
        description: Target environment.
      steps:
      - name: create-run
        type: call
        call: terraform.create-run
        with:
          workspace_id: '{{workspace_id}}'
          message: Provision {{environment}}
      - name: register-cmdb
        type: call
        call: servicenow.create-ci
        with:
          name: '{{workspace_id}}-{{environment}}'
          environment: '{{environment}}'
      - name: setup-monitoring
        type: call
        call: datadog.create-monitor
        with:
          name: 'Infra health: {{workspace_id}}'
          type: metric alert
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: runs
      path: /runs
      operations:
      - name: create-run
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.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: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: monitors
      path: /monitor
      operations:
      - name: create-monitor
        method: POST
Open in Framework → View in Fleet → terraform-cloud-provisioning-pipeline.yml

Collects Tyk gateway metrics, analyzes patterns in Elasticsearch, generates dashboards in Grafana, and alerts on anomalies via Slack.

naftiko: '0.5'
info:
  label: API Gateway Traffic Analysis Pipeline
  description: Collects Tyk gateway metrics, analyzes patterns in Elasticsearch, generates dashboards in Grafana, and alerts on anomalies via Slack.
  tags:
  - api-management
  - tyk
  - elasticsearch
  - grafana
capability:
  exposes:
  - type: mcp
    namespace: api-traffic
    port: 8080
    tools:
    - name: analyze-traffic
      description: Analyze API gateway traffic with dashboards and anomaly alerting.
      inputParameters:
      - name: api_id
        in: body
        type: string
        description: Tyk API identifier.
      steps:
      - name: get-metrics
        type: call
        call: tyk.get-analytics
        with:
          api_id: '{{api_id}}'
      - name: index-data
        type: call
        call: elasticsearch.index-document
        with:
          index: api-traffic
          body: '{{get-metrics.data}}'
      - name: update-dashboard
        type: call
        call: grafana.update-dashboard
        with:
          dashboard_id: api-traffic-{{api_id}}
  consumes:
  - type: http
    namespace: tyk
    baseUri: https://tyk.bnpparibas.com/api
    authentication:
      type: apiKey
      name: x-tyk-authorization
      in: header
      value: $secrets.tyk_api_key
    resources:
    - name: analytics
      path: /apis/{{api_id}}/analytics
      inputParameters:
      - name: api_id
        in: path
      operations:
      - name: get-analytics
        method: GET
  - type: http
    namespace: elasticsearch
    baseUri: https://elastic.bnpparibas.com
    authentication:
      type: basic
      username: $secrets.elastic_user
      password: $secrets.elastic_password
    resources:
    - name: documents
      path: /{{index}}/_doc
      inputParameters:
      - name: index
        in: path
      operations:
      - name: index-document
        method: POST
  - type: http
    namespace: grafana
    baseUri: https://grafana.bnpparibas.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_token
    resources:
    - name: dashboards
      path: /dashboards/db/{{dashboard_id}}
      inputParameters:
      - name: dashboard_id
        in: path
      operations:
      - name: update-dashboard
        method: POST
Open in Framework → View in Fleet → api-gateway-traffic-analysis-pipeline.yml

Calculates margin requirements from SimCorp, generates collateral calls, sends via SWIFT, and tracks responses in ServiceNow.

naftiko: '0.5'
info:
  label: Collateral Call Processing Workflow
  description: Calculates margin requirements from SimCorp, generates collateral calls, sends via SWIFT, and tracks responses in ServiceNow.
  tags:
  - collateral
  - simcorp-dimension
  - swift
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: collateral-calls
    port: 8080
    tools:
    - name: process-collateral-call
      description: Calculate margin and process collateral calls.
      inputParameters:
      - name: counterparty_id
        in: body
        type: string
        description: Counterparty identifier.
      steps:
      - name: calculate-margin
        type: call
        call: simcorp.calculate-margin
        with:
          counterparty_id: '{{counterparty_id}}'
      - name: send-call
        type: call
        call: swift.send-mt503
        with:
          counterparty: '{{counterparty_id}}'
          amount: '{{calculate-margin.call_amount}}'
      - name: track-response
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Collateral call: {{counterparty_id}}'
          description: 'Amount: {{calculate-margin.call_amount}}. SWIFT: {{send-call.reference}}.'
  consumes:
  - type: http
    namespace: simcorp
    baseUri: https://simcorp.bnpparibas.net/api/v2
    authentication:
      type: bearer
      token: $secrets.simcorp_token
    resources:
    - name: margin
      path: /counterparties/{{counterparty_id}}/margin
      inputParameters:
      - name: counterparty_id
        in: path
      operations:
      - name: calculate-margin
        method: POST
  - type: http
    namespace: swift
    baseUri: https://swift.bnpparibas.com/api/v1
    authentication:
      type: bearer
      token: $secrets.swift_token
    resources:
    - name: messages
      path: /messages/mt503
      operations:
      - name: send-mt503
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → collateral-call-processing-workflow.yml

Retrieves the current Moody's credit rating for an issuer by entity ID, returning rating, outlook, and last action date.

naftiko: '0.5'
info:
  label: Moody Credit Rating Lookup
  description: Retrieves the current Moody's credit rating for an issuer by entity ID, returning rating, outlook, and last action date.
  tags:
  - credit-risk
  - moodys
capability:
  exposes:
  - type: mcp
    namespace: moodys
    port: 8080
    tools:
    - name: get-credit-rating
      description: Look up the Moody's credit rating for an issuer.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The Moody's entity identifier.
      call: moodys.get-rating
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: moodys
    baseUri: https://api.moodys.com/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_key
    resources:
    - name: ratings
      path: /issuers/{{entity_id}}/ratings
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-rating
        method: GET
Open in Framework → View in Fleet → moody-credit-rating-lookup.yml

Pulls access records from Azure Active Directory, generates a review report in SharePoint, routes approvals via ServiceNow, and revokes stale access.

naftiko: '0.5'
info:
  label: Employee Access Review Workflow
  description: Pulls access records from Azure Active Directory, generates a review report in SharePoint, routes approvals via ServiceNow, and revokes stale access.
  tags:
  - security
  - azure-active-directory
  - sharepoint
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: access-review
    port: 8080
    tools:
    - name: review-access
      description: Audit employee access and revoke stale permissions.
      inputParameters:
      - name: department
        in: body
        type: string
        description: Department to review.
      steps:
      - name: get-users
        type: call
        call: azure-ad.list-users
        with:
          department: '{{department}}'
      - name: store-report
        type: call
        call: sharepoint.create-file
        with:
          site_id: security
          path: AccessReviews/{{department}}/review.json
      - name: create-approval
        type: call
        call: servicenow.create-change-request
        with:
          short_description: 'Access review: {{department}}'
          description: 'Users reviewed: {{get-users.count}}. Report: {{store-report.url}}.'
  consumes:
  - type: http
    namespace: azure-ad
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users
      inputParameters:
      - name: department
        in: query
      operations:
      - name: list-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:/{{path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: path
        in: path
      operations:
      - name: create-file
        method: PUT
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.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-request
        method: POST
Open in Framework → View in Fleet → employee-access-review-workflow.yml

Pulls portfolio positions from SimCorp Dimension, runs Value-at-Risk computation in Azure Databricks, stores results in Azure Data Factory, and publishes to the risk dashboard in Power BI.

naftiko: '0.5'
info:
  label: Market Risk VaR Computation Pipeline
  description: Pulls portfolio positions from SimCorp Dimension, runs Value-at-Risk computation in Azure Databricks, stores results in Azure Data Factory, and publishes to the risk dashboard in Power BI.
  tags:
  - market-risk
  - risk-management
  - simcorp-dimension
  - azure-databricks
  - azure-data-factory
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: market-risk
    port: 8080
    tools:
    - name: compute-var
      description: Run end-of-day VaR computation for a portfolio, store results, and refresh risk dashboard.
      inputParameters:
      - name: portfolio_code
        in: body
        type: string
        description: The SimCorp portfolio code.
      - name: valuation_date
        in: body
        type: string
        description: The valuation date in YYYY-MM-DD format.
      - name: confidence_level
        in: body
        type: number
        description: VaR confidence level (e.g. 0.99).
      steps:
      - name: get-positions
        type: call
        call: simcorp.get-positions
        with:
          portfolio_code: '{{portfolio_code}}'
      - name: run-var-model
        type: call
        call: databricks.run-job
        with:
          job_name: var_computation
          parameters: portfolio={{portfolio_code}}&date={{valuation_date}}&confidence={{confidence_level}}&positions_count={{get-positions.total_market_value}}
      - name: store-results
        type: call
        call: adf.trigger-pipeline
        with:
          pipeline_name: var_results_load
          parameters: run_id={{run-var-model.run_id}}&portfolio={{portfolio_code}}&date={{valuation_date}}
      - name: refresh-risk-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          workspace_id: risk_management
          dataset_id: market_risk_var
  consumes:
  - type: http
    namespace: simcorp
    baseUri: https://simcorp.bnpparibas.net/api/v2
    authentication:
      type: bearer
      token: $secrets.simcorp_token
    resources:
    - name: positions
      path: /portfolios/{{portfolio_code}}/positions
      inputParameters:
      - name: portfolio_code
        in: path
      operations:
      - name: get-positions
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://adb-bnpparibas.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: adf
    baseUri: https://management.azure.com/subscriptions/{{sub_id}}/resourceGroups/bnp-rg/providers/Microsoft.DataFactory/factories/bnp-adf
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: pipelines
      path: /pipelines/{{pipeline_name}}/createRun?api-version=2018-06-01
      inputParameters:
      - name: pipeline_name
        in: path
      operations:
      - name: trigger-pipeline
        method: POST
  - type: http
    namespace: 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
Open in Framework → View in Fleet → market-risk-var-computation-pipeline.yml

Creates a new Kubernetes namespace on AKS with resource quotas, configures Hashicorp Vault secrets injection, and registers the namespace in ServiceNow CMDB.

naftiko: '0.5'
info:
  label: Kubernetes Namespace Provisioning
  description: Creates a new Kubernetes namespace on AKS with resource quotas, configures Hashicorp Vault secrets injection, and registers the namespace in ServiceNow CMDB.
  tags:
  - platform-engineering
  - kubernetes
  - azure-kubernetes-service
  - hashicorp-vault
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: k8s-provisioning
    port: 8080
    tools:
    - name: provision-namespace
      description: Create AKS namespace with quotas, configure Vault secrets, and register in CMDB.
      inputParameters:
      - name: namespace_name
        in: body
        type: string
        description: The Kubernetes namespace to create.
      - name: team
        in: body
        type: string
        description: The owning team name.
      - name: environment
        in: body
        type: string
        description: Target environment (dev, staging, production).
      steps:
      - name: create-namespace
        type: call
        call: aks.create-namespace
        with:
          cluster: bnp-{{environment}}-cluster
          namespace: '{{namespace_name}}'
          labels: team={{team}},env={{environment}}
      - name: configure-vault
        type: call
        call: vault.create-policy
        with:
          policy_name: '{{namespace_name}}-{{environment}}'
          path: secret/data/{{environment}}/{{namespace_name}}/*
          capabilities: read,list
      - name: register-cmdb
        type: call
        call: servicenow.create-ci
        with:
          name: k8s-ns-{{namespace_name}}-{{environment}}
          class: cmdb_ci_kubernetes_namespace
          environment: '{{environment}}'
          owned_by: '{{team}}'
          description: 'Kubernetes namespace {{namespace_name}} on {{environment}} cluster. Vault policy: {{configure-vault.policy_name}}.'
  consumes:
  - type: http
    namespace: aks
    baseUri: https://management.azure.com/subscriptions/{{sub_id}}/resourceGroups/bnp-rg/providers/Microsoft.ContainerService/managedClusters
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: namespaces
      path: /{{cluster}}/namespaces
      inputParameters:
      - name: cluster
        in: path
      operations:
      - name: create-namespace
        method: POST
  - type: http
    namespace: vault
    baseUri: https://vault.bnpparibas.net/v1
    authentication:
      type: bearer
      token: $secrets.vault_token
    resources:
    - name: policies
      path: /sys/policies/acl/{{policy_name}}
      inputParameters:
      - name: policy_name
        in: path
      operations:
      - name: create-policy
        method: PUT
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.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
Open in Framework → View in Fleet → kubernetes-namespace-provisioning.yml

Pulls fund positions from SimCorp Dimension, retrieves market prices from Bloomberg, computes NAV in Azure Databricks, publishes results to Oracle Database, and refreshes the fund reporting dashboard.

naftiko: '0.5'
info:
  label: Fund Accounting NAV Calculation Pipeline
  description: Pulls fund positions from SimCorp Dimension, retrieves market prices from Bloomberg, computes NAV in Azure Databricks, publishes results to Oracle Database, and refreshes the fund reporting dashboard.
  tags:
  - fund-accounting
  - asset-management
  - simcorp-dimension
  - bloomberg
  - azure-databricks
  - oracle-database
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: fund-accounting
    port: 8080
    tools:
    - name: calculate-nav
      description: Calculate net asset value for a fund by pulling positions, pricing, computing, and publishing.
      inputParameters:
      - name: fund_code
        in: body
        type: string
        description: The SimCorp fund/portfolio code.
      - name: valuation_date
        in: body
        type: string
        description: The NAV valuation date in YYYY-MM-DD format.
      steps:
      - name: get-positions
        type: call
        call: simcorp.get-positions
        with:
          portfolio_code: '{{fund_code}}'
      - name: get-prices
        type: call
        call: bloomberg.get-bulk-prices
        with:
          date: '{{valuation_date}}'
          universe: fund_{{fund_code}}
      - name: compute-nav
        type: call
        call: databricks.run-job
        with:
          job_name: nav_calculation
          parameters: fund={{fund_code}}&date={{valuation_date}}&positions_value={{get-positions.total_market_value}}
      - name: publish-nav
        type: call
        call: oracle.execute-procedure
        with:
          procedure: pkg_fund_nav.publish_nav
          parameters: fund_code={{fund_code}}&nav_date={{valuation_date}}&nav_value={{compute-nav.nav_value}}
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          workspace_id: fund_reporting
          dataset_id: fund_nav_daily
  consumes:
  - type: http
    namespace: simcorp
    baseUri: https://simcorp.bnpparibas.net/api/v2
    authentication:
      type: bearer
      token: $secrets.simcorp_token
    resources:
    - name: positions
      path: /portfolios/{{portfolio_code}}/positions
      inputParameters:
      - name: portfolio_code
        in: path
      operations:
      - name: get-positions
        method: GET
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg
    authentication:
      type: bearer
      token: $secrets.bloomberg_api_key
    resources:
    - name: bulk-prices
      path: /universes/{{universe}}/prices?date={{date}}
      inputParameters:
      - name: universe
        in: path
      - name: date
        in: path
      operations:
      - name: get-bulk-prices
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://adb-bnpparibas.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: oracle
    baseUri: https://ords.bnpparibas.net/ords/fund
    authentication:
      type: bearer
      token: $secrets.oracle_ords_token
    resources:
    - name: procedures
      path: /{{procedure}}
      inputParameters:
      - name: procedure
        in: path
      operations:
      - name: execute-procedure
        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
Open in Framework → View in Fleet → fund-accounting-nav-calculation-pipeline.yml

Deploys a trained ML model from Azure Machine Learning to a real-time endpoint, validates with SonarQube code quality, and registers the deployment in ServiceNow CMDB.

naftiko: '0.5'
info:
  label: Azure Machine Learning Model Deployment
  description: Deploys a trained ML model from Azure Machine Learning to a real-time endpoint, validates with SonarQube code quality, and registers the deployment in ServiceNow CMDB.
  tags:
  - machine-learning
  - azure-machine-learning
  - sonarqube
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: ml-ops
    port: 8080
    tools:
    - name: deploy-model
      description: Deploy an Azure ML model to a managed endpoint, validate quality, and register in CMDB.
      inputParameters:
      - name: model_name
        in: body
        type: string
        description: The Azure ML model name.
      - name: model_version
        in: body
        type: string
        description: The model version to deploy.
      - name: endpoint_name
        in: body
        type: string
        description: The target managed online endpoint name.
      steps:
      - name: deploy-endpoint
        type: call
        call: azureml.create-deployment
        with:
          model_name: '{{model_name}}'
          model_version: '{{model_version}}'
          endpoint_name: '{{endpoint_name}}'
      - name: quality-check
        type: call
        call: sonarqube.get-quality-gate
        with:
          project_key: ml-{{model_name}}
      - name: register-cmdb
        type: call
        call: servicenow.create-ci
        with:
          name: ml-model-{{model_name}}-v{{model_version}}
          class: cmdb_ci_ml_model
          description: 'Model {{model_name}} v{{model_version}} deployed to endpoint {{endpoint_name}}. Quality gate: {{quality-check.status}}. Deployment ID: {{deploy-endpoint.deployment_id}}.'
          owned_by: Data_Science
  consumes:
  - type: http
    namespace: azureml
    baseUri: https://ml.azure.com/api/subscriptions/{{sub_id}}/resourceGroups/bnp-rg/providers/Microsoft.MachineLearningServices/workspaces/bnp-ml
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: deployments
      path: /endpoints/{{endpoint_name}}/deployments
      inputParameters:
      - name: endpoint_name
        in: path
      operations:
      - name: create-deployment
        method: POST
  - type: http
    namespace: sonarqube
    baseUri: https://sonarqube.bnpparibas.net/api
    authentication:
      type: bearer
      token: $secrets.sonarqube_token
    resources:
    - name: quality-gates
      path: /qualitygates/project_status?projectKey={{project_key}}
      inputParameters:
      - name: project_key
        in: path
      operations:
      - name: get-quality-gate
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.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
Open in Framework → View in Fleet → azure-machine-learning-model-deployment.yml

Creates a loan application in Temenos, runs credit checks via Moody's, generates documents in Salesforce, and tracks approval in ServiceNow.

naftiko: '0.5'
info:
  label: Loan Origination Orchestrator
  description: Creates a loan application in Temenos, runs credit checks via Moody's, generates documents in Salesforce, and tracks approval in ServiceNow.
  tags:
  - lending
  - temenos-transact
  - moodys
  - salesforce
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: loan-origination
    port: 8080
    tools:
    - name: originate-loan
      description: Process a loan application end-to-end.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: Temenos customer ID.
      - name: loan_amount
        in: body
        type: number
        description: Requested loan amount.
      steps:
      - name: create-application
        type: call
        call: temenos.create-loan
        with:
          customer_id: '{{customer_id}}'
          amount: '{{loan_amount}}'
      - name: check-credit
        type: call
        call: moodys.get-rating
        with:
          entity_id: '{{customer_id}}'
      - name: generate-docs
        type: call
        call: salesforce.create-task
        with:
          subject: 'Loan docs: {{customer_id}} — {{loan_amount}}'
          description: 'Credit rating: {{check-credit.rating}}. Application: {{create-application.loan_id}}.'
      - name: track-approval
        type: call
        call: servicenow.create-change-request
        with:
          short_description: 'Loan approval: {{create-application.loan_id}}'
          description: 'Amount: {{loan_amount}}. Rating: {{check-credit.rating}}.'
  consumes:
  - type: http
    namespace: temenos
    baseUri: https://temenos.bnpparibas.com/api/v1
    authentication:
      type: bearer
      token: $secrets.temenos_token
    resources:
    - name: loans
      path: /loans
      operations:
      - name: create-loan
        method: POST
  - type: http
    namespace: moodys
    baseUri: https://api.moodys.com/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_key
    resources:
    - name: ratings
      path: /issuers/{{entity_id}}/ratings
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-rating
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://bnpparibas.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: tasks
      path: /sobjects/Task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.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-request
        method: POST
Open in Framework → View in Fleet → loan-origination-orchestrator.yml

Retrieves counterparty exposure from SimCorp, checks Moody's rating, routes for approval in ServiceNow, and updates limits in Temenos.

naftiko: '0.5'
info:
  label: Credit Limit Approval Orchestrator
  description: Retrieves counterparty exposure from SimCorp, checks Moody's rating, routes for approval in ServiceNow, and updates limits in Temenos.
  tags:
  - credit-risk
  - simcorp-dimension
  - moodys
  - servicenow
  - temenos-transact
capability:
  exposes:
  - type: mcp
    namespace: credit-approval
    port: 8080
    tools:
    - name: approve-credit-limit
      description: Evaluate and approve a credit limit change.
      inputParameters:
      - name: counterparty_id
        in: body
        type: string
        description: Counterparty identifier.
      - name: requested_limit
        in: body
        type: number
        description: Requested credit limit.
      steps:
      - name: get-exposure
        type: call
        call: simcorp.get-counterparty-exposure
        with:
          counterparty_id: '{{counterparty_id}}'
      - name: get-rating
        type: call
        call: moodys.get-rating
        with:
          entity_id: '{{counterparty_id}}'
      - name: request-approval
        type: call
        call: servicenow.create-change-request
        with:
          short_description: 'Credit limit: {{counterparty_id}} — {{requested_limit}}'
          description: 'Current exposure: {{get-exposure.total}}. Rating: {{get-rating.rating}}. Requested: {{requested_limit}}.'
      - name: update-limit
        type: call
        call: temenos.update-credit-limit
        with:
          counterparty_id: '{{counterparty_id}}'
          limit: '{{requested_limit}}'
  consumes:
  - type: http
    namespace: simcorp
    baseUri: https://simcorp.bnpparibas.net/api/v2
    authentication:
      type: bearer
      token: $secrets.simcorp_token
    resources:
    - name: exposure
      path: /counterparties/{{counterparty_id}}/exposure
      inputParameters:
      - name: counterparty_id
        in: path
      operations:
      - name: get-counterparty-exposure
        method: GET
  - type: http
    namespace: moodys
    baseUri: https://api.moodys.com/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_key
    resources:
    - name: ratings
      path: /issuers/{{entity_id}}/ratings
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-rating
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.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-request
        method: POST
  - type: http
    namespace: temenos
    baseUri: https://temenos.bnpparibas.com/api/v1
    authentication:
      type: bearer
      token: $secrets.temenos_token
    resources:
    - name: limits
      path: /counterparties/{{counterparty_id}}/credit-limits
      inputParameters:
      - name: counterparty_id
        in: path
      operations:
      - name: update-credit-limit
        method: PUT
Open in Framework → View in Fleet → credit-limit-approval-orchestrator.yml

On critical alert from Datadog, creates a ServiceNow incident, retrieves impacted service topology from Dynatrace, and sends an urgent notification to the on-call team via Azure Event Hubs.

naftiko: '0.5'
info:
  label: Infrastructure Incident Response Orchestrator
  description: On critical alert from Datadog, creates a ServiceNow incident, retrieves impacted service topology from Dynatrace, and sends an urgent notification to the on-call team via Azure Event Hubs.
  tags:
  - operations
  - incident-management
  - datadog
  - servicenow
  - dynatrace
  - azure-event-hubs
capability:
  exposes:
  - type: mcp
    namespace: incident-response
    port: 8080
    tools:
    - name: handle-critical-alert
      description: On critical Datadog alert, create ServiceNow incident, pull Dynatrace topology, and broadcast to on-call channel.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The Datadog alert identifier.
      - name: service_name
        in: body
        type: string
        description: The affected service name.
      steps:
      - name: get-alert
        type: call
        call: datadog.get-alert
        with:
          alert_id: '{{alert_id}}'
      - name: get-topology
        type: call
        call: dynatrace.get-service-topology
        with:
          service_name: '{{service_name}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'CRITICAL: {{service_name}} — {{get-alert.title}}'
          description: 'Datadog alert {{alert_id}}: {{get-alert.message}}. Impacted dependencies: {{get-topology.dependencies}}. Triggered: {{get-alert.timestamp}}.'
          priority: '1'
          assigned_group: SRE_OnCall
          category: infrastructure
      - name: broadcast-notification
        type: call
        call: eventhubs.send-event
        with:
          topic: critical-incidents
          body: 'INCIDENT {{create-incident.number}}: {{service_name}} is down. Alert: {{get-alert.title}}. Dependencies: {{get-topology.dependency_count}} services affected.'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.eu/api/v2
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: alerts
      path: /alerts/{{alert_id}}
      inputParameters:
      - name: alert_id
        in: path
      operations:
      - name: get-alert
        method: GET
  - type: http
    namespace: dynatrace
    baseUri: https://bnpparibas.live.dynatrace.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: topology
      path: /entities?entitySelector=type(SERVICE),entityName({{service_name}})
      inputParameters:
      - name: service_name
        in: path
      operations:
      - name: get-service-topology
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: eventhubs
    baseUri: https://bnpparibas-prod.servicebus.windows.net
    authentication:
      type: bearer
      token: $secrets.eventhubs_sas_token
    resources:
    - name: events
      path: /{{topic}}/messages
      inputParameters:
      - name: topic
        in: path
      operations:
      - name: send-event
        method: POST
Open in Framework → View in Fleet → infrastructure-incident-response-orchestrator.yml

Fetches current FX exchange rates from Bloomberg Enterprise Data for a given currency pair, returning bid, ask, and mid rates.

naftiko: '0.5'
info:
  label: Bloomberg FX Rate Lookup
  description: Fetches current FX exchange rates from Bloomberg Enterprise Data for a given currency pair, returning bid, ask, and mid rates.
  tags:
  - fx
  - bloomberg-enterprise-data
capability:
  exposes:
  - type: mcp
    namespace: bloomberg-fx
    port: 8080
    tools:
    - name: get-fx-rate
      description: Retrieve the current FX rate for a currency pair from Bloomberg.
      inputParameters:
      - name: currency_pair
        in: body
        type: string
        description: Currency pair ticker (e.g. EURUSD Curncy).
      call: bloomberg-fx.get-rate
      with:
        currency_pair: '{{currency_pair}}'
  consumes:
  - type: http
    namespace: bloomberg-fx
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/fields
    authentication:
      type: bearer
      token: $secrets.bloomberg_api_key
    resources:
    - name: rates
      path: /snapshots/{{currency_pair}}
      inputParameters:
      - name: currency_pair
        in: path
      operations:
      - name: get-rate
        method: GET
Open in Framework → View in Fleet → bloomberg-fx-rate-lookup.yml

Tracks a SWIFT gpi payment status, enriches with Temenos transaction data, and notifies operations via ServiceNow.

naftiko: '0.5'
info:
  label: SWIFT gpi Payment Tracking Pipeline
  description: Tracks a SWIFT gpi payment status, enriches with Temenos transaction data, and notifies operations via ServiceNow.
  tags:
  - payments
  - swift
  - temenos-transact
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: swift-gpi-tracking
    port: 8080
    tools:
    - name: track-gpi-payment
      description: Track SWIFT gpi payment end-to-end and notify on issues.
      inputParameters:
      - name: uetr
        in: body
        type: string
        description: SWIFT Unique End-to-end Transaction Reference.
      steps:
      - name: get-gpi-status
        type: call
        call: swift-api.get-payment-status
        with:
          uetr: '{{uetr}}'
      - name: get-transaction
        type: call
        call: temenos-api.get-transaction
        with:
          reference: '{{uetr}}'
      - name: notify-ops
        type: call
        call: servicenow-api.create-incident
        with:
          short_description: 'SWIFT gpi tracking: {{uetr}}'
          description: 'Status: {{get-gpi-status.status}}. Amount: {{get-transaction.amount}} {{get-transaction.currency}}. Beneficiary: {{get-transaction.beneficiary}}.'
          category: payment_operations
  consumes:
  - type: http
    namespace: swift-api
    baseUri: https://api.swiftnet.sipn.swift.com/swift-apitracker/v5
    authentication:
      type: bearer
      token: $secrets.swift_api_token
    resources:
    - name: payments
      path: /payments/{{uetr}}/transactions
      inputParameters:
      - name: uetr
        in: path
      operations:
      - name: get-payment-status
        method: GET
  - type: http
    namespace: temenos-api
    baseUri: https://temenos.bnpparibas.com/api/v1
    authentication:
      type: bearer
      token: $secrets.temenos_token
    resources:
    - name: transactions
      path: /transactions/{{reference}}
      inputParameters:
      - name: reference
        in: path
      operations:
      - name: get-transaction
        method: GET
  - type: http
    namespace: servicenow-api
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → swift-gpi-payment-tracking-pipeline.yml

Plans the upgrade in Azure Kubernetes Service, drains nodes, runs health checks via Datadog, and logs changes in ServiceNow.

naftiko: '0.5'
info:
  label: Kubernetes Cluster Upgrade Pipeline
  description: Plans the upgrade in Azure Kubernetes Service, drains nodes, runs health checks via Datadog, and logs changes in ServiceNow.
  tags:
  - infrastructure
  - azure-kubernetes-service
  - datadog
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: k8s-upgrade
    port: 8080
    tools:
    - name: upgrade-cluster
      description: Plan and execute a Kubernetes cluster upgrade with monitoring.
      inputParameters:
      - name: cluster_name
        in: body
        type: string
        description: AKS cluster name.
      - name: target_version
        in: body
        type: string
        description: Target Kubernetes version.
      steps:
      - name: start-upgrade
        type: call
        call: aks.upgrade-cluster
        with:
          cluster_name: '{{cluster_name}}'
          version: '{{target_version}}'
      - name: check-health
        type: call
        call: datadog.query-metrics
        with:
          query: avg:kubernetes.pods.running{cluster:{{cluster_name}}}
      - name: log-change
        type: call
        call: servicenow.create-change-request
        with:
          short_description: 'K8s upgrade: {{cluster_name}} to {{target_version}}'
          description: 'Cluster: {{cluster_name}}. Target: {{target_version}}. Pods running: {{check-health.value}}.'
  consumes:
  - type: http
    namespace: aks
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: clusters
      path: /subscriptions/$secrets.azure_sub_id/resourceGroups/infra/providers/Microsoft.ContainerService/managedClusters/{{cluster_name}}
      inputParameters:
      - name: cluster_name
        in: path
      operations:
      - name: upgrade-cluster
        method: PUT
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /query
      inputParameters:
      - name: query
        in: query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.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-request
        method: POST
Open in Framework → View in Fleet → kubernetes-cluster-upgrade-pipeline.yml

Retrieves consumer group lag for a Kafka topic, returning current offset, end offset, and lag per partition.

naftiko: '0.5'
info:
  label: Kafka Topic Offset Check
  description: Retrieves consumer group lag for a Kafka topic, returning current offset, end offset, and lag per partition.
  tags:
  - streaming
  - apache-kafka
capability:
  exposes:
  - type: mcp
    namespace: kafka-monitor
    port: 8080
    tools:
    - name: get-consumer-lag
      description: Check consumer group offset lag for a Kafka topic.
      inputParameters:
      - name: group_id
        in: body
        type: string
        description: The Kafka consumer group ID.
      call: kafka-monitor.get-offsets
      with:
        group_id: '{{group_id}}'
  consumes:
  - type: http
    namespace: kafka-monitor
    baseUri: https://kafka-rest.bnpparibas.com/v3
    authentication:
      type: bearer
      token: $secrets.kafka_rest_token
    resources:
    - name: offsets
      path: /consumers/{{group_id}}/offsets
      inputParameters:
      - name: group_id
        in: path
      operations:
      - name: get-offsets
        method: GET
Open in Framework → View in Fleet → kafka-topic-offset-check.yml

Validates a corporate payment against the customer account in Temenos Transact, screens beneficiary through Moody's sanctions list, executes via SAP treasury, and notifies operations via ServiceNow.

naftiko: '0.5'
info:
  label: Corporate Payment Processing Pipeline
  description: Validates a corporate payment against the customer account in Temenos Transact, screens beneficiary through Moody's sanctions list, executes via SAP treasury, and notifies operations via ServiceNow.
  tags:
  - payments
  - corporate-banking
  - temenos-transact
  - moodys
  - sap
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: corporate-payments
    port: 8080
    tools:
    - name: process-corporate-payment
      description: Validate account, screen beneficiary, execute payment, and notify operations for a corporate wire transfer.
      inputParameters:
      - name: debit_account_id
        in: body
        type: string
        description: The Temenos Transact debit account ID.
      - name: beneficiary_name
        in: body
        type: string
        description: The beneficiary name for sanctions screening.
      - name: beneficiary_country
        in: body
        type: string
        description: The beneficiary country ISO code.
      - name: amount
        in: body
        type: number
        description: The payment amount.
      - name: currency
        in: body
        type: string
        description: The payment currency ISO code.
      steps:
      - name: validate-account
        type: call
        call: temenos.get-balance
        with:
          account_id: '{{debit_account_id}}'
      - name: screen-beneficiary
        type: call
        call: moodys.screen-entity
        with:
          entity_name: '{{beneficiary_name}}'
          country: '{{beneficiary_country}}'
      - name: execute-payment
        type: call
        call: sap.create-payment
        with:
          debit_account: '{{debit_account_id}}'
          beneficiary: '{{beneficiary_name}}'
          amount: '{{amount}}'
          currency: '{{currency}}'
      - name: notify-ops
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Corporate payment executed: {{amount}} {{currency}} to {{beneficiary_name}}'
          description: 'Debit account: {{debit_account_id}}. Available balance after: {{validate-account.available_balance}}. Screening result: {{screen-beneficiary.risk_level}}. SAP ref: {{execute-payment.payment_ref}}.'
          assigned_group: Payment_Operations
          category: payment_processing
  consumes:
  - type: http
    namespace: temenos
    baseUri: https://transact.bnpparibas.net/api/v1
    authentication:
      type: bearer
      token: $secrets.temenos_token
    resources:
    - name: accounts
      path: /accounts/{{account_id}}/balances
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-balance
        method: GET
  - type: http
    namespace: moodys
    baseUri: https://api.moodys.com/screening/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_key
    resources:
    - name: entities
      path: /screen
      operations:
      - name: screen-entity
        method: POST
  - type: http
    namespace: sap
    baseUri: https://bnp-s4.sap.com/sap/opu/odata/sap/FI_PAYMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: payments
      path: /A_PaymentInstruction
      operations:
      - name: create-payment
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → corporate-payment-processing-pipeline.yml

Triggers a dataset refresh in Power BI for a given workspace and dataset, used by finance teams to ensure dashboards reflect the latest data.

naftiko: '0.5'
info:
  label: Power BI Report Refresh
  description: Triggers a dataset refresh in Power BI for a given workspace and dataset, used by finance teams to ensure dashboards reflect the latest data.
  tags:
  - analytics
  - reporting
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: bi-reporting
    port: 8080
    tools:
    - name: refresh-dataset
      description: Trigger a Power BI dataset refresh for a given workspace and dataset ID.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: The Power BI workspace (group) ID.
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID.
      call: powerbi.refresh-dataset
      with:
        workspace_id: '{{workspace_id}}'
        dataset_id: '{{dataset_id}}'
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: workspace_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → power-bi-report-refresh.yml

Monitors ServiceNow P1 incidents, escalates via PagerDuty, creates a war room in Microsoft Teams, and posts updates to the operations channel.

naftiko: '0.5'
info:
  label: Incident Escalation Pipeline
  description: Monitors ServiceNow P1 incidents, escalates via PagerDuty, creates a war room in Microsoft Teams, and posts updates to the operations channel.
  tags:
  - incident-management
  - servicenow
  - pagerduty
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: incident-escalation
    port: 8080
    tools:
    - name: escalate-incident
      description: Escalate a P1 incident with war room and notifications.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number.
      steps:
      - name: get-incident
        type: call
        call: servicenow.get-incident
        with:
          number: '{{incident_number}}'
      - name: page-oncall
        type: call
        call: pagerduty.create-incident
        with:
          title: 'P1: {{get-incident.short_description}}'
          service_id: '{{get-incident.service_id}}'
          urgency: high
      - name: create-war-room
        type: call
        call: msteams.create-channel
        with:
          team_id: incident-response
          name: WAR-{{incident_number}}
          description: '{{get-incident.short_description}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      inputParameters:
      - name: number
        in: query
      operations:
      - name: get-incident
        method: GET
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: 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: channels
      path: /teams/{{team_id}}/channels
      inputParameters:
      - name: team_id
        in: path
      operations:
      - name: create-channel
        method: POST
Open in Framework → View in Fleet → incident-escalation-pipeline.yml

Fetches market data from Bloomberg, runs valuation models in Azure Databricks, stores results in Snowflake, and updates positions in SimCorp.

naftiko: '0.5'
info:
  label: Derivatives Valuation Pipeline
  description: Fetches market data from Bloomberg, runs valuation models in Azure Databricks, stores results in Snowflake, and updates positions in SimCorp.
  tags:
  - derivatives
  - bloomberg
  - azure-databricks
  - snowflake
  - simcorp-dimension
capability:
  exposes:
  - type: mcp
    namespace: deriv-valuation
    port: 8080
    tools:
    - name: value-derivatives
      description: Run derivative valuations with market data and position updates.
      inputParameters:
      - name: portfolio_code
        in: body
        type: string
        description: Portfolio code.
      - name: valuation_date
        in: body
        type: string
        description: Valuation date YYYY-MM-DD.
      steps:
      - name: get-market-data
        type: call
        call: bloomberg.get-curves
        with:
          date: '{{valuation_date}}'
      - name: run-models
        type: call
        call: databricks.submit-job
        with:
          job_name: deriv-valuation
          parameters: '{{portfolio_code}},{{valuation_date}}'
      - name: store-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: CALL DERIV.STORE_VALUATIONS('{{portfolio_code}}', '{{valuation_date}}')
      - name: update-positions
        type: call
        call: simcorp.update-valuations
        with:
          portfolio_code: '{{portfolio_code}}'
          date: '{{valuation_date}}'
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg
    authentication:
      type: bearer
      token: $secrets.bloomberg_api_key
    resources:
    - name: curves
      path: /curves
      inputParameters:
      - name: date
        in: query
      operations:
      - name: get-curves
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://adb-bnp.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: submit-job
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://bnpparibas.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: simcorp
    baseUri: https://simcorp.bnpparibas.net/api/v2
    authentication:
      type: bearer
      token: $secrets.simcorp_token
    resources:
    - name: valuations
      path: /portfolios/{{portfolio_code}}/valuations
      inputParameters:
      - name: portfolio_code
        in: path
      operations:
      - name: update-valuations
        method: PUT
Open in Framework → View in Fleet → derivatives-valuation-pipeline.yml

Creates vendor in SAP Ariba, runs due diligence checks, sets up payment terms in Oracle, and tracks onboarding in ServiceNow.

naftiko: '0.5'
info:
  label: Vendor Onboarding Orchestrator
  description: Creates vendor in SAP Ariba, runs due diligence checks, sets up payment terms in Oracle, and tracks onboarding in ServiceNow.
  tags:
  - procurement
  - sap-ariba
  - oracle
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: vendor-onboarding
    port: 8080
    tools:
    - name: onboard-vendor
      description: Onboard a new vendor across SAP Ariba, Oracle, and ServiceNow.
      inputParameters:
      - name: vendor_name
        in: body
        type: string
        description: Vendor company name.
      - name: tax_id
        in: body
        type: string
        description: Vendor tax ID.
      steps:
      - name: create-vendor
        type: call
        call: ariba.create-supplier
        with:
          name: '{{vendor_name}}'
          tax_id: '{{tax_id}}'
      - name: setup-payments
        type: call
        call: oracle.create-supplier
        with:
          supplier_name: '{{vendor_name}}'
          supplier_number: '{{create-vendor.supplier_id}}'
      - name: track-onboarding
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Vendor onboarding: {{vendor_name}}'
          description: 'Ariba: {{create-vendor.supplier_id}}. Oracle: {{setup-payments.supplier_number}}.'
          category: procurement
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: suppliers
      path: /supplier-management/v2/suppliers
      operations:
      - name: create-supplier
        method: POST
  - type: http
    namespace: oracle
    baseUri: https://oracle.bnpparibas.com/fscmRestApi/resources/v1
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: suppliers
      path: /suppliers
      operations:
      - name: create-supplier
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → vendor-onboarding-orchestrator.yml

Extracts position data from SimCorp, computes capital requirements in Snowflake, generates reports in Power BI, and archives in Azure Blob Storage.

naftiko: '0.5'
info:
  label: Regulatory Capital Report Pipeline
  description: Extracts position data from SimCorp, computes capital requirements in Snowflake, generates reports in Power BI, and archives in Azure Blob Storage.
  tags:
  - regulatory
  - simcorp-dimension
  - snowflake
  - power-bi
  - azure-blob-storage
capability:
  exposes:
  - type: mcp
    namespace: reg-capital
    port: 8080
    tools:
    - name: generate-capital-report
      description: Compute and distribute regulatory capital report.
      inputParameters:
      - name: reporting_date
        in: body
        type: string
        description: Reporting date YYYY-MM-DD.
      steps:
      - name: get-positions
        type: call
        call: simcorp.get-positions
        with:
          as_of_date: '{{reporting_date}}'
      - name: compute-capital
        type: call
        call: snowflake.execute-statement
        with:
          statement: CALL REG.COMPUTE_CAPITAL_REQUIREMENTS('{{reporting_date}}')
      - name: refresh-report
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: regulatory-capital
      - name: archive
        type: call
        call: azure-blob.upload
        with:
          container: regulatory-reports
          blob_name: capital/{{reporting_date}}/report.json
  consumes:
  - type: http
    namespace: simcorp
    baseUri: https://simcorp.bnpparibas.net/api/v2
    authentication:
      type: bearer
      token: $secrets.simcorp_token
    resources:
    - name: positions
      path: /positions
      inputParameters:
      - name: as_of_date
        in: query
      operations:
      - name: get-positions
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://bnpparibas.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: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: azure-blob
    baseUri: https://bnpdata.blob.core.windows.net
    authentication:
      type: bearer
      token: $secrets.azure_storage_token
    resources:
    - name: blobs
      path: /{{container}}/{{blob_name}}
      inputParameters:
      - name: container
        in: path
      - name: blob_name
        in: path
      operations:
      - name: upload
        method: PUT
Open in Framework → View in Fleet → regulatory-capital-report-pipeline.yml

Computes Value at Risk from Snowflake data, generates reports in Qlik Sense, stores in Azure Blob Storage, and distributes via email.

naftiko: '0.5'
info:
  label: Market Risk VaR Report Pipeline
  description: Computes Value at Risk from Snowflake data, generates reports in Qlik Sense, stores in Azure Blob Storage, and distributes via email.
  tags:
  - risk-management
  - snowflake
  - qlik-sense
  - azure-blob-storage
capability:
  exposes:
  - type: mcp
    namespace: var-report
    port: 8080
    tools:
    - name: generate-var-report
      description: Compute VaR and generate risk reports.
      inputParameters:
      - name: portfolio_code
        in: body
        type: string
        description: Portfolio code.
      - name: confidence_level
        in: body
        type: number
        description: VaR confidence level (e.g. 0.99).
      steps:
      - name: compute-var
        type: call
        call: snowflake.execute-statement
        with:
          statement: CALL RISK.COMPUTE_VAR('{{portfolio_code}}', {{confidence_level}})
      - name: refresh-dashboard
        type: call
        call: qlik.reload-app
        with:
          app_id: var-dashboard
      - name: export-report
        type: call
        call: azure-blob.upload
        with:
          container: risk-reports
          blob_name: var/{{portfolio_code}}/latest.pdf
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bnpparibas.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: qlik
    baseUri: https://qlik.bnpparibas.com/api/v1
    authentication:
      type: bearer
      token: $secrets.qlik_token
    resources:
    - name: apps
      path: /apps/{{app_id}}/reload
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: reload-app
        method: POST
  - type: http
    namespace: azure-blob
    baseUri: https://bnpdata.blob.core.windows.net
    authentication:
      type: bearer
      token: $secrets.azure_storage_token
    resources:
    - name: blobs
      path: /{{container}}/{{blob_name}}
      inputParameters:
      - name: container
        in: path
      - name: blob_name
        in: path
      operations:
      - name: upload
        method: PUT
Open in Framework → View in Fleet → market-risk-var-report-pipeline.yml

Creates a new user in Keycloak, assigns realm roles based on Workday job profile, configures Azure AD group membership, and logs provisioning in ServiceNow.

naftiko: '0.5'
info:
  label: Keycloak Identity Provisioning Pipeline
  description: Creates a new user in Keycloak, assigns realm roles based on Workday job profile, configures Azure AD group membership, and logs provisioning in ServiceNow.
  tags:
  - security
  - identity-management
  - keycloak
  - workday
  - azure-active-directory
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: identity
    port: 8080
    tools:
    - name: provision-identity
      description: Create Keycloak user, assign roles from Workday profile, sync Azure AD groups, and log provisioning.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: The Workday worker ID of the new user.
      - name: realm
        in: body
        type: string
        description: The Keycloak realm to provision into.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{worker_id}}'
      - name: create-user
        type: call
        call: keycloak.create-user
        with:
          realm: '{{realm}}'
          username: '{{get-employee.work_email}}'
          first_name: '{{get-employee.first_name}}'
          last_name: '{{get-employee.last_name}}'
          email: '{{get-employee.work_email}}'
      - name: assign-ad-group
        type: call
        call: azuread.add-group-member
        with:
          group_id: '{{get-employee.department}}_users'
          user_principal_name: '{{get-employee.work_email}}'
      - name: log-provisioning
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Identity provisioned: {{get-employee.full_name}}'
          description: 'Keycloak user created in realm {{realm}}. Azure AD group: {{get-employee.department}}_users. Worker ID: {{worker_id}}. Department: {{get-employee.department}}.'
          assigned_group: IAM_Team
          category: identity_provisioning
  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: keycloak
    baseUri: https://keycloak.bnpparibas.net/admin/realms
    authentication:
      type: bearer
      token: $secrets.keycloak_admin_token
    resources:
    - name: users
      path: /{{realm}}/users
      inputParameters:
      - name: realm
        in: path
      operations:
      - name: create-user
        method: POST
  - type: http
    namespace: azuread
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: groups
      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://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → keycloak-identity-provisioning-pipeline.yml

Exports a Qlik Sense report as PDF by app ID and sheet ID for distribution to stakeholders.

naftiko: '0.5'
info:
  label: Qlik Sense Report Export
  description: Exports a Qlik Sense report as PDF by app ID and sheet ID for distribution to stakeholders.
  tags:
  - reporting
  - qlik-sense
capability:
  exposes:
  - type: mcp
    namespace: qlik-export
    port: 8080
    tools:
    - name: export-report
      description: Export a Qlik Sense sheet as PDF.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: The Qlik Sense app identifier.
      - name: sheet_id
        in: body
        type: string
        description: The sheet identifier.
      call: qlik-export.export-pdf
      with:
        app_id: '{{app_id}}'
        sheet_id: '{{sheet_id}}'
  consumes:
  - type: http
    namespace: qlik-export
    baseUri: https://qlik.bnpparibas.com/api/v1
    authentication:
      type: bearer
      token: $secrets.qlik_token
    resources:
    - name: exports
      path: /apps/{{app_id}}/sheets/{{sheet_id}}/export/pdf
      inputParameters:
      - name: app_id
        in: path
      - name: sheet_id
        in: path
      operations:
      - name: export-pdf
        method: GET
Open in Framework → View in Fleet → qlik-sense-report-export.yml

Tracks a SWIFT MT103 payment message through the payment chain, checking status in SAP treasury and logging delays in ServiceNow for operations follow-up.

naftiko: '0.5'
info:
  label: SWIFT Payment Message Tracking
  description: Tracks a SWIFT MT103 payment message through the payment chain, checking status in SAP treasury and logging delays in ServiceNow for operations follow-up.
  tags:
  - payments
  - swift
  - sap
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: swift-tracking
    port: 8080
    tools:
    - name: track-swift-payment
      description: Track a SWIFT payment by reference, check SAP status, and log delays for follow-up.
      inputParameters:
      - name: swift_ref
        in: body
        type: string
        description: The SWIFT UETR or transaction reference.
      - name: payment_doc_number
        in: body
        type: string
        description: The SAP payment document number.
      steps:
      - name: track-message
        type: call
        call: swift.track-payment
        with:
          uetr: '{{swift_ref}}'
      - name: get-sap-status
        type: call
        call: sap.get-payment
        with:
          payment_doc_number: '{{payment_doc_number}}'
      - name: log-status
        type: call
        call: servicenow.create-task
        with:
          short_description: 'SWIFT tracking: {{swift_ref}}'
          description: 'SWIFT status: {{track-message.status}}. Last update: {{track-message.last_update}}. SAP status: {{get-sap-status.status}}. Amount: {{get-sap-status.amount}} {{get-sap-status.currency}}. Value date: {{get-sap-status.value_date}}.'
          assigned_group: Payment_Operations
          category: swift_tracking
  consumes:
  - type: http
    namespace: swift
    baseUri: https://api.swiftnet.sipn.swift.com/gpi/v4
    authentication:
      type: bearer
      token: $secrets.swift_api_key
    resources:
    - name: tracker
      path: /payments/{{uetr}}
      inputParameters:
      - name: uetr
        in: path
      operations:
      - name: track-payment
        method: GET
  - type: http
    namespace: sap
    baseUri: https://bnp-s4.sap.com/sap/opu/odata/sap/FI_PAYMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: payments
      path: /A_PaymentInstruction('{{payment_doc_number}}')
      inputParameters:
      - name: payment_doc_number
        in: path
      operations:
      - name: get-payment
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → swift-payment-message-tracking.yml

Queries Oracle General Ledger for account balances by ledger, period, and account code, returning debit, credit, and net balance.

naftiko: '0.5'
info:
  label: Oracle GL Balance Inquiry
  description: Queries Oracle General Ledger for account balances by ledger, period, and account code, returning debit, credit, and net balance.
  tags:
  - finance
  - oracle
capability:
  exposes:
  - type: mcp
    namespace: oracle-gl
    port: 8080
    tools:
    - name: get-gl-balance
      description: Retrieve General Ledger balance for a given account and period.
      inputParameters:
      - name: account_code
        in: body
        type: string
        description: The GL account code.
      - name: period
        in: body
        type: string
        description: Accounting period (e.g. JAN-26).
      call: oracle-gl.get-balance
      with:
        account_code: '{{account_code}}'
        period: '{{period}}'
  consumes:
  - type: http
    namespace: oracle-gl
    baseUri: https://oracle.bnpparibas.com/fscmRestApi/resources/v1
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: balances
      path: /generalLedgerBalances
      inputParameters:
      - name: account_code
        in: query
      - name: period
        in: query
      operations:
      - name: get-balance
        method: GET
Open in Framework → View in Fleet → oracle-gl-balance-inquiry.yml

Extracts data from Oracle Database, transforms it in Azure Databricks, generates the regulatory report in Power BI, and logs submission in ServiceNow for audit trail.

naftiko: '0.5'
info:
  label: Regulatory Report Generation Pipeline
  description: Extracts data from Oracle Database, transforms it in Azure Databricks, generates the regulatory report in Power BI, and logs submission in ServiceNow for audit trail.
  tags:
  - compliance
  - regulatory
  - financial-reporting
  - oracle-database
  - azure-databricks
  - power-bi
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: regulatory-reporting
    port: 8080
    tools:
    - name: generate-regulatory-report
      description: Extract regulatory data, transform in Databricks, refresh Power BI report, and log submission for audit.
      inputParameters:
      - name: report_type
        in: body
        type: string
        description: The regulatory report type (e.g. COREP, FINREP, FRTB).
      - name: reporting_date
        in: body
        type: string
        description: The reporting period end date in YYYY-MM-DD format.
      - name: entity_code
        in: body
        type: string
        description: The legal entity code for the report.
      steps:
      - name: extract-data
        type: call
        call: oracle.execute-query
        with:
          query_name: reg_{{report_type}}_extract
          reporting_date: '{{reporting_date}}'
          entity_code: '{{entity_code}}'
      - name: transform-data
        type: call
        call: databricks.run-job
        with:
          job_name: regulatory_{{report_type}}_transform
          parameters: reporting_date={{reporting_date}}&entity={{entity_code}}&extract_id={{extract-data.extract_id}}
      - name: refresh-report
        type: call
        call: powerbi.refresh-dataset
        with:
          workspace_id: regulatory_reports
          dataset_id: '{{report_type}}_{{entity_code}}'
      - name: log-submission
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Regulatory report generated: {{report_type}} — {{entity_code}} — {{reporting_date}}'
          description: 'Extract ID: {{extract-data.extract_id}}. Databricks run: {{transform-data.run_id}}. Report refreshed in Power BI. Ready for supervisory submission.'
          assigned_group: Regulatory_Reporting
          category: regulatory_submission
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://ords.bnpparibas.net/ords/reg
    authentication:
      type: bearer
      token: $secrets.oracle_ords_token
    resources:
    - name: queries
      path: /extracts/{{query_name}}
      inputParameters:
      - name: query_name
        in: path
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: databricks
    baseUri: https://adb-bnpparibas.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: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → regulatory-report-generation-pipeline.yml

Retrieves nostro balances from Temenos, matches against SWIFT statements, logs breaks in Oracle, and creates ServiceNow tickets for unmatched items.

naftiko: '0.5'
info:
  label: Nostro Account Reconciliation Workflow
  description: Retrieves nostro balances from Temenos, matches against SWIFT statements, logs breaks in Oracle, and creates ServiceNow tickets for unmatched items.
  tags:
  - operations
  - temenos-transact
  - swift
  - oracle
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: nostro-recon
    port: 8080
    tools:
    - name: reconcile-nostro
      description: Reconcile nostro account balances against SWIFT statements.
      inputParameters:
      - name: nostro_account
        in: body
        type: string
        description: Nostro account number.
      - name: recon_date
        in: body
        type: string
        description: Reconciliation date YYYY-MM-DD.
      steps:
      - name: get-balance
        type: call
        call: temenos.get-balance
        with:
          account_number: '{{nostro_account}}'
      - name: get-statement
        type: call
        call: swift.get-mt950
        with:
          account: '{{nostro_account}}'
          date: '{{recon_date}}'
      - name: log-breaks
        type: call
        call: oracle.insert-breaks
        with:
          account: '{{nostro_account}}'
          book_balance: '{{get-balance.balance}}'
          statement_balance: '{{get-statement.closing_balance}}'
      - name: create-ticket
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Nostro recon: {{nostro_account}} — {{recon_date}}'
          description: 'Book: {{get-balance.balance}}. Statement: {{get-statement.closing_balance}}. Breaks logged in Oracle.'
  consumes:
  - type: http
    namespace: temenos
    baseUri: https://temenos.bnpparibas.com/api/v1
    authentication:
      type: bearer
      token: $secrets.temenos_token
    resources:
    - name: accounts
      path: /accounts/{{account_number}}/balance
      inputParameters:
      - name: account_number
        in: path
      operations:
      - name: get-balance
        method: GET
  - type: http
    namespace: swift
    baseUri: https://api.swift.com/gpi/v4
    authentication:
      type: bearer
      token: $secrets.swift_gpi_token
    resources:
    - name: statements
      path: /statements/mt950
      inputParameters:
      - name: account
        in: query
      - name: date
        in: query
      operations:
      - name: get-mt950
        method: GET
  - type: http
    namespace: oracle
    baseUri: https://oracle.bnpparibas.com/fscmRestApi/resources/v1
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: recon-breaks
      path: /reconciliationBreaks
      operations:
      - name: insert-breaks
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → nostro-account-reconciliation-workflow.yml

Retrieves the real-time account balance from Temenos Transact core banking platform by account number.

naftiko: '0.5'
info:
  label: Temenos Account Balance
  description: Retrieves the real-time account balance from Temenos Transact core banking platform by account number.
  tags:
  - core-banking
  - temenos-transact
capability:
  exposes:
  - type: mcp
    namespace: temenos
    port: 8080
    tools:
    - name: get-account-balance
      description: Retrieve the current balance for a Temenos account by account number.
      inputParameters:
      - name: account_number
        in: body
        type: string
        description: The Temenos account number.
      call: temenos.get-balance
      with:
        account_number: '{{account_number}}'
  consumes:
  - type: http
    namespace: temenos
    baseUri: https://temenos.bnpparibas.com/api/v1
    authentication:
      type: bearer
      token: $secrets.temenos_token
    resources:
    - name: accounts
      path: /accounts/{{account_number}}/balance
      inputParameters:
      - name: account_number
        in: path
      operations:
      - name: get-balance
        method: GET
Open in Framework → View in Fleet → temenos-account-balance.yml

Creates a new bond instrument in Bloomberg AIM, registers in SimCorp Dimension, generates SWIFT messages, and notifies the syndicate desk via ServiceNow.

naftiko: '0.5'
info:
  label: Bond Issuance Workflow
  description: Creates a new bond instrument in Bloomberg AIM, registers in SimCorp Dimension, generates SWIFT messages, and notifies the syndicate desk via ServiceNow.
  tags:
  - capital-markets
  - bloomberg-aim
  - simcorp-dimension
  - swift
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: bond-issuance
    port: 8080
    tools:
    - name: issue-bond
      description: Register and notify for a new bond issuance.
      inputParameters:
      - name: isin
        in: body
        type: string
        description: Bond ISIN.
      - name: issuer
        in: body
        type: string
        description: Issuer name.
      - name: amount
        in: body
        type: number
        description: Issuance amount.
      steps:
      - name: register-aim
        type: call
        call: bloomberg-aim.create-instrument
        with:
          isin: '{{isin}}'
          issuer: '{{issuer}}'
      - name: register-simcorp
        type: call
        call: simcorp.create-instrument
        with:
          isin: '{{isin}}'
          name: '{{issuer}} Bond'
      - name: send-swift
        type: call
        call: swift.send-mt564
        with:
          isin: '{{isin}}'
          event_type: NEW_ISSUE
      - name: notify-desk
        type: call
        call: servicenow.create-task
        with:
          short_description: 'New bond issuance: {{issuer}} {{isin}}'
          description: 'Amount: {{amount}}. SWIFT: {{send-swift.reference}}.'
          category: capital_markets
  consumes:
  - type: http
    namespace: bloomberg-aim
    baseUri: https://aim.bloomberg.com/api/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_aim_token
    resources:
    - name: instruments
      path: /instruments
      operations:
      - name: create-instrument
        method: POST
  - type: http
    namespace: simcorp
    baseUri: https://simcorp.bnpparibas.net/api/v2
    authentication:
      type: bearer
      token: $secrets.simcorp_token
    resources:
    - name: instruments
      path: /instruments
      operations:
      - name: create-instrument
        method: POST
  - type: http
    namespace: swift
    baseUri: https://swift.bnpparibas.com/api/v1
    authentication:
      type: bearer
      token: $secrets.swift_token
    resources:
    - name: messages
      path: /messages/mt564
      operations:
      - name: send-mt564
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → bond-issuance-workflow.yml

Receives GDPR requests via ServiceNow, searches for personal data in Temenos and Salesforce, generates deletion reports, and logs in Confluence.

naftiko: '0.5'
info:
  label: Data Privacy Request Handler
  description: Receives GDPR requests via ServiceNow, searches for personal data in Temenos and Salesforce, generates deletion reports, and logs in Confluence.
  tags:
  - compliance
  - servicenow
  - temenos-transact
  - salesforce
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: gdpr-handler
    port: 8080
    tools:
    - name: handle-privacy-request
      description: Process a GDPR data subject request.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: ServiceNow request ID.
      - name: subject_email
        in: body
        type: string
        description: Data subject email.
      steps:
      - name: get-request
        type: call
        call: servicenow.get-task
        with:
          task_id: '{{request_id}}'
      - name: search-temenos
        type: call
        call: temenos.search-customer
        with:
          email: '{{subject_email}}'
      - name: search-salesforce
        type: call
        call: salesforce.search-contact
        with:
          email: '{{subject_email}}'
      - name: log-report
        type: call
        call: confluence.create-page
        with:
          space_key: GDPR
          title: 'DSAR: {{request_id}} — {{subject_email}}'
          body: 'Temenos records: {{search-temenos.count}}. Salesforce records: {{search-salesforce.count}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task/{{task_id}}
      inputParameters:
      - name: task_id
        in: path
      operations:
      - name: get-task
        method: GET
  - type: http
    namespace: temenos
    baseUri: https://temenos.bnpparibas.com/api/v1
    authentication:
      type: bearer
      token: $secrets.temenos_token
    resources:
    - name: customers
      path: /customers/search
      inputParameters:
      - name: email
        in: query
      operations:
      - name: search-customer
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://bnpparibas.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /parameterizedSearch
      inputParameters:
      - name: email
        in: query
      operations:
      - name: search-contact
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://bnpparibas.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → data-privacy-request-handler.yml

Retrieves transaction details from Mastercard by authorization reference, returning amount, merchant, status, and settlement date.

naftiko: '0.5'
info:
  label: Mastercard Transaction Lookup
  description: Retrieves transaction details from Mastercard by authorization reference, returning amount, merchant, status, and settlement date.
  tags:
  - payments
  - mastercard
  - transaction-monitoring
capability:
  exposes:
  - type: mcp
    namespace: card-payments
    port: 8080
    tools:
    - name: get-transaction
      description: Look up a Mastercard transaction by authorization reference number.
      inputParameters:
      - name: auth_ref
        in: body
        type: string
        description: The Mastercard authorization reference number.
      call: mastercard.get-transaction
      with:
        auth_ref: '{{auth_ref}}'
      outputParameters:
      - name: amount
        type: number
        mapping: $.transaction.amount
      - name: currency
        type: string
        mapping: $.transaction.currency
      - name: merchant
        type: string
        mapping: $.transaction.merchantName
      - name: status
        type: string
        mapping: $.transaction.status
  consumes:
  - type: http
    namespace: mastercard
    baseUri: https://api.mastercard.com/transaction/v1
    authentication:
      type: bearer
      token: $secrets.mastercard_api_key
    resources:
    - name: transactions
      path: /authorizations/{{auth_ref}}
      inputParameters:
      - name: auth_ref
        in: path
      operations:
      - name: get-transaction
        method: GET
Open in Framework → View in Fleet → mastercard-transaction-lookup.yml

When a Bloomberg BQL query detects anomalous trading patterns, creates a surveillance case in ServiceNow, enriches with Salesforce client data, and stores evidence in SharePoint.

naftiko: '0.5'
info:
  label: Trade Surveillance Alert Pipeline
  description: When a Bloomberg BQL query detects anomalous trading patterns, creates a surveillance case in ServiceNow, enriches with Salesforce client data, and stores evidence in SharePoint.
  tags:
  - compliance
  - trade-surveillance
  - bloomberg-bql
  - servicenow
  - salesforce
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: trade-surveillance
    port: 8080
    tools:
    - name: process-surveillance-alert
      description: On anomalous trade detection, create surveillance case, enrich with client data, and store evidence.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The surveillance alert identifier.
      - name: trader_account_id
        in: body
        type: string
        description: The Salesforce account ID of the trader's desk.
      - name: instrument
        in: body
        type: string
        description: The instrument ticker involved.
      steps:
      - name: get-trade-data
        type: call
        call: bloomberg-bql.run-query
        with:
          query: get(px_last, volume) for('{{instrument}}') with(dates=range(-5d,0d))
      - name: get-desk-info
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{trader_account_id}}'
      - name: create-case
        type: call
        call: servicenow.create-case
        with:
          short_description: 'Surveillance alert: {{alert_id}} — {{instrument}}'
          description: 'Anomalous pattern detected for {{instrument}}. Desk: {{get-desk-info.Name}}. RM: {{get-desk-info.Owner.Name}}. 5-day data retrieved for analysis.'
          assigned_group: Compliance_Surveillance
          category: trade_surveillance
          priority: '2'
      - name: store-evidence
        type: call
        call: sharepoint.create-file
        with:
          site_id: compliance_surveillance
          file_path: Evidence/{{alert_id}}/trade_data.json
          content_type: application/json
  consumes:
  - type: http
    namespace: bloomberg-bql
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg
    authentication:
      type: bearer
      token: $secrets.bloomberg_api_key
    resources:
    - name: queries
      path: /queries
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://bnpparibas.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cases
      path: /table/sn_customerservice_case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: create-file
        method: PUT
Open in Framework → View in Fleet → trade-surveillance-alert-pipeline.yml

Retrieves the current balance and available balance for a customer account from Temenos Transact core banking system.

naftiko: '0.5'
info:
  label: Temenos Core Banking Account Balance
  description: Retrieves the current balance and available balance for a customer account from Temenos Transact core banking system.
  tags:
  - banking
  - core-banking
  - temenos-transact
capability:
  exposes:
  - type: mcp
    namespace: core-banking
    port: 8080
    tools:
    - name: get-account-balance
      description: Retrieve current and available balance for a Temenos Transact customer account.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Temenos Transact account identifier.
      call: temenos.get-balance
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: current_balance
        type: number
        mapping: $.body.currentBalance
      - name: available_balance
        type: number
        mapping: $.body.availableBalance
      - name: currency
        type: string
        mapping: $.body.currency
  consumes:
  - type: http
    namespace: temenos
    baseUri: https://transact.bnpparibas.net/api/v1
    authentication:
      type: bearer
      token: $secrets.temenos_token
    resources:
    - name: accounts
      path: /accounts/{{account_id}}/balances
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-balance
        method: GET
Open in Framework → View in Fleet → temenos-core-banking-account-balance.yml

Submits a request-for-quote on Tradeweb for a fixed income security, returning dealer quotes and best execution price.

naftiko: '0.5'
info:
  label: Tradeweb RFQ Submission
  description: Submits a request-for-quote on Tradeweb for a fixed income security, returning dealer quotes and best execution price.
  tags:
  - trading
  - fixed-income
  - tradeweb
capability:
  exposes:
  - type: mcp
    namespace: fixed-income-trading
    port: 8080
    tools:
    - name: submit-rfq
      description: Submit a request-for-quote on Tradeweb for a given ISIN and notional amount.
      inputParameters:
      - name: isin
        in: body
        type: string
        description: The ISIN of the bond.
      - name: notional
        in: body
        type: number
        description: The notional amount in the bond currency.
      - name: direction
        in: body
        type: string
        description: BUY or SELL.
      call: tradeweb.create-rfq
      with:
        isin: '{{isin}}'
        notional: '{{notional}}'
        direction: '{{direction}}'
  consumes:
  - type: http
    namespace: tradeweb
    baseUri: https://api.tradeweb.com/v2
    authentication:
      type: bearer
      token: $secrets.tradeweb_api_key
    resources:
    - name: rfqs
      path: /rfqs
      operations:
      - name: create-rfq
        method: POST
Open in Framework → View in Fleet → tradeweb-rfq-submission.yml

Triggers an Alteryx analytics workflow for financial data preparation, validates output row counts in PostgreSQL, and notifies the analytics team via Azure Event Hubs.

naftiko: '0.5'
info:
  label: Alteryx Data Preparation Workflow
  description: Triggers an Alteryx analytics workflow for financial data preparation, validates output row counts in PostgreSQL, and notifies the analytics team via Azure Event Hubs.
  tags:
  - analytics
  - data-preparation
  - alteryx
  - postgresql
  - azure-event-hubs
capability:
  exposes:
  - type: mcp
    namespace: data-prep
    port: 8080
    tools:
    - name: run-alteryx-workflow
      description: Execute an Alteryx workflow, validate output, and notify analytics team.
      inputParameters:
      - name: workflow_id
        in: body
        type: string
        description: The Alteryx Server workflow ID.
      - name: output_table
        in: body
        type: string
        description: The output PostgreSQL table to validate.
      steps:
      - name: run-workflow
        type: call
        call: alteryx.run-workflow
        with:
          workflow_id: '{{workflow_id}}'
      - name: validate-output
        type: call
        call: postgresql.run-query
        with:
          query: SELECT COUNT(*) as row_count FROM {{output_table}} WHERE updated_at >= NOW() - INTERVAL '1 hour'
      - name: notify-team
        type: call
        call: eventhubs.send-event
        with:
          topic: analytics-completions
          body: 'Alteryx workflow {{workflow_id}} completed. Job ID: {{run-workflow.job_id}}. Output table: {{output_table}}. Rows: {{validate-output.row_count}}.'
  consumes:
  - type: http
    namespace: alteryx
    baseUri: https://alteryx.bnpparibas.net/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: postgresql
    baseUri: https://pgrest.bnpparibas.net/api/v1
    authentication:
      type: bearer
      token: $secrets.pgrest_token
    resources:
    - name: queries
      path: /rpc/execute_query
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: eventhubs
    baseUri: https://bnpparibas-prod.servicebus.windows.net
    authentication:
      type: bearer
      token: $secrets.eventhubs_sas_token
    resources:
    - name: events
      path: /{{topic}}/messages
      inputParameters:
      - name: topic
        in: path
      operations:
      - name: send-event
        method: POST
Open in Framework → View in Fleet → alteryx-data-preparation-workflow.yml

On new OTC derivative trade, retrieves trade details from Bloomberg AIM, generates confirmation document in SharePoint, sends to counterparty via Axway secure file transfer, and logs in ServiceNow.

naftiko: '0.5'
info:
  label: Derivatives Trade Confirmation Workflow
  description: On new OTC derivative trade, retrieves trade details from Bloomberg AIM, generates confirmation document in SharePoint, sends to counterparty via Axway secure file transfer, and logs in ServiceNow.
  tags:
  - derivatives
  - trade-operations
  - bloomberg-aim
  - sharepoint
  - axway
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: derivatives-confirm
    port: 8080
    tools:
    - name: confirm-otc-trade
      description: Generate and send trade confirmation for an OTC derivative, logging the workflow in ServiceNow.
      inputParameters:
      - name: trade_ref
        in: body
        type: string
        description: The Bloomberg AIM trade reference.
      - name: counterparty_id
        in: body
        type: string
        description: The counterparty identifier for secure delivery.
      steps:
      - name: get-trade
        type: call
        call: bloomberg-aim.get-trade
        with:
          trade_ref: '{{trade_ref}}'
      - name: create-confirmation
        type: call
        call: sharepoint.create-file
        with:
          site_id: derivatives_confirmations
          file_path: Confirmations/{{trade_ref}}_confirm.pdf
          content_type: application/pdf
      - name: send-to-counterparty
        type: call
        call: axway.send-file
        with:
          partner_id: '{{counterparty_id}}'
          file_url: '{{create-confirmation.url}}'
          filename: '{{trade_ref}}_confirm.pdf'
      - name: log-confirmation
        type: call
        call: servicenow.create-task
        with:
          short_description: 'OTC confirmation sent: {{trade_ref}}'
          description: 'Trade: {{get-trade.instrument}} {{get-trade.notional}} {{get-trade.currency}}. Counterparty: {{get-trade.counterparty}}. Confirmation delivered via Axway. Transfer ID: {{send-to-counterparty.transfer_id}}.'
          assigned_group: Derivatives_Operations
          category: trade_confirmation
  consumes:
  - type: http
    namespace: bloomberg-aim
    baseUri: https://aim.bloomberg.com/api/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_aim_token
    resources:
    - name: trades
      path: /trades/{{trade_ref}}
      inputParameters:
      - name: trade_ref
        in: path
      operations:
      - name: get-trade
        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: axway
    baseUri: https://axway.bnpparibas.net/api/v1
    authentication:
      type: bearer
      token: $secrets.axway_token
    resources:
    - name: transfers
      path: /transfers
      operations:
      - name: send-file
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → derivatives-trade-confirmation-workflow.yml

Calculates NAV in SimCorp, validates in Snowflake, publishes to Bloomberg, and distributes to investors via Salesforce.

naftiko: '0.5'
info:
  label: Fund NAV Publication Workflow
  description: Calculates NAV in SimCorp, validates in Snowflake, publishes to Bloomberg, and distributes to investors via Salesforce.
  tags:
  - fund-accounting
  - simcorp-dimension
  - snowflake
  - bloomberg
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: nav-publication
    port: 8080
    tools:
    - name: publish-nav
      description: Calculate, validate, and publish fund NAV.
      inputParameters:
      - name: fund_code
        in: body
        type: string
        description: Fund code.
      - name: nav_date
        in: body
        type: string
        description: NAV date YYYY-MM-DD.
      steps:
      - name: calculate-nav
        type: call
        call: simcorp.calculate-nav
        with:
          fund_code: '{{fund_code}}'
          date: '{{nav_date}}'
      - name: validate
        type: call
        call: snowflake.execute-statement
        with:
          statement: CALL NAV.VALIDATE('{{fund_code}}', '{{nav_date}}')
      - name: publish
        type: call
        call: bloomberg.publish-nav
        with:
          fund_code: '{{fund_code}}'
          nav: '{{calculate-nav.nav_per_share}}'
          date: '{{nav_date}}'
      - name: notify-investors
        type: call
        call: salesforce.create-task
        with:
          subject: 'NAV Published: {{fund_code}} — {{nav_date}}'
          description: 'NAV: {{calculate-nav.nav_per_share}}. Published to Bloomberg.'
  consumes:
  - type: http
    namespace: simcorp
    baseUri: https://simcorp.bnpparibas.net/api/v2
    authentication:
      type: bearer
      token: $secrets.simcorp_token
    resources:
    - name: nav
      path: /funds/{{fund_code}}/nav
      inputParameters:
      - name: fund_code
        in: path
      operations:
      - name: calculate-nav
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://bnpparibas.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: bloomberg
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg
    authentication:
      type: bearer
      token: $secrets.bloomberg_api_key
    resources:
    - name: nav
      path: /nav/publish
      operations:
      - name: publish-nav
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://bnpparibas.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: tasks
      path: /sobjects/Task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → fund-nav-publication-workflow.yml

Retrieves suspicious activity from Temenos, enriches with Moody's data, creates investigation cases in ServiceNow, and logs evidence in SharePoint.

naftiko: '0.5'
info:
  label: AML Case Investigation Workflow
  description: Retrieves suspicious activity from Temenos, enriches with Moody's data, creates investigation cases in ServiceNow, and logs evidence in SharePoint.
  tags:
  - compliance
  - temenos-transact
  - moodys
  - servicenow
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: aml-investigation
    port: 8080
    tools:
    - name: investigate-aml-case
      description: Investigate an AML alert with enrichment and case management.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: AML alert identifier.
      steps:
      - name: get-alert
        type: call
        call: temenos.get-aml-alert
        with:
          alert_id: '{{alert_id}}'
      - name: enrich-data
        type: call
        call: moodys.get-entity-info
        with:
          entity_name: '{{get-alert.entity_name}}'
      - name: create-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'AML investigation: {{get-alert.entity_name}}'
          description: 'Alert: {{alert_id}}. Risk: {{get-alert.risk_score}}. Moody''s: {{enrich-data.rating}}.'
          category: aml
      - name: store-evidence
        type: call
        call: sharepoint.create-file
        with:
          site_id: compliance
          path: AML/{{alert_id}}/evidence.json
  consumes:
  - type: http
    namespace: temenos
    baseUri: https://temenos.bnpparibas.com/api/v1
    authentication:
      type: bearer
      token: $secrets.temenos_token
    resources:
    - name: aml
      path: /compliance/aml-alerts/{{alert_id}}
      inputParameters:
      - name: alert_id
        in: path
      operations:
      - name: get-aml-alert
        method: GET
  - type: http
    namespace: moodys
    baseUri: https://api.moodys.com/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_key
    resources:
    - name: entities
      path: /entities/search
      inputParameters:
      - name: entity_name
        in: query
      operations:
      - name: get-entity-info
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: path
        in: path
      operations:
      - name: create-file
        method: PUT
Open in Framework → View in Fleet → aml-case-investigation-workflow.yml

Extracts holdings from FactSet, generates performance reports in Power BI, stores in Azure Blob Storage, and distributes to clients via Salesforce.

naftiko: '0.5'
info:
  label: Client Portfolio Reporting Pipeline
  description: Extracts holdings from FactSet, generates performance reports in Power BI, stores in Azure Blob Storage, and distributes to clients via Salesforce.
  tags:
  - client-reporting
  - factset
  - power-bi
  - azure-blob-storage
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: portfolio-reporting
    port: 8080
    tools:
    - name: generate-client-report
      description: Generate and distribute client portfolio performance reports.
      inputParameters:
      - name: portfolio_code
        in: body
        type: string
        description: Portfolio code.
      - name: client_email
        in: body
        type: string
        description: Client email.
      steps:
      - name: get-holdings
        type: call
        call: factset.get-holdings
        with:
          portfolio_code: '{{portfolio_code}}'
      - name: refresh-report
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: client-portfolio-{{portfolio_code}}
      - name: store-report
        type: call
        call: azure-blob.upload
        with:
          container: client-reports
          blob_name: '{{portfolio_code}}/latest.pdf'
      - name: notify-client
        type: call
        call: salesforce.create-task
        with:
          subject: Portfolio Report — {{portfolio_code}}
          description: 'Report generated. Holdings: {{get-holdings.count}}. Download: {{store-report.url}}.'
  consumes:
  - type: http
    namespace: factset
    baseUri: https://api.factset.com/analytics/v3
    authentication:
      type: basic
      username: $secrets.factset_user
      password: $secrets.factset_api_key
    resources:
    - name: holdings
      path: /portfolios/{{portfolio_code}}/holdings
      inputParameters:
      - name: portfolio_code
        in: path
      operations:
      - name: get-holdings
        method: GET
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: azure-blob
    baseUri: https://bnpdata.blob.core.windows.net
    authentication:
      type: bearer
      token: $secrets.azure_storage_token
    resources:
    - name: blobs
      path: /{{container}}/{{blob_name}}
      inputParameters:
      - name: container
        in: path
      - name: blob_name
        in: path
      operations:
      - name: upload
        method: PUT
  - type: http
    namespace: salesforce
    baseUri: https://bnpparibas.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: tasks
      path: /sobjects/Task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → client-portfolio-reporting-pipeline.yml

Queries Tyk API gateway for endpoint health metrics, retrieves error rates from Datadog, and creates a ServiceNow incident if degradation is detected.

naftiko: '0.5'
info:
  label: Tyk API Gateway Health Check
  description: Queries Tyk API gateway for endpoint health metrics, retrieves error rates from Datadog, and creates a ServiceNow incident if degradation is detected.
  tags:
  - api-management
  - tyk
  - datadog
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: api-health
    port: 8080
    tools:
    - name: check-api-health
      description: Monitor Tyk API gateway endpoint health, correlate with Datadog errors, and alert on degradation.
      inputParameters:
      - name: api_id
        in: body
        type: string
        description: The Tyk API definition ID.
      - name: service_name
        in: body
        type: string
        description: The corresponding Datadog service name.
      steps:
      - name: get-api-metrics
        type: call
        call: tyk.get-api-analytics
        with:
          api_id: '{{api_id}}'
      - name: get-error-rate
        type: call
        call: datadog.get-service-metrics
        with:
          service_name: '{{service_name}}'
      - name: create-alert
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'API degradation: {{api_id}}'
          description: 'Tyk metrics — requests: {{get-api-metrics.total_requests}}, errors: {{get-api-metrics.error_count}}, avg latency: {{get-api-metrics.avg_latency_ms}}ms. Datadog error rate: {{get-error-rate.error_rate}}%.'
          assigned_group: API_Platform
          category: api_monitoring
  consumes:
  - type: http
    namespace: tyk
    baseUri: https://tyk-dashboard.bnpparibas.net/api
    authentication:
      type: apiKey
      name: Authorization
      in: header
      value: $secrets.tyk_api_key
    resources:
    - name: analytics
      path: /apis/{{api_id}}/analytics
      inputParameters:
      - name: api_id
        in: path
      operations:
      - name: get-api-analytics
        method: GET
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.eu/api/v2
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: services
      path: /services/{{service_name}}/metrics
      inputParameters:
      - name: service_name
        in: path
      operations:
      - name: get-service-metrics
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → tyk-api-gateway-health-check.yml

Prepares a client portfolio review by pulling holdings from FactSet, account data from Salesforce, risk assessment from Moody's, and assembling a review deck notification in SharePoint.

naftiko: '0.5'
info:
  label: Wealth Management Client Review Orchestrator
  description: Prepares a client portfolio review by pulling holdings from FactSet, account data from Salesforce, risk assessment from Moody's, and assembling a review deck notification in SharePoint.
  tags:
  - wealth-management
  - client-management
  - factset
  - salesforce
  - moodys
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: wealth-review
    port: 8080
    tools:
    - name: prepare-client-review
      description: Assemble a wealth management client review package from portfolio, CRM, and risk data.
      inputParameters:
      - name: client_account_id
        in: body
        type: string
        description: The Salesforce account ID for the wealth management client.
      - name: portfolio_id
        in: body
        type: string
        description: The FactSet portfolio ID.
      steps:
      - name: get-client
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{client_account_id}}'
      - name: get-holdings
        type: call
        call: factset.get-holdings
        with:
          portfolio_id: '{{portfolio_id}}'
      - name: get-risk-profile
        type: call
        call: moodys.get-portfolio-risk
        with:
          portfolio_id: '{{portfolio_id}}'
      - name: create-review-folder
        type: call
        call: sharepoint.create-folder
        with:
          site_id: wealth_management_reviews
          folder_path: Reviews/{{get-client.Name}}/{{portfolio_id}}
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://bnpparibas.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: factset
    baseUri: https://api.factset.com/analytics/portfolio/v3
    authentication:
      type: basic
      username: $secrets.factset_user
      password: $secrets.factset_password
    resources:
    - name: holdings
      path: /portfolios/{{portfolio_id}}/holdings
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: get-holdings
        method: GET
  - type: http
    namespace: moodys
    baseUri: https://api.moodys.com/risk/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_key
    resources:
    - name: portfolio-risk
      path: /portfolios/{{portfolio_id}}/risk
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: get-portfolio-risk
        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
Open in Framework → View in Fleet → wealth-management-client-review-orchestrator.yml

Pulls counterparty financials from Bloomberg, credit rating from Moody's, exposure from SimCorp Dimension, and assembles a risk assessment report stored in SharePoint.

naftiko: '0.5'
info:
  label: Credit Risk Counterparty Assessment
  description: Pulls counterparty financials from Bloomberg, credit rating from Moody's, exposure from SimCorp Dimension, and assembles a risk assessment report stored in SharePoint.
  tags:
  - credit-risk
  - counterparty-risk
  - bloomberg
  - moodys
  - simcorp-dimension
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: counterparty-risk
    port: 8080
    tools:
    - name: assess-counterparty
      description: Compile counterparty risk assessment from market data, credit rating, and exposure data.
      inputParameters:
      - name: counterparty_ticker
        in: body
        type: string
        description: The Bloomberg ticker of the counterparty.
      - name: counterparty_moodys_id
        in: body
        type: string
        description: The Moody's issuer ID.
      - name: portfolio_code
        in: body
        type: string
        description: The portfolio to check exposure against.
      steps:
      - name: get-financials
        type: call
        call: bloomberg.get-quote
        with:
          ticker: '{{counterparty_ticker}}'
      - name: get-rating
        type: call
        call: moodys.get-rating
        with:
          issuer_id: '{{counterparty_moodys_id}}'
      - name: get-exposure
        type: call
        call: simcorp.get-counterparty-exposure
        with:
          portfolio_code: '{{portfolio_code}}'
          counterparty_ticker: '{{counterparty_ticker}}'
      - name: store-report
        type: call
        call: sharepoint.create-file
        with:
          site_id: credit_risk_reports
          file_path: Assessments/{{counterparty_ticker}}/assessment.json
          content_type: application/json
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/fields
    authentication:
      type: bearer
      token: $secrets.bloomberg_api_key
    resources:
    - name: quotes
      path: /snapshots/{{ticker}}
      inputParameters:
      - name: ticker
        in: path
      operations:
      - name: get-quote
        method: GET
  - type: http
    namespace: moodys
    baseUri: https://api.moodys.com/credit/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_key
    resources:
    - name: ratings
      path: /issuers/{{issuer_id}}/ratings
      inputParameters:
      - name: issuer_id
        in: path
      operations:
      - name: get-rating
        method: GET
  - type: http
    namespace: simcorp
    baseUri: https://simcorp.bnpparibas.net/api/v2
    authentication:
      type: bearer
      token: $secrets.simcorp_token
    resources:
    - name: exposure
      path: /portfolios/{{portfolio_code}}/exposure/{{counterparty_ticker}}
      inputParameters:
      - name: portfolio_code
        in: path
      - name: counterparty_ticker
        in: path
      operations:
      - name: get-counterparty-exposure
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: create-file
        method: PUT
Open in Framework → View in Fleet → credit-risk-counterparty-assessment.yml

Captures swap terms from Tradeweb, books the trade in Bloomberg AIM, generates confirmations in SimCorp, and notifies middle office via ServiceNow.

naftiko: '0.5'
info:
  label: Interest Rate Swap Booking Pipeline
  description: Captures swap terms from Tradeweb, books the trade in Bloomberg AIM, generates confirmations in SimCorp, and notifies middle office via ServiceNow.
  tags:
  - derivatives
  - tradeweb
  - bloomberg-aim
  - simcorp-dimension
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: irs-booking
    port: 8080
    tools:
    - name: book-swap
      description: Book an interest rate swap across Tradeweb, Bloomberg AIM, SimCorp, and ServiceNow.
      inputParameters:
      - name: trade_ref
        in: body
        type: string
        description: Tradeweb trade reference.
      - name: portfolio_code
        in: body
        type: string
        description: SimCorp portfolio code.
      steps:
      - name: get-trade
        type: call
        call: tradeweb.get-trade
        with:
          trade_ref: '{{trade_ref}}'
      - name: book-aim
        type: call
        call: bloomberg-aim.create-trade
        with:
          trade_ref: '{{trade_ref}}'
          instrument_type: IRS
      - name: confirm-simcorp
        type: call
        call: simcorp.create-trade
        with:
          portfolio_code: '{{portfolio_code}}'
          instrument: '{{get-trade.instrument}}'
          notional: '{{get-trade.notional}}'
      - name: notify-mo
        type: call
        call: servicenow.create-task
        with:
          short_description: 'IRS booked: {{trade_ref}}'
          description: 'Notional: {{get-trade.notional}}. Rate: {{get-trade.fixed_rate}}. SimCorp: {{confirm-simcorp.trade_id}}.'
          category: trade_processing
  consumes:
  - type: http
    namespace: tradeweb
    baseUri: https://api.tradeweb.com/v1
    authentication:
      type: bearer
      token: $secrets.tradeweb_token
    resources:
    - name: trades
      path: /trades/{{trade_ref}}
      inputParameters:
      - name: trade_ref
        in: path
      operations:
      - name: get-trade
        method: GET
  - type: http
    namespace: bloomberg-aim
    baseUri: https://aim.bloomberg.com/api/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_aim_token
    resources:
    - name: trades
      path: /trades
      operations:
      - name: create-trade
        method: POST
  - type: http
    namespace: simcorp
    baseUri: https://simcorp.bnpparibas.net/api/v2
    authentication:
      type: bearer
      token: $secrets.simcorp_token
    resources:
    - name: trades
      path: /portfolios/{{portfolio_code}}/trades
      inputParameters:
      - name: portfolio_code
        in: path
      operations:
      - name: create-trade
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → interest-rate-swap-booking-pipeline.yml

Retrieves messages from a RabbitMQ dead letter queue, logs the failure pattern in Elasticsearch, and creates a ServiceNow incident for application support to investigate.

naftiko: '0.5'
info:
  label: RabbitMQ Dead Letter Queue Processor
  description: Retrieves messages from a RabbitMQ dead letter queue, logs the failure pattern in Elasticsearch, and creates a ServiceNow incident for application support to investigate.
  tags:
  - messaging
  - rabbitmq
  - elasticsearch
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: dlq-processor
    port: 8080
    tools:
    - name: process-dead-letters
      description: Retrieve DLQ messages, log failure patterns, and create incident for investigation.
      inputParameters:
      - name: queue_name
        in: body
        type: string
        description: The dead letter queue name.
      - name: vhost
        in: body
        type: string
        description: The RabbitMQ virtual host.
      steps:
      - name: get-messages
        type: call
        call: rabbitmq.get-messages
        with:
          vhost: '{{vhost}}'
          queue: '{{queue_name}}'
      - name: log-pattern
        type: call
        call: elasticsearch.index-document
        with:
          index: dlq-failures
          body: queue={{queue_name}}&vhost={{vhost}}&count={{get-messages.message_count}}&oldest={{get-messages.oldest_timestamp}}
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'DLQ accumulation: {{queue_name}} on {{vhost}}'
          description: 'Dead letter queue {{queue_name}} has {{get-messages.message_count}} unprocessed messages. Oldest message: {{get-messages.oldest_timestamp}}. Sample error: {{get-messages.sample_error}}.'
          assigned_group: Application_Support
          category: messaging_failure
  consumes:
  - type: http
    namespace: rabbitmq
    baseUri: https://rabbitmq.bnpparibas.net:15672/api
    authentication:
      type: basic
      username: $secrets.rabbitmq_user
      password: $secrets.rabbitmq_password
    resources:
    - name: queues
      path: /queues/{{vhost}}/{{queue}}/get
      inputParameters:
      - name: vhost
        in: path
      - name: queue
        in: path
      operations:
      - name: get-messages
        method: POST
  - type: http
    namespace: elasticsearch
    baseUri: https://elasticsearch.bnpparibas.net:9200
    authentication:
      type: basic
      username: $secrets.elastic_user
      password: $secrets.elastic_password
    resources:
    - name: documents
      path: /{{index}}/_doc
      inputParameters:
      - name: index
        in: path
      operations:
      - name: index-document
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → rabbitmq-dead-letter-queue-processor.yml

Monitors trade settlements in SWIFT, matches against SimCorp positions, logs breaks in Snowflake, and alerts operations via ServiceNow.

naftiko: '0.5'
info:
  label: Trade Settlement Monitoring Pipeline
  description: Monitors trade settlements in SWIFT, matches against SimCorp positions, logs breaks in Snowflake, and alerts operations via ServiceNow.
  tags:
  - settlement
  - swift
  - simcorp-dimension
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: settlement-monitor
    port: 8080
    tools:
    - name: monitor-settlements
      description: Match SWIFT settlements against booked positions and track breaks.
      inputParameters:
      - name: settlement_date
        in: body
        type: string
        description: Settlement date YYYY-MM-DD.
      steps:
      - name: get-swift-settlements
        type: call
        call: swift.get-settlements
        with:
          date: '{{settlement_date}}'
      - name: get-positions
        type: call
        call: simcorp.get-expected-settlements
        with:
          date: '{{settlement_date}}'
      - name: log-breaks
        type: call
        call: snowflake.execute-statement
        with:
          statement: CALL SETTLEMENT.LOG_BREAKS('{{settlement_date}}')
      - name: create-ticket
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Settlement breaks: {{settlement_date}}'
          description: 'SWIFT settlements: {{get-swift-settlements.count}}. Expected: {{get-positions.count}}. Review breaks in Snowflake.'
          category: settlement_ops
  consumes:
  - type: http
    namespace: swift
    baseUri: https://api.swift.com/gpi/v4
    authentication:
      type: bearer
      token: $secrets.swift_gpi_token
    resources:
    - name: settlements
      path: /payments/settlements
      inputParameters:
      - name: date
        in: query
      operations:
      - name: get-settlements
        method: GET
  - type: http
    namespace: simcorp
    baseUri: https://simcorp.bnpparibas.net/api/v2
    authentication:
      type: bearer
      token: $secrets.simcorp_token
    resources:
    - name: settlements
      path: /settlements/expected
      inputParameters:
      - name: date
        in: query
      operations:
      - name: get-expected-settlements
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://bnpparibas.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: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → trade-settlement-monitoring-pipeline.yml

Retrieves an SSL certificate from Azure Key Vault for service authentication or TLS configuration.

naftiko: '0.5'
info:
  label: Azure Key Vault Certificate Retrieval
  description: Retrieves an SSL certificate from Azure Key Vault for service authentication or TLS configuration.
  tags:
  - security
  - azure-key-vault
capability:
  exposes:
  - type: mcp
    namespace: azure-kv-certs
    port: 8080
    tools:
    - name: get-certificate
      description: Retrieve a certificate from Azure Key Vault by name.
      inputParameters:
      - name: cert_name
        in: body
        type: string
        description: The certificate name in Key Vault.
      call: azure-kv-certs.get-cert
      with:
        cert_name: '{{cert_name}}'
  consumes:
  - type: http
    namespace: azure-kv-certs
    baseUri: https://bnp-vault.vault.azure.net
    authentication:
      type: bearer
      token: $secrets.azure_kv_token
    resources:
    - name: certificates
      path: /certificates/{{cert_name}}
      inputParameters:
      - name: cert_name
        in: path
      operations:
      - name: get-cert
        method: GET
Open in Framework → View in Fleet → azure-key-vault-certificate-retrieval.yml

Retrieves user profile and group membership from Azure Active Directory for identity management workflows.

naftiko: '0.5'
info:
  label: Azure Active Directory User Lookup
  description: Retrieves user profile and group membership from Azure Active Directory for identity management workflows.
  tags:
  - identity
  - azure-active-directory
capability:
  exposes:
  - type: mcp
    namespace: azure-ad
    port: 8080
    tools:
    - name: get-user-profile
      description: Look up an Azure AD user by principal name.
      inputParameters:
      - name: user_principal
        in: body
        type: string
        description: Azure AD user principal name.
      call: azuread-api.get-user
      with:
        user_principal: '{{user_principal}}'
  consumes:
  - type: http
    namespace: azuread-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users/{{user_principal}}
      inputParameters:
      - name: user_principal
        in: path
      operations:
      - name: get-user
        method: GET
Open in Framework → View in Fleet → azure-active-directory-user-lookup.yml

Fetches end-of-day pricing data for a security from FactSet, returning close price, volume, and VWAP.

naftiko: '0.5'
info:
  label: FactSet Security Pricing
  description: Fetches end-of-day pricing data for a security from FactSet, returning close price, volume, and VWAP.
  tags:
  - market-data
  - factset
capability:
  exposes:
  - type: mcp
    namespace: factset-pricing
    port: 8080
    tools:
    - name: get-security-price
      description: Retrieve end-of-day pricing for a security by ISIN from FactSet.
      inputParameters:
      - name: isin
        in: body
        type: string
        description: The ISIN of the security.
      call: factset-pricing.get-price
      with:
        isin: '{{isin}}'
  consumes:
  - type: http
    namespace: factset-pricing
    baseUri: https://api.factset.com/content/factset-prices/v1
    authentication:
      type: basic
      username: $secrets.factset_user
      password: $secrets.factset_api_key
    resources:
    - name: prices
      path: /fixed-income/prices
      inputParameters:
      - name: isin
        in: query
      operations:
      - name: get-price
        method: GET
Open in Framework → View in Fleet → factset-security-pricing.yml

Scans a Docker container image with Falco for runtime vulnerabilities, checks compliance with Open Policy Agent, and logs findings in ServiceNow for security review.

naftiko: '0.5'
info:
  label: Docker Container Security Scan Pipeline
  description: Scans a Docker container image with Falco for runtime vulnerabilities, checks compliance with Open Policy Agent, and logs findings in ServiceNow for security review.
  tags:
  - security
  - container-security
  - docker
  - falco
  - open-policy-agent
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: container-security
    port: 8080
    tools:
    - name: scan-container
      description: Scan a Docker image for vulnerabilities, check policy compliance, and log security findings.
      inputParameters:
      - name: image_name
        in: body
        type: string
        description: The Docker image name with tag (e.g. registry.bnpparibas.net/app:v1.2).
      - name: namespace
        in: body
        type: string
        description: The Kubernetes namespace where the image runs.
      steps:
      - name: vulnerability-scan
        type: call
        call: falco.scan-image
        with:
          image: '{{image_name}}'
      - name: policy-check
        type: call
        call: opa.evaluate-policy
        with:
          policy_path: container/security
          input: '{{image_name}}'
      - name: log-findings
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Container scan: {{image_name}}'
          description: 'Falco vulnerabilities: critical={{vulnerability-scan.critical_count}}, high={{vulnerability-scan.high_count}}. OPA policy: {{policy-check.decision}}. Namespace: {{namespace}}. Base image: {{vulnerability-scan.base_image}}.'
          assigned_group: AppSec_Team
          category: container_security
  consumes:
  - type: http
    namespace: falco
    baseUri: https://falco.bnpparibas.net/api/v1
    authentication:
      type: bearer
      token: $secrets.falco_token
    resources:
    - name: scans
      path: /scans
      operations:
      - name: scan-image
        method: POST
  - type: http
    namespace: opa
    baseUri: https://opa.bnpparibas.net/v1
    authentication:
      type: bearer
      token: $secrets.opa_token
    resources:
    - name: policies
      path: /data/{{policy_path}}
      inputParameters:
      - name: policy_path
        in: path
      operations:
      - name: evaluate-policy
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → docker-container-security-scan-pipeline.yml

Triggers Informatica data flows, validates quality in Snowflake, publishes metadata to Azure Data Catalog, and notifies data stewards via Microsoft Teams.

naftiko: '0.5'
info:
  label: Data Lake Ingestion Pipeline
  description: Triggers Informatica data flows, validates quality in Snowflake, publishes metadata to Azure Data Catalog, and notifies data stewards via Microsoft Teams.
  tags:
  - data-engineering
  - informatica
  - snowflake
  - azure-data-factory
capability:
  exposes:
  - type: mcp
    namespace: data-ingestion
    port: 8080
    tools:
    - name: ingest-data
      description: Trigger data ingestion with quality validation and notification.
      inputParameters:
      - name: source_name
        in: body
        type: string
        description: Data source name.
      - name: dataset
        in: body
        type: string
        description: Target dataset.
      steps:
      - name: trigger-flow
        type: call
        call: informatica.run-task
        with:
          task_name: ingest-{{source_name}}
      - name: validate-quality
        type: call
        call: snowflake.execute-statement
        with:
          statement: CALL DQ.VALIDATE('{{dataset}}')
      - name: publish-metadata
        type: call
        call: adf.trigger-pipeline
        with:
          pipeline_name: catalog-{{dataset}}
  consumes:
  - type: http
    namespace: informatica
    baseUri: https://dm-us.informaticacloud.com/saas/api/v2
    authentication:
      type: bearer
      token: $secrets.informatica_token
    resources:
    - name: tasks
      path: /task/run
      operations:
      - name: run-task
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://bnpparibas.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: adf
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: pipelines
      path: /subscriptions/$secrets.azure_sub_id/resourceGroups/data/providers/Microsoft.DataFactory/factories/bnp-adf/pipelines/{{pipeline_name}}/createRun
      inputParameters:
      - name: pipeline_name
        in: path
      operations:
      - name: trigger-pipeline
        method: POST
Open in Framework → View in Fleet → data-lake-ingestion-pipeline.yml

Provisions a new VMware virtual machine, configures networking via Palo Alto Networks firewall rules, registers in ServiceNow CMDB, and sets up Datadog monitoring.

naftiko: '0.5'
info:
  label: VMware VM Provisioning Pipeline
  description: Provisions a new VMware virtual machine, configures networking via Palo Alto Networks firewall rules, registers in ServiceNow CMDB, and sets up Datadog monitoring.
  tags:
  - infrastructure
  - vmware
  - palo-alto-networks
  - servicenow
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: vm-provisioning
    port: 8080
    tools:
    - name: provision-vm
      description: Create a VMware VM, configure firewall rules, register in CMDB, and enable monitoring.
      inputParameters:
      - name: vm_name
        in: body
        type: string
        description: The virtual machine name.
      - name: template
        in: body
        type: string
        description: The VMware template to clone from.
      - name: network_zone
        in: body
        type: string
        description: The target network zone (e.g. dmz, internal, restricted).
      - name: owner_team
        in: body
        type: string
        description: The owning team name.
      steps:
      - name: create-vm
        type: call
        call: vmware.clone-vm
        with:
          name: '{{vm_name}}'
          template: '{{template}}'
          cluster: bnp-prod-cluster
      - name: configure-firewall
        type: call
        call: paloalto.create-rule
        with:
          rule_name: allow-{{vm_name}}
          source_zone: '{{network_zone}}'
          destination: '{{create-vm.ip_address}}'
      - name: register-cmdb
        type: call
        call: servicenow.create-ci
        with:
          name: '{{vm_name}}'
          class: cmdb_ci_vmware_instance
          ip_address: '{{create-vm.ip_address}}'
          owned_by: '{{owner_team}}'
          description: 'VMware VM from template {{template}}. Zone: {{network_zone}}. Firewall rule: {{configure-firewall.rule_id}}.'
      - name: enable-monitoring
        type: call
        call: datadog.create-monitor
        with:
          name: '{{vm_name}}-health'
          type: metric alert
          query: avg(last_5m):avg:system.cpu.idle{host:{{vm_name}}} < 10
  consumes:
  - type: http
    namespace: vmware
    baseUri: https://vcenter.bnpparibas.net/api
    authentication:
      type: bearer
      token: $secrets.vcenter_token
    resources:
    - name: vms
      path: /vcenter/vm
      operations:
      - name: clone-vm
        method: POST
  - type: http
    namespace: paloalto
    baseUri: https://panorama.bnpparibas.net/restapi/v10.2
    authentication:
      type: apiKey
      name: X-PAN-KEY
      in: header
      value: $secrets.paloalto_api_key
    resources:
    - name: security-rules
      path: /Policies/SecurityRules
      operations:
      - name: create-rule
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.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: datadog
    baseUri: https://api.datadoghq.eu/api/v1
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: monitors
      path: /monitor
      operations:
      - name: create-monitor
        method: POST
Open in Framework → View in Fleet → vmware-vm-provisioning-pipeline.yml

Queries Elasticsearch for error patterns in application logs, correlates with Datadog traces, and creates a ServiceNow problem record for recurring issues.

naftiko: '0.5'
info:
  label: Elasticsearch Log Analysis Pipeline
  description: Queries Elasticsearch for error patterns in application logs, correlates with Datadog traces, and creates a ServiceNow problem record for recurring issues.
  tags:
  - observability
  - logging
  - elasticsearch
  - datadog
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: log-analysis
    port: 8080
    tools:
    - name: analyze-error-pattern
      description: Search for error patterns in Elasticsearch, correlate with Datadog traces, and create a problem record if recurring.
      inputParameters:
      - name: application
        in: body
        type: string
        description: The application name to search logs for.
      - name: error_pattern
        in: body
        type: string
        description: The error pattern regex to search for.
      - name: time_range
        in: body
        type: string
        description: Time range for the search (e.g. 24h, 7d).
      steps:
      - name: search-logs
        type: call
        call: elasticsearch.search
        with:
          index: logs-{{application}}-*
          query: '{{error_pattern}}'
          time_range: '{{time_range}}'
      - name: get-traces
        type: call
        call: datadog.search-traces
        with:
          service: '{{application}}'
          query: status:error
          time_range: '{{time_range}}'
      - name: create-problem
        type: call
        call: servicenow.create-problem
        with:
          short_description: 'Recurring error: {{application}} — {{error_pattern}}'
          description: 'Error occurrences: {{search-logs.total_hits}} in last {{time_range}}. Correlated Datadog traces: {{get-traces.trace_count}}. Top error: {{search-logs.top_message}}. First seen: {{search-logs.first_occurrence}}.'
          assigned_group: Application_Support
          category: application_error
  consumes:
  - type: http
    namespace: elasticsearch
    baseUri: https://elasticsearch.bnpparibas.net:9200
    authentication:
      type: basic
      username: $secrets.elastic_user
      password: $secrets.elastic_password
    resources:
    - name: search
      path: /{{index}}/_search
      inputParameters:
      - name: index
        in: path
      operations:
      - name: search
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.eu/api/v2
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: traces
      path: /traces/search
      operations:
      - name: search-traces
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: problems
      path: /table/problem
      operations:
      - name: create-problem
        method: POST
Open in Framework → View in Fleet → elasticsearch-log-analysis-pipeline.yml

Checks Apache Kafka cluster health, consumer group lag, and topic throughput, then logs degradation alerts in ServiceNow for platform engineering review.

naftiko: '0.5'
info:
  label: Kafka Event Stream Health Monitor
  description: Checks Apache Kafka cluster health, consumer group lag, and topic throughput, then logs degradation alerts in ServiceNow for platform engineering review.
  tags:
  - infrastructure
  - streaming
  - apache-kafka
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: kafka-ops
    port: 8080
    tools:
    - name: check-kafka-health
      description: Monitor Kafka cluster health and consumer group lag, creating ServiceNow alerts for degradation.
      inputParameters:
      - name: cluster_id
        in: body
        type: string
        description: The Kafka cluster identifier.
      - name: consumer_group
        in: body
        type: string
        description: The consumer group to monitor.
      steps:
      - name: get-cluster-health
        type: call
        call: kafka.get-cluster
        with:
          cluster_id: '{{cluster_id}}'
      - name: get-consumer-lag
        type: call
        call: kafka.get-consumer-lag
        with:
          cluster_id: '{{cluster_id}}'
          consumer_group: '{{consumer_group}}'
      - name: create-alert
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Kafka lag alert: {{consumer_group}} on {{cluster_id}}'
          description: 'Cluster status: {{get-cluster-health.status}}. Broker count: {{get-cluster-health.broker_count}}. Consumer group {{consumer_group}} total lag: {{get-consumer-lag.total_lag}} messages.'
          assigned_group: Platform_Engineering
          category: kafka_monitoring
  consumes:
  - type: http
    namespace: kafka
    baseUri: https://kafka-rest.bnpparibas.net/v3
    authentication:
      type: bearer
      token: $secrets.kafka_rest_token
    resources:
    - name: clusters
      path: /clusters/{{cluster_id}}
      inputParameters:
      - name: cluster_id
        in: path
      operations:
      - name: get-cluster
        method: GET
    - name: consumer-groups
      path: /clusters/{{cluster_id}}/consumer-groups/{{consumer_group}}/lags
      inputParameters:
      - name: cluster_id
        in: path
      - name: consumer_group
        in: path
      operations:
      - name: get-consumer-lag
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → kafka-event-stream-health-monitor.yml

Queries Datadog for the health status and error rate of a given service, used by SRE teams to assess production stability.

naftiko: '0.5'
info:
  label: Datadog APM Service Health
  description: Queries Datadog for the health status and error rate of a given service, used by SRE teams to assess production stability.
  tags:
  - monitoring
  - observability
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: observability
    port: 8080
    tools:
    - name: get-service-health
      description: Retrieve the current health status, latency, and error rate for a service from Datadog APM.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The Datadog service name.
      call: datadog.get-service-metrics
      with:
        service_name: '{{service_name}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.data.attributes.status
      - name: error_rate
        type: number
        mapping: $.data.attributes.errorRate
      - name: avg_latency_ms
        type: number
        mapping: $.data.attributes.avgLatencyMs
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.eu/api/v2
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: services
      path: /services/{{service_name}}/metrics
      inputParameters:
      - name: service_name
        in: path
      operations:
      - name: get-service-metrics
        method: GET
Open in Framework → View in Fleet → datadog-apm-service-health.yml

Searches the Workday employee directory by name or department, returning employee profiles and organizational hierarchy.

naftiko: '0.5'
info:
  label: Workday Employee Directory Search
  description: Searches the Workday employee directory by name or department, returning employee profiles and organizational hierarchy.
  tags:
  - hr
  - workday
capability:
  exposes:
  - type: mcp
    namespace: workday-dir
    port: 8080
    tools:
    - name: search-employees
      description: Search Workday employee directory by name or department.
      inputParameters:
      - name: search_query
        in: body
        type: string
        description: Search term for employee name or department.
      call: workday-dir.search-workers
      with:
        query: '{{search_query}}'
  consumes:
  - type: http
    namespace: workday-dir
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers
      inputParameters:
      - name: query
        in: query
      operations:
      - name: search-workers
        method: GET
Open in Framework → View in Fleet → workday-employee-directory-search.yml

Checks the status of a payment instruction in SAP, returning execution status, value date, and beneficiary details for treasury operations.

naftiko: '0.5'
info:
  label: SAP Payment Instruction Status
  description: Checks the status of a payment instruction in SAP, returning execution status, value date, and beneficiary details for treasury operations.
  tags:
  - payments
  - treasury
  - sap
capability:
  exposes:
  - type: mcp
    namespace: treasury
    port: 8080
    tools:
    - name: get-payment-status
      description: Retrieve the status of a SAP payment instruction by document number.
      inputParameters:
      - name: payment_doc_number
        in: body
        type: string
        description: The SAP payment document number.
      call: sap.get-payment
      with:
        payment_doc_number: '{{payment_doc_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.d.PaymentStatus
      - name: value_date
        type: string
        mapping: $.d.ValueDate
      - name: amount
        type: number
        mapping: $.d.Amount
      - name: currency
        type: string
        mapping: $.d.Currency
  consumes:
  - type: http
    namespace: sap
    baseUri: https://bnp-s4.sap.com/sap/opu/odata/sap/FI_PAYMENT_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: payments
      path: /A_PaymentInstruction('{{payment_doc_number}}')
      inputParameters:
      - name: payment_doc_number
        in: path
      operations:
      - name: get-payment
        method: GET
Open in Framework → View in Fleet → sap-payment-instruction-status.yml

Triggers Oracle database failover, verifies replication health, checks application connectivity via Datadog, and logs results in ServiceNow.

naftiko: '0.5'
info:
  label: Database Failover Test Pipeline
  description: Triggers Oracle database failover, verifies replication health, checks application connectivity via Datadog, and logs results in ServiceNow.
  tags:
  - disaster-recovery
  - oracle
  - datadog
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: db-failover
    port: 8080
    tools:
    - name: test-failover
      description: Execute and verify a database failover test.
      inputParameters:
      - name: db_name
        in: body
        type: string
        description: Oracle database name.
      steps:
      - name: trigger-failover
        type: call
        call: oracle.initiate-failover
        with:
          database: '{{db_name}}'
      - name: verify-health
        type: call
        call: datadog.query-metrics
        with:
          query: avg:oracle.db.connections{db:{{db_name}}}
      - name: log-result
        type: call
        call: servicenow.create-change-request
        with:
          short_description: 'DR failover test: {{db_name}}'
          description: 'Failover status: {{trigger-failover.status}}. Connections: {{verify-health.value}}.'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://oracle.bnpparibas.com/em/api/v1
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: databases
      path: /databases/{{database}}/failover
      inputParameters:
      - name: database
        in: path
      operations:
      - name: initiate-failover
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /query
      inputParameters:
      - name: query
        in: query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.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-request
        method: POST
Open in Framework → View in Fleet → database-failover-test-pipeline.yml

Checks n8n workflow execution status, retrieves execution logs, and creates ServiceNow tickets for failed automations that require manual intervention.

naftiko: '0.5'
info:
  label: n8n Workflow Automation Monitor
  description: Checks n8n workflow execution status, retrieves execution logs, and creates ServiceNow tickets for failed automations that require manual intervention.
  tags:
  - automation
  - n8n
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: workflow-monitor
    port: 8080
    tools:
    - name: monitor-workflow
      description: Check n8n workflow execution status and create ServiceNow ticket for failures.
      inputParameters:
      - name: workflow_id
        in: body
        type: string
        description: The n8n workflow ID.
      - name: execution_id
        in: body
        type: string
        description: The n8n execution ID to check.
      steps:
      - name: get-execution
        type: call
        call: n8n.get-execution
        with:
          workflow_id: '{{workflow_id}}'
          execution_id: '{{execution_id}}'
      - name: create-ticket
        type: call
        call: servicenow.create-task
        with:
          short_description: 'n8n workflow failure: {{workflow_id}} — execution {{execution_id}}'
          description: 'Workflow status: {{get-execution.status}}. Error node: {{get-execution.error_node}}. Error message: {{get-execution.error_message}}. Started: {{get-execution.started_at}}. Failed: {{get-execution.finished_at}}.'
          assigned_group: Automation_Support
          category: workflow_failure
  consumes:
  - type: http
    namespace: n8n
    baseUri: https://n8n.bnpparibas.net/api/v1
    authentication:
      type: bearer
      token: $secrets.n8n_api_key
    resources:
    - name: executions
      path: /workflows/{{workflow_id}}/executions/{{execution_id}}
      inputParameters:
      - name: workflow_id
        in: path
      - name: execution_id
        in: path
      operations:
      - name: get-execution
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → n8n-workflow-automation-monitor.yml

Aggregates subsidiary balances from Temenos, optimizes allocation in Oracle, executes sweeps via SWIFT, and reports to treasury via Power BI.

naftiko: '0.5'
info:
  label: Treasury Cash Pooling Pipeline
  description: Aggregates subsidiary balances from Temenos, optimizes allocation in Oracle, executes sweeps via SWIFT, and reports to treasury via Power BI.
  tags:
  - treasury
  - temenos-transact
  - oracle
  - swift
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: cash-pooling
    port: 8080
    tools:
    - name: execute-cash-pooling
      description: Aggregate balances and execute intercompany cash sweeps.
      inputParameters:
      - name: pool_id
        in: body
        type: string
        description: Cash pool identifier.
      steps:
      - name: get-balances
        type: call
        call: temenos.get-pool-balances
        with:
          pool_id: '{{pool_id}}'
      - name: optimize
        type: call
        call: oracle.calculate-sweeps
        with:
          pool_id: '{{pool_id}}'
          balances: '{{get-balances.accounts}}'
      - name: execute-sweeps
        type: call
        call: swift.send-mt202
        with:
          sweeps: '{{optimize.sweep_instructions}}'
      - name: refresh-report
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: cash-pooling
  consumes:
  - type: http
    namespace: temenos
    baseUri: https://temenos.bnpparibas.com/api/v1
    authentication:
      type: bearer
      token: $secrets.temenos_token
    resources:
    - name: pools
      path: /treasury/pools/{{pool_id}}/balances
      inputParameters:
      - name: pool_id
        in: path
      operations:
      - name: get-pool-balances
        method: GET
  - type: http
    namespace: oracle
    baseUri: https://oracle.bnpparibas.com/fscmRestApi/resources/v1
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: sweeps
      path: /treasury/sweeps/calculate
      operations:
      - name: calculate-sweeps
        method: POST
  - type: http
    namespace: swift
    baseUri: https://swift.bnpparibas.com/api/v1
    authentication:
      type: bearer
      token: $secrets.swift_token
    resources:
    - name: messages
      path: /messages/mt202/batch
      operations:
      - name: send-mt202
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → treasury-cash-pooling-pipeline.yml

Calculates margin requirements from SimCorp Dimension, matches against available collateral in SAP, and triggers margin call notifications through ServiceNow and Bloomberg messaging.

naftiko: '0.5'
info:
  label: Collateral Management Orchestrator
  description: Calculates margin requirements from SimCorp Dimension, matches against available collateral in SAP, and triggers margin call notifications through ServiceNow and Bloomberg messaging.
  tags:
  - collateral-management
  - simcorp-dimension
  - sap
  - servicenow
  - bloomberg
capability:
  exposes:
  - type: mcp
    namespace: collateral-mgmt
    port: 8080
    tools:
    - name: process-margin-call
      description: Calculate margin requirements, check collateral availability, and issue margin call notifications.
      inputParameters:
      - name: agreement_id
        in: body
        type: string
        description: The collateral agreement identifier.
      - name: counterparty_code
        in: body
        type: string
        description: The counterparty code.
      steps:
      - name: get-margin-requirement
        type: call
        call: simcorp.get-margin
        with:
          agreement_id: '{{agreement_id}}'
      - name: get-available-collateral
        type: call
        call: sap.get-collateral-pool
        with:
          counterparty: '{{counterparty_code}}'
      - name: create-margin-call
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Margin call: {{counterparty_code}} — Agreement {{agreement_id}}'
          description: 'Required margin: {{get-margin-requirement.required_amount}} {{get-margin-requirement.currency}}. Available collateral: {{get-available-collateral.total_value}}. Shortfall: {{get-margin-requirement.shortfall}}.'
          assigned_group: Collateral_Management
          category: margin_call
          priority: '2'
  consumes:
  - type: http
    namespace: simcorp
    baseUri: https://simcorp.bnpparibas.net/api/v2
    authentication:
      type: bearer
      token: $secrets.simcorp_token
    resources:
    - name: margins
      path: /agreements/{{agreement_id}}/margin
      inputParameters:
      - name: agreement_id
        in: path
      operations:
      - name: get-margin
        method: GET
  - type: http
    namespace: sap
    baseUri: https://bnp-s4.sap.com/sap/opu/odata/sap/FI_COLLATERAL_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: collateral
      path: /A_CollateralPool(Counterparty='{{counterparty}}')
      inputParameters:
      - name: counterparty
        in: path
      operations:
      - name: get-collateral-pool
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → collateral-management-orchestrator.yml

Retrieves the status of a SWIFT payment message by reference number, returning delivery status, acknowledgments, and timestamps.

naftiko: '0.5'
info:
  label: SWIFT Message Status Check
  description: Retrieves the status of a SWIFT payment message by reference number, returning delivery status, acknowledgments, and timestamps.
  tags:
  - payments
  - swift
capability:
  exposes:
  - type: mcp
    namespace: swift-gpi
    port: 8080
    tools:
    - name: get-message-status
      description: Check the delivery status of a SWIFT payment message by reference.
      inputParameters:
      - name: reference
        in: body
        type: string
        description: The SWIFT UETR or reference number.
      call: swift-gpi.get-status
      with:
        reference: '{{reference}}'
  consumes:
  - type: http
    namespace: swift-gpi
    baseUri: https://api.swift.com/gpi/v4
    authentication:
      type: bearer
      token: $secrets.swift_gpi_token
    resources:
    - name: tracking
      path: /payments/{{reference}}/status
      inputParameters:
      - name: reference
        in: path
      operations:
      - name: get-status
        method: GET
Open in Framework → View in Fleet → swift-message-status-check.yml

Retrieves vendor details from SAP Ariba, screens through Moody's risk database, assesses IT risk via Fortinet vulnerability scan, and creates a risk review in ServiceNow.

naftiko: '0.5'
info:
  label: Vendor Risk Assessment Orchestrator
  description: Retrieves vendor details from SAP Ariba, screens through Moody's risk database, assesses IT risk via Fortinet vulnerability scan, and creates a risk review in ServiceNow.
  tags:
  - third-party-risk
  - vendor-management
  - sap-ariba
  - moodys
  - fortinet
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: vendor-risk
    port: 8080
    tools:
    - name: assess-vendor-risk
      description: Compile vendor risk assessment from procurement, credit, and security data sources.
      inputParameters:
      - name: vendor_id
        in: body
        type: string
        description: The SAP Ariba vendor identifier.
      - name: vendor_domain
        in: body
        type: string
        description: The vendor's primary domain for security scanning.
      steps:
      - name: get-vendor
        type: call
        call: ariba.get-vendor
        with:
          vendor_id: '{{vendor_id}}'
      - name: screen-vendor
        type: call
        call: moodys.screen-entity
        with:
          entity_name: '{{get-vendor.company_name}}'
          country: '{{get-vendor.country}}'
      - name: scan-security
        type: call
        call: fortinet.scan-domain
        with:
          domain: '{{vendor_domain}}'
      - name: create-review
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Vendor risk review: {{get-vendor.company_name}}'
          description: 'Ariba vendor: {{vendor_id}}. Moody''s risk level: {{screen-vendor.risk_level}}. Score: {{screen-vendor.score}}. Security scan: {{scan-security.risk_grade}}. Vulnerabilities: {{scan-security.vuln_count}}. Contract value: {{get-vendor.contract_value}}.'
          assigned_group: Third_Party_Risk
          category: vendor_risk_assessment
  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: /vendors/{{vendor_id}}
      inputParameters:
      - name: vendor_id
        in: path
      operations:
      - name: get-vendor
        method: GET
  - type: http
    namespace: moodys
    baseUri: https://api.moodys.com/screening/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_key
    resources:
    - name: entities
      path: /screen
      operations:
      - name: screen-entity
        method: POST
  - type: http
    namespace: fortinet
    baseUri: https://fortiguard.bnpparibas.net/api/v2
    authentication:
      type: bearer
      token: $secrets.fortinet_token
    resources:
    - name: scans
      path: /scans/domain
      operations:
      - name: scan-domain
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → vendor-risk-assessment-orchestrator.yml

Validates a Terraform plan, checks policy compliance with Open Policy Agent, requests approval via ServiceNow change request, and applies the infrastructure change on Azure.

naftiko: '0.5'
info:
  label: Terraform Infrastructure Provisioning with Approval
  description: Validates a Terraform plan, checks policy compliance with Open Policy Agent, requests approval via ServiceNow change request, and applies the infrastructure change on Azure.
  tags:
  - infrastructure
  - terraform
  - open-policy-agent
  - servicenow
  - azure
capability:
  exposes:
  - type: mcp
    namespace: infra-provision
    port: 8080
    tools:
    - name: provision-infrastructure
      description: Validate Terraform plan, check OPA policy, create change request, and apply infrastructure on Azure.
      inputParameters:
      - name: workspace_name
        in: body
        type: string
        description: The Terraform Cloud workspace name.
      - name: run_id
        in: body
        type: string
        description: The Terraform plan run ID.
      - name: requestor_email
        in: body
        type: string
        description: The email of the infrastructure requestor.
      steps:
      - name: get-plan
        type: call
        call: terraform.get-run
        with:
          workspace: '{{workspace_name}}'
          run_id: '{{run_id}}'
      - name: check-policy
        type: call
        call: opa.evaluate-policy
        with:
          policy_path: infrastructure/azure
          input: '{{get-plan.plan_json}}'
      - name: create-change-request
        type: call
        call: servicenow.create-change
        with:
          short_description: 'Terraform apply: {{workspace_name}}'
          description: 'Run: {{run_id}}. Resources to add: {{get-plan.resources_to_add}}. Resources to change: {{get-plan.resources_to_change}}. OPA policy result: {{check-policy.decision}}. Requestor: {{requestor_email}}.'
          assigned_group: Cloud_Engineering
          category: infrastructure_change
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: runs
      path: /workspaces/{{workspace}}/runs/{{run_id}}
      inputParameters:
      - name: workspace
        in: path
      - name: run_id
        in: path
      operations:
      - name: get-run
        method: GET
  - type: http
    namespace: opa
    baseUri: https://opa.bnpparibas.net/v1
    authentication:
      type: bearer
      token: $secrets.opa_token
    resources:
    - name: policies
      path: /data/{{policy_path}}
      inputParameters:
      - name: policy_path
        in: path
      operations:
      - name: evaluate-policy
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
Open in Framework → View in Fleet → terraform-infrastructure-provisioning-with-approval.yml

Aggregates cash positions from Temenos, monitors intraday limits, generates alerts in Datadog, and reports to treasury via Power BI.

naftiko: '0.5'
info:
  label: Liquidity Monitoring Pipeline
  description: Aggregates cash positions from Temenos, monitors intraday limits, generates alerts in Datadog, and reports to treasury via Power BI.
  tags:
  - treasury
  - temenos-transact
  - datadog
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: liquidity-monitor
    port: 8080
    tools:
    - name: monitor-liquidity
      description: Monitor intraday liquidity positions with alerting and reporting.
      inputParameters:
      - name: entity_code
        in: body
        type: string
        description: Legal entity code.
      steps:
      - name: get-positions
        type: call
        call: temenos.get-cash-positions
        with:
          entity: '{{entity_code}}'
      - name: check-limits
        type: call
        call: datadog.query-metrics
        with:
          query: sum:treasury.liquidity{entity:{{entity_code}}}
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: liquidity-{{entity_code}}
  consumes:
  - type: http
    namespace: temenos
    baseUri: https://temenos.bnpparibas.com/api/v1
    authentication:
      type: bearer
      token: $secrets.temenos_token
    resources:
    - name: cash
      path: /treasury/cash-positions
      inputParameters:
      - name: entity
        in: query
      operations:
      - name: get-cash-positions
        method: GET
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /query
      inputParameters:
      - name: query
        in: query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → liquidity-monitoring-pipeline.yml

Detects anomalies in Bloomberg trade data, runs pattern analysis in Snowflake, creates cases in ServiceNow, and alerts compliance via Microsoft Teams.

naftiko: '0.5'
info:
  label: Trade Surveillance Investigation Pipeline
  description: Detects anomalies in Bloomberg trade data, runs pattern analysis in Snowflake, creates cases in ServiceNow, and alerts compliance via Microsoft Teams.
  tags:
  - surveillance
  - bloomberg
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: trade-surveillance
    port: 8080
    tools:
    - name: investigate-anomaly
      description: Investigate a trade surveillance alert with analysis and case creation.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: Surveillance alert identifier.
      steps:
      - name: get-trade-data
        type: call
        call: bloomberg.get-trade-history
        with:
          alert_id: '{{alert_id}}'
      - name: analyze-patterns
        type: call
        call: snowflake.execute-statement
        with:
          statement: CALL SURVEILLANCE.ANALYZE_PATTERN('{{alert_id}}')
      - name: create-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Trade surveillance: {{alert_id}}'
          description: 'Pattern: {{analyze-patterns.pattern_type}}. Confidence: {{analyze-patterns.confidence}}.'
          category: surveillance
      - name: notify-compliance
        type: call
        call: msteams.send-message
        with:
          recipient_upn: compliance@bnpparibas.com
          text: 'Surveillance alert {{alert_id}}: {{analyze-patterns.pattern_type}}. Case: {{create-case.number}}.'
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg
    authentication:
      type: bearer
      token: $secrets.bloomberg_api_key
    resources:
    - name: trades
      path: /trades/history
      inputParameters:
      - name: alert_id
        in: query
      operations:
      - name: get-trade-history
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://bnpparibas.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: servicenow
    baseUri: https://bnpparibas.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → trade-surveillance-investigation-pipeline.yml

Queries Oracle Enterprise Manager for database instance status, tablespace usage, and active sessions for a given database SID.

naftiko: '0.5'
info:
  label: Oracle Database Health Check
  description: Queries Oracle Enterprise Manager for database instance status, tablespace usage, and active sessions for a given database SID.
  tags:
  - databases
  - oracle
  - oracle-enterprise-manager
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: db-ops
    port: 8080
    tools:
    - name: get-db-health
      description: Retrieve health metrics for an Oracle database instance including status, tablespace usage, and active session count.
      inputParameters:
      - name: db_sid
        in: body
        type: string
        description: The Oracle database SID.
      call: oem.get-db-status
      with:
        db_sid: '{{db_sid}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: tablespace_pct
        type: number
        mapping: $.tablespaceUsedPct
      - name: active_sessions
        type: number
        mapping: $.activeSessions
  consumes:
  - type: http
    namespace: oem
    baseUri: https://oem.bnpparibas.net/em/websvcs/restful/emws/db
    authentication:
      type: basic
      username: $secrets.oem_user
      password: $secrets.oem_password
    resources:
    - name: databases
      path: /targets/{{db_sid}}/health
      inputParameters:
      - name: db_sid
        in: path
      operations:
      - name: get-db-status
        method: GET
Open in Framework → View in Fleet → oracle-database-health-check.yml

Detects corporate actions from Bloomberg, updates positions in SimCorp, notifies portfolio managers via email, and logs in Confluence.

naftiko: '0.5'
info:
  label: Corporate Event Notification Pipeline
  description: Detects corporate actions from Bloomberg, updates positions in SimCorp, notifies portfolio managers via email, and logs in Confluence.
  tags:
  - corporate-actions
  - bloomberg
  - simcorp-dimension
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: corp-events
    port: 8080
    tools:
    - name: process-corporate-event
      description: Process a corporate action event across systems.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: Bloomberg corporate action event ID.
      steps:
      - name: get-event
        type: call
        call: bloomberg.get-corporate-action
        with:
          event_id: '{{event_id}}'
      - name: update-positions
        type: call
        call: simcorp.apply-corporate-action
        with:
          isin: '{{get-event.isin}}'
          action_type: '{{get-event.action_type}}'
      - name: log-action
        type: call
        call: confluence.create-page
        with:
          space_key: OPS
          title: 'Corporate Action: {{get-event.action_type}} — {{get-event.isin}}'
          body: 'Event: {{get-event.description}}. Portfolios affected: {{update-positions.count}}.'
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg
    authentication:
      type: bearer
      token: $secrets.bloomberg_api_key
    resources:
    - name: corporate-actions
      path: /corporate-actions/{{event_id}}
      inputParameters:
      - name: event_id
        in: path
      operations:
      - name: get-corporate-action
        method: GET
  - type: http
    namespace: simcorp
    baseUri: https://simcorp.bnpparibas.net/api/v2
    authentication:
      type: bearer
      token: $secrets.simcorp_token
    resources:
    - name: corporate-actions
      path: /corporate-actions/apply
      operations:
      - name: apply-corporate-action
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://bnpparibas.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → corporate-event-notification-pipeline.yml

Retrieves a travel request status from SAP Concur.

naftiko: '0.5'
info:
  label: SAP Concur Travel Request Lookup
  description: Retrieves a travel request status from SAP Concur.
  tags:
  - finance
  - sap-concur
capability:
  exposes:
  - type: mcp
    namespace: travel-requests
    port: 8080
    tools:
    - name: get-travel-request
      description: Look up SAP Concur travel request status.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: Concur travel request ID.
      call: concur.get-request
      with:
        request_id: '{{request_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.ApprovalStatusName
      - name: total_cost
        type: number
        mapping: $.TotalPostedAmount
  consumes:
  - type: http
    namespace: concur
    baseUri: https://us.api.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: requests
      path: /travelrequest/requests/{{request_id}}
      inputParameters:
      - name: request_id
        in: path
      operations:
      - name: get-request
        method: GET
Open in Framework → View in Fleet → sap-concur-travel-request-lookup.yml

Routes customer complaints from Salesforce to ServiceNow, assigns priority, and notifies the resolution team via Slack.

naftiko: '0.5'
info:
  label: Customer Complaint Routing Orchestrator
  description: Routes customer complaints from Salesforce to ServiceNow, assigns priority, and notifies the resolution team via Slack.
  tags:
  - support
  - salesforce
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: customer-complaint-routing
    port: 8080
    tools:
    - name: customer-complaint-routing
      description: Routes customer complaints from Salesforce to ServiceNow.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Customer Complaint Routing for {{entity_id}}
      - name: update-sf
        type: call
        call: salesforce.update-opp
        with:
          entity_id: '{{entity_id}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#ops'
          text: Customer Complaint Routing processed for {{entity_id}}
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://capitalone.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: objects
      path: /sobjects
      operations:
      - name: get-lead
        method: GET
      - name: create-lead
        method: POST
      - name: update-opp
        method: PATCH
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → customer-complaint-routing-orchestrator.yml

Compiles regulatory data from Snowflake, validates compliance, and publishes reports to Confluence.

naftiko: '0.5'
info:
  label: Regulatory Reporting Submission Orchestrator
  description: Compiles regulatory data from Snowflake, validates compliance, and publishes reports to Confluence.
  tags:
  - compliance
  - snowflake
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: regulatory-reporting-submissio
    port: 8080
    tools:
    - name: regulatory-reporting-submission
      description: Compiles regulatory data from Snowflake.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space_key: OPS
          title: Regulatory Reporting Submission
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://capitalone.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
      - name: run-analysis
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://capitalone.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → regulatory-reporting-submission-orchestrator.yml

Pulls a headcount snapshot from Workday by cost center and department, returning employee count and full-time equivalent figures for workforce planning.

naftiko: '0.5'
info:
  label: Workday Headcount Snapshot
  description: Pulls a headcount snapshot from Workday by cost center and department, returning employee count and full-time equivalent figures for workforce planning.
  tags:
  - hr
  - reporting
  - workday
  - headcount
capability:
  exposes:
  - type: mcp
    namespace: hr-reporting
    port: 8080
    tools:
    - name: get-headcount-snapshot
      description: Given a Workday cost center ID and optional department, return total headcount and FTE count. Use for workforce planning dashboards or period-end reporting.
      inputParameters:
      - name: cost_center_id
        in: body
        type: string
        description: The Workday cost center ID to filter headcount.
      - name: department
        in: body
        type: string
        description: Optional department name to further filter results.
      call: workday-hc.get-headcount
      with:
        costCenterId: '{{cost_center_id}}'
        department: '{{department}}'
      outputParameters:
      - name: total_headcount
        type: integer
        mapping: $.data.totalHeadcount
      - name: fte_count
        type: number
        mapping: $.data.fteCount
  consumes:
  - type: http
    namespace: workday-hc
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: headcount
      path: /headcount
      inputParameters:
      - name: costCenterId
        in: query
      - name: department
        in: query
      operations:
      - name: get-headcount
        method: GET
Open in Framework → View in Fleet → workday-headcount-snapshot.yml

Assesses vendor security posture, logs findings in ServiceNow, and publishes results to Confluence.

naftiko: '0.5'
info:
  label: Vendor Security Assessment Orchestrator
  description: Assesses vendor security posture, logs findings in ServiceNow, and publishes results to Confluence.
  tags:
  - security
  - servicenow
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: vendor-security-assessment
    port: 8080
    tools:
    - name: vendor-security-assessment
      description: Assesses vendor security posture.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Vendor Security Assessment for {{entity_id}}
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space_key: OPS
          title: Vendor Security Assessment
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://capitalone.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → vendor-security-assessment-orchestrator.yml

Processes AML alerts by enriching with Snowflake data, creating ServiceNow cases, and notifying compliance via Slack.

naftiko: '0.5'
info:
  label: Anti-Money Laundering Alert Orchestrator
  description: Processes AML alerts by enriching with Snowflake data, creating ServiceNow cases, and notifying compliance via Slack.
  tags:
  - compliance
  - snowflake
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: anti-money-laundering-alert
    port: 8080
    tools:
    - name: anti-money-laundering-alert
      description: Processes AML alerts by enriching with Snowflake data.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Anti-Money Laundering Alert for {{entity_id}}
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#ops'
          text: Anti-Money Laundering Alert processed for {{entity_id}}
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://capitalone.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
      - name: run-analysis
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → anti-money-laundering-alert-orchestrator.yml

Retrieves the member count for a Slack channel.

naftiko: '0.5'
info:
  label: Slack Channel Membership Lookup
  description: Retrieves the member count for a Slack channel.
  tags:
  - collaboration
  - slack
capability:
  exposes:
  - type: mcp
    namespace: slack-info
    port: 8080
    tools:
    - name: get-channel-members
      description: Look up Slack channel member count.
      inputParameters:
      - name: channel_id
        in: body
        type: string
        description: Slack channel ID.
      call: slack.get-channel-info
      with:
        channel: '{{channel_id}}'
      outputParameters:
      - name: member_count
        type: number
        mapping: $.channel.num_members
      - name: name
        type: string
        mapping: $.channel.name
  consumes:
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: channels
      path: /conversations.info?channel={{channel_id}}
      operations:
      - name: get-channel-info
        method: GET
Open in Framework → View in Fleet → slack-channel-membership-lookup.yml

Monitors branch network via SolarWinds, creates ServiceNow incidents for outages, and notifies IT.

naftiko: '0.5'
info:
  label: Branch Network Performance Orchestrator
  description: Monitors branch network via SolarWinds, creates ServiceNow incidents for outages, and notifies IT.
  tags:
  - network
  - solarwinds
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: branch-network-performance
    port: 8080
    tools:
    - name: branch-network-performance
      description: Monitors branch network via SolarWinds.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Branch Network Performance for {{entity_id}}
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#ops'
          text: Branch Network Performance processed for {{entity_id}}
      - name: get-alerts
        type: call
        call: solarwinds.get-alerts
        with:
          entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
  - type: http
    namespace: solarwinds
    baseUri: https://solarwinds.capitalone.com/api/v2
    authentication:
      type: basic
      username: $secrets.solarwinds_user
      password: $secrets.solarwinds_password
    resources:
    - name: alerts
      path: /alerts
      operations:
      - name: get-alerts
        method: GET
Open in Framework → View in Fleet → branch-network-performance-orchestrator.yml

Fetches market rate and benchmark index data from Bloomberg Data License and loads the snapshot into a Snowflake staging table for risk and treasury analytics.

naftiko: '0.5'
info:
  label: Bloomberg Market Data Feed to Snowflake
  description: Fetches market rate and benchmark index data from Bloomberg Data License and loads the snapshot into a Snowflake staging table for risk and treasury analytics.
  tags:
  - finance
  - bloomberg
  - snowflake
  - market-data
  - treasury
capability:
  exposes:
  - type: mcp
    namespace: market-data
    port: 8080
    tools:
    - name: load-bloomberg-market-data
      description: Given a Bloomberg field set and security list, fetch current market data and insert a snapshot row into Snowflake. Use for daily treasury mark-to-market updates.
      inputParameters:
      - name: securities
        in: body
        type: string
        description: Comma-separated Bloomberg security identifiers.
      - name: fields
        in: body
        type: string
        description: Comma-separated Bloomberg field names (e.g., PX_LAST,YLD_YTM_MID).
      - name: target_table
        in: body
        type: string
        description: Fully qualified Snowflake target table for the data load.
      steps:
      - name: fetch-market-data
        type: call
        call: bloomberg.get-reference-data
        with:
          securities: '{{securities}}'
          fields: '{{fields}}'
      - name: load-to-snowflake
        type: call
        call: snowflake-mkt.execute-statement
        with:
          statement: INSERT INTO {{target_table}} SELECT PARSE_JSON('{{fetch-market-data.data}}')
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/fields
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: reference-data
      path: /requests/referenceData
      inputParameters:
      - name: securities
        in: body
      - name: fields
        in: body
      operations:
      - name: get-reference-data
        method: POST
  - type: http
    namespace: snowflake-mkt
    baseUri: https://capitalone.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statement
      path: /statements
      inputParameters:
      - name: statement
        in: body
      operations:
      - name: execute-statement
        method: POST
Open in Framework → View in Fleet → bloomberg-market-data-feed-to-snowflake.yml

When a Coupa purchase requisition is submitted, creates a ServiceNow approval task for the budget owner and sends an approval link via Microsoft Teams.

naftiko: '0.5'
info:
  label: Coupa Purchase Requisition Approval
  description: When a Coupa purchase requisition is submitted, creates a ServiceNow approval task for the budget owner and sends an approval link via Microsoft Teams.
  tags:
  - procurement
  - coupa
  - servicenow
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: procurement
    port: 8080
    tools:
    - name: trigger-po-approval
      description: Given a Coupa requisition ID and budget owner email, open a ServiceNow approval task and notify the owner via Teams. Invoke when a new procurement requisition is awaiting budget approval.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The Coupa purchase requisition ID.
      - name: budget_owner_email
        in: body
        type: string
        description: Email of the budget owner responsible for approval.
      steps:
      - name: get-requisition
        type: call
        call: coupa.get-requisition
        with:
          requisitionId: '{{requisition_id}}'
      - name: create-approval-task
        type: call
        call: servicenow-po.create-approval-task
        with:
          description: PO requisition {{requisition_id}} for ${{get-requisition.total}} pending approval.
          assignedTo: '{{budget_owner_email}}'
      - name: notify-owner
        type: call
        call: msteams-po.send-message
        with:
          recipient: '{{budget_owner_email}}'
          message: 'Coupa requisition {{requisition_id}} for ${{get-requisition.total}} requires your approval. Task: {{create-approval-task.taskId}}.'
  consumes:
  - type: http
    namespace: coupa
    baseUri: https://capitalone.coupahost.com/api
    authentication:
      type: apikey
      key: X-COUPA-API-KEY
      value: $secrets.coupa_api_key
      placement: header
    resources:
    - name: requisition
      path: /requisitions/{requisitionId}
      inputParameters:
      - name: requisitionId
        in: path
      operations:
      - name: get-requisition
        method: GET
  - type: http
    namespace: servicenow-po
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_pass
    resources:
    - name: approval-task
      path: /table/sc_task
      inputParameters:
      - name: description
        in: body
      - name: assignedTo
        in: body
      operations:
      - name: create-approval-task
        method: POST
  - type: http
    namespace: msteams-po
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /users/{recipient}/sendMail
      inputParameters:
      - name: recipient
        in: path
      - name: message
        in: body
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → coupa-purchase-requisition-approval.yml

Pulls actuals from Oracle EBS and budget data from Oracle Hyperion, computes variance by cost center, and publishes a Power BI dashboard refresh.

naftiko: '0.5'
info:
  label: Oracle Hyperion Budget Variance Report
  description: Pulls actuals from Oracle EBS and budget data from Oracle Hyperion, computes variance by cost center, and publishes a Power BI dashboard refresh.
  tags:
  - finance
  - budgeting
  - oracle-hyperion
  - oracle-ebs
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: finance-reporting
    port: 8080
    tools:
    - name: publish-budget-variance-report
      description: Given a fiscal period and cost center, fetch actuals from Oracle EBS, compare to Hyperion budget targets, and trigger a Power BI dataset refresh. Use for monthly close reporting.
      inputParameters:
      - name: fiscal_period
        in: body
        type: string
        description: The fiscal period in YYYY-MM format.
      - name: cost_center
        in: body
        type: string
        description: The cost center code to report on.
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID to refresh.
      steps:
      - name: get-actuals
        type: call
        call: oracle-ebs.get-actuals
        with:
          fiscalPeriod: '{{fiscal_period}}'
          costCenter: '{{cost_center}}'
      - name: get-budget
        type: call
        call: oracle-hyperion.get-budget
        with:
          fiscalPeriod: '{{fiscal_period}}'
          costCenter: '{{cost_center}}'
      - name: refresh-dataset
        type: call
        call: powerbi.trigger-refresh
        with:
          datasetId: '{{dataset_id}}'
  consumes:
  - type: http
    namespace: oracle-ebs
    baseUri: https://capitalone-ebs.oraclecloud.com/fscmRestApi/resources/11.13.18.05
    authentication:
      type: bearer
      token: $secrets.oracle_ebs_token
    resources:
    - name: actuals
      path: /generalLedgerJournalEntries
      inputParameters:
      - name: fiscalPeriod
        in: query
      - name: costCenter
        in: query
      operations:
      - name: get-actuals
        method: GET
  - type: http
    namespace: oracle-hyperion
    baseUri: https://capitalone-hyperion.oraclecloud.com/HyperionPlanning/rest/v3
    authentication:
      type: bearer
      token: $secrets.hyperion_token
    resources:
    - name: budget
      path: /applications/Planning/plans
      inputParameters:
      - name: fiscalPeriod
        in: query
      - name: costCenter
        in: query
      operations:
      - name: get-budget
        method: GET
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refresh
      path: /datasets/{datasetId}/refreshes
      inputParameters:
      - name: datasetId
        in: path
      operations:
      - name: trigger-refresh
        method: POST
Open in Framework → View in Fleet → oracle-hyperion-budget-variance-report.yml

Analyzes Snowflake warehouse utilization, identifies savings, and creates Jira implementation tickets.

naftiko: '0.5'
info:
  label: Data Lake Cost Optimization Orchestrator
  description: Analyzes Snowflake warehouse utilization, identifies savings, and creates Jira implementation tickets.
  tags:
  - finops
  - snowflake
  - jira
capability:
  exposes:
  - type: mcp
    namespace: data-lake-cost-optimization
    port: 8080
    tools:
    - name: data-lake-cost-optimization
      description: Analyzes Snowflake warehouse utilization.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
      - name: create-issue
        type: call
        call: jira.create-issue
        with:
          project: OPS
          summary: Data Lake Cost Optimization - {{entity_id}}
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://capitalone.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
      - name: run-analysis
        method: POST
  - type: http
    namespace: jira
    baseUri: https://capitalone.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → data-lake-cost-optimization-orchestrator.yml

Retrieves benefits enrollment status for an employee in Workday.

naftiko: '0.5'
info:
  label: Workday Benefits Enrollment Lookup
  description: Retrieves benefits enrollment status for an employee in Workday.
  tags:
  - hr
  - workday
capability:
  exposes:
  - type: mcp
    namespace: benefits-info
    port: 8080
    tools:
    - name: get-benefits-enrollment
      description: Look up benefits enrollment status.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      call: workday.get-benefits
      with:
        worker_id: '{{employee_id}}'
      outputParameters:
      - name: plan_name
        type: string
        mapping: $.benefits.current_plan
      - name: status
        type: string
        mapping: $.benefits.enrollment_status
  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: /capitalone/workers/{{worker_id}}/benefits
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-benefits
        method: GET
Open in Framework → View in Fleet → workday-benefits-enrollment-lookup.yml

When a GitHub Actions workflow fails, opens a Jira incident ticket, posts a Datadog event for observability, and notifies the on-call engineer via Microsoft Teams.

naftiko: '0.5'
info:
  label: GitHub CI/CD Pipeline Failure Responder
  description: When a GitHub Actions workflow fails, opens a Jira incident ticket, posts a Datadog event for observability, and notifies the on-call engineer via Microsoft Teams.
  tags:
  - devops
  - cicd
  - github
  - jira
  - datadog
  - microsoft-teams
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: cicd-ops
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a GitHub Actions run ID and repository name, retrieve failure details, open a Jira ticket, post a Datadog event, and notify the on-call engineer via Teams. Invoke on any failed workflow run.
      inputParameters:
      - name: run_id
        in: body
        type: string
        description: The GitHub Actions workflow run ID.
      - name: repo
        in: body
        type: string
        description: The repository name in owner/repo format.
      - name: oncall_email
        in: body
        type: string
        description: Email of the on-call engineer to notify.
      steps:
      - name: get-run-details
        type: call
        call: github.get-workflow-run
        with:
          runId: '{{run_id}}'
          repo: '{{repo}}'
      - name: open-jira-ticket
        type: call
        call: jira.create-issue
        with:
          summary: 'Pipeline failure: {{repo}} run {{run_id}}'
          description: Workflow {{get-run-details.name}} failed at {{get-run-details.updated_at}}.
          project: DEVOPS
          issuetype: Bug
      - name: post-datadog-event
        type: call
        call: datadog.create-event
        with:
          title: 'Pipeline failure: {{repo}}'
          text: 'Run {{run_id}} failed. Jira: {{open-jira-ticket.issueKey}}'
          alert_type: error
      - name: notify-oncall
        type: call
        call: msteams-ci.send-message
        with:
          recipient: '{{oncall_email}}'
          message: 'Pipeline failure in {{repo}}. Jira: {{open-jira-ticket.issueKey}}. Datadog event logged.'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflow-run
      path: /repos/{repo}/actions/runs/{runId}
      inputParameters:
      - name: repo
        in: path
      - name: runId
        in: path
      operations:
      - name: get-workflow-run
        method: GET
  - type: http
    namespace: jira
    baseUri: https://capitalone.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issue
      path: /issue
      inputParameters:
      - name: summary
        in: body
      - name: description
        in: body
      - name: project
        in: body
      - name: issuetype
        in: body
      operations:
      - name: create-issue
        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: event
      path: /events
      inputParameters:
      - name: title
        in: body
      - name: text
        in: body
      - name: alert_type
        in: body
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: msteams-ci
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /users/{recipient}/sendMail
      inputParameters:
      - name: recipient
        in: path
      - name: message
        in: body
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → github-ci-cd-pipeline-failure-responder.yml

Evaluates credit limit changes using Databricks ML models, updates customer records, and notifies via email.

naftiko: '0.5'
info:
  label: Credit Limit Adjustment Orchestrator
  description: Evaluates credit limit changes using Databricks ML models, updates customer records, and notifies via email.
  tags:
  - banking
  - databricks
  - email
capability:
  exposes:
  - type: mcp
    namespace: credit-limit-adjustment
    port: 8080
    tools:
    - name: credit-limit-adjustment
      description: Evaluates credit limit changes using Databricks ML models.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: run-model
        type: call
        call: databricks.run-job
        with:
          entity_id: '{{entity_id}}'
      - name: send-email
        type: call
        call: email.send-message
        with:
          to: team@capitalone.com
          subject: Credit Limit Adjustment
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://capitalone.cloud.databricks.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: email
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.graph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → credit-limit-adjustment-orchestrator.yml

Creates a ServiceNow change request for a planned infrastructure change, routes it through the CAB approval workflow, and notifies the change owner via Microsoft Teams.

naftiko: '0.5'
info:
  label: ServiceNow Change Management Approval
  description: Creates a ServiceNow change request for a planned infrastructure change, routes it through the CAB approval workflow, and notifies the change owner via Microsoft Teams.
  tags:
  - itsm
  - servicenow
  - change-management
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: change-mgmt
    port: 8080
    tools:
    - name: submit-change-request
      description: Given a change description, risk level, and implementation window, create a ServiceNow change request and notify the change owner via Teams. Use before deploying infrastructure changes.
      inputParameters:
      - name: description
        in: body
        type: string
        description: Description of the planned change.
      - name: risk_level
        in: body
        type: string
        description: 'Risk level: low, medium, high.'
      - name: start_date
        in: body
        type: string
        description: Planned implementation start in ISO 8601 format.
      - name: owner_email
        in: body
        type: string
        description: Email of the change owner for Teams notification.
      steps:
      - name: create-change-request
        type: call
        call: servicenow-chg.create-change
        with:
          description: '{{description}}'
          risk: '{{risk_level}}'
          start_date: '{{start_date}}'
      - name: notify-owner
        type: call
        call: msteams-chg.send-message
        with:
          recipient: '{{owner_email}}'
          message: 'Change request {{create-change-request.changeNumber}} created for {{start_date}}. Risk: {{risk_level}}.'
  consumes:
  - type: http
    namespace: servicenow-chg
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_pass
    resources:
    - name: change
      path: /table/change_request
      inputParameters:
      - name: description
        in: body
      - name: risk
        in: body
      - name: start_date
        in: body
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: msteams-chg
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /users/{recipient}/sendMail
      inputParameters:
      - name: recipient
        in: path
      - name: message
        in: body
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → servicenow-change-management-approval.yml

Retrieves code scanning alert count for a GitHub repository.

naftiko: '0.5'
info:
  label: GitHub Code Scan Findings Lookup
  description: Retrieves code scanning alert count for a GitHub repository.
  tags:
  - security
  - github
capability:
  exposes:
  - type: mcp
    namespace: code-scanning
    port: 8080
    tools:
    - name: get-scan-findings
      description: Look up GitHub code scanning alerts.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: GitHub repository (org/repo).
      call: github.get-alerts
      with:
        repo: '{{repo_name}}'
      outputParameters:
      - name: alert_count
        type: number
        mapping: $.length
      - name: critical_count
        type: number
        mapping: $.critical
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: alerts
      path: /repos/{{repo}}/code-scanning/alerts
      inputParameters:
      - name: repo
        in: path
      operations:
      - name: get-alerts
        method: GET
Open in Framework → View in Fleet → github-code-scan-findings-lookup.yml

Retrieves configuration item details from ServiceNow CMDB.

naftiko: '0.5'
info:
  label: ServiceNow CMDB CI Lookup
  description: Retrieves configuration item details from ServiceNow CMDB.
  tags:
  - infrastructure
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: cmdb-lookup
    port: 8080
    tools:
    - name: get-ci-details
      description: Look up ServiceNow CMDB configuration item.
      inputParameters:
      - name: ci_name
        in: body
        type: string
        description: CI name.
      call: servicenow.get-ci
      with:
        ci_name: '{{ci_name}}'
      outputParameters:
      - name: sys_id
        type: string
        mapping: $.result.sys_id
      - name: category
        type: string
        mapping: $.result.category
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://capitalone.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={{ci_name}}
      operations:
      - name: get-ci
        method: GET
Open in Framework → View in Fleet → servicenow-cmdb-ci-lookup.yml

Analyzes reward program data in Snowflake, identifies optimization opportunities, and publishes to Confluence.

naftiko: '0.5'
info:
  label: Card Reward Program Analysis Orchestrator
  description: Analyzes reward program data in Snowflake, identifies optimization opportunities, and publishes to Confluence.
  tags:
  - banking
  - snowflake
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: card-reward-program-analysis
    port: 8080
    tools:
    - name: card-reward-program-analysis
      description: Analyzes reward program data in Snowflake.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space_key: OPS
          title: Card Reward Program Analysis
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://capitalone.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
      - name: run-analysis
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://capitalone.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → card-reward-program-analysis-orchestrator.yml

Retrieves firewall rule details from Palo Alto Networks Panorama.

naftiko: '0.5'
info:
  label: Palo Alto Firewall Rule Lookup
  description: Retrieves firewall rule details from Palo Alto Networks Panorama.
  tags:
  - security
  - palo-alto-networks
capability:
  exposes:
  - type: mcp
    namespace: firewall-rules
    port: 8080
    tools:
    - name: get-rule-details
      description: Look up Palo Alto firewall rule.
      inputParameters:
      - name: rule_name
        in: body
        type: string
        description: Firewall rule name.
      call: paloalto.get-rule
      with:
        rule_name: '{{rule_name}}'
      outputParameters:
      - name: action
        type: string
        mapping: $.result.action
      - name: source_zones
        type: string
        mapping: $.result.from
  consumes:
  - type: http
    namespace: paloalto
    baseUri: https://panorama.capitalone.com/restapi/v10.1
    authentication:
      type: bearer
      token: $secrets.paloalto_token
    resources:
    - name: rules
      path: /Policies/SecurityRules
      operations:
      - name: get-rule
        method: GET
Open in Framework → View in Fleet → palo-alto-firewall-rule-lookup.yml

Queries Microsoft Graph for users in a given security group, cross-references with Workday to identify terminated employees, and disables stale accounts to enforce access recertification.

naftiko: '0.5'
info:
  label: Azure AD Access Recertification
  description: Queries Microsoft Graph for users in a given security group, cross-references with Workday to identify terminated employees, and disables stale accounts to enforce access recertification.
  tags:
  - identity
  - security
  - microsoft-graph
  - workday
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: identity-ops
    port: 8080
    tools:
    - name: recertify-group-access
      description: Given an Azure AD group ID, list all members, check each against Workday for active status, and disable accounts for terminated employees. Use for quarterly access recertification campaigns.
      inputParameters:
      - name: group_id
        in: body
        type: string
        description: The Azure AD security group object ID to recertify.
      steps:
      - name: get-group-members
        type: call
        call: msgraph-id.get-group-members
        with:
          groupId: '{{group_id}}'
      - name: check-workday-status
        type: call
        call: workday-id.get-worker-status
        with:
          email: '{{get-group-members.userPrincipalName}}'
      - name: disable-stale-account
        type: call
        call: msgraph-disable.disable-user
        with:
          userPrincipalName: '{{get-group-members.userPrincipalName}}'
          accountEnabled: 'false'
  consumes:
  - type: http
    namespace: msgraph-id
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: group-members
      path: /groups/{groupId}/members
      inputParameters:
      - name: groupId
        in: path
      operations:
      - name: get-group-members
        method: GET
  - type: http
    namespace: workday-id
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: worker-status
      path: /workers
      inputParameters:
      - name: email
        in: query
      operations:
      - name: get-worker-status
        method: GET
  - type: http
    namespace: msgraph-disable
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: user
      path: /users/{userPrincipalName}
      inputParameters:
      - name: userPrincipalName
        in: path
      - name: accountEnabled
        in: body
      operations:
      - name: disable-user
        method: PATCH
Open in Framework → View in Fleet → azure-ad-access-recertification.yml

Audits AWS security groups, identifies overly permissive rules, and creates Jira remediation tickets.

naftiko: '0.5'
info:
  label: AWS Security Group Audit Orchestrator
  description: Audits AWS security groups, identifies overly permissive rules, and creates Jira remediation tickets.
  tags:
  - security
  - aws
  - jira
capability:
  exposes:
  - type: mcp
    namespace: aws-security-group-audit
    port: 8080
    tools:
    - name: aws-security-group-audit
      description: Audits AWS security groups.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: create-issue
        type: call
        call: jira.create-issue
        with:
          project: OPS
          summary: AWS Security Group Audit - {{entity_id}}
      - name: get-resources
        type: call
        call: aws.list-resources
        with:
          entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://capitalone.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: aws
    baseUri: https://ec2.us-east-1.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_token
    resources:
    - name: resources
      path: /
      operations:
      - name: list-resources
        method: GET
Open in Framework → View in Fleet → aws-security-group-audit-orchestrator.yml

Processes loan applications by running credit models in Databricks, updating Snowflake, and notifying via email.

naftiko: '0.5'
info:
  label: Loan Origination Pipeline Orchestrator
  description: Processes loan applications by running credit models in Databricks, updating Snowflake, and notifying via email.
  tags:
  - banking
  - databricks
  - snowflake
  - email
capability:
  exposes:
  - type: mcp
    namespace: loan-origination-pipeline
    port: 8080
    tools:
    - name: loan-origination-pipeline
      description: Processes loan applications by running credit models in Databricks.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
      - name: run-model
        type: call
        call: databricks.run-job
        with:
          entity_id: '{{entity_id}}'
      - name: send-email
        type: call
        call: email.send-message
        with:
          to: team@capitalone.com
          subject: Loan Origination Pipeline
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://capitalone.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
      - name: run-analysis
        method: POST
  - type: http
    namespace: databricks
    baseUri: https://capitalone.cloud.databricks.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: email
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.graph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → loan-origination-pipeline-orchestrator.yml

Investigates flagged transactions by enriching with Snowflake risk data, creating a ServiceNow case, and alerting the fraud team via Slack.

naftiko: '0.5'
info:
  label: Credit Card Fraud Investigation Orchestrator
  description: Investigates flagged transactions by enriching with Snowflake risk data, creating a ServiceNow case, and alerting the fraud team via Slack.
  tags:
  - fraud
  - snowflake
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: credit-card-fraud-investigatio
    port: 8080
    tools:
    - name: credit-card-fraud-investigation
      description: Investigates flagged transactions by enriching with Snowflake risk data.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Credit Card Fraud Investigation for {{entity_id}}
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#ops'
          text: Credit Card Fraud Investigation processed for {{entity_id}}
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://capitalone.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
      - name: run-analysis
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → credit-card-fraud-investigation-orchestrator.yml

Retrieves customer analytics dashboard data from Tableau.

naftiko: '0.5'
info:
  label: Tableau Customer Analytics Lookup
  description: Retrieves customer analytics dashboard data from Tableau.
  tags:
  - analytics
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: customer-analytics
    port: 8080
    tools:
    - name: get-analytics-view
      description: Look up customer analytics from Tableau.
      inputParameters:
      - name: view_id
        in: body
        type: string
        description: Tableau view ID.
      call: tableau.get-view-data
      with:
        view_id: '{{view_id}}'
      outputParameters:
      - name: active_customers
        type: number
        mapping: $.data[0].active
      - name: churn_rate
        type: number
        mapping: $.data[0].churn_pct
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://tableau.capitalone.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: views
      path: /sites/{{site_id}}/views/{{view_id}}/data
      inputParameters:
      - name: view_id
        in: path
      operations:
      - name: get-view-data
        method: GET
Open in Framework → View in Fleet → tableau-customer-analytics-lookup.yml

Monitors open banking API performance via Datadog, detects anomalies, and creates ServiceNow incidents.

naftiko: '0.5'
info:
  label: Open Banking API Monitoring Orchestrator
  description: Monitors open banking API performance via Datadog, detects anomalies, and creates ServiceNow incidents.
  tags:
  - banking
  - datadog
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: open-banking-api-monitoring
    port: 8080
    tools:
    - name: open-banking-api-monitoring
      description: Monitors open banking API performance via Datadog.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: check-metrics
        type: call
        call: datadog.get-monitors
        with:
          entity_id: '{{entity_id}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Open Banking API Monitoring for {{entity_id}}
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor
      operations:
      - name: get-monitors
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
Open in Framework → View in Fleet → open-banking-api-monitoring-orchestrator.yml

Detects Terraform state drift, creates ServiceNow change requests, and notifies platform team via Slack.

naftiko: '0.5'
info:
  label: Cloud Infrastructure Drift Detection Orchestrator
  description: Detects Terraform state drift, creates ServiceNow change requests, and notifies platform team via Slack.
  tags:
  - infrastructure
  - terraform
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: cloud-infrastructure-drift-det
    port: 8080
    tools:
    - name: cloud-infrastructure-drift-detection
      description: Detects Terraform state drift.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Cloud Infrastructure Drift Detection for {{entity_id}}
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#ops'
          text: Cloud Infrastructure Drift Detection processed for {{entity_id}}
      - name: check-state
        type: call
        call: terraform.get-state
        with:
          entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: workspaces
      path: /workspaces
      operations:
      - name: get-state
        method: GET
Open in Framework → View in Fleet → cloud-infrastructure-drift-detection-orchestrator.yml

Retrieves execution metrics for an AWS Lambda function.

naftiko: '0.5'
info:
  label: AWS Lambda Function Status Lookup
  description: Retrieves execution metrics for an AWS Lambda function.
  tags:
  - cloud
  - aws-lambda
capability:
  exposes:
  - type: mcp
    namespace: lambda-ops
    port: 8080
    tools:
    - name: get-lambda-status
      description: Look up Lambda function metrics.
      inputParameters:
      - name: function_name
        in: body
        type: string
        description: Lambda function name.
      call: lambda.get-function
      with:
        function_name: '{{function_name}}'
      outputParameters:
      - name: last_invocation
        type: string
        mapping: $.Configuration.LastModified
      - name: state
        type: string
        mapping: $.Configuration.State
  consumes:
  - type: http
    namespace: lambda
    baseUri: https://lambda.us-east-1.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_lambda_token
    resources:
    - name: functions
      path: /2015-03-31/functions/{{function_name}}
      inputParameters:
      - name: function_name
        in: path
      operations:
      - name: get-function
        method: GET
Open in Framework → View in Fleet → aws-lambda-function-status-lookup.yml

Triggers a Looker Look or dashboard tile refresh for a given content ID and posts the updated embed URL to a Teams channel for executive reporting.

naftiko: '0.5'
info:
  label: Looker Embedded Report Refresh
  description: Triggers a Looker Look or dashboard tile refresh for a given content ID and posts the updated embed URL to a Teams channel for executive reporting.
  tags:
  - data
  - looker
  - microsoft-teams
  - reporting
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: embedded-analytics
    port: 8080
    tools:
    - name: refresh-looker-report
      description: Given a Looker Look ID, run the query and post the refreshed embed URL to a Teams channel. Use for scheduled executive dashboard updates.
      inputParameters:
      - name: look_id
        in: body
        type: string
        description: The Looker Look ID to refresh.
      - name: teams_channel_email
        in: body
        type: string
        description: Teams channel recipient email for embed URL notification.
      steps:
      - name: run-look
        type: call
        call: looker.run-look
        with:
          lookId: '{{look_id}}'
          result_format: json
      - name: notify-teams
        type: call
        call: msteams-looker.send-message
        with:
          recipient: '{{teams_channel_email}}'
          message: 'Looker report {{look_id}} has been refreshed. View at: {{run-look.embedUrl}}'
  consumes:
  - type: http
    namespace: looker
    baseUri: https://capitalone.cloud.looker.com/api/4.0
    authentication:
      type: bearer
      token: $secrets.looker_token
    resources:
    - name: look
      path: /looks/{lookId}/run/{result_format}
      inputParameters:
      - name: lookId
        in: path
      - name: result_format
        in: path
      operations:
      - name: run-look
        method: GET
  - type: http
    namespace: msteams-looker
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /users/{recipient}/sendMail
      inputParameters:
      - name: recipient
        in: path
      - name: message
        in: body
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → looker-embedded-report-refresh.yml

Monitors Cloudflare for active DDoS attack events and automatically creates a ServiceNow security incident and posts an alert to the SOC Slack channel.

naftiko: '0.5'
info:
  label: Cloudflare DDoS Alert to SOC
  description: Monitors Cloudflare for active DDoS attack events and automatically creates a ServiceNow security incident and posts an alert to the SOC Slack channel.
  tags:
  - security
  - cloudflare
  - servicenow
  - slack
  - ddos
  - network-security
capability:
  exposes:
  - type: mcp
    namespace: network-security
    port: 8080
    tools:
    - name: handle-cloudflare-ddos-alert
      description: Given a Cloudflare zone ID, check for active DDoS events, open a ServiceNow security incident, and alert the SOC Slack channel. Use for automated DDoS detection and response.
      inputParameters:
      - name: zone_id
        in: body
        type: string
        description: The Cloudflare zone ID to check for DDoS activity.
      - name: soc_slack_channel
        in: body
        type: string
        description: The SOC Slack channel ID for alert notification.
      steps:
      - name: check-ddos-events
        type: call
        call: cloudflare.get-security-events
        with:
          zoneId: '{{zone_id}}'
          eventType: ddos
      - name: create-security-incident
        type: call
        call: servicenow-ddos.create-security-incident
        with:
          short_description: Cloudflare DDoS attack detected on zone {{zone_id}}
          description: 'DDoS event: {{check-ddos-events.ruleId}} started at {{check-ddos-events.occurred_at}}.'
          category: Network Security
          urgency: '1'
      - name: alert-soc
        type: call
        call: slack-soc.post-message
        with:
          channel: '{{soc_slack_channel}}'
          text: 'DDOS ALERT: Zone {{zone_id}} under attack. Incident: {{create-security-incident.incidentNumber}}.'
  consumes:
  - type: http
    namespace: cloudflare
    baseUri: https://api.cloudflare.com/client/v4
    authentication:
      type: bearer
      token: $secrets.cloudflare_token
    resources:
    - name: security-events
      path: /zones/{zoneId}/security/events
      inputParameters:
      - name: zoneId
        in: path
      - name: eventType
        in: query
      operations:
      - name: get-security-events
        method: GET
  - type: http
    namespace: servicenow-ddos
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_pass
    resources:
    - name: security-incident
      path: /table/sn_si_incident
      inputParameters:
      - name: short_description
        in: body
      - name: description
        in: body
      - name: category
        in: body
      - name: urgency
        in: body
      operations:
      - name: create-security-incident
        method: POST
  - type: http
    namespace: slack-soc
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      inputParameters:
      - name: channel
        in: body
      - name: text
        in: body
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → cloudflare-ddos-alert-to-soc.yml

Retrieves payroll summary data from ADP for a pay period.

naftiko: '0.5'
info:
  label: ADP Payroll Summary Lookup
  description: Retrieves payroll summary data from ADP for a pay period.
  tags:
  - hr
  - adp
capability:
  exposes:
  - type: mcp
    namespace: payroll-info
    port: 8080
    tools:
    - name: get-payroll-summary
      description: Look up ADP payroll summary.
      inputParameters:
      - name: pay_period
        in: body
        type: string
        description: Pay period identifier.
      call: adp.get-payroll
      with:
        pay_period: '{{pay_period}}'
      outputParameters:
      - name: total_gross
        type: number
        mapping: $.payrollSummary.totalGross
      - name: headcount
        type: number
        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: /payroll/pay-periods/{{pay_period}}/summary
      inputParameters:
      - name: pay_period
        in: path
      operations:
      - name: get-payroll
        method: GET
Open in Framework → View in Fleet → adp-payroll-summary-lookup.yml

Monitors payment transactions via Datadog, triggers fraud model in Databricks, and alerts operations via Slack.

naftiko: '0.5'
info:
  label: Real-Time Payment Fraud Detection Orchestrator
  description: Monitors payment transactions via Datadog, triggers fraud model in Databricks, and alerts operations via Slack.
  tags:
  - fraud
  - datadog
  - databricks
  - slack
capability:
  exposes:
  - type: mcp
    namespace: real-time-payment-fraud-detect
    port: 8080
    tools:
    - name: real-time-payment-fraud-detection
      description: Monitors payment transactions via Datadog.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: run-model
        type: call
        call: databricks.run-job
        with:
          entity_id: '{{entity_id}}'
      - name: check-metrics
        type: call
        call: datadog.get-monitors
        with:
          entity_id: '{{entity_id}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#ops'
          text: Real-Time Payment Fraud Detection processed for {{entity_id}}
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://capitalone.cloud.databricks.com/api/2.0
    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: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor
      operations:
      - name: get-monitors
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → real-time-payment-fraud-detection-orchestrator.yml

Detects Snowflake data quality issues, creates Jira tickets, and alerts data stewards via Slack.

naftiko: '0.5'
info:
  label: Data Quality Remediation Orchestrator
  description: Detects Snowflake data quality issues, creates Jira tickets, and alerts data stewards via Slack.
  tags:
  - data
  - snowflake
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: data-quality-remediation
    port: 8080
    tools:
    - name: data-quality-remediation
      description: Detects Snowflake data quality issues.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
      - name: create-issue
        type: call
        call: jira.create-issue
        with:
          project: OPS
          summary: Data Quality Remediation - {{entity_id}}
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#ops'
          text: Data Quality Remediation processed for {{entity_id}}
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://capitalone.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
      - name: run-analysis
        method: POST
  - type: http
    namespace: jira
    baseUri: https://capitalone.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → data-quality-remediation-orchestrator.yml

Queries GitHub Advanced Security for high-severity code scanning alerts and creates Jira tickets for each unresolved finding to enforce remediation SLAs.

naftiko: '0.5'
info:
  label: GitHub Security Scan to Jira
  description: Queries GitHub Advanced Security for high-severity code scanning alerts and creates Jira tickets for each unresolved finding to enforce remediation SLAs.
  tags:
  - devops
  - security
  - github
  - jira
  - devsecops
capability:
  exposes:
  - type: mcp
    namespace: devsecops
    port: 8080
    tools:
    - name: sync-security-alerts-to-jira
      description: Given a repository name and severity level, fetch unresolved GitHub code scanning alerts and create a Jira ticket for each finding. Use for daily security remediation triage.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: Repository in owner/repo format to scan.
      - name: severity
        in: body
        type: string
        description: Minimum severity to capture (critical, high, medium, low).
      steps:
      - name: get-alerts
        type: call
        call: github-sec.list-code-scanning-alerts
        with:
          repo: '{{repo}}'
          severity: '{{severity}}'
          state: open
      - name: create-jira-tickets
        type: call
        call: jira-sec.create-issue
        with:
          summary: 'Security alert: {{get-alerts.rule.description}} in {{repo}}'
          description: '{{get-alerts.most_recent_instance.message.text}}'
          project: SECDEP
          issuetype: Security
  consumes:
  - type: http
    namespace: github-sec
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: code-scanning-alerts
      path: /repos/{repo}/code-scanning/alerts
      inputParameters:
      - name: repo
        in: path
      - name: severity
        in: query
      - name: state
        in: query
      operations:
      - name: list-code-scanning-alerts
        method: GET
  - type: http
    namespace: jira-sec
    baseUri: https://capitalone.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issue
      path: /issue
      inputParameters:
      - name: summary
        in: body
      - name: description
        in: body
      - name: project
        in: body
      - name: issuetype
        in: body
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → github-security-scan-to-jira.yml

Processes account closure by validating balances in Snowflake, creating a ServiceNow request, and sending confirmation via email.

naftiko: '0.5'
info:
  label: Customer Account Closure Orchestrator
  description: Processes account closure by validating balances in Snowflake, creating a ServiceNow request, and sending confirmation via email.
  tags:
  - banking
  - snowflake
  - servicenow
  - email
capability:
  exposes:
  - type: mcp
    namespace: customer-account-closure
    port: 8080
    tools:
    - name: customer-account-closure
      description: Processes account closure by validating balances in Snowflake.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Customer Account Closure for {{entity_id}}
      - name: send-email
        type: call
        call: email.send-message
        with:
          to: team@capitalone.com
          subject: Customer Account Closure
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://capitalone.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
      - name: run-analysis
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: email
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.graph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → customer-account-closure-orchestrator.yml

Queries Palo Alto Networks for firewall rules modified in the last 24 hours, cross-references with ServiceNow approved changes, and flags unauthorized modifications.

naftiko: '0.5'
info:
  label: Palo Alto Firewall Policy Audit
  description: Queries Palo Alto Networks for firewall rules modified in the last 24 hours, cross-references with ServiceNow approved changes, and flags unauthorized modifications.
  tags:
  - security
  - palo-alto-networks
  - servicenow
  - compliance
  - audit
capability:
  exposes:
  - type: mcp
    namespace: security-audit
    port: 8080
    tools:
    - name: audit-firewall-policy-changes
      description: Retrieve recent Palo Alto firewall rule changes and compare against ServiceNow approved change requests. Create a ServiceNow security incident for any unauthorized modifications.
      inputParameters:
      - name: hours_back
        in: body
        type: integer
        description: Number of hours to look back for firewall rule changes.
      steps:
      - name: get-fw-changes
        type: call
        call: paloalto-audit.get-config-audit
        with:
          hoursBack: '{{hours_back}}'
      - name: check-change-approval
        type: call
        call: servicenow-audit.get-approved-changes
        with:
          timeWindow: '{{hours_back}}'
      - name: create-security-incident
        type: call
        call: servicenow-si.create-security-incident
        with:
          short_description: Unauthorized firewall change detected
          description: Firewall rule {{get-fw-changes.ruleName}} modified without matching approved change.
          category: Security
          urgency: '1'
  consumes:
  - type: http
    namespace: paloalto-audit
    baseUri: https://capitalone-pa.example.com/restapi/v10.1
    authentication:
      type: apikey
      key: X-PAN-KEY
      value: $secrets.paloalto_api_key
      placement: header
    resources:
    - name: config-audit
      path: /Objects/SecurityRules
      inputParameters:
      - name: hoursBack
        in: query
      operations:
      - name: get-config-audit
        method: GET
  - type: http
    namespace: servicenow-audit
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_pass
    resources:
    - name: approved-changes
      path: /table/change_request
      inputParameters:
      - name: timeWindow
        in: query
      - name: state
        in: query
      operations:
      - name: get-approved-changes
        method: GET
  - type: http
    namespace: servicenow-si
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_pass
    resources:
    - name: security-incident
      path: /table/sn_si_incident
      inputParameters:
      - name: short_description
        in: body
      - name: description
        in: body
      - name: category
        in: body
      - name: urgency
        in: body
      operations:
      - name: create-security-incident
        method: POST
Open in Framework → View in Fleet → palo-alto-firewall-policy-audit.yml

Queries Splunk for fraud detection events matching a transaction pattern.

naftiko: '0.5'
info:
  label: Splunk Fraud Event Lookup
  description: Queries Splunk for fraud detection events matching a transaction pattern.
  tags:
  - security
  - splunk
capability:
  exposes:
  - type: mcp
    namespace: fraud-events
    port: 8080
    tools:
    - name: search-fraud-events
      description: Search Splunk for fraud events.
      inputParameters:
      - name: transaction_pattern
        in: body
        type: string
        description: Transaction pattern query.
      call: splunk.search-events
      with:
        query: '{{transaction_pattern}}'
      outputParameters:
      - name: event_count
        type: number
        mapping: $.results.length
      - name: risk_level
        type: string
        mapping: $.results[0].risk_level
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.capitalone.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search
      path: /search/jobs/export
      operations:
      - name: search-events
        method: GET
Open in Framework → View in Fleet → splunk-fraud-event-lookup.yml

Collects Datadog service metrics, validates SLOs, and publishes health report to Confluence.

naftiko: '0.5'
info:
  label: Microservice Health Dashboard Orchestrator
  description: Collects Datadog service metrics, validates SLOs, and publishes health report to Confluence.
  tags:
  - observability
  - datadog
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: microservice-health-dashboard
    port: 8080
    tools:
    - name: microservice-health-dashboard
      description: Collects Datadog service metrics.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: check-metrics
        type: call
        call: datadog.get-monitors
        with:
          entity_id: '{{entity_id}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space_key: OPS
          title: Microservice Health Dashboard
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor
      operations:
      - name: get-monitors
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://capitalone.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → microservice-health-dashboard-orchestrator.yml

Initiates DR test, validates recovery metrics, and publishes test results to Confluence.

naftiko: '0.5'
info:
  label: Disaster Recovery Test Orchestrator
  description: Initiates DR test, validates recovery metrics, and publishes test results to Confluence.
  tags:
  - infrastructure
  - servicenow
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: disaster-recovery-test
    port: 8080
    tools:
    - name: disaster-recovery-test
      description: Initiates DR test.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Disaster Recovery Test for {{entity_id}}
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space_key: OPS
          title: Disaster Recovery Test
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://capitalone.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → disaster-recovery-test-orchestrator.yml

Retrieves credit risk score for a customer segment from Snowflake.

naftiko: '0.5'
info:
  label: Snowflake Credit Risk Score Lookup
  description: Retrieves credit risk score for a customer segment from Snowflake.
  tags:
  - risk
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: credit-risk
    port: 8080
    tools:
    - name: get-risk-score
      description: Look up credit risk score by customer segment.
      inputParameters:
      - name: segment_id
        in: body
        type: string
        description: Customer segment ID.
      call: snowflake.run-query
      with:
        segment_id: '{{segment_id}}'
      outputParameters:
      - name: risk_score
        type: number
        mapping: $.data[0][0]
      - name: confidence
        type: number
        mapping: $.data[0][1]
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://capitalone.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
      - name: run-analysis
        method: POST
Open in Framework → View in Fleet → snowflake-credit-risk-score-lookup.yml

When a new job requisition is opened in Workday, automatically posts the role to LinkedIn Jobs to accelerate talent sourcing.

naftiko: '0.5'
info:
  label: Recruiting Pipeline to LinkedIn Job Post
  description: When a new job requisition is opened in Workday, automatically posts the role to LinkedIn Jobs to accelerate talent sourcing.
  tags:
  - hr
  - recruiting
  - workday
  - linkedin
capability:
  exposes:
  - type: mcp
    namespace: recruiting
    port: 8080
    tools:
    - name: publish-job-to-linkedin
      description: Given a Workday job requisition ID, fetch the job details and post the opening to LinkedIn Jobs. Invoke when a new Capital One requisition needs external sourcing.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The Workday job requisition ID.
      steps:
      - name: get-requisition
        type: call
        call: workday-req.get-job-requisition
        with:
          requisitionId: '{{requisition_id}}'
      - name: post-linkedin-job
        type: call
        call: linkedin.create-job-posting
        with:
          title: '{{get-requisition.title}}'
          description: '{{get-requisition.description}}'
          location: '{{get-requisition.location}}'
          company: Capital One
  consumes:
  - type: http
    namespace: workday-req
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: job-requisition
      path: /jobRequisitions/{requisitionId}
      inputParameters:
      - name: requisitionId
        in: path
      operations:
      - name: get-job-requisition
        method: GET
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: job-posting
      path: /jobPostings
      inputParameters:
      - name: title
        in: body
      - name: description
        in: body
      - name: location
        in: body
      - name: company
        in: body
      operations:
      - name: create-job-posting
        method: POST
Open in Framework → View in Fleet → recruiting-pipeline-to-linkedin-job-post.yml

Uses Anthropic to summarize new regulatory guidance documents stored in SharePoint and publishes a digest to a Microsoft Teams compliance channel.

naftiko: '0.5'
info:
  label: Regulatory Compliance Document Summarizer
  description: Uses Anthropic to summarize new regulatory guidance documents stored in SharePoint and publishes a digest to a Microsoft Teams compliance channel.
  tags:
  - ai
  - compliance
  - anthropic
  - sharepoint
  - microsoft-teams
  - financial-services
capability:
  exposes:
  - type: mcp
    namespace: compliance-ai
    port: 8080
    tools:
    - name: summarize-regulatory-document
      description: Given a SharePoint document ID containing regulatory guidance, fetch the document text, send it to Anthropic for summarization, and post the summary to a Teams compliance channel. Use when new regulatory documents need rapid review.
      inputParameters:
      - name: document_id
        in: body
        type: string
        description: The SharePoint document ID to summarize.
      - name: teams_channel_id
        in: body
        type: string
        description: The Microsoft Teams channel ID for posting the compliance summary.
      steps:
      - name: get-document
        type: call
        call: sharepoint.get-file-content
        with:
          documentId: '{{document_id}}'
      - name: summarize-document
        type: call
        call: anthropic-comp.create-message
        with:
          model: claude-3-5-sonnet-20241022
          max_tokens: 800
          messages: '[{"role": "user", "content": "Summarize this regulatory document for a compliance officer: {{get-document.content}}"}]'
      - name: post-to-teams
        type: call
        call: msteams-comp.post-channel-message
        with:
          channelId: '{{teams_channel_id}}'
          message: 'Regulatory Summary: {{summarize-document.content}}'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: file-content
      path: /sites/root/drive/items/{documentId}/content
      inputParameters:
      - name: documentId
        in: path
      operations:
      - name: get-file-content
        method: GET
  - type: http
    namespace: anthropic-comp
    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
      inputParameters:
      - name: model
        in: body
      - name: max_tokens
        in: body
      - name: messages
        in: body
      operations:
      - name: create-message
        method: POST
  - type: http
    namespace: msteams-comp
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-message
      path: /teams/{channelId}/channels/{channelId}/messages
      inputParameters:
      - name: channelId
        in: path
      - name: message
        in: body
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → regulatory-compliance-document-summarizer.yml

Aggregates customer feedback, runs sentiment analysis in Databricks, and publishes insights to Confluence.

naftiko: '0.5'
info:
  label: Customer Feedback Analysis Orchestrator
  description: Aggregates customer feedback, runs sentiment analysis in Databricks, and publishes insights to Confluence.
  tags:
  - analytics
  - databricks
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: customer-feedback-analysis
    port: 8080
    tools:
    - name: customer-feedback-analysis
      description: Aggregates customer feedback.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: run-model
        type: call
        call: databricks.run-job
        with:
          entity_id: '{{entity_id}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space_key: OPS
          title: Customer Feedback Analysis
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://capitalone.cloud.databricks.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://capitalone.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → customer-feedback-analysis-orchestrator.yml

Retrieves MFA enrollment status for a user in Okta.

naftiko: '0.5'
info:
  label: Okta MFA Status Lookup
  description: Retrieves MFA enrollment status for a user in Okta.
  tags:
  - identity
  - okta
capability:
  exposes:
  - type: mcp
    namespace: mfa-status
    port: 8080
    tools:
    - name: get-mfa-status
      description: Look up Okta MFA enrollment status.
      inputParameters:
      - name: user_email
        in: body
        type: string
        description: User email address.
      call: okta.get-user-factors
      with:
        email: '{{user_email}}'
      outputParameters:
      - name: factor_count
        type: number
        mapping: $.length
      - name: enrolled
        type: string
        mapping: $.enrolled
  consumes:
  - type: http
    namespace: okta
    baseUri: https://capitalone.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: factors
      path: /users/{{email}}/factors
      inputParameters:
      - name: email
        in: path
      operations:
      - name: get-user-factors
        method: GET
Open in Framework → View in Fleet → okta-mfa-status-lookup.yml

Syncs communication preferences between Salesforce and marketing platforms, validates consent, and logs in ServiceNow.

naftiko: '0.5'
info:
  label: Customer Communication Preference Orchestrator
  description: Syncs communication preferences between Salesforce and marketing platforms, validates consent, and logs in ServiceNow.
  tags:
  - marketing
  - salesforce
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: customer-communication-prefere
    port: 8080
    tools:
    - name: customer-communication-preference
      description: Syncs communication preferences between Salesforce and marketing platforms.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Customer Communication Preference for {{entity_id}}
      - name: update-sf
        type: call
        call: salesforce.update-opp
        with:
          entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://capitalone.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: objects
      path: /sobjects
      operations:
      - name: get-lead
        method: GET
      - name: create-lead
        method: POST
      - name: update-opp
        method: PATCH
Open in Framework → View in Fleet → customer-communication-preference-orchestrator.yml

Runs automated data quality checks on a Snowflake table and opens a Jira ticket if row count anomalies or null rate violations are detected.

naftiko: '0.5'
info:
  label: Snowflake Data Quality Monitor
  description: Runs automated data quality checks on a Snowflake table and opens a Jira ticket if row count anomalies or null rate violations are detected.
  tags:
  - data
  - snowflake
  - jira
  - data-quality
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: run-snowflake-quality-check
      description: Given a Snowflake table name and quality thresholds, execute a row count and null-rate check and create a Jira issue if thresholds are breached. Use for daily data pipeline health monitoring.
      inputParameters:
      - name: table_name
        in: body
        type: string
        description: The fully qualified Snowflake table name (database.schema.table).
      - name: min_row_count
        in: body
        type: integer
        description: Minimum expected row count; alert if actual is lower.
      - name: max_null_rate
        in: body
        type: number
        description: Maximum acceptable null rate as a decimal (0.0–1.0).
      steps:
      - name: check-row-count
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT COUNT(*) AS row_count FROM {{table_name}}
      - name: check-null-rate
        type: call
        call: snowflake-null.execute-statement
        with:
          statement: SELECT AVG(CASE WHEN key_col IS NULL THEN 1.0 ELSE 0.0 END) AS null_rate FROM {{table_name}}
      - name: create-jira-issue
        type: call
        call: jira-dq.create-issue
        with:
          summary: Data quality violation in {{table_name}}
          description: 'Row count: {{check-row-count.row_count}}, null rate: {{check-null-rate.null_rate}}'
          project: DATA
          issuetype: Bug
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://capitalone.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statement
      path: /statements
      inputParameters:
      - name: statement
        in: body
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: snowflake-null
    baseUri: https://capitalone.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statement
      path: /statements
      inputParameters:
      - name: statement
        in: body
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: jira-dq
    baseUri: https://capitalone.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issue
      path: /issue
      inputParameters:
      - name: summary
        in: body
      - name: description
        in: body
      - name: project
        in: body
      - name: issuetype
        in: body
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → snowflake-data-quality-monitor.yml

Queries Informatica Intelligent Cloud Services for failed mapping tasks in a given time window and creates Jira tickets for each failure requiring investigation.

naftiko: '0.5'
info:
  label: Informatica Data Pipeline Health Check
  description: Queries Informatica Intelligent Cloud Services for failed mapping tasks in a given time window and creates Jira tickets for each failure requiring investigation.
  tags:
  - data
  - informatica
  - jira
  - data-pipeline
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: data-pipeline-ops
    port: 8080
    tools:
    - name: check-informatica-pipeline-health
      description: Given a time window in hours, list failed Informatica mapping tasks and create a Jira ticket for each failure. Use for daily ETL health reviews.
      inputParameters:
      - name: hours_back
        in: body
        type: integer
        description: Number of hours back to look for failed tasks.
      - name: project_key
        in: body
        type: string
        description: Jira project key for creating failure tickets.
      steps:
      - name: list-failed-tasks
        type: call
        call: informatica.list-activity-log
        with:
          status: FAILED
          hoursBack: '{{hours_back}}'
      - name: create-jira-ticket
        type: call
        call: jira-etl.create-issue
        with:
          summary: 'Informatica task failure: {{list-failed-tasks.objectName}}'
          description: Task {{list-failed-tasks.objectName}} failed at {{list-failed-tasks.startTime}}.
          project: '{{project_key}}'
          issuetype: Bug
  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
      inputParameters:
      - name: status
        in: query
      - name: hoursBack
        in: query
      operations:
      - name: list-activity-log
        method: GET
  - type: http
    namespace: jira-etl
    baseUri: https://capitalone.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issue
      path: /issue
      inputParameters:
      - name: summary
        in: body
      - name: description
        in: body
      - name: project
        in: body
      - name: issuetype
        in: body
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → informatica-data-pipeline-health-check.yml

Queries Boomi AtomSphere for failed integration process executions in the last 24 hours and creates Jira tickets for each failure requiring investigation.

naftiko: '0.5'
info:
  label: Boomi Integration Health Check
  description: Queries Boomi AtomSphere for failed integration process executions in the last 24 hours and creates Jira tickets for each failure requiring investigation.
  tags:
  - integration
  - boomi
  - jira
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: integration-ops
    port: 8080
    tools:
    - name: check-boomi-integration-health
      description: Given a Boomi account ID and failure lookback window, list failed process executions and create a Jira ticket for each. Use for daily integration monitoring and SLA tracking.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Boomi AtomSphere account ID.
      - name: hours_back
        in: body
        type: integer
        description: Number of hours back to check for failed executions.
      steps:
      - name: list-failed-executions
        type: call
        call: boomi.list-process-executions
        with:
          accountId: '{{account_id}}'
          status: ERROR
          hoursBack: '{{hours_back}}'
      - name: create-jira-ticket
        type: call
        call: jira-int.create-issue
        with:
          summary: 'Boomi integration failure: {{list-failed-executions.processName}}'
          description: Process {{list-failed-executions.processName}} failed at {{list-failed-executions.executionTime}}.
          project: INTEG
          issuetype: Bug
  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: process-executions
      path: /{accountId}/ExecutionRecord/query
      inputParameters:
      - name: accountId
        in: path
      - name: status
        in: body
      - name: hoursBack
        in: body
      operations:
      - name: list-process-executions
        method: POST
  - type: http
    namespace: jira-int
    baseUri: https://capitalone.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issue
      path: /issue
      inputParameters:
      - name: summary
        in: body
      - name: description
        in: body
      - name: project
        in: body
      - name: issuetype
        in: body
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → boomi-integration-health-check.yml

Manages feature flags by evaluating Datadog metrics, updating configurations, and notifying product teams.

naftiko: '0.5'
info:
  label: Digital Banking Feature Flag Orchestrator
  description: Manages feature flags by evaluating Datadog metrics, updating configurations, and notifying product teams.
  tags:
  - product
  - datadog
  - slack
capability:
  exposes:
  - type: mcp
    namespace: digital-banking-feature-flag
    port: 8080
    tools:
    - name: digital-banking-feature-flag
      description: Manages feature flags by evaluating Datadog metrics.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: check-metrics
        type: call
        call: datadog.get-monitors
        with:
          entity_id: '{{entity_id}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#ops'
          text: Digital Banking Feature Flag processed for {{entity_id}}
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor
      operations:
      - name: get-monitors
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → digital-banking-feature-flag-orchestrator.yml

Evaluates third-party risk using Snowflake data, creates assessment records in ServiceNow, and notifies stakeholders.

naftiko: '0.5'
info:
  label: Third-Party Risk Assessment Orchestrator
  description: Evaluates third-party risk using Snowflake data, creates assessment records in ServiceNow, and notifies stakeholders.
  tags:
  - risk
  - snowflake
  - servicenow
  - email
capability:
  exposes:
  - type: mcp
    namespace: third-party-risk-assessment
    port: 8080
    tools:
    - name: third-party-risk-assessment
      description: Evaluates third-party risk using Snowflake data.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Third-Party Risk Assessment for {{entity_id}}
      - name: send-email
        type: call
        call: email.send-message
        with:
          to: team@capitalone.com
          subject: Third-Party Risk Assessment
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://capitalone.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
      - name: run-analysis
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: email
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.graph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → third-party-risk-assessment-orchestrator.yml

Queries AWS Cost Explorer for spend anomalies exceeding a daily threshold and notifies the FinOps team via Microsoft Teams with a Jira cost review ticket.

naftiko: '0.5'
info:
  label: AWS Cloud Cost Anomaly Responder
  description: Queries AWS Cost Explorer for spend anomalies exceeding a daily threshold and notifies the FinOps team via Microsoft Teams with a Jira cost review ticket.
  tags:
  - cloud
  - aws
  - finops
  - cost-management
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cloud-finops
    port: 8080
    tools:
    - name: respond-to-aws-cost-anomaly
      description: Given a cost threshold in USD and a date range, check AWS Cost Explorer for anomalies and create a Jira ticket and Teams alert if thresholds are exceeded. Use for daily FinOps monitoring.
      inputParameters:
      - name: threshold_usd
        in: body
        type: number
        description: Daily spend threshold in USD that triggers an alert when exceeded.
      - name: start_date
        in: body
        type: string
        description: Start date for cost query in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: End date for cost query in YYYY-MM-DD format.
      - name: finops_email
        in: body
        type: string
        description: FinOps team email for Teams notification.
      steps:
      - name: get-cost-anomaly
        type: call
        call: aws-cost.get-cost-and-usage
        with:
          startDate: '{{start_date}}'
          endDate: '{{end_date}}'
      - name: create-jira-cost-ticket
        type: call
        call: jira-finops.create-issue
        with:
          summary: 'AWS cost anomaly: ${{get-cost-anomaly.totalCost}} exceeds threshold ${{threshold_usd}}'
          description: Cost spike detected between {{start_date}} and {{end_date}}.
          project: FINOPS
          issuetype: Task
      - name: notify-finops
        type: call
        call: msteams-cost.send-message
        with:
          recipient: '{{finops_email}}'
          message: 'AWS cost anomaly detected: ${{get-cost-anomaly.totalCost}}. Jira: {{create-jira-cost-ticket.issueKey}}.'
  consumes:
  - type: http
    namespace: aws-cost
    baseUri: https://ce.us-east-1.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_cost_token
    resources:
    - name: cost-and-usage
      path: /getCostAndUsage
      inputParameters:
      - name: startDate
        in: body
      - name: endDate
        in: body
      operations:
      - name: get-cost-and-usage
        method: POST
  - type: http
    namespace: jira-finops
    baseUri: https://capitalone.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issue
      path: /issue
      inputParameters:
      - name: summary
        in: body
      - name: description
        in: body
      - name: project
        in: body
      - name: issuetype
        in: body
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams-cost
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /users/{recipient}/sendMail
      inputParameters:
      - name: recipient
        in: path
      - name: message
        in: body
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → aws-cloud-cost-anomaly-responder.yml

Orchestrates KYC verification by pulling data from Snowflake, running identity checks, and updating Salesforce.

naftiko: '0.5'
info:
  label: Customer Onboarding KYC Orchestrator
  description: Orchestrates KYC verification by pulling data from Snowflake, running identity checks, and updating Salesforce.
  tags:
  - banking
  - snowflake
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: customer-onboarding-kyc
    port: 8080
    tools:
    - name: customer-onboarding-kyc
      description: Orchestrates KYC verification by pulling data from Snowflake.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
      - name: update-sf
        type: call
        call: salesforce.update-opp
        with:
          entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://capitalone.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
      - name: run-analysis
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://capitalone.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: objects
      path: /sobjects
      operations:
      - name: get-lead
        method: GET
      - name: create-lead
        method: POST
      - name: update-opp
        method: PATCH
Open in Framework → View in Fleet → customer-onboarding-kyc-orchestrator.yml

Monitors transaction patterns via Datadog, triggers risk scoring in Databricks, and alerts fraud ops.

naftiko: '0.5'
info:
  label: Real-Time Transaction Monitoring Orchestrator
  description: Monitors transaction patterns via Datadog, triggers risk scoring in Databricks, and alerts fraud ops.
  tags:
  - fraud
  - datadog
  - databricks
  - slack
capability:
  exposes:
  - type: mcp
    namespace: real-time-transaction-monitori
    port: 8080
    tools:
    - name: real-time-transaction-monitoring
      description: Monitors transaction patterns via Datadog.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: run-model
        type: call
        call: databricks.run-job
        with:
          entity_id: '{{entity_id}}'
      - name: check-metrics
        type: call
        call: datadog.get-monitors
        with:
          entity_id: '{{entity_id}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#ops'
          text: Real-Time Transaction Monitoring processed for {{entity_id}}
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://capitalone.cloud.databricks.com/api/2.0
    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: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor
      operations:
      - name: get-monitors
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → real-time-transaction-monitoring-orchestrator.yml

Enriches customer profiles by aggregating data from Snowflake, Salesforce, and publishing to Databricks feature store.

naftiko: '0.5'
info:
  label: Customer 360 Enrichment Orchestrator
  description: Enriches customer profiles by aggregating data from Snowflake, Salesforce, and publishing to Databricks feature store.
  tags:
  - data
  - snowflake
  - salesforce
  - databricks
capability:
  exposes:
  - type: mcp
    namespace: customer-360-enrichment
    port: 8080
    tools:
    - name: customer-360-enrichment
      description: Enriches customer profiles by aggregating data from Snowflake.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
      - name: run-model
        type: call
        call: databricks.run-job
        with:
          entity_id: '{{entity_id}}'
      - name: update-sf
        type: call
        call: salesforce.update-opp
        with:
          entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://capitalone.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
      - name: run-analysis
        method: POST
  - type: http
    namespace: databricks
    baseUri: https://capitalone.cloud.databricks.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://capitalone.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: objects
      path: /sobjects
      operations:
      - name: get-lead
        method: GET
      - name: create-lead
        method: POST
      - name: update-opp
        method: PATCH
Open in Framework → View in Fleet → customer-360-enrichment-orchestrator.yml

Collects SOC2 compliance evidence from ServiceNow, GitHub, and Okta, then publishes to Confluence.

naftiko: '0.5'
info:
  label: SOC2 Evidence Collection Orchestrator
  description: Collects SOC2 compliance evidence from ServiceNow, GitHub, and Okta, then publishes to Confluence.
  tags:
  - compliance
  - servicenow
  - github
  - okta
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: soc2-evidence-collection
    port: 8080
    tools:
    - name: soc2-evidence-collection
      description: Collects SOC2 compliance evidence from ServiceNow.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: SOC2 Evidence Collection for {{entity_id}}
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space_key: OPS
          title: SOC2 Evidence Collection
      - name: check-access
        type: call
        call: okta.get-user
        with:
          entity_id: '{{entity_id}}'
      - name: check-repo
        type: call
        call: github.get-alerts
        with:
          entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://capitalone.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: okta
    baseUri: https://capitalone.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: users
      path: /users
      operations:
      - name: get-user
        method: GET
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: repos
      path: /repos
      operations:
      - name: get-alerts
        method: GET
Open in Framework → View in Fleet → soc2-evidence-collection-orchestrator.yml

Retrieves AWS cost data, allocates to business units in Snowflake, and publishes reports to Google Sheets.

naftiko: '0.5'
info:
  label: AWS Cost Allocation Orchestrator
  description: Retrieves AWS cost data, allocates to business units in Snowflake, and publishes reports to Google Sheets.
  tags:
  - finops
  - aws
  - snowflake
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: aws-cost-allocation
    port: 8080
    tools:
    - name: aws-cost-allocation
      description: Retrieves AWS cost data.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
      - name: get-resources
        type: call
        call: aws.list-resources
        with:
          entity_id: '{{entity_id}}'
      - name: update-sheet
        type: call
        call: sheets.update-spreadsheet
        with:
          spreadsheet_id: report
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://capitalone.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
      - name: run-analysis
        method: POST
  - type: http
    namespace: aws
    baseUri: https://ec2.us-east-1.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_token
    resources:
    - name: resources
      path: /
      operations:
      - name: list-resources
        method: GET
  - type: http
    namespace: sheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:batchUpdate
      operations:
      - name: update-spreadsheet
        method: POST
Open in Framework → View in Fleet → aws-cost-allocation-orchestrator.yml

Aggregates campaign data from Google Ads, analyzes in Snowflake, and publishes insights to Confluence.

naftiko: '0.5'
info:
  label: Marketing Campaign Performance Orchestrator
  description: Aggregates campaign data from Google Ads, analyzes in Snowflake, and publishes insights to Confluence.
  tags:
  - marketing
  - google-ads
  - snowflake
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: marketing-campaign-performance
    port: 8080
    tools:
    - name: marketing-campaign-performance
      description: Aggregates campaign data from Google Ads.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space_key: OPS
          title: Marketing Campaign Performance
      - name: get-campaign
        type: call
        call: google-ads.get-campaign
        with:
          entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://capitalone.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
      - name: run-analysis
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://capitalone.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: google-ads
    baseUri: https://googleads.googleapis.com/v14
    authentication:
      type: bearer
      token: $secrets.google_ads_token
    resources:
    - name: campaigns
      path: /customers/{{customer_id}}/campaigns
      operations:
      - name: get-campaign
        method: GET
Open in Framework → View in Fleet → marketing-campaign-performance-orchestrator.yml

Aggregates KPIs from Snowflake, creates executive slides, and distributes via email.

naftiko: '0.5'
info:
  label: Quarterly Business Review Orchestrator
  description: Aggregates KPIs from Snowflake, creates executive slides, and distributes via email.
  tags:
  - analytics
  - snowflake
  - email
capability:
  exposes:
  - type: mcp
    namespace: quarterly-business-review
    port: 8080
    tools:
    - name: quarterly-business-review
      description: Aggregates KPIs from Snowflake.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
      - name: send-email
        type: call
        call: email.send-message
        with:
          to: team@capitalone.com
          subject: Quarterly Business Review
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://capitalone.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
      - name: run-analysis
        method: POST
  - type: http
    namespace: email
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.graph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → quarterly-business-review-orchestrator.yml

Retrieves browser performance metrics from New Relic.

naftiko: '0.5'
info:
  label: New Relic Browser Performance Lookup
  description: Retrieves browser performance metrics from New Relic.
  tags:
  - observability
  - new-relic
capability:
  exposes:
  - type: mcp
    namespace: browser-perf
    port: 8080
    tools:
    - name: get-browser-metrics
      description: Look up New Relic browser performance.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: New Relic browser app ID.
      call: newrelic.get-browser-app
      with:
        app_id: '{{app_id}}'
      outputParameters:
      - name: page_load_time
        type: number
        mapping: $.browser_application.browser_summary.page_load_time
      - name: ajax_response_time
        type: number
        mapping: $.browser_application.browser_summary.ajax_response_time
  consumes:
  - type: http
    namespace: newrelic
    baseUri: https://api.newrelic.com/v2
    authentication:
      type: apikey
      key: X-Api-Key
      value: $secrets.newrelic_api_key
      placement: header
    resources:
    - name: browser
      path: /browser_applications/{{app_id}}.json
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: get-browser-app
        method: GET
Open in Framework → View in Fleet → new-relic-browser-performance-lookup.yml

Rotates application secrets, updates configurations, and logs rotation events in ServiceNow.

naftiko: '0.5'
info:
  label: Secrets Rotation Orchestrator
  description: Rotates application secrets, updates configurations, and logs rotation events in ServiceNow.
  tags:
  - security
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: secrets-rotation
    port: 8080
    tools:
    - name: secrets-rotation
      description: Rotates application secrets.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Secrets Rotation for {{entity_id}}
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
Open in Framework → View in Fleet → secrets-rotation-orchestrator.yml

Maps application dependencies from ServiceNow CMDB, validates in Datadog, and publishes to Confluence.

naftiko: '0.5'
info:
  label: Application Dependency Mapping Orchestrator
  description: Maps application dependencies from ServiceNow CMDB, validates in Datadog, and publishes to Confluence.
  tags:
  - infrastructure
  - servicenow
  - datadog
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: application-dependency-mapping
    port: 8080
    tools:
    - name: application-dependency-mapping
      description: Maps application dependencies from ServiceNow CMDB.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: check-metrics
        type: call
        call: datadog.get-monitors
        with:
          entity_id: '{{entity_id}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Application Dependency Mapping for {{entity_id}}
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space_key: OPS
          title: Application Dependency Mapping
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor
      operations:
      - name: get-monitors
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://capitalone.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → application-dependency-mapping-orchestrator.yml

Retrieves budget data from Oracle Hyperion for a cost center.

naftiko: '0.5'
info:
  label: Oracle Hyperion Budget Lookup
  description: Retrieves budget data from Oracle Hyperion for a cost center.
  tags:
  - finance
  - oracle-hyperion
capability:
  exposes:
  - type: mcp
    namespace: budget-data
    port: 8080
    tools:
    - name: get-budget-data
      description: Look up Oracle Hyperion budget for a cost center.
      inputParameters:
      - name: cost_center
        in: body
        type: string
        description: Cost center code.
      call: hyperion.get-budget
      with:
        cost_center: '{{cost_center}}'
      outputParameters:
      - name: budget_amount
        type: number
        mapping: $.data.budget
      - name: actual_amount
        type: number
        mapping: $.data.actual
  consumes:
  - type: http
    namespace: hyperion
    baseUri: https://hyperion.capitalone.com/api/v1
    authentication:
      type: bearer
      token: $secrets.hyperion_token
    resources:
    - name: budgets
      path: /planning/budget/{{cost_center}}
      inputParameters:
      - name: cost_center
        in: path
      operations:
      - name: get-budget
        method: GET
Open in Framework → View in Fleet → oracle-hyperion-budget-lookup.yml

Retrieves the execution log from a Databricks credit risk scoring job and publishes a structured audit record to a Confluence model governance page.

naftiko: '0.5'
info:
  label: Credit Risk Model Audit Log to Confluence
  description: Retrieves the execution log from a Databricks credit risk scoring job and publishes a structured audit record to a Confluence model governance page.
  tags:
  - compliance
  - databricks
  - confluence
  - model-governance
  - financial-services
capability:
  exposes:
  - type: mcp
    namespace: model-governance
    port: 8080
    tools:
    - name: publish-model-audit-log
      description: Given a Databricks job run ID and Confluence page ID, fetch the run execution details and append an audit record to the model governance page. Use for monthly model risk management reporting.
      inputParameters:
      - name: run_id
        in: body
        type: string
        description: The Databricks job run ID for the credit risk model execution.
      - name: confluence_page_id
        in: body
        type: string
        description: The Confluence page ID to append the audit record to.
      steps:
      - name: get-run-details
        type: call
        call: databricks-audit.get-run
        with:
          runId: '{{run_id}}'
      - name: update-confluence-page
        type: call
        call: confluence.update-page
        with:
          pageId: '{{confluence_page_id}}'
          body: Run {{run_id}} completed at {{get-run-details.endTime}} with status {{get-run-details.state.resultState}}.
  consumes:
  - type: http
    namespace: databricks-audit
    baseUri: https://adb-capitalone.azuredatabricks.net/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: run
      path: /jobs/runs/get
      inputParameters:
      - name: runId
        in: query
      operations:
      - name: get-run
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://capitalone.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: page
      path: /content/{pageId}
      inputParameters:
      - name: pageId
        in: path
      - name: body
        in: body
      operations:
      - name: update-page
        method: PUT
Open in Framework → View in Fleet → credit-risk-model-audit-log-to-confluence.yml

Queries Jira for completed sprint stories across a project, computes velocity, and posts a summary to a Microsoft Teams engineering channel.

naftiko: '0.5'
info:
  label: Jira Sprint Velocity Report
  description: Queries Jira for completed sprint stories across a project, computes velocity, and posts a summary to a Microsoft Teams engineering channel.
  tags:
  - agile
  - jira
  - microsoft-teams
  - reporting
  - engineering
capability:
  exposes:
  - type: mcp
    namespace: agile-reporting
    port: 8080
    tools:
    - name: publish-sprint-velocity-report
      description: Given a Jira project key and board ID, retrieve the last completed sprint's story points and post a velocity digest to Teams. Use for sprint review preparation or engineering metrics.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The Jira project key (e.g., CAPTECH).
      - name: board_id
        in: body
        type: string
        description: The Jira board ID for sprint data.
      - name: teams_channel
        in: body
        type: string
        description: The Teams channel email or ID for the engineering digest.
      steps:
      - name: get-sprint-data
        type: call
        call: jira-sprint.get-sprint-report
        with:
          boardId: '{{board_id}}'
          state: closed
      - name: post-velocity
        type: call
        call: msteams-agile.send-message
        with:
          recipient: '{{teams_channel}}'
          message: 'Sprint {{get-sprint-data.sprintName}} velocity: {{get-sprint-data.completedPoints}} story points completed.'
  consumes:
  - type: http
    namespace: jira-sprint
    baseUri: https://capitalone.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: sprint-report
      path: /board/{boardId}/sprint
      inputParameters:
      - name: boardId
        in: path
      - name: state
        in: query
      operations:
      - name: get-sprint-report
        method: GET
  - type: http
    namespace: msteams-agile
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /users/{recipient}/sendMail
      inputParameters:
      - name: recipient
        in: path
      - name: message
        in: body
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → jira-sprint-velocity-report.yml

Checks the latest Databricks job run status for a given ML pipeline and opens a ServiceNow incident if the run failed or exceeded the SLA window.

naftiko: '0.5'
info:
  label: Databricks ML Pipeline Monitor
  description: Checks the latest Databricks job run status for a given ML pipeline and opens a ServiceNow incident if the run failed or exceeded the SLA window.
  tags:
  - data
  - databricks
  - servicenow
  - ml-ops
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: mlops
    port: 8080
    tools:
    - name: monitor-databricks-pipeline
      description: Given a Databricks job ID and SLA window in minutes, check the latest run status and open a ServiceNow incident if it failed or ran over SLA. Invoke for scheduled ML model training jobs.
      inputParameters:
      - name: job_id
        in: body
        type: string
        description: The Databricks job ID to monitor.
      - name: sla_minutes
        in: body
        type: integer
        description: Maximum expected run duration in minutes before SLA breach.
      steps:
      - name: get-latest-run
        type: call
        call: databricks.get-job-run
        with:
          jobId: '{{job_id}}'
      - name: open-incident
        type: call
        call: servicenow-ml.create-incident
        with:
          short_description: Databricks job {{job_id}} failed or exceeded SLA of {{sla_minutes}} minutes.
          category: Data Engineering
          urgency: '2'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://adb-capitalone.azuredatabricks.net/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: job-run
      path: /jobs/runs/get-latest-by-name
      inputParameters:
      - name: jobId
        in: query
      operations:
      - name: get-job-run
        method: GET
  - type: http
    namespace: servicenow-ml
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_pass
    resources:
    - name: incident
      path: /table/incident
      inputParameters:
      - name: short_description
        in: body
      - name: category
        in: body
      - name: urgency
        in: body
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → databricks-ml-pipeline-monitor.yml

Tracks compliance training completion in Workday, identifies gaps, and creates ServiceNow tickets for overdue items.

naftiko: '0.5'
info:
  label: Compliance Training Tracking Orchestrator
  description: Tracks compliance training completion in Workday, identifies gaps, and creates ServiceNow tickets for overdue items.
  tags:
  - compliance
  - workday
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: compliance-training-tracking
    port: 8080
    tools:
    - name: compliance-training-tracking
      description: Tracks compliance training completion in Workday.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Compliance Training Tracking for {{entity_id}}
      - name: get-worker
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        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: /capitalone/workers
      operations:
      - name: get-worker
        method: GET
Open in Framework → View in Fleet → compliance-training-tracking-orchestrator.yml

Retrieves pipeline execution status from Informatica.

naftiko: '0.5'
info:
  label: Informatica Data Pipeline Status Lookup
  description: Retrieves pipeline execution status from Informatica.
  tags:
  - data
  - informatica
capability:
  exposes:
  - type: mcp
    namespace: data-pipelines
    port: 8080
    tools:
    - name: get-pipeline-status
      description: Look up Informatica pipeline execution status.
      inputParameters:
      - name: pipeline_id
        in: body
        type: string
        description: Informatica pipeline ID.
      call: informatica.get-run
      with:
        pipeline_id: '{{pipeline_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: rows_processed
        type: number
        mapping: $.rowsProcessed
  consumes:
  - type: http
    namespace: informatica
    baseUri: https://dm-us.informaticacloud.com/saas/api/v2
    authentication:
      type: bearer
      token: $secrets.informatica_token
    resources:
    - name: runs
      path: /activity/activityMonitor/{{pipeline_id}}
      inputParameters:
      - name: pipeline_id
        in: path
      operations:
      - name: get-run
        method: GET
Open in Framework → View in Fleet → informatica-data-pipeline-status-lookup.yml

When a new lead is created in Salesforce CRM, automatically enriches the record with firmographic data from ZoomInfo and updates the lead score.

naftiko: '0.5'
info:
  label: Salesforce Lead Enrichment via ZoomInfo
  description: When a new lead is created in Salesforce CRM, automatically enriches the record with firmographic data from ZoomInfo and updates the lead score.
  tags:
  - crm
  - sales
  - salesforce
  - zoominfo
  - lead-enrichment
capability:
  exposes:
  - type: mcp
    namespace: crm-enrichment
    port: 8080
    tools:
    - name: enrich-salesforce-lead
      description: Given a Salesforce lead ID, look up the contact in ZoomInfo and update the CRM record with company size, revenue, and industry data. Invoke when a new lead record lacks firmographic details.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: The Salesforce lead ID to enrich.
      steps:
      - name: get-lead
        type: call
        call: salesforce-read.get-lead
        with:
          leadId: '{{lead_id}}'
      - name: lookup-zoominfo
        type: call
        call: zoominfo.search-contact
        with:
          email: '{{get-lead.email}}'
          company: '{{get-lead.company}}'
      - name: update-lead
        type: call
        call: salesforce-write.update-lead
        with:
          leadId: '{{lead_id}}'
          annualRevenue: '{{lookup-zoominfo.revenue}}'
          numberOfEmployees: '{{lookup-zoominfo.employeeCount}}'
          industry: '{{lookup-zoominfo.industry}}'
  consumes:
  - type: http
    namespace: salesforce-read
    baseUri: https://capitalone.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: lead
      path: /sobjects/Lead/{leadId}
      inputParameters:
      - name: leadId
        in: path
      operations:
      - name: get-lead
        method: GET
  - type: http
    namespace: zoominfo
    baseUri: https://api.zoominfo.com/search
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: contact
      path: /contact
      inputParameters:
      - name: email
        in: body
      - name: company
        in: body
      operations:
      - name: search-contact
        method: POST
  - type: http
    namespace: salesforce-write
    baseUri: https://capitalone.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: lead
      path: /sobjects/Lead/{leadId}
      inputParameters:
      - name: leadId
        in: path
      - name: annualRevenue
        in: body
      - name: numberOfEmployees
        in: body
      - name: industry
        in: body
      operations:
      - name: update-lead
        method: PATCH
Open in Framework → View in Fleet → salesforce-lead-enrichment-via-zoominfo.yml

Retrieves customer profile data from DynamoDB.

naftiko: '0.5'
info:
  label: DynamoDB Customer Profile Lookup
  description: Retrieves customer profile data from DynamoDB.
  tags:
  - data
  - dynamodb
capability:
  exposes:
  - type: mcp
    namespace: customer-data
    port: 8080
    tools:
    - name: get-customer-profile
      description: Look up customer profile from DynamoDB.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: Customer ID.
      call: dynamodb.get-item
      with:
        customer_id: '{{customer_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.Item.name.S
      - name: tier
        type: string
        mapping: $.Item.tier.S
  consumes:
  - type: http
    namespace: dynamodb
    baseUri: https://dynamodb.us-east-1.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_dynamodb_token
    resources:
    - name: items
      path: /
      operations:
      - name: get-item
        method: POST
Open in Framework → View in Fleet → dynamodb-customer-profile-lookup.yml

When a new Salesforce Service Cloud case is opened, uses OpenAI to draft an initial customer response based on the case description and relevant knowledge base articles.

naftiko: '0.5'
info:
  label: OpenAI Customer Support Response Drafter
  description: When a new Salesforce Service Cloud case is opened, uses OpenAI to draft an initial customer response based on the case description and relevant knowledge base articles.
  tags:
  - ai
  - customer-support
  - openai
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: support-ai
    port: 8080
    tools:
    - name: draft-customer-support-response
      description: Given a Salesforce case ID, fetch the case details and use OpenAI to generate a draft customer response. Update the case with the draft for agent review. Use for first-response SLA optimization.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: The Salesforce Service Cloud case ID.
      steps:
      - name: get-case
        type: call
        call: salesforce-case.get-case
        with:
          caseId: '{{case_id}}'
      - name: draft-response
        type: call
        call: openai.create-completion
        with:
          model: gpt-4o
          messages: '[{"role": "system", "content": "You are a Capital One customer support agent."}, {"role": "user", "content": "Draft a professional response to this customer case: {{get-case.description}}"}]'
      - name: update-case
        type: call
        call: salesforce-case-update.update-case
        with:
          caseId: '{{case_id}}'
          internalComments: 'AI Draft: {{draft-response.choices.0.message.content}}'
  consumes:
  - type: http
    namespace: salesforce-case
    baseUri: https://capitalone.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: case
      path: /sobjects/Case/{caseId}
      inputParameters:
      - name: caseId
        in: path
      operations:
      - name: get-case
        method: GET
  - type: http
    namespace: openai
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_api_key
    resources:
    - name: completion
      path: /chat/completions
      inputParameters:
      - name: model
        in: body
      - name: messages
        in: body
      operations:
      - name: create-completion
        method: POST
  - type: http
    namespace: salesforce-case-update
    baseUri: https://capitalone.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: case
      path: /sobjects/Case/{caseId}
      inputParameters:
      - name: caseId
        in: path
      - name: internalComments
        in: body
      operations:
      - name: update-case
        method: PATCH
Open in Framework → View in Fleet → openai-customer-support-response-drafter.yml

When a Priority 1 incident is raised in ServiceNow, enriches the ticket with Datadog monitor details, assigns to the on-call team, and sends a Slack alert to the incident bridge channel.

naftiko: '0.5'
info:
  label: ServiceNow P1 Incident Triage
  description: When a Priority 1 incident is raised in ServiceNow, enriches the ticket with Datadog monitor details, assigns to the on-call team, and sends a Slack alert to the incident bridge channel.
  tags:
  - itsm
  - servicenow
  - datadog
  - slack
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: itsm-ops
    port: 8080
    tools:
    - name: triage-p1-incident
      description: Given a ServiceNow P1 incident number, fetch details, query Datadog for correlated monitor states, and post a Slack alert to the incident bridge channel. Invoke for all Priority 1 incidents.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number (e.g., INC0012345).
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel ID for incident bridge notifications.
      steps:
      - name: get-incident
        type: call
        call: servicenow-p1.get-incident
        with:
          number: '{{incident_number}}'
      - name: get-dd-monitors
        type: call
        call: datadog-p1.get-monitors
        with:
          tags: service:{{get-incident.cmdb_ci}}
      - name: post-slack-alert
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'P1 INCIDENT: {{incident_number}} - {{get-incident.short_description}}. Datadog monitors: {{get-dd-monitors.count}} alerting.'
  consumes:
  - type: http
    namespace: servicenow-p1
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_pass
    resources:
    - name: incident
      path: /table/incident
      inputParameters:
      - name: number
        in: query
      operations:
      - name: get-incident
        method: GET
  - type: http
    namespace: datadog-p1
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor
      inputParameters:
      - name: tags
        in: query
      operations:
      - name: get-monitors
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      inputParameters:
      - name: channel
        in: body
      - name: text
        in: body
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-p1-incident-triage.yml

Runs PCI compliance scans, logs findings in ServiceNow, and creates Jira remediation tickets.

naftiko: '0.5'
info:
  label: PCI Compliance Scan Orchestrator
  description: Runs PCI compliance scans, logs findings in ServiceNow, and creates Jira remediation tickets.
  tags:
  - compliance
  - servicenow
  - jira
capability:
  exposes:
  - type: mcp
    namespace: pci-compliance-scan
    port: 8080
    tools:
    - name: pci-compliance-scan
      description: Runs PCI compliance scans.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: PCI Compliance Scan for {{entity_id}}
      - name: create-issue
        type: call
        call: jira.create-issue
        with:
          project: OPS
          summary: PCI Compliance Scan - {{entity_id}}
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: jira
    baseUri: https://capitalone.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → pci-compliance-scan-orchestrator.yml

Queries ADP Workforce Now for payroll-active employees by legal entity and department, returning headcount and total base salary for finance period-close reporting.

naftiko: '0.5'
info:
  label: ADP Payroll Headcount Snapshot
  description: Queries ADP Workforce Now for payroll-active employees by legal entity and department, returning headcount and total base salary for finance period-close reporting.
  tags:
  - hr
  - finance
  - adp
  - payroll
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: payroll-reporting
    port: 8080
    tools:
    - name: get-payroll-headcount
      description: Given an ADP legal entity code and department, return total payroll headcount and aggregate base salary. Use for period-close financial reporting and workforce cost analysis.
      inputParameters:
      - name: legal_entity_code
        in: body
        type: string
        description: The ADP legal entity code for the reporting entity.
      - name: department
        in: body
        type: string
        description: Optional department filter for headcount data.
      call: adp.get-payroll-employees
      with:
        legalEntityCode: '{{legal_entity_code}}'
        department: '{{department}}'
      outputParameters:
      - name: headcount
        type: integer
        mapping: $.data.totalEmployees
      - name: total_salary
        type: number
        mapping: $.data.totalBaseSalary
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: payroll-employees
      path: /hr/v2/workers
      inputParameters:
      - name: legalEntityCode
        in: query
      - name: department
        in: query
      operations:
      - name: get-payroll-employees
        method: GET
Open in Framework → View in Fleet → adp-payroll-headcount-snapshot.yml

Checks health status of a Databricks model serving endpoint.

naftiko: '0.5'
info:
  label: Databricks Model Serving Health Lookup
  description: Checks health status of a Databricks model serving endpoint.
  tags:
  - ml
  - databricks
capability:
  exposes:
  - type: mcp
    namespace: model-serving
    port: 8080
    tools:
    - name: get-endpoint-health
      description: Look up Databricks model serving endpoint health.
      inputParameters:
      - name: endpoint_name
        in: body
        type: string
        description: Model serving endpoint name.
      call: databricks.get-endpoint
      with:
        endpoint_name: '{{endpoint_name}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.state.ready
      - name: config_version
        type: number
        mapping: $.config.served_models[0].model_version
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://capitalone.cloud.databricks.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: endpoints
      path: /serving-endpoints/{{endpoint_name}}
      inputParameters:
      - name: endpoint_name
        in: path
      operations:
      - name: get-endpoint
        method: GET
Open in Framework → View in Fleet → databricks-model-serving-health-lookup.yml

When Splunk raises a security alert, enriches the event with Palo Alto Networks threat intelligence and opens a ServiceNow security incident for the SOC team.

naftiko: '0.5'
info:
  label: Splunk Security Incident Triage
  description: When Splunk raises a security alert, enriches the event with Palo Alto Networks threat intelligence and opens a ServiceNow security incident for the SOC team.
  tags:
  - security
  - splunk
  - palo-alto-networks
  - servicenow
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: soc-ops
    port: 8080
    tools:
    - name: triage-splunk-security-alert
      description: Given a Splunk alert ID and source IP, fetch alert details, query Palo Alto for threat context, and open a ServiceNow security incident. Use for automated SOC Level 1 triage.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The Splunk alert search ID or SID.
      - name: source_ip
        in: body
        type: string
        description: The source IP address involved in the alert.
      steps:
      - name: get-alert-details
        type: call
        call: splunk.get-alert
        with:
          alertId: '{{alert_id}}'
      - name: get-threat-intel
        type: call
        call: paloalto.get-threat-intel
        with:
          sourceIp: '{{source_ip}}'
      - name: create-security-incident
        type: call
        call: servicenow-soc.create-security-incident
        with:
          short_description: 'Security alert {{alert_id}}: {{get-alert-details.name}}'
          description: 'Source IP {{source_ip}} threat score: {{get-threat-intel.threatScore}}'
          category: Security
          urgency: '1'
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://capitalone-splunk.splunkcloud.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: alert
      path: /search/jobs/{alertId}/results
      inputParameters:
      - name: alertId
        in: path
      operations:
      - name: get-alert
        method: GET
  - type: http
    namespace: paloalto
    baseUri: https://capitalone-pa.example.com/restapi/v10.1
    authentication:
      type: apikey
      key: X-PAN-KEY
      value: $secrets.paloalto_api_key
      placement: header
    resources:
    - name: threat-intel
      path: /Objects/Addresses
      inputParameters:
      - name: sourceIp
        in: query
      operations:
      - name: get-threat-intel
        method: GET
  - type: http
    namespace: servicenow-soc
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_pass
    resources:
    - name: security-incident
      path: /table/sn_si_incident
      inputParameters:
      - name: short_description
        in: body
      - name: description
        in: body
      - name: category
        in: body
      - name: urgency
        in: body
      operations:
      - name: create-security-incident
        method: POST
Open in Framework → View in Fleet → splunk-security-incident-triage.yml

When an expense report is submitted in SAP Concur exceeding a policy threshold, creates a ServiceNow approval task and notifies the approver via Microsoft Teams.

naftiko: '0.5'
info:
  label: Expense Report Approval via SAP Concur
  description: When an expense report is submitted in SAP Concur exceeding a policy threshold, creates a ServiceNow approval task and notifies the approver via Microsoft Teams.
  tags:
  - finance
  - expense-management
  - sap-concur
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finance-expense
    port: 8080
    tools:
    - name: trigger-expense-approval-workflow
      description: Given a Concur expense report ID and approval threshold, create a ServiceNow approval task and send a Teams notification to the approver. Use when high-value expense reports need manager review.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The SAP Concur expense report ID.
      - name: approver_email
        in: body
        type: string
        description: The approver's email address for Teams notification.
      - name: threshold
        in: body
        type: number
        description: The dollar threshold above which approval is required.
      steps:
      - name: get-expense-report
        type: call
        call: concur.get-expense-report
        with:
          reportId: '{{report_id}}'
      - name: create-approval-task
        type: call
        call: servicenow-exp.create-approval-task
        with:
          description: Expense report {{report_id}} totaling {{get-expense-report.total}} requires approval.
          assignedTo: '{{approver_email}}'
      - name: notify-approver
        type: call
        call: msteams-exp.send-message
        with:
          recipient: '{{approver_email}}'
          message: 'Expense report {{report_id}} of ${{get-expense-report.total}} requires your approval. ServiceNow task: {{create-approval-task.taskId}}.'
  consumes:
  - type: http
    namespace: concur
    baseUri: https://www.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: expense-report
      path: /expense/reports/{reportId}
      inputParameters:
      - name: reportId
        in: path
      operations:
      - name: get-expense-report
        method: GET
  - type: http
    namespace: servicenow-exp
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_pass
    resources:
    - name: approval-task
      path: /table/sc_task
      inputParameters:
      - name: description
        in: body
      - name: assignedTo
        in: body
      operations:
      - name: create-approval-task
        method: POST
  - type: http
    namespace: msteams-exp
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /users/{recipient}/sendMail
      inputParameters:
      - name: recipient
        in: path
      - name: message
        in: body
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → expense-report-approval-via-sap-concur.yml

Retrieves revenue metrics from a Power BI dataset.

naftiko: '0.5'
info:
  label: Power BI Revenue Dashboard Lookup
  description: Retrieves revenue metrics from a Power BI dataset.
  tags:
  - analytics
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: revenue-analytics
    port: 8080
    tools:
    - name: get-revenue-metrics
      description: Look up revenue metrics from Power BI.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset ID.
      call: powerbi.get-dataset-value
      with:
        dataset_id: '{{dataset_id}}'
      outputParameters:
      - name: total_revenue
        type: number
        mapping: $.value[0].total_revenue
      - name: yoy_growth
        type: number
        mapping: $.value[0].yoy_growth_pct
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/executeQueries
      operations:
      - name: get-dataset-value
        method: POST
Open in Framework → View in Fleet → power-bi-revenue-dashboard-lookup.yml

Checks the execution status of an Amazon Redshift query.

naftiko: '0.5'
info:
  label: Amazon Redshift Query Status Lookup
  description: Checks the execution status of an Amazon Redshift query.
  tags:
  - data
  - amazon-redshift
capability:
  exposes:
  - type: mcp
    namespace: redshift-ops
    port: 8080
    tools:
    - name: get-query-status
      description: Look up Redshift query status.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: Redshift query ID.
      call: redshift.get-statement
      with:
        query_id: '{{query_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.Status
      - name: rows_affected
        type: number
        mapping: $.ResultRows
  consumes:
  - type: http
    namespace: redshift
    baseUri: https://redshift-data.us-east-1.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_redshift_token
    resources:
    - name: statements
      path: /
      operations:
      - name: get-statement
        method: POST
Open in Framework → View in Fleet → amazon-redshift-query-status-lookup.yml

Verifies customer identity using Snowflake data, updates verification status, and notifies compliance.

naftiko: '0.5'
info:
  label: Customer Identity Verification Orchestrator
  description: Verifies customer identity using Snowflake data, updates verification status, and notifies compliance.
  tags:
  - banking
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: customer-identity-verification
    port: 8080
    tools:
    - name: customer-identity-verification
      description: Verifies customer identity using Snowflake data.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Customer Identity Verification for {{entity_id}}
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://capitalone.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
      - name: run-analysis
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
Open in Framework → View in Fleet → customer-identity-verification-orchestrator.yml

Validates schema changes in Snowflake, creates ServiceNow change requests, and notifies DBAs via Slack.

naftiko: '0.5'
info:
  label: Database Schema Migration Orchestrator
  description: Validates schema changes in Snowflake, creates ServiceNow change requests, and notifies DBAs via Slack.
  tags:
  - data
  - snowflake
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: database-schema-migration
    port: 8080
    tools:
    - name: database-schema-migration
      description: Validates schema changes in Snowflake.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Database Schema Migration for {{entity_id}}
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#ops'
          text: Database Schema Migration processed for {{entity_id}}
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://capitalone.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
      - name: run-analysis
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → database-schema-migration-orchestrator.yml

Detects mobile app crashes via Datadog, creates Jira bugs, and notifies the mobile team via Slack.

naftiko: '0.5'
info:
  label: Mobile App Crash Response Orchestrator
  description: Detects mobile app crashes via Datadog, creates Jira bugs, and notifies the mobile team via Slack.
  tags:
  - mobile
  - datadog
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: mobile-app-crash-response
    port: 8080
    tools:
    - name: mobile-app-crash-response
      description: Detects mobile app crashes via Datadog.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: check-metrics
        type: call
        call: datadog.get-monitors
        with:
          entity_id: '{{entity_id}}'
      - name: create-issue
        type: call
        call: jira.create-issue
        with:
          project: OPS
          summary: Mobile App Crash Response - {{entity_id}}
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#ops'
          text: Mobile App Crash Response processed for {{entity_id}}
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor
      operations:
      - name: get-monitors
        method: GET
  - type: http
    namespace: jira
    baseUri: https://capitalone.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → mobile-app-crash-response-orchestrator.yml

Retrieves purchase order status from Coupa.

naftiko: '0.5'
info:
  label: Coupa Purchase Order Status Lookup
  description: Retrieves purchase order status from Coupa.
  tags:
  - procurement
  - coupa
capability:
  exposes:
  - type: mcp
    namespace: po-status
    port: 8080
    tools:
    - name: get-po-status
      description: Look up Coupa purchase order status.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: Coupa PO number.
      call: coupa.get-po
      with:
        po_number: '{{po_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: total_amount
        type: number
        mapping: $.total
  consumes:
  - type: http
    namespace: coupa
    baseUri: https://capitalone.coupahost.com/api
    authentication:
      type: bearer
      token: $secrets.coupa_token
    resources:
    - name: purchase-orders
      path: /purchase_orders/{{po_number}}
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-po
        method: GET
Open in Framework → View in Fleet → coupa-purchase-order-status-lookup.yml

Collects incident data from ServiceNow, gathers metrics from Datadog, and publishes postmortem to Confluence.

naftiko: '0.5'
info:
  label: Incident Postmortem Orchestrator
  description: Collects incident data from ServiceNow, gathers metrics from Datadog, and publishes postmortem to Confluence.
  tags:
  - operations
  - servicenow
  - datadog
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: incident-postmortem
    port: 8080
    tools:
    - name: incident-postmortem
      description: Collects incident data from ServiceNow.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: check-metrics
        type: call
        call: datadog.get-monitors
        with:
          entity_id: '{{entity_id}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Incident Postmortem for {{entity_id}}
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space_key: OPS
          title: Incident Postmortem
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor
      operations:
      - name: get-monitors
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://capitalone.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → incident-postmortem-orchestrator.yml

When a transaction fraud alert is logged, uses Anthropic to summarize the alert context and risk signals, then creates a ServiceNow security incident for the fraud operations team.

naftiko: '0.5'
info:
  label: Fraud Alert Triage with Anthropic AI
  description: When a transaction fraud alert is logged, uses Anthropic to summarize the alert context and risk signals, then creates a ServiceNow security incident for the fraud operations team.
  tags:
  - ai
  - fraud-detection
  - anthropic
  - servicenow
  - financial-services
capability:
  exposes:
  - type: mcp
    namespace: fraud-ops
    port: 8080
    tools:
    - name: triage-fraud-alert
      description: Given a fraud alert payload with transaction details, send the context to Anthropic for risk summarization and open a ServiceNow security incident with the AI-generated summary. Use for automated fraud triage.
      inputParameters:
      - name: alert_payload
        in: body
        type: string
        description: JSON string containing fraud alert details including transaction ID, amount, and risk signals.
      - name: account_id
        in: body
        type: string
        description: The customer account ID associated with the fraud alert.
      steps:
      - name: summarize-alert
        type: call
        call: anthropic.create-message
        with:
          model: claude-3-5-sonnet-20241022
          max_tokens: 500
          messages: '[{"role": "user", "content": "Summarize this fraud alert and assess risk level: {{alert_payload}}"}]'
      - name: create-fraud-incident
        type: call
        call: servicenow-fraud.create-security-incident
        with:
          short_description: Fraud alert for account {{account_id}}
          description: '{{summarize-alert.content}}'
          category: Fraud
          urgency: '1'
  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
      inputParameters:
      - name: model
        in: body
      - name: max_tokens
        in: body
      - name: messages
        in: body
      operations:
      - name: create-message
        method: POST
  - type: http
    namespace: servicenow-fraud
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_pass
    resources:
    - name: security-incident
      path: /table/sn_si_incident
      inputParameters:
      - name: short_description
        in: body
      - name: description
        in: body
      - name: category
        in: body
      - name: urgency
        in: body
      operations:
      - name: create-security-incident
        method: POST
Open in Framework → View in Fleet → fraud-alert-triage-with-anthropic-ai.yml

Validates ML model performance in Databricks, logs governance events in ServiceNow, and notifies data science team.

naftiko: '0.5'
info:
  label: ML Model Governance Orchestrator
  description: Validates ML model performance in Databricks, logs governance events in ServiceNow, and notifies data science team.
  tags:
  - ml
  - databricks
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: ml-model-governance
    port: 8080
    tools:
    - name: ml-model-governance
      description: Validates ML model performance in Databricks.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: run-model
        type: call
        call: databricks.run-job
        with:
          entity_id: '{{entity_id}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: ML Model Governance for {{entity_id}}
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#ops'
          text: ML Model Governance processed for {{entity_id}}
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://capitalone.cloud.databricks.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → ml-model-governance-orchestrator.yml

Queries New Relic for application transaction error rates and Apdex scores across a service tier, then publishes a daily performance summary to the engineering Slack channel.

naftiko: '0.5'
info:
  label: New Relic APM Performance Digest
  description: Queries New Relic for application transaction error rates and Apdex scores across a service tier, then publishes a daily performance summary to the engineering Slack channel.
  tags:
  - observability
  - new-relic
  - slack
  - apm
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: apm-reporting
    port: 8080
    tools:
    - name: digest-apm-performance
      description: Given a New Relic application name and time window, retrieve error rate and Apdex scores and post a performance digest to Slack. Use for daily engineering health reviews.
      inputParameters:
      - name: app_name
        in: body
        type: string
        description: The New Relic application name to report on.
      - name: time_window_hours
        in: body
        type: integer
        description: Number of hours to include in the performance digest.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel ID for the digest notification.
      steps:
      - name: get-app-metrics
        type: call
        call: newrelic.get-metric-data
        with:
          appName: '{{app_name}}'
          timeWindowHours: '{{time_window_hours}}'
      - name: post-digest
        type: call
        call: slack-apm.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'APM Digest for {{app_name}}: Error rate {{get-app-metrics.errorRate}}%, Apdex {{get-app-metrics.apdexScore}} over last {{time_window_hours}}h.'
  consumes:
  - type: http
    namespace: newrelic
    baseUri: https://api.newrelic.com/v2
    authentication:
      type: apikey
      key: X-Api-Key
      value: $secrets.newrelic_api_key
      placement: header
    resources:
    - name: metric-data
      path: /applications.json
      inputParameters:
      - name: appName
        in: query
      - name: timeWindowHours
        in: query
      operations:
      - name: get-metric-data
        method: GET
  - type: http
    namespace: slack-apm
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      inputParameters:
      - name: channel
        in: body
      - name: text
        in: body
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → new-relic-apm-performance-digest.yml

Pulls Workday headcount data, forecasts hiring needs in Snowflake, and publishes plan to Confluence.

naftiko: '0.5'
info:
  label: Workforce Planning Forecast Orchestrator
  description: Pulls Workday headcount data, forecasts hiring needs in Snowflake, and publishes plan to Confluence.
  tags:
  - hr
  - workday
  - snowflake
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: workforce-planning-forecast
    port: 8080
    tools:
    - name: workforce-planning-forecast
      description: Pulls Workday headcount data.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space_key: OPS
          title: Workforce Planning Forecast
      - name: get-worker
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://capitalone.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
      - name: run-analysis
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://capitalone.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: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /capitalone/workers
      operations:
      - name: get-worker
        method: GET
Open in Framework → View in Fleet → workforce-planning-forecast-orchestrator.yml

Processes penetration test findings, creates Jira remediation tickets, and notifies security team via Slack.

naftiko: '0.5'
info:
  label: Automated Pen Test Findings Orchestrator
  description: Processes penetration test findings, creates Jira remediation tickets, and notifies security team via Slack.
  tags:
  - security
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: automated-pen-test-findings
    port: 8080
    tools:
    - name: automated-pen-test-findings
      description: Processes penetration test findings.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: create-issue
        type: call
        call: jira.create-issue
        with:
          project: OPS
          summary: Automated Pen Test Findings - {{entity_id}}
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#ops'
          text: Automated Pen Test Findings processed for {{entity_id}}
  consumes:
  - type: http
    namespace: jira
    baseUri: https://capitalone.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → automated-pen-test-findings-orchestrator.yml

Monitors payment latency via Datadog, creates ServiceNow incidents for SLA breaches, and alerts operations.

naftiko: '0.5'
info:
  label: Payment Processing Latency Orchestrator
  description: Monitors payment latency via Datadog, creates ServiceNow incidents for SLA breaches, and alerts operations.
  tags:
  - banking
  - datadog
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: payment-processing-latency
    port: 8080
    tools:
    - name: payment-processing-latency
      description: Monitors payment latency via Datadog.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: check-metrics
        type: call
        call: datadog.get-monitors
        with:
          entity_id: '{{entity_id}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Payment Processing Latency for {{entity_id}}
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#ops'
          text: Payment Processing Latency processed for {{entity_id}}
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor
      operations:
      - name: get-monitors
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → payment-processing-latency-orchestrator.yml

Queries Salesforce for open opportunities by stage and owner, then publishes a Power BI pipeline digest report for sales leadership review.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Pipeline Digest
  description: Queries Salesforce for open opportunities by stage and owner, then publishes a Power BI pipeline digest report for sales leadership review.
  tags:
  - crm
  - sales
  - salesforce
  - power-bi
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: sales-reporting
    port: 8080
    tools:
    - name: digest-opportunity-pipeline
      description: Given a sales stage filter and date range, retrieve open Salesforce opportunities and trigger a Power BI dataset refresh. Use for weekly pipeline reviews or executive dashboards.
      inputParameters:
      - name: stage
        in: body
        type: string
        description: The opportunity stage to filter by (e.g., Proposal, Negotiation).
      - name: close_date_before
        in: body
        type: string
        description: Filter opportunities closing before this date (ISO 8601).
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset ID to refresh after query.
      steps:
      - name: query-opportunities
        type: call
        call: salesforce-opp.query-opportunities
        with:
          stage: '{{stage}}'
          closeDateBefore: '{{close_date_before}}'
      - name: refresh-powerbi
        type: call
        call: powerbi-sales.trigger-refresh
        with:
          datasetId: '{{dataset_id}}'
  consumes:
  - type: http
    namespace: salesforce-opp
    baseUri: https://capitalone.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /query
      inputParameters:
      - name: q
        in: query
      operations:
      - name: query-opportunities
        method: GET
  - type: http
    namespace: powerbi-sales
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refresh
      path: /datasets/{datasetId}/refreshes
      inputParameters:
      - name: datasetId
        in: path
      operations:
      - name: trigger-refresh
        method: POST
Open in Framework → View in Fleet → salesforce-opportunity-pipeline-digest.yml

Runs churn prediction models in Databricks, identifies at-risk customers, and creates Salesforce retention campaigns.

naftiko: '0.5'
info:
  label: Customer Churn Prediction Orchestrator
  description: Runs churn prediction models in Databricks, identifies at-risk customers, and creates Salesforce retention campaigns.
  tags:
  - analytics
  - databricks
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: customer-churn-prediction
    port: 8080
    tools:
    - name: customer-churn-prediction
      description: Runs churn prediction models in Databricks.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: run-model
        type: call
        call: databricks.run-job
        with:
          entity_id: '{{entity_id}}'
      - name: update-sf
        type: call
        call: salesforce.update-opp
        with:
          entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://capitalone.cloud.databricks.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://capitalone.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: objects
      path: /sobjects
      operations:
      - name: get-lead
        method: GET
      - name: create-lead
        method: POST
      - name: update-opp
        method: PATCH
Open in Framework → View in Fleet → customer-churn-prediction-orchestrator.yml

Monitors API gateway metrics via Datadog, adjusts rate limits, and notifies developers via Slack.

naftiko: '0.5'
info:
  label: API Gateway Rate Limit Orchestrator
  description: Monitors API gateway metrics via Datadog, adjusts rate limits, and notifies developers via Slack.
  tags:
  - infrastructure
  - datadog
  - slack
capability:
  exposes:
  - type: mcp
    namespace: api-gateway-rate-limit
    port: 8080
    tools:
    - name: api-gateway-rate-limit
      description: Monitors API gateway metrics via Datadog.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: check-metrics
        type: call
        call: datadog.get-monitors
        with:
          entity_id: '{{entity_id}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#ops'
          text: API Gateway Rate Limit processed for {{entity_id}}
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor
      operations:
      - name: get-monitors
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → api-gateway-rate-limit-orchestrator.yml

Runs stress test scenarios in Snowflake, compiles results, and publishes reports to Confluence.

naftiko: '0.5'
info:
  label: Quarterly Stress Test Orchestrator
  description: Runs stress test scenarios in Snowflake, compiles results, and publishes reports to Confluence.
  tags:
  - risk
  - snowflake
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: quarterly-stress-test
    port: 8080
    tools:
    - name: quarterly-stress-test
      description: Runs stress test scenarios in Snowflake.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          entity_id: '{{entity_id}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space_key: OPS
          title: Quarterly Stress Test
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://capitalone.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
      - name: run-analysis
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://capitalone.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → quarterly-stress-test-orchestrator.yml

Reviews Okta access assignments, validates against role requirements, and creates ServiceNow tickets for anomalies.

naftiko: '0.5'
info:
  label: Employee Access Review Orchestrator
  description: Reviews Okta access assignments, validates against role requirements, and creates ServiceNow tickets for anomalies.
  tags:
  - identity
  - okta
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: employee-access-review
    port: 8080
    tools:
    - name: employee-access-review
      description: Reviews Okta access assignments.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Primary entity identifier.
      steps:
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Employee Access Review for {{entity_id}}
      - name: check-access
        type: call
        call: okta.get-user
        with:
          entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://capitalone.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: okta
    baseUri: https://capitalone.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: users
      path: /users
      operations:
      - name: get-user
        method: GET
Open in Framework → View in Fleet → employee-access-review-orchestrator.yml

On Bloomberg feed disruption, switches to FactSet backup, validates data quality in Snowflake, alerts trading desks via Microsoft Teams, and creates a ServiceNow incident.

naftiko: '0.5'
info:
  label: Market Data Feed Failover Orchestrator
  description: On Bloomberg feed disruption, switches to FactSet backup, validates data quality in Snowflake, alerts trading desks via Microsoft Teams, and creates a ServiceNow incident.
  tags:
  - market-data
  - failover
  - bloomberg
  - factset
  - microsoft-teams
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: feed-failover
    port: 8080
    tools:
    - name: execute-failover
      description: Orchestrate market data feed failover from Bloomberg to FactSet.
      inputParameters:
      - name: feed_id
        in: body
        type: string
        description: Bloomberg feed identifier.
      - name: failure_type
        in: body
        type: string
        description: Type of failure (latency, stale, disconnected).
      steps:
      - name: activate-backup
        type: call
        call: factset.activate-feed
        with:
          feed_type: '{{feed_id}}'
          mode: primary
      - name: validate-quality
        type: call
        call: snowflake.query-quality
        with:
          statement: SELECT COUNT(*) as stale_count FROM MARKET_DATA WHERE updated_at < DATEADD(minute, -5, CURRENT_TIMESTAMP)
          warehouse: SCHWAB_TRADING_WH
      - name: alert-trading
        type: call
        call: msteams.send-channel-message
        with:
          team_id: trading-desks
          channel: market-data-alerts
          text: 'ALERT: Bloomberg feed {{feed_id}} failed ({{failure_type}}). Switched to FactSet backup. Data quality check: {{validate-quality.stale_count}} stale records.'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Bloomberg feed failover: {{feed_id}} - {{failure_type}}'
          category: market_data
          assigned_group: Market_Data_Ops
          description: 'Bloomberg feed {{feed_id}} failed: {{failure_type}}. FactSet backup activated. Stale records: {{validate-quality.stale_count}}.'
  consumes:
  - type: http
    namespace: factset
    baseUri: https://api.factset.com/content
    authentication:
      type: basic
      username: $secrets.factset_user
      password: $secrets.factset_password
    resources:
    - name: feeds
      path: /feeds/activate
      operations:
      - name: activate-feed
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://schwab.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: query-quality
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel
        in: path
      operations:
      - name: send-channel-message
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://schwab.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → market-data-feed-failover-orchestrator.yml

Retrieves upcoming earnings dates and estimates from FactSet for securities in Schwab client portfolios.

naftiko: '0.5'
info:
  label: FactSet Earnings Calendar Retriever
  description: Retrieves upcoming earnings dates and estimates from FactSet for securities in Schwab client portfolios.
  tags:
  - research
  - earnings
  - factset
capability:
  exposes:
  - type: mcp
    namespace: earnings-research
    port: 8080
    tools:
    - name: get-earnings-calendar
      description: Fetch upcoming earnings dates and consensus estimates from FactSet.
      inputParameters:
      - name: ticker
        in: body
        type: string
        description: Stock ticker symbol.
      call: factset.get-earnings
      with:
        ids: '{{ticker}}'
      outputParameters:
      - name: earnings_date
        type: string
        mapping: $.data[0].earnings_date
      - name: eps_estimate
        type: number
        mapping: $.data[0].eps_consensus
      - name: revenue_estimate
        type: number
        mapping: $.data[0].revenue_consensus
  consumes:
  - type: http
    namespace: factset
    baseUri: https://api.factset.com/content/factset-estimates/v2
    authentication:
      type: basic
      username: $secrets.factset_user
      password: $secrets.factset_password
    resources:
    - name: earnings
      path: /consensus-estimates
      operations:
      - name: get-earnings
        method: POST
Open in Framework → View in Fleet → factset-earnings-calendar-retriever.yml

Searches Splunk for security events related to unauthorized access attempts and suspicious login patterns.

naftiko: '0.5'
info:
  label: Splunk Security Event Analyzer
  description: Searches Splunk for security events related to unauthorized access attempts and suspicious login patterns.
  tags:
  - security
  - siem
  - splunk
capability:
  exposes:
  - type: mcp
    namespace: security-analysis
    port: 8080
    tools:
    - name: search-security-events
      description: Run a Splunk search for security events.
      inputParameters:
      - name: search_query
        in: body
        type: string
        description: Splunk search query (SPL).
      - name: time_range
        in: body
        type: string
        description: Time range (e.g., -24h, -7d).
      call: splunk.create-search
      with:
        search: '{{search_query}}'
        earliest_time: '{{time_range}}'
      outputParameters:
      - name: search_id
        type: string
        mapping: $.sid
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.schwab.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search-jobs
      path: /search/jobs
      operations:
      - name: create-search
        method: POST
Open in Framework → View in Fleet → splunk-security-event-analyzer.yml

Sends SMS notifications to Schwab clients via Twilio for trade confirmations, account alerts, and security notifications.

naftiko: '0.5'
info:
  label: Twilio Client SMS Notification Sender
  description: Sends SMS notifications to Schwab clients via Twilio for trade confirmations, account alerts, and security notifications.
  tags:
  - notifications
  - sms
  - twilio
capability:
  exposes:
  - type: mcp
    namespace: client-notifications
    port: 8080
    tools:
    - name: send-sms
      description: Send an SMS notification to a client via Twilio.
      inputParameters:
      - name: phone_number
        in: body
        type: string
        description: Client phone number in E.164 format.
      - name: message
        in: body
        type: string
        description: SMS message body.
      call: twilio.send-message
      with:
        To: '{{phone_number}}'
        Body: '{{message}}'
        From: '+18005407000'
      outputParameters:
      - name: message_sid
        type: string
        mapping: $.sid
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: twilio
    baseUri: https://api.twilio.com/2010-04-01/Accounts/$secrets.twilio_account_sid
    authentication:
      type: basic
      username: $secrets.twilio_account_sid
      password: $secrets.twilio_auth_token
    resources:
    - name: messages
      path: /Messages.json
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → twilio-client-sms-notification-sender.yml

On new mutual fund purchase, retrieves the prospectus from the fund company API, stores in Box, sends to the client via email, and logs compliance delivery in Salesforce.

naftiko: '0.5'
info:
  label: Mutual Fund Prospectus Delivery Pipeline
  description: On new mutual fund purchase, retrieves the prospectus from the fund company API, stores in Box, sends to the client via email, and logs compliance delivery in Salesforce.
  tags:
  - mutual-funds
  - prospectus
  - box
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: prospectus-delivery
    port: 8080
    tools:
    - name: deliver-prospectus
      description: Orchestrate mutual fund prospectus delivery across fund API, Box, email, and Salesforce.
      inputParameters:
      - name: fund_ticker
        in: body
        type: string
        description: Mutual fund ticker.
      - name: account_id
        in: body
        type: string
        description: Client account ID.
      - name: client_email
        in: body
        type: string
        description: Client email address.
      steps:
      - name: get-prospectus
        type: call
        call: funds.get-prospectus
        with:
          ticker: '{{fund_ticker}}'
      - name: store-copy
        type: call
        call: box.upload-file
        with:
          folder_id: prospectus_delivery
          filename: '{{fund_ticker}}_{{account_id}}_prospectus.pdf'
          content: '{{get-prospectus.document}}'
      - name: email-client
        type: call
        call: ses.send-email
        with:
          to: '{{client_email}}'
          subject: Prospectus for {{get-prospectus.fund_name}}
          body: Please find attached the prospectus for your recent purchase of {{get-prospectus.fund_name}} ({{fund_ticker}}).
          attachment: '{{store-copy.url}}'
      - name: log-delivery
        type: call
        call: salesforce.create-task
        with:
          account_id: '{{account_id}}'
          subject: 'Prospectus delivered: {{fund_ticker}}'
          description: 'Prospectus for {{get-prospectus.fund_name}} delivered via email. Box link: {{store-copy.url}}.'
  consumes:
  - type: http
    namespace: funds
    baseUri: https://fund-data.schwab.com/api/v1
    authentication:
      type: bearer
      token: $secrets.fund_data_token
    resources:
    - name: prospectus
      path: /funds/{{ticker}}/prospectus
      inputParameters:
      - name: ticker
        in: path
      operations:
      - name: get-prospectus
        method: GET
  - type: http
    namespace: box
    baseUri: https://upload.box.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.box_access_token
    resources:
    - name: files
      path: /files/content
      operations:
      - name: upload-file
        method: POST
  - type: http
    namespace: ses
    baseUri: https://email.us-east-1.amazonaws.com
    authentication:
      type: aws-sig-v4
      access_key: $secrets.aws_access_key
      secret_key: $secrets.aws_secret_key
    resources:
    - name: emails
      path: /v2/email/outbound-emails
      operations:
      - name: send-email
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://schwab.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: tasks
      path: /sobjects/Task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → mutual-fund-prospectus-delivery-pipeline.yml

On SEC filing detection, retrieves prospectus data from FactSet, updates the fund database in Snowflake, publishes to the client portal via SharePoint, and notifies compliance via Microsoft Teams.

naftiko: '0.5'
info:
  label: ETF Prospectus Update Orchestrator
  description: On SEC filing detection, retrieves prospectus data from FactSet, updates the fund database in Snowflake, publishes to the client portal via SharePoint, and notifies compliance via Microsoft Teams.
  tags:
  - fund-management
  - prospectus
  - factset
  - snowflake
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: prospectus-management
    port: 8080
    tools:
    - name: process-prospectus-update
      description: Orchestrate ETF prospectus update across FactSet, Snowflake, SharePoint, and Teams.
      inputParameters:
      - name: fund_ticker
        in: body
        type: string
        description: ETF ticker symbol.
      - name: filing_id
        in: body
        type: string
        description: SEC filing identifier.
      steps:
      - name: get-prospectus
        type: call
        call: factset.get-fund-filing
        with:
          ticker: '{{fund_ticker}}'
          filing_id: '{{filing_id}}'
      - name: update-database
        type: call
        call: snowflake.execute-update
        with:
          statement: UPDATE FUND_PROSPECTUS SET content = '{{get-prospectus.content}}', effective_date = '{{get-prospectus.effective_date}}' WHERE ticker = '{{fund_ticker}}'
          warehouse: SCHWAB_FUND_WH
      - name: publish-portal
        type: call
        call: sharepoint.upload-file
        with:
          site_id: fund_documents
          path: Prospectus/{{fund_ticker}}/{{filing_id}}.pdf
          content: '{{get-prospectus.document}}'
      - name: notify-compliance
        type: call
        call: msteams.send-channel-message
        with:
          team_id: fund-compliance
          channel: prospectus-updates
          text: 'Prospectus updated: {{fund_ticker}}. Filing: {{filing_id}}. Effective: {{get-prospectus.effective_date}}.'
  consumes:
  - type: http
    namespace: factset
    baseUri: https://api.factset.com/content/factset-funds/v1
    authentication:
      type: basic
      username: $secrets.factset_user
      password: $secrets.factset_password
    resources:
    - name: filings
      path: /fund-filings
      operations:
      - name: get-fund-filing
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://schwab.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-update
        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:/{{path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: path
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → etf-prospectus-update-orchestrator.yml

Generates client account statements using Crystal Reports with Snowflake data for quarterly mailings.

naftiko: '0.5'
info:
  label: Crystal Reports Client Statement Generator
  description: Generates client account statements using Crystal Reports with Snowflake data for quarterly mailings.
  tags:
  - reporting
  - crystal-reports
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: client-statements
    port: 8080
    tools:
    - name: generate-statement
      description: Generate a client statement using Crystal Reports.
      inputParameters:
      - name: account_number
        in: body
        type: string
        description: Account number.
      - name: period
        in: body
        type: string
        description: Statement period.
      steps:
      - name: fetch-data
        type: call
        call: snowflake.run-query
        with:
          query: SELECT * FROM client_statement_data WHERE account_number='{{account_number}}' AND period='{{period}}'
      - name: generate-report
        type: call
        call: crystal-reports.generate
        with:
          template: client_statement
          data: '{{fetch-data.results}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://schwab.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: crystal-reports
    baseUri: https://reports.schwab.com/api/v1
    authentication:
      type: bearer
      token: $secrets.crystal_reports_token
    resources:
    - name: reports
      path: /reports/generate
      operations:
      - name: generate
        method: POST
Open in Framework → View in Fleet → crystal-reports-client-statement-generator.yml

On critical trading platform incident, queries Datadog for service health, creates a Jira incident, pages on-call via PagerDuty, and posts a status update to Microsoft Teams.

naftiko: '0.5'
info:
  label: Platform Incident Response Orchestrator
  description: On critical trading platform incident, queries Datadog for service health, creates a Jira incident, pages on-call via PagerDuty, and posts a status update to Microsoft Teams.
  tags:
  - incident-response
  - datadog
  - jira
  - pagerduty
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: incident-response
    port: 8080
    tools:
    - name: trigger-incident-response
      description: Orchestrate incident response across Datadog, Jira, PagerDuty, and Teams.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: Affected service name.
      - name: severity
        in: body
        type: string
        description: Incident severity (P1, P2, P3).
      - name: description
        in: body
        type: string
        description: Incident description.
      steps:
      - name: get-service-health
        type: call
        call: datadog.get-service-status
        with:
          service: '{{service_name}}'
      - name: create-incident-ticket
        type: call
        call: jira.create-issue
        with:
          project: INCIDENT
          summary: '{{severity}} - {{service_name}}: {{description}}'
          description: 'Service: {{service_name}}

            Severity: {{severity}}

            Datadog Status: {{get-service-health.status}}

            Description: {{description}}'
          issuetype: Incident
          priority: '{{severity}}'
      - name: page-oncall
        type: call
        call: pagerduty.create-incident
        with:
          service_id: '{{service_name}}'
          title: '{{severity}} - {{service_name}}: {{description}}'
          body: 'Jira: {{create-incident-ticket.key}}'
      - name: post-status
        type: call
        call: msteams.send-channel-message
        with:
          team_id: trading-platform-team
          channel: incidents
          text: '{{severity}} INCIDENT: {{service_name}} - {{description}}. Jira: {{create-incident-ticket.key}}. On-call paged.'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: services
      path: /check_run
      operations:
      - name: get-service-status
        method: GET
  - type: http
    namespace: jira
    baseUri: https://schwab.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: 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}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → platform-incident-response-orchestrator.yml

Archives historical trade execution data from the operational database to S3 for regulatory retention.

naftiko: '0.5'
info:
  label: Amazon S3 Trade Data Archiver
  description: Archives historical trade execution data from the operational database to S3 for regulatory retention.
  tags:
  - data-engineering
  - archival
  - amazon-s3
capability:
  exposes:
  - type: mcp
    namespace: trade-archival
    port: 8080
    tools:
    - name: archive-trade-data
      description: Archive trade data to S3 for long-term regulatory retention.
      inputParameters:
      - name: date
        in: body
        type: string
        description: Date to archive.
      - name: asset_class
        in: body
        type: string
        description: Asset class (equities, fixed_income, options, mutual_funds).
      call: s3.put-object
      with:
        bucket: schwab-trade-archive
        key: trades/{{asset_class}}/{{date}}/data.parquet
      outputParameters:
      - name: etag
        type: string
        mapping: $.ETag
  consumes:
  - type: http
    namespace: s3
    baseUri: https://schwab-trade-archive.s3.us-east-1.amazonaws.com
    authentication:
      type: aws-sig-v4
      access_key: $secrets.aws_access_key
      secret_key: $secrets.aws_secret_key
    resources:
    - name: objects
      path: /{{key}}
      inputParameters:
      - name: key
        in: path
      operations:
      - name: put-object
        method: PUT
Open in Framework → View in Fleet → amazon-s3-trade-data-archiver.yml

Checks Azure DevOps pipeline status for Schwab's digital platform deployments.

naftiko: '0.5'
info:
  label: Azure DevOps CI/CD Pipeline Status
  description: Checks Azure DevOps pipeline status for Schwab's digital platform deployments.
  tags:
  - devops
  - ci-cd
  - azure-devops
capability:
  exposes:
  - type: mcp
    namespace: cicd-status
    port: 8080
    tools:
    - name: get-pipeline-status
      description: Get the latest Azure DevOps pipeline run status.
      inputParameters:
      - name: project
        in: body
        type: string
        description: Project name.
      - name: pipeline_id
        in: body
        type: string
        description: Pipeline ID.
      call: azuredevops.get-pipeline-runs
      with:
        project: '{{project}}'
        pipeline_id: '{{pipeline_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.value[0].state
      - name: result
        type: string
        mapping: $.value[0].result
  consumes:
  - type: http
    namespace: azuredevops
    baseUri: https://dev.azure.com/schwab
    authentication:
      type: basic
      username: ''
      password: $secrets.azuredevops_pat
    resources:
    - name: pipeline-runs
      path: /{{project}}/_apis/pipelines/{{pipeline_id}}/runs
      inputParameters:
      - name: project
        in: path
      - name: pipeline_id
        in: path
      operations:
      - name: get-pipeline-runs
        method: GET
Open in Framework → View in Fleet → azure-devops-ci-cd-pipeline-status.yml

Retrieves a snapshot of infrastructure health metrics from Grafana dashboards for Schwab's trading platform systems.

naftiko: '0.5'
info:
  label: Grafana Infrastructure Dashboard Snapshot
  description: Retrieves a snapshot of infrastructure health metrics from Grafana dashboards for Schwab's trading platform systems.
  tags:
  - infrastructure
  - monitoring
  - grafana
capability:
  exposes:
  - type: mcp
    namespace: infra-monitoring
    port: 8080
    tools:
    - name: get-dashboard-snapshot
      description: Fetch a Grafana dashboard snapshot by dashboard UID.
      inputParameters:
      - name: dashboard_uid
        in: body
        type: string
        description: Grafana dashboard UID.
      call: grafana.get-dashboard
      with:
        uid: '{{dashboard_uid}}'
      outputParameters:
      - name: title
        type: string
        mapping: $.dashboard.title
      - name: panels
        type: array
        mapping: $.dashboard.panels
  consumes:
  - type: http
    namespace: grafana
    baseUri: https://grafana.schwab.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_api_key
    resources:
    - name: dashboards
      path: /dashboards/uid/{{uid}}
      inputParameters:
      - name: uid
        in: path
      operations:
      - name: get-dashboard
        method: GET
Open in Framework → View in Fleet → grafana-infrastructure-dashboard-snapshot.yml

Generates quarterly client statements by querying Snowflake for account data, rendering PDF via Crystal Reports, uploading to Amazon S3, and logging delivery in Salesforce.

naftiko: '0.5'
info:
  label: Quarterly Client Statement Pipeline
  description: Generates quarterly client statements by querying Snowflake for account data, rendering PDF via Crystal Reports, uploading to Amazon S3, and logging delivery in Salesforce.
  tags:
  - statements
  - reporting
  - snowflake
  - crystal-reports
  - amazon-s3
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: client-statements
    port: 8080
    tools:
    - name: generate-statement
      description: Orchestrate quarterly statement generation across Snowflake, Crystal Reports, S3, and Salesforce.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Client account ID.
      - name: quarter
        in: body
        type: string
        description: Quarter identifier (e.g., 2026-Q1).
      steps:
      - name: get-account-data
        type: call
        call: snowflake.query-statement-data
        with:
          statement: SELECT * FROM STATEMENT_DATA WHERE account_id = '{{account_id}}' AND quarter = '{{quarter}}'
          warehouse: SCHWAB_REPORTING_WH
      - name: render-pdf
        type: call
        call: crystalreports.generate-report
        with:
          template: quarterly-statement
          data: '{{get-account-data.data}}'
      - name: upload-statement
        type: call
        call: s3.put-object
        with:
          bucket: schwab-client-statements
          key: '{{quarter}}/{{account_id}}/statement.pdf'
          body: '{{render-pdf.document}}'
      - name: log-delivery
        type: call
        call: salesforce.create-task
        with:
          account_id: '{{account_id}}'
          subject: Q{{quarter}} statement generated
          description: 'Statement uploaded to S3: {{upload-statement.url}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://schwab.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: query-statement-data
        method: POST
  - type: http
    namespace: crystalreports
    baseUri: https://crystal-api.schwab.com/v1
    authentication:
      type: bearer
      token: $secrets.crystal_reports_token
    resources:
    - name: reports
      path: /render
      operations:
      - name: generate-report
        method: POST
  - type: http
    namespace: s3
    baseUri: https://s3.us-east-1.amazonaws.com
    authentication:
      type: aws-sig-v4
      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: salesforce
    baseUri: https://schwab.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: tasks
      path: /sobjects/Task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → quarterly-client-statement-pipeline.yml

Prepares an advisor for a client review by pulling portfolio data from Snowflake, recent interactions from Salesforce, market outlook from Bloomberg, and compiling a briefing in Google Docs.

naftiko: '0.5'
info:
  label: Advisor Client Review Prep Orchestrator
  description: Prepares an advisor for a client review by pulling portfolio data from Snowflake, recent interactions from Salesforce, market outlook from Bloomberg, and compiling a briefing in Google Docs.
  tags:
  - advisory
  - client-review
  - snowflake
  - salesforce
  - bloomberg
  - google-docs
capability:
  exposes:
  - type: mcp
    namespace: review-preparation
    port: 8080
    tools:
    - name: prepare-client-review
      description: Orchestrate client review preparation across multiple data sources.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Client account ID.
      - name: advisor_email
        in: body
        type: string
        description: Advisor email for document sharing.
      steps:
      - name: get-portfolio
        type: call
        call: snowflake.query-portfolio
        with:
          statement: SELECT * FROM PORTFOLIO_SUMMARY WHERE account_id = '{{account_id}}'
          warehouse: SCHWAB_ANALYTICS_WH
      - name: get-interactions
        type: call
        call: salesforce.get-activities
        with:
          account_id: '{{account_id}}'
      - name: get-market-outlook
        type: call
        call: bloomberg.get-research
        with:
          topic: market-outlook
          format: summary
      - name: create-briefing
        type: call
        call: googledocs.create-document
        with:
          title: 'Client Review: {{account_id}} - {{get-portfolio.client_name}}'
          content: 'Portfolio Value: {{get-portfolio.total_value}}

            YTD Return: {{get-portfolio.ytd_return}}

            Recent Activity: {{get-interactions.summary}}

            Market Outlook: {{get-market-outlook.summary}}'
          share_with: '{{advisor_email}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://schwab.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: query-portfolio
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://schwab.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: activities
      path: /sobjects/Account/{{account_id}}/Activities
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-activities
        method: GET
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: research
      path: /research
      operations:
      - name: get-research
        method: GET
  - type: http
    namespace: googledocs
    baseUri: https://docs.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_docs_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: create-document
        method: POST
Open in Framework → View in Fleet → advisor-client-review-prep-orchestrator.yml

On trade settlement failure, retrieves trade details from Calypso, checks counterparty status in Bloomberg, creates a Jira ticket for operations, and escalates via PagerDuty.

naftiko: '0.5'
info:
  label: Trade Failure Resolution Pipeline
  description: On trade settlement failure, retrieves trade details from Calypso, checks counterparty status in Bloomberg, creates a Jira ticket for operations, and escalates via PagerDuty.
  tags:
  - trade-operations
  - settlement
  - calypso
  - bloomberg
  - jira
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: trade-failure
    port: 8080
    tools:
    - name: resolve-trade-failure
      description: Orchestrate trade failure resolution across Calypso, Bloomberg, Jira, and PagerDuty.
      inputParameters:
      - name: trade_id
        in: body
        type: string
        description: Failed trade identifier.
      - name: failure_reason
        in: body
        type: string
        description: Settlement failure reason code.
      steps:
      - name: get-trade
        type: call
        call: calypso.get-trade
        with:
          trade_id: '{{trade_id}}'
      - name: check-counterparty
        type: call
        call: bloomberg.get-counterparty
        with:
          counterparty_id: '{{get-trade.counterparty_id}}'
      - name: create-jira
        type: call
        call: jira.create-issue
        with:
          project: TRADEOPS
          summary: 'Settlement failure: {{trade_id}} - {{failure_reason}}'
          description: 'Trade: {{trade_id}}

            Counterparty: {{check-counterparty.name}}

            Amount: {{get-trade.settlement_amount}}

            Failure: {{failure_reason}}'
          issuetype: Incident
      - name: escalate
        type: call
        call: pagerduty.create-incident
        with:
          service_id: TRADE_SETTLEMENT
          title: 'Trade settlement failure: {{trade_id}}'
          body: 'Jira: {{create-jira.key}}. Counterparty: {{check-counterparty.name}}.'
  consumes:
  - type: http
    namespace: calypso
    baseUri: https://calypso.schwab.com/api/v1
    authentication:
      type: bearer
      token: $secrets.calypso_token
    resources:
    - name: trades
      path: /trades/{{trade_id}}
      inputParameters:
      - name: trade_id
        in: path
      operations:
      - name: get-trade
        method: GET
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: counterparties
      path: /counterparties/{{counterparty_id}}
      inputParameters:
      - name: counterparty_id
        in: path
      operations:
      - name: get-counterparty
        method: GET
  - type: http
    namespace: jira
    baseUri: https://schwab.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → trade-failure-resolution-pipeline.yml

On advisor rebalance request, retrieves portfolio holdings from Snowflake, runs compliance checks via the internal API, generates trade orders in the OMS, and notifies the advisor via Microsoft Teams.

naftiko: '0.5'
info:
  label: Client Portfolio Rebalance Orchestrator
  description: On advisor rebalance request, retrieves portfolio holdings from Snowflake, runs compliance checks via the internal API, generates trade orders in the OMS, and notifies the advisor via Microsoft Teams.
  tags:
  - portfolio-management
  - rebalancing
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: portfolio-rebalance
    port: 8080
    tools:
    - name: trigger-rebalance
      description: Orchestrate a portfolio rebalance across holdings analysis, compliance, and order generation.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Client account ID.
      - name: target_model
        in: body
        type: string
        description: Target allocation model name.
      - name: advisor_email
        in: body
        type: string
        description: Advisor email for notification.
      steps:
      - name: get-holdings
        type: call
        call: snowflake.query-holdings
        with:
          statement: SELECT * FROM PORTFOLIO_HOLDINGS WHERE account_id = '{{account_id}}'
          warehouse: SCHWAB_ANALYTICS_WH
      - name: run-compliance
        type: call
        call: compliance.check-rebalance
        with:
          account_id: '{{account_id}}'
          target_model: '{{target_model}}'
          holdings: '{{get-holdings.data}}'
      - name: generate-orders
        type: call
        call: oms.create-orders
        with:
          account_id: '{{account_id}}'
          trades: '{{run-compliance.approved_trades}}'
      - name: notify-advisor
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{advisor_email}}'
          text: 'Rebalance initiated for account {{account_id}}. Orders: {{generate-orders.order_count}}. Compliance status: {{run-compliance.status}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://schwab.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: query-holdings
        method: POST
  - type: http
    namespace: compliance
    baseUri: https://compliance-api.schwab.com/v1
    authentication:
      type: bearer
      token: $secrets.compliance_api_token
    resources:
    - name: checks
      path: /rebalance-check
      operations:
      - name: check-rebalance
        method: POST
  - type: http
    namespace: oms
    baseUri: https://oms-api.schwab.com/v2
    authentication:
      type: bearer
      token: $secrets.oms_api_token
    resources:
    - name: orders
      path: /orders/batch
      operations:
      - name: create-orders
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → client-portfolio-rebalance-orchestrator.yml

Triggers an Informatica data quality job to validate and cleanse client master data records.

naftiko: '0.5'
info:
  label: Informatica Client Data Quality Pipeline
  description: Triggers an Informatica data quality job to validate and cleanse client master data records.
  tags:
  - data-quality
  - master-data
  - informatica
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: run-data-quality-job
      description: Trigger an Informatica data quality validation job for client records.
      inputParameters:
      - name: job_name
        in: body
        type: string
        description: Informatica job name.
      - name: scope
        in: body
        type: string
        description: Data scope (all_clients, new_accounts, address_updates).
      call: informatica.run-job
      with:
        job_name: '{{job_name}}'
        parameters: '{"scope": "{{scope}}"}'
      outputParameters:
      - name: run_id
        type: string
        mapping: $.runId
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: informatica
    baseUri: https://na1.dm-us.informaticacloud.com/saas/api/v2
    authentication:
      type: bearer
      token: $secrets.informatica_token
    resources:
    - name: jobs
      path: /job
      operations:
      - name: run-job
        method: POST
Open in Framework → View in Fleet → informatica-client-data-quality-pipeline.yml

Digitizes paper client documents by processing scans via Azure AI Document Intelligence, extracting data, storing in Amazon S3, indexing in Elasticsearch, and updating the CRM.

naftiko: '0.5'
info:
  label: Client Document Digitization Pipeline
  description: Digitizes paper client documents by processing scans via Azure AI Document Intelligence, extracting data, storing in Amazon S3, indexing in Elasticsearch, and updating the CRM.
  tags:
  - document-management
  - ocr
  - azure-machine-learning
  - amazon-s3
  - elasticsearch
capability:
  exposes:
  - type: mcp
    namespace: document-digitization
    port: 8080
    tools:
    - name: digitize-document
      description: Orchestrate document digitization across Azure AI, S3, Elasticsearch, and Salesforce.
      inputParameters:
      - name: document_url
        in: body
        type: string
        description: URL of scanned document.
      - name: document_type
        in: body
        type: string
        description: Document type (account-app, w9, transfer-form).
      - name: account_id
        in: body
        type: string
        description: Associated account ID.
      steps:
      - name: extract-data
        type: call
        call: azure-ai.analyze-document
        with:
          modelId: '{{document_type}}'
          urlSource: '{{document_url}}'
      - name: store-document
        type: call
        call: s3.put-object
        with:
          bucket: schwab-digitized-docs
          key: '{{account_id}}/{{document_type}}/{{extract-data.document_id}}.json'
          body: '{{extract-data.result}}'
      - name: index-document
        type: call
        call: elasticsearch.index
        with:
          index: client-documents
          body: '{"account_id":"{{account_id}}","type":"{{document_type}}","extracted_data":{{extract-data.fields}},"s3_key":"{{store-document.key}}"}'
      - name: update-crm
        type: call
        call: salesforce.create-content-note
        with:
          account_id: '{{account_id}}'
          title: 'Digitized: {{document_type}}'
          content: 'Document processed. Fields extracted: {{extract-data.field_count}}.'
  consumes:
  - type: http
    namespace: azure-ai
    baseUri: https://schwab-docai.cognitiveservices.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_ai_key
    resources:
    - name: documents
      path: /formrecognizer/documentModels/{{modelId}}:analyze
      inputParameters:
      - name: modelId
        in: path
      operations:
      - name: analyze-document
        method: POST
  - type: http
    namespace: s3
    baseUri: https://s3.us-east-1.amazonaws.com
    authentication:
      type: aws-sig-v4
      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: elasticsearch
    baseUri: https://es-cluster.schwab.com
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: docs
      path: /{{index}}/_doc
      inputParameters:
      - name: index
        in: path
      operations:
      - name: index
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://schwab.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: content
      path: /sobjects/ContentNote
      operations:
      - name: create-content-note
        method: POST
Open in Framework → View in Fleet → client-document-digitization-pipeline.yml

Queries Salesforce for a financial advisor's client book of business with account balances and recent activity.

naftiko: '0.5'
info:
  label: Salesforce Client Relationship Dashboard
  description: Queries Salesforce for a financial advisor's client book of business with account balances and recent activity.
  tags:
  - crm
  - client-management
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: client-crm
    port: 8080
    tools:
    - name: get-advisor-book
      description: Retrieve a financial advisor's client portfolio from Salesforce.
      inputParameters:
      - name: advisor_id
        in: body
        type: string
        description: Advisor Salesforce user ID.
      call: salesforce.query
      with:
        q: SELECT Name, Account_Number__c, Total_Assets__c, Last_Contact_Date__c, Account_Type__c FROM Account WHERE OwnerId = '{{advisor_id}}' AND RecordType.Name = 'Client' ORDER BY Total_Assets__c DESC
      outputParameters:
      - name: clients
        type: array
        mapping: $.records
      - name: total_clients
        type: integer
        mapping: $.totalSize
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://schwab.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query
      operations:
      - name: query
        method: GET
Open in Framework → View in Fleet → salesforce-client-relationship-dashboard.yml

Triggers a refresh of the Power BI client portfolio analytics dashboard used by financial advisors.

naftiko: '0.5'
info:
  label: Power BI Client Portfolio Dashboard
  description: Triggers a refresh of the Power BI client portfolio analytics dashboard used by financial advisors.
  tags:
  - analytics
  - portfolio
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: portfolio-reporting
    port: 8080
    tools:
    - name: refresh-portfolio-dashboard
      description: Trigger a Power BI dataset refresh for the portfolio analytics dashboard.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset ID.
      call: powerbi.trigger-refresh
      with:
        dataset_id: '{{dataset_id}}'
      outputParameters:
      - name: request_id
        type: string
        mapping: $.requestId
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: refreshes
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
Open in Framework → View in Fleet → power-bi-client-portfolio-dashboard.yml

Retrieves application health metrics from New Relic for Schwab's client-facing web and mobile applications.

naftiko: '0.5'
info:
  label: New Relic Application Performance Monitor
  description: Retrieves application health metrics from New Relic for Schwab's client-facing web and mobile applications.
  tags:
  - monitoring
  - devops
  - new-relic
capability:
  exposes:
  - type: mcp
    namespace: app-health
    port: 8080
    tools:
    - name: get-app-health
      description: Fetch application performance metrics from New Relic.
      inputParameters:
      - name: app_name
        in: body
        type: string
        description: New Relic application name.
      call: newrelic.get-app-metrics
      with:
        app_name: '{{app_name}}'
      outputParameters:
      - name: error_rate
        type: number
        mapping: $.application.application_summary.error_rate
      - name: response_time
        type: number
        mapping: $.application.application_summary.response_time
      - name: throughput
        type: number
        mapping: $.application.application_summary.throughput
  consumes:
  - type: http
    namespace: newrelic
    baseUri: https://api.newrelic.com/v2
    authentication:
      type: apiKey
      key: $secrets.newrelic_api_key
    resources:
    - name: applications
      path: /applications.json
      operations:
      - name: get-app-metrics
        method: GET
Open in Framework → View in Fleet → new-relic-application-performance-monitor.yml

Publishes investment research notes to Confluence and notifies the research distribution team via Teams.

naftiko: '0.5'
info:
  label: Confluence Investment Research Publisher
  description: Publishes investment research notes to Confluence and notifies the research distribution team via Teams.
  tags:
  - research
  - knowledge-management
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: research-publishing
    port: 8080
    tools:
    - name: publish-research-note
      description: Create a research note in Confluence and notify the distribution team.
      inputParameters:
      - name: space_key
        in: body
        type: string
        description: Confluence space key.
      - name: title
        in: body
        type: string
        description: Research note title.
      - name: content
        in: body
        type: string
        description: Research content.
      - name: sector
        in: body
        type: string
        description: Market sector.
      steps:
      - name: create-page
        type: call
        call: confluence.create-page
        with:
          space_key: '{{space_key}}'
          title: '{{title}}'
          body: '{{content}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: research_distribution
          text: 'New research published: {{title}} ({{sector}}). View: {{create-page.url}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://schwab.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → confluence-investment-research-publisher.yml

Retrieves sprint progress from Jira for the Schwab digital platform engineering team.

naftiko: '0.5'
info:
  label: Jira Development Sprint Tracker
  description: Retrieves sprint progress from Jira for the Schwab digital platform engineering team.
  tags:
  - development
  - project-management
  - jira
capability:
  exposes:
  - type: mcp
    namespace: dev-tracking
    port: 8080
    tools:
    - name: get-sprint-progress
      description: Fetch current sprint progress from Jira.
      inputParameters:
      - name: board_id
        in: body
        type: string
        description: Jira board ID.
      call: jira.get-active-sprint
      with:
        board_id: '{{board_id}}'
      outputParameters:
      - name: sprint_name
        type: string
        mapping: $.values[0].name
      - name: start_date
        type: string
        mapping: $.values[0].startDate
      - name: end_date
        type: string
        mapping: $.values[0].endDate
  consumes:
  - type: http
    namespace: jira
    baseUri: https://schwab.atlassian.net/rest/agile/1.0
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: sprints
      path: /board/{{board_id}}/sprint
      inputParameters:
      - name: board_id
        in: path
      operations:
      - name: get-active-sprint
        method: GET
Open in Framework → View in Fleet → jira-development-sprint-tracker.yml

Processes beneficiary change requests by validating in Salesforce, sending DocuSign forms, updating the account system, and archiving documents in Box.

naftiko: '0.5'
info:
  label: Beneficiary Update Processing Pipeline
  description: Processes beneficiary change requests by validating in Salesforce, sending DocuSign forms, updating the account system, and archiving documents in Box.
  tags:
  - account-services
  - beneficiary
  - salesforce
  - docusign
  - box
capability:
  exposes:
  - type: mcp
    namespace: beneficiary-updates
    port: 8080
    tools:
    - name: process-beneficiary-update
      description: Orchestrate beneficiary update across Salesforce, DocuSign, and Box.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Client account ID.
      - name: beneficiary_name
        in: body
        type: string
        description: New beneficiary full name.
      - name: relationship
        in: body
        type: string
        description: Relationship to account holder.
      steps:
      - name: get-account
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{account_id}}'
      - name: send-form
        type: call
        call: docusign.create-envelope
        with:
          templateId: beneficiary-change-form
          signerEmail: '{{get-account.email}}'
          signerName: '{{get-account.name}}'
      - name: archive-request
        type: call
        call: box.upload-file
        with:
          folder_id: beneficiary_changes
          filename: '{{account_id}}_beneficiary_{{beneficiary_name}}.pdf'
          content: 'Beneficiary change: {{beneficiary_name}} ({{relationship}}) for account {{account_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://schwab.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: docusign
    baseUri: https://na4.docusign.net/restapi/v2.1/accounts/$secrets.docusign_account_id
    authentication:
      type: bearer
      token: $secrets.docusign_access_token
    resources:
    - name: envelopes
      path: /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_access_token
    resources:
    - name: files
      path: /files/content
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → beneficiary-update-processing-pipeline.yml

Checks F5 load balancer pools for the trading gateway infrastructure.

naftiko: '0.5'
info:
  label: F5 Networks Trading Gateway Health
  description: Checks F5 load balancer pools for the trading gateway infrastructure.
  tags:
  - infrastructure
  - trading
  - f5-networks
capability:
  exposes:
  - type: mcp
    namespace: trading-infra
    port: 8080
    tools:
    - name: check-gateway-health
      description: Check F5 pool health for trading gateways.
      inputParameters:
      - name: pool_name
        in: body
        type: string
        description: F5 pool name.
      call: f5.get-pool-members
      with:
        pool_name: '{{pool_name}}'
      outputParameters:
      - name: available_count
        type: integer
        mapping: $.available_count
      - name: total_count
        type: integer
        mapping: $.total_count
  consumes:
  - type: http
    namespace: f5
    baseUri: https://f5.schwab.com/mgmt/tm/ltm
    authentication:
      type: basic
      username: $secrets.f5_user
      password: $secrets.f5_password
    resources:
    - name: pool-members
      path: /pool/{{pool_name}}/members
      inputParameters:
      - name: pool_name
        in: path
      operations:
      - name: get-pool-members
        method: GET
Open in Framework → View in Fleet → f5-networks-trading-gateway-health.yml

Retrieves fundamental financial data from FactSet for equity research and investment analysis.

naftiko: '0.5'
info:
  label: FactSet Research Data Retriever
  description: Retrieves fundamental financial data from FactSet for equity research and investment analysis.
  tags:
  - research
  - fundamentals
  - factset
capability:
  exposes:
  - type: mcp
    namespace: equity-research
    port: 8080
    tools:
    - name: get-fundamentals
      description: Fetch fundamental financial data from FactSet for a given company.
      inputParameters:
      - name: ticker
        in: body
        type: string
        description: Stock ticker symbol.
      - name: metrics
        in: body
        type: string
        description: Comma-separated metrics (e.g., PE_RATIO,EPS,REVENUE,MARKET_CAP).
      call: factset.get-fundamentals
      with:
        ids: '{{ticker}}'
        metrics: '{{metrics}}'
      outputParameters:
      - name: data
        type: object
        mapping: $.data[0]
      - name: company_name
        type: string
        mapping: $.data[0].companyName
  consumes:
  - type: http
    namespace: factset
    baseUri: https://api.factset.com/content
    authentication:
      type: basic
      username: $secrets.factset_user
      password: $secrets.factset_api_key
    resources:
    - name: fundamentals
      path: /factset-fundamentals/v2/fundamentals
      operations:
      - name: get-fundamentals
        method: POST
Open in Framework → View in Fleet → factset-research-data-retriever.yml

Deploys risk models from Databricks to production by validating model metrics, registering in MLflow, deploying to the serving endpoint, and notifying the risk team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Databricks Risk Model Deployment Pipeline
  description: Deploys risk models from Databricks to production by validating model metrics, registering in MLflow, deploying to the serving endpoint, and notifying the risk team via Microsoft Teams.
  tags:
  - machine-learning
  - risk-modeling
  - databricks
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ml-deployment
    port: 8080
    tools:
    - name: deploy-risk-model
      description: Orchestrate risk model deployment across Databricks, MLflow, and Teams.
      inputParameters:
      - name: model_name
        in: body
        type: string
        description: Model name in the registry.
      - name: model_version
        in: body
        type: string
        description: Model version to deploy.
      steps:
      - name: validate-metrics
        type: call
        call: databricks.get-model-metrics
        with:
          name: '{{model_name}}'
          version: '{{model_version}}'
      - name: register-model
        type: call
        call: databricks.transition-model-stage
        with:
          name: '{{model_name}}'
          version: '{{model_version}}'
          stage: Production
      - name: deploy-endpoint
        type: call
        call: databricks.create-serving-endpoint
        with:
          name: '{{model_name}}-serving'
          model_name: '{{model_name}}'
          model_version: '{{model_version}}'
      - name: notify-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: risk-analytics
          channel: model-deployments
          text: 'Risk model deployed: {{model_name}} v{{model_version}}. Metrics: AUC={{validate-metrics.auc}}, F1={{validate-metrics.f1}}. Endpoint: {{deploy-endpoint.url}}.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://schwab.cloud.databricks.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: models
      path: /mlflow/model-versions/get
      operations:
      - name: get-model-metrics
        method: GET
    - name: transitions
      path: /mlflow/model-versions/transition-stage
      operations:
      - name: transition-model-stage
        method: POST
    - name: endpoints
      path: /serving-endpoints
      operations:
      - name: create-serving-endpoint
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → databricks-risk-model-deployment-pipeline.yml

Retrieves crash reports from New Relic for the Schwab mobile trading application, returning crash rate, affected users, and stack traces.

naftiko: '0.5'
info:
  label: Schwab Mobile App Crash Reporter
  description: Retrieves crash reports from New Relic for the Schwab mobile trading application, returning crash rate, affected users, and stack traces.
  tags:
  - mobile
  - monitoring
  - new-relic
capability:
  exposes:
  - type: mcp
    namespace: mobile-monitoring
    port: 8080
    tools:
    - name: get-crash-reports
      description: Fetch mobile app crash reports from New Relic.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: New Relic mobile application ID.
      - name: time_range
        in: body
        type: string
        description: Time range in hours (e.g., 24, 48, 168).
      call: newrelic.get-crashes
      with:
        application_id: '{{app_id}}'
        time_range: '{{time_range}}'
      outputParameters:
      - name: crash_rate
        type: number
        mapping: $.crash_summary.crash_rate
      - name: affected_users
        type: integer
        mapping: $.crash_summary.unique_users
      - name: top_crashes
        type: array
        mapping: $.crash_summary.top_crashes
  consumes:
  - type: http
    namespace: newrelic
    baseUri: https://api.newrelic.com/v2
    authentication:
      type: bearer
      token: $secrets.newrelic_api_key
    resources:
    - name: mobile-crashes
      path: /mobile_applications/{{application_id}}/crashes.json
      inputParameters:
      - name: application_id
        in: path
      operations:
      - name: get-crashes
        method: GET
Open in Framework → View in Fleet → schwab-mobile-app-crash-reporter.yml

Runs performance analytics queries against the Teradata warehouse for fund historical returns.

naftiko: '0.5'
info:
  label: Teradata Historical Performance Query
  description: Runs performance analytics queries against the Teradata warehouse for fund historical returns.
  tags:
  - analytics
  - performance
  - teradata
capability:
  exposes:
  - type: mcp
    namespace: performance-analytics
    port: 8080
    tools:
    - name: query-fund-performance
      description: Query Teradata for fund historical performance.
      inputParameters:
      - name: fund_ticker
        in: body
        type: string
        description: Fund ticker.
      - name: period
        in: body
        type: string
        description: Period.
      call: teradata.run-query
      with:
        query: SELECT ticker, period_return_pct, benchmark_return_pct, alpha, sharpe_ratio FROM fund_performance WHERE ticker='{{fund_ticker}}' AND period='{{period}}'
      outputParameters:
      - name: results
        type: object
        mapping: $.results[0]
  consumes:
  - type: http
    namespace: teradata
    baseUri: https://teradata.schwab.com/api/query/v1
    authentication:
      type: basic
      username: $secrets.teradata_user
      password: $secrets.teradata_password
    resources:
    - name: queries
      path: /tdrest/systems/schwab_edw/queries
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → teradata-historical-performance-query.yml

When an AML alert fires, enriches it with transaction data from Snowflake, creates a ServiceNow compliance case, and notifies the BSA team via Teams.

naftiko: '0.5'
info:
  label: Anti-Money Laundering Alert Processor
  description: When an AML alert fires, enriches it with transaction data from Snowflake, creates a ServiceNow compliance case, and notifies the BSA team via Teams.
  tags:
  - compliance
  - aml
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: aml-compliance
    port: 8080
    tools:
    - name: process-aml-alert
      description: Enrich an AML alert with transaction data and create a compliance case.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: AML alert identifier.
      - name: account_number
        in: body
        type: string
        description: Account under review.
      - name: alert_type
        in: body
        type: string
        description: Alert type (structuring, rapid_movement, high_risk_geo, unusual_pattern).
      steps:
      - name: get-transactions
        type: call
        call: snowflake.run-query
        with:
          query: SELECT transaction_id, amount, transaction_type, counterparty, country, transaction_date FROM transactions WHERE account_number='{{account_number}}' AND transaction_date >= DATEADD(day, -90, CURRENT_DATE()) ORDER BY transaction_date DESC LIMIT 100
      - name: create-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'AML Alert: {{alert_type}} - Account {{account_number}}'
          category: aml_compliance
          urgency: high
          description: 'AML alert {{alert_id}} for account {{account_number}}. Type: {{alert_type}}. Recent transaction count: {{get-transactions.row_count}}.'
      - name: notify-bsa-team
        type: call
        call: msteams.send-message
        with:
          channel_id: bsa_compliance
          text: 'AML ALERT [{{alert_type}}]: Account {{account_number}}. Alert: {{alert_id}}. Case: {{create-case.number}}. Review required within 24 hours.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://schwab.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://schwab.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → anti-money-laundering-alert-processor.yml

Searches Elasticsearch indices for trade execution logs by account, symbol, or time range for compliance audit trails.

naftiko: '0.5'
info:
  label: Elasticsearch Trade Log Search
  description: Searches Elasticsearch indices for trade execution logs by account, symbol, or time range for compliance audit trails.
  tags:
  - compliance
  - logging
  - elasticsearch
capability:
  exposes:
  - type: mcp
    namespace: trade-logs
    port: 8080
    tools:
    - name: search-trade-logs
      description: Search trade execution logs in Elasticsearch.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Client account identifier.
      - name: symbol
        in: body
        type: string
        description: Security symbol to filter by.
      - name: date_from
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      call: elasticsearch.search
      with:
        index: trade-executions-*
        query: '{"bool":{"must":[{"term":{"account_id":"{{account_id}}"}},{"term":{"symbol":"{{symbol}}"}},{"range":{"timestamp":{"gte":"{{date_from}}"}}}]}}'
      outputParameters:
      - name: trades
        type: array
        mapping: $.hits.hits
      - name: total
        type: integer
        mapping: $.hits.total.value
  consumes:
  - type: http
    namespace: elasticsearch
    baseUri: https://es-cluster.schwab.com
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: search
      path: /{{index}}/_search
      inputParameters:
      - name: index
        in: path
      operations:
      - name: search
        method: POST
Open in Framework → View in Fleet → elasticsearch-trade-log-search.yml

Monitors Cloudflare DDoS protection status and traffic analytics for Schwab's public-facing web properties.

naftiko: '0.5'
info:
  label: Cloudflare DDoS Protection Monitor
  description: Monitors Cloudflare DDoS protection status and traffic analytics for Schwab's public-facing web properties.
  tags:
  - security
  - ddos
  - cloudflare
capability:
  exposes:
  - type: mcp
    namespace: ddos-monitoring
    port: 8080
    tools:
    - name: get-traffic-analytics
      description: Retrieve Cloudflare traffic analytics and DDoS event data.
      inputParameters:
      - name: zone_id
        in: body
        type: string
        description: Cloudflare zone ID.
      - name: time_range
        in: body
        type: string
        description: Time range in minutes.
      call: cloudflare.get-analytics
      with:
        zone_id: '{{zone_id}}'
        since: -{{time_range}}min
      outputParameters:
      - name: requests_total
        type: integer
        mapping: $.result.totals.requests.all
      - name: threats_total
        type: integer
        mapping: $.result.totals.threats.all
  consumes:
  - type: http
    namespace: cloudflare
    baseUri: https://api.cloudflare.com/client/v4
    authentication:
      type: bearer
      token: $secrets.cloudflare_token
    resources:
    - name: analytics
      path: /zones/{{zone_id}}/analytics/dashboard
      inputParameters:
      - name: zone_id
        in: path
      operations:
      - name: get-analytics
        method: GET
Open in Framework → View in Fleet → cloudflare-ddos-protection-monitor.yml

Retrieves an IT incident from ServiceNow by number and returns current state, assignee, and resolution details.

naftiko: '0.5'
info:
  label: ServiceNow IT Incident Lookup
  description: Retrieves an IT incident from ServiceNow by number and returns current state, assignee, and resolution details.
  tags:
  - it-support
  - incident-management
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: it-support
    port: 8080
    tools:
    - name: get-incident
      description: Look up a ServiceNow incident by number.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: Incident number.
      call: servicenow.get-incident
      with:
        number: '{{incident_number}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.result[0].state
      - name: assigned_to
        type: string
        mapping: $.result[0].assigned_to.display_value
      - name: short_description
        type: string
        mapping: $.result[0].short_description
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://schwab.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → servicenow-it-incident-lookup.yml

Checks secret rotation status and lease expiration in HashiCorp Vault for Schwab trading platform credentials.

naftiko: '0.5'
info:
  label: HashiCorp Vault Secret Rotation Status
  description: Checks secret rotation status and lease expiration in HashiCorp Vault for Schwab trading platform credentials.
  tags:
  - security
  - secrets-management
  - hashicorp-vault
capability:
  exposes:
  - type: mcp
    namespace: secrets-management
    port: 8080
    tools:
    - name: check-secret-status
      description: Check a secret's lease and rotation status in Vault.
      inputParameters:
      - name: secret_path
        in: body
        type: string
        description: Vault secret path (e.g., secret/data/trading/db-creds).
      call: vault.read-secret-metadata
      with:
        path: '{{secret_path}}'
      outputParameters:
      - name: version
        type: integer
        mapping: $.data.current_version
      - name: created_time
        type: string
        mapping: $.data.versions.*.created_time
      - name: deletion_time
        type: string
        mapping: $.data.versions.*.deletion_time
  consumes:
  - type: http
    namespace: vault
    baseUri: https://vault.schwab.com/v1
    authentication:
      type: bearer
      token: $secrets.vault_token
    resources:
    - name: metadata
      path: /{{path}}/metadata
      inputParameters:
      - name: path
        in: path
      operations:
      - name: read-secret-metadata
        method: GET
Open in Framework → View in Fleet → hashicorp-vault-secret-rotation-status.yml

On new client account creation in Salesforce, opens a ServiceNow provisioning ticket, creates a SharePoint document folder, and notifies the relationship manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: Client Account Onboarding Orchestrator
  description: On new client account creation in Salesforce, opens a ServiceNow provisioning ticket, creates a SharePoint document folder, and notifies the relationship manager via Microsoft Teams.
  tags:
  - client-services
  - onboarding
  - salesforce
  - servicenow
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: client-onboarding
    port: 8080
    tools:
    - name: trigger-account-onboarding
      description: Orchestrate new client account onboarding across Salesforce, ServiceNow, SharePoint, and Teams.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Salesforce account ID.
      - name: client_name
        in: body
        type: string
        description: Client full name.
      - name: account_type
        in: body
        type: string
        description: Account type (individual, joint, ira, trust, corporate).
      - name: advisor_email
        in: body
        type: string
        description: Financial advisor email.
      steps:
      - name: get-account
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{account_id}}'
      - name: create-provisioning-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'New account setup: {{client_name}} ({{account_type}})'
          category: account_provisioning
          assigned_group: Client_Operations
          description: 'Provision new {{account_type}} account for {{client_name}}. SF Account: {{account_id}}.'
      - name: provision-folder
        type: call
        call: sharepoint.create-folder
        with:
          site_id: client_documents
          folder_path: Accounts/{{client_name}}_{{account_id}}
      - name: notify-advisor
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{advisor_email}}'
          text: 'New account opened: {{client_name}} ({{account_type}}). Provisioning ticket: {{create-provisioning-ticket.number}}. Documents: {{provision-folder.url}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://schwab.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: servicenow
    baseUri: https://schwab.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → client-account-onboarding-orchestrator.yml

Runs a portfolio risk analytics model in Databricks calculating VaR, stress tests, and correlation analysis, then stores results in Snowflake.

naftiko: '0.5'
info:
  label: Databricks Risk Analytics Model
  description: Runs a portfolio risk analytics model in Databricks calculating VaR, stress tests, and correlation analysis, then stores results in Snowflake.
  tags:
  - risk-management
  - analytics
  - databricks
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: risk-analytics
    port: 8080
    tools:
    - name: run-risk-model
      description: Execute the Databricks risk model and store results in Snowflake.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: Portfolio identifier.
      - name: model_type
        in: body
        type: string
        description: Risk model type (var_historical, var_parametric, monte_carlo, stress_test).
      - name: confidence_level
        in: body
        type: number
        description: Confidence level (e.g., 0.95, 0.99).
      steps:
      - name: run-notebook
        type: call
        call: databricks.run-notebook
        with:
          notebook_path: /Shared/risk_models/{{model_type}}
          parameters: '{"portfolio_id": "{{portfolio_id}}", "confidence": {{confidence_level}}}'
      - name: load-results
        type: call
        call: snowflake.run-query
        with:
          query: CALL load_risk_results('{{portfolio_id}}', '{{model_type}}')
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://schwab.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/runs/submit
      operations:
      - name: run-notebook
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://schwab.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → databricks-risk-analytics-model.yml

Queries Datadog for real-time health metrics of the trading platform including order latency and throughput.

naftiko: '0.5'
info:
  label: Datadog Trading Platform Monitor
  description: Queries Datadog for real-time health metrics of the trading platform including order latency and throughput.
  tags:
  - devops
  - monitoring
  - trading
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: trading-monitoring
    port: 8080
    tools:
    - name: check-trading-health
      description: Fetch trading platform health metrics from Datadog.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: Trading service name in Datadog.
      call: datadog.query-metrics
      with:
        query: avg:trading.order_latency_ms{service:{{service_name}}}.rollup(avg, 60)
      outputParameters:
      - name: avg_latency
        type: number
        mapping: $.series[0].pointlist[-1][1]
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /query
      operations:
      - name: query-metrics
        method: GET
Open in Framework → View in Fleet → datadog-trading-platform-monitor.yml

Queries Dynatrace for performance problems affecting the order execution path to detect latency spikes.

naftiko: '0.5'
info:
  label: Dynatrace Trading Latency Detector
  description: Queries Dynatrace for performance problems affecting the order execution path to detect latency spikes.
  tags:
  - monitoring
  - trading
  - dynatrace
capability:
  exposes:
  - type: mcp
    namespace: trading-performance
    port: 8080
    tools:
    - name: get-latency-problems
      description: Retrieve latency-related problems from Dynatrace for trading systems.
      inputParameters:
      - name: time_range
        in: body
        type: string
        description: Time range.
      call: dynatrace.get-problems
      with:
        relativeTime: '{{time_range}}'
        status: OPEN
        impactLevel: SERVICE
      outputParameters:
      - name: problems
        type: array
        mapping: $.result
      - name: total_count
        type: integer
        mapping: $.totalCount
  consumes:
  - type: http
    namespace: dynatrace
    baseUri: https://schwab.live.dynatrace.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: problems
      path: /problems
      operations:
      - name: get-problems
        method: GET
Open in Framework → View in Fleet → dynatrace-trading-latency-detector.yml

Checks overdue compliance training in Pluralsight, retrieves employee data from Workday, sends reminder emails via Microsoft Outlook, and logs escalations in ServiceNow.

naftiko: '0.5'
info:
  label: Compliance Training Deadline Enforcer
  description: Checks overdue compliance training in Pluralsight, retrieves employee data from Workday, sends reminder emails via Microsoft Outlook, and logs escalations in ServiceNow.
  tags:
  - compliance
  - training
  - pluralsight
  - workday
  - microsoft-outlook
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: compliance-training
    port: 8080
    tools:
    - name: enforce-training-deadline
      description: Orchestrate compliance training deadline enforcement across Pluralsight, Workday, Outlook, and ServiceNow.
      inputParameters:
      - name: training_id
        in: body
        type: string
        description: Compliance training course ID.
      - name: deadline_date
        in: body
        type: string
        description: Deadline date in YYYY-MM-DD.
      steps:
      - name: get-overdue
        type: call
        call: pluralsight.get-overdue-users
        with:
          course_id: '{{training_id}}'
          deadline: '{{deadline_date}}'
      - name: get-managers
        type: call
        call: workday.get-managers
        with:
          employee_ids: '{{get-overdue.user_ids}}'
      - name: send-reminders
        type: call
        call: outlook.send-bulk-email
        with:
          recipients: '{{get-overdue.emails}}'
          subject: 'URGENT: Compliance Training Past Due - {{training_id}}'
          body: Your required compliance training is past the {{deadline_date}} deadline. Please complete immediately.
      - name: create-escalation
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Compliance training overdue: {{training_id}} - {{get-overdue.count}} employees'
          category: compliance
          assigned_group: Compliance_Operations
          description: '{{get-overdue.count}} employees overdue. Managers notified: {{get-managers.manager_names}}.'
  consumes:
  - type: http
    namespace: pluralsight
    baseUri: https://api.pluralsight.com/api/v1
    authentication:
      type: bearer
      token: $secrets.pluralsight_token
    resources:
    - name: reports
      path: /reports/course-completion
      operations:
      - name: get-overdue-users
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/managers
      operations:
      - name: get-managers
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/compliance@schwab.com/sendMail
      operations:
      - name: send-bulk-email
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://schwab.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → compliance-training-deadline-enforcer.yml

Coordinates new branch opening by verifying network setup in SolarWinds, confirming staffing in Workday, provisioning equipment via ServiceNow, and posting the opening on Google Maps.

naftiko: '0.5'
info:
  label: Branch Opening Readiness Orchestrator
  description: Coordinates new branch opening by verifying network setup in SolarWinds, confirming staffing in Workday, provisioning equipment via ServiceNow, and posting the opening on Google Maps.
  tags:
  - branch-operations
  - opening
  - solarwinds
  - workday
  - servicenow
  - google-maps
capability:
  exposes:
  - type: mcp
    namespace: branch-opening
    port: 8080
    tools:
    - name: check-branch-readiness
      description: Orchestrate branch opening readiness checks across SolarWinds, Workday, ServiceNow, and Google Maps.
      inputParameters:
      - name: branch_id
        in: body
        type: string
        description: New branch identifier.
      - name: opening_date
        in: body
        type: string
        description: Planned opening date.
      steps:
      - name: verify-network
        type: call
        call: solarwinds.check-site
        with:
          site_id: '{{branch_id}}'
      - name: verify-staffing
        type: call
        call: workday.get-site-workers
        with:
          site_id: '{{branch_id}}'
      - name: check-equipment
        type: call
        call: servicenow.get-assets
        with:
          location: '{{branch_id}}'
          status: deployed
      - name: update-listing
        type: call
        call: googlemaps.update-business
        with:
          branch_id: '{{branch_id}}'
          status: open
          opening_date: '{{opening_date}}'
  consumes:
  - type: http
    namespace: solarwinds
    baseUri: https://solarwinds.schwab.com/api/v1
    authentication:
      type: bearer
      token: $secrets.solarwinds_token
    resources:
    - name: sites
      path: /sites/{{site_id}}/health
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: check-site
        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
      operations:
      - name: get-site-workers
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://schwab.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: assets
      path: /table/alm_hardware
      operations:
      - name: get-assets
        method: GET
  - type: http
    namespace: googlemaps
    baseUri: https://mybusinessbusinessinformation.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_business_token
    resources:
    - name: locations
      path: /locations/{{branch_id}}
      inputParameters:
      - name: branch_id
        in: path
      operations:
      - name: update-business
        method: PATCH
Open in Framework → View in Fleet → branch-opening-readiness-orchestrator.yml

Compiles quarterly earnings data from Snowflake, generates visualizations in Tableau, creates the investor relations deck in Google Slides, and publishes to the investor portal via SharePoint.

naftiko: '0.5'
info:
  label: Quarterly Earnings Report Orchestrator
  description: Compiles quarterly earnings data from Snowflake, generates visualizations in Tableau, creates the investor relations deck in Google Slides, and publishes to the investor portal via SharePoint.
  tags:
  - investor-relations
  - earnings
  - snowflake
  - tableau
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: earnings-reporting
    port: 8080
    tools:
    - name: compile-earnings-report
      description: Orchestrate quarterly earnings report across Snowflake, Tableau, and SharePoint.
      inputParameters:
      - name: quarter
        in: body
        type: string
        description: Quarter identifier (e.g., 2026-Q1).
      steps:
      - name: get-financials
        type: call
        call: snowflake.query-financials
        with:
          statement: SELECT * FROM QUARTERLY_FINANCIALS WHERE quarter = '{{quarter}}'
          warehouse: SCHWAB_FINANCE_WH
      - name: refresh-dashboards
        type: call
        call: tableau.refresh-workbook
        with:
          workbook_id: quarterly-earnings
          datasource: '{{get-financials.datasource_id}}'
      - name: generate-deck
        type: call
        call: googleslides.create-presentation
        with:
          template_id: earnings-deck-template
          data: '{{get-financials.data}}'
          title: Schwab Q{{quarter}} Earnings
      - name: publish-portal
        type: call
        call: sharepoint.upload-file
        with:
          site_id: investor-relations
          path: Earnings/{{quarter}}/earnings-deck.pptx
          content: '{{generate-deck.file}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://schwab.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: query-financials
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://tableau.schwab.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/default/workbooks/{{workbook_id}}/refresh
      inputParameters:
      - name: workbook_id
        in: path
      operations:
      - name: refresh-workbook
        method: POST
  - type: http
    namespace: googleslides
    baseUri: https://slides.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_slides_token
    resources:
    - name: presentations
      path: /presentations
      operations:
      - name: create-presentation
        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:/{{path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: path
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → quarterly-earnings-report-orchestrator.yml

On AML alert trigger, retrieves transaction history from Teradata, pulls client KYC data from Salesforce, generates a SAR filing, and logs the case in ServiceNow.

naftiko: '0.5'
info:
  label: Suspicious Activity Report Pipeline
  description: On AML alert trigger, retrieves transaction history from Teradata, pulls client KYC data from Salesforce, generates a SAR filing, and logs the case in ServiceNow.
  tags:
  - compliance
  - aml
  - teradata
  - salesforce
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: aml-compliance
    port: 8080
    tools:
    - name: process-sar
      description: Orchestrate suspicious activity report generation across Teradata, Salesforce, and ServiceNow.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: AML alert identifier.
      - name: account_id
        in: body
        type: string
        description: Client account ID.
      steps:
      - name: get-transactions
        type: call
        call: teradata.query-transactions
        with:
          query: SELECT * FROM TRANSACTION_HISTORY WHERE account_id = '{{account_id}}' AND txn_date >= CURRENT_DATE - 90
      - name: get-kyc
        type: call
        call: salesforce.get-kyc
        with:
          account_id: '{{account_id}}'
      - name: generate-sar
        type: call
        call: compliance.create-sar
        with:
          alert_id: '{{alert_id}}'
          account_id: '{{account_id}}'
          transaction_summary: '{{get-transactions.summary}}'
          kyc_data: '{{get-kyc.data}}'
      - name: log-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'SAR filed: Alert {{alert_id}} - Account {{account_id}}'
          category: aml_compliance
          assigned_group: BSA_Compliance
          description: 'SAR reference: {{generate-sar.sar_id}}. Alert: {{alert_id}}. Account: {{account_id}}.'
  consumes:
  - type: http
    namespace: teradata
    baseUri: https://teradata.schwab.com/api/v1
    authentication:
      type: bearer
      token: $secrets.teradata_token
    resources:
    - name: queries
      path: /queries
      operations:
      - name: query-transactions
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://schwab.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: kyc
      path: /sobjects/KYC_Profile__c/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-kyc
        method: GET
  - type: http
    namespace: compliance
    baseUri: https://compliance-api.schwab.com/v1
    authentication:
      type: bearer
      token: $secrets.compliance_api_token
    resources:
    - name: sar
      path: /sar
      operations:
      - name: create-sar
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://schwab.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → suspicious-activity-report-pipeline.yml

Checks user authentication status and MFA enrollment in Okta for Schwab employee and advisor access management.

naftiko: '0.5'
info:
  label: Okta User Authentication Status
  description: Checks user authentication status and MFA enrollment in Okta for Schwab employee and advisor access management.
  tags:
  - identity
  - authentication
  - okta
capability:
  exposes:
  - type: mcp
    namespace: identity-management
    port: 8080
    tools:
    - name: get-user-auth-status
      description: Check a user's authentication status and MFA enrollment in Okta.
      inputParameters:
      - name: user_email
        in: body
        type: string
        description: User email address.
      call: okta.get-user
      with:
        login: '{{user_email}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: mfa_enrolled
        type: boolean
        mapping: $.credentials.provider.type
      - name: last_login
        type: string
        mapping: $.lastLogin
  consumes:
  - type: http
    namespace: okta
    baseUri: https://schwab.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_api_token
    resources:
    - name: users
      path: /users/{{login}}
      inputParameters:
      - name: login
        in: path
      operations:
      - name: get-user
        method: GET
Open in Framework → View in Fleet → okta-user-authentication-status.yml

Runs an Alteryx workflow to segment clients by investment behavior, risk tolerance, and asset allocation for targeted advisory services.

naftiko: '0.5'
info:
  label: Alteryx Client Segmentation Workflow
  description: Runs an Alteryx workflow to segment clients by investment behavior, risk tolerance, and asset allocation for targeted advisory services.
  tags:
  - analytics
  - client-segmentation
  - alteryx
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: client-segmentation
    port: 8080
    tools:
    - name: run-segmentation
      description: Execute the Alteryx client segmentation workflow and load results to Snowflake.
      inputParameters:
      - name: segment_type
        in: body
        type: string
        description: Segmentation type (risk_profile, asset_allocation, lifecycle, behavioral).
      steps:
      - name: trigger-workflow
        type: call
        call: alteryx.run-workflow
        with:
          workflow_id: client_segmentation_v3
          parameters: '{"type": "{{segment_type}}"}'
      - name: load-results
        type: call
        call: snowflake.run-query
        with:
          query: CALL load_segmentation_results('{{segment_type}}')
  consumes:
  - type: http
    namespace: alteryx
    baseUri: https://alteryx.schwab.com/api/v3
    authentication:
      type: bearer
      token: $secrets.alteryx_token
    resources:
    - name: workflows
      path: /workflows/{{workflow_id}}/jobs
      inputParameters:
      - name: workflow_id
        in: path
      operations:
      - name: run-workflow
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://schwab.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → alteryx-client-segmentation-workflow.yml

Retrieves real-time market data from Bloomberg Enterprise Data for equity, fixed income, and options pricing.

naftiko: '0.5'
info:
  label: Bloomberg Market Data Feed
  description: Retrieves real-time market data from Bloomberg Enterprise Data for equity, fixed income, and options pricing.
  tags:
  - market-data
  - trading
  - bloomberg
capability:
  exposes:
  - type: mcp
    namespace: market-data
    port: 8080
    tools:
    - name: get-market-data
      description: Fetch real-time market data from Bloomberg for a security.
      inputParameters:
      - name: security_id
        in: body
        type: string
        description: Bloomberg security identifier (e.g., AAPL US Equity).
      - name: fields
        in: body
        type: string
        description: Comma-separated Bloomberg fields (e.g., PX_LAST,PX_BID,PX_ASK,VOLUME).
      call: bloomberg.get-data
      with:
        securities: '{{security_id}}'
        fields: '{{fields}}'
      outputParameters:
      - name: last_price
        type: number
        mapping: $.data[0].PX_LAST
      - name: bid
        type: number
        mapping: $.data[0].PX_BID
      - name: ask
        type: number
        mapping: $.data[0].PX_ASK
      - name: volume
        type: integer
        mapping: $.data[0].VOLUME
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/datasets
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: data
      path: /snapshots
      operations:
      - name: get-data
        method: POST
Open in Framework → View in Fleet → bloomberg-market-data-feed.yml

Queries the Redis session cache to retrieve active client session data for the Schwab trading platform.

naftiko: '0.5'
info:
  label: Redis Session Cache Lookup
  description: Queries the Redis session cache to retrieve active client session data for the Schwab trading platform.
  tags:
  - caching
  - session-management
  - redis
capability:
  exposes:
  - type: mcp
    namespace: session-cache
    port: 8080
    tools:
    - name: get-session
      description: Look up an active client session from Redis.
      inputParameters:
      - name: session_id
        in: body
        type: string
        description: Client session identifier.
      call: redis.get-key
      with:
        key: session:{{session_id}}
      outputParameters:
      - name: client_id
        type: string
        mapping: $.client_id
      - name: last_activity
        type: string
        mapping: $.last_activity
      - name: session_ttl
        type: integer
        mapping: $.ttl
  consumes:
  - type: http
    namespace: redis
    baseUri: https://schwab-redis.internal.schwab.com/api/v1
    authentication:
      type: bearer
      token: $secrets.redis_api_token
    resources:
    - name: keys
      path: /get/{{key}}
      inputParameters:
      - name: key
        in: path
      operations:
      - name: get-key
        method: GET
Open in Framework → View in Fleet → redis-session-cache-lookup.yml

Calculates advisor compensation by pulling AUM data from Snowflake, trade commissions from the OMS, computing payouts via ADP, and generating statements in Google Sheets.

naftiko: '0.5'
info:
  label: Advisor Compensation Calculation Pipeline
  description: Calculates advisor compensation by pulling AUM data from Snowflake, trade commissions from the OMS, computing payouts via ADP, and generating statements in Google Sheets.
  tags:
  - compensation
  - payroll
  - snowflake
  - adp
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: advisor-compensation
    port: 8080
    tools:
    - name: calculate-compensation
      description: Orchestrate advisor compensation calculation across Snowflake, OMS, ADP, and Google Sheets.
      inputParameters:
      - name: advisor_id
        in: body
        type: string
        description: Advisor employee ID.
      - name: pay_period
        in: body
        type: string
        description: Pay period (e.g., 2026-03).
      steps:
      - name: get-aum
        type: call
        call: snowflake.query-aum
        with:
          statement: SELECT SUM(market_value) as total_aum FROM ADVISOR_BOOK WHERE advisor_id = '{{advisor_id}}'
          warehouse: SCHWAB_COMPENSATION_WH
      - name: get-commissions
        type: call
        call: oms.get-commissions
        with:
          advisor_id: '{{advisor_id}}'
          period: '{{pay_period}}'
      - name: process-payout
        type: call
        call: adp.submit-compensation
        with:
          employee_id: '{{advisor_id}}'
          base_aum_fee: '{{get-aum.total_aum}}'
          commissions: '{{get-commissions.total}}'
          period: '{{pay_period}}'
      - name: generate-statement
        type: call
        call: googlesheets.update-sheet
        with:
          spreadsheet_id: advisor-compensation-tracker
          range: '{{pay_period}}!A:F'
          values: '{{process-payout.line_items}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://schwab.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: query-aum
        method: POST
  - type: http
    namespace: oms
    baseUri: https://oms-api.schwab.com/v2
    authentication:
      type: bearer
      token: $secrets.oms_api_token
    resources:
    - name: commissions
      path: /commissions
      operations:
      - name: get-commissions
        method: GET
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: compensation
      path: /workers/{{employee_id}}/compensation
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: submit-compensation
        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-sheet
        method: PUT
Open in Framework → View in Fleet → advisor-compensation-calculation-pipeline.yml

Queries MongoDB for client communication preferences, notification settings, and personalization configuration.

naftiko: '0.5'
info:
  label: MongoDB Client Preferences Lookup
  description: Queries MongoDB for client communication preferences, notification settings, and personalization configuration.
  tags:
  - client-data
  - preferences
  - mongodb
capability:
  exposes:
  - type: mcp
    namespace: client-preferences
    port: 8080
    tools:
    - name: get-client-preferences
      description: Look up client preferences and notification settings from MongoDB.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: Schwab client identifier.
      call: mongodb.find-one
      with:
        collection: client_preferences
        filter: '{"client_id": "{{client_id}}"}'
      outputParameters:
      - name: notification_channels
        type: array
        mapping: $.notification_channels
      - name: language
        type: string
        mapping: $.language_preference
      - name: paperless
        type: boolean
        mapping: $.paperless_enrolled
  consumes:
  - type: http
    namespace: mongodb
    baseUri: https://data.mongodb-api.schwab.com/app/data-schwab/endpoint/data/v1
    authentication:
      type: bearer
      token: $secrets.mongodb_api_key
    resources:
    - name: find
      path: /action/findOne
      operations:
      - name: find-one
        method: POST
Open in Framework → View in Fleet → mongodb-client-preferences-lookup.yml

Retrieves pending expense reports from SAP Concur for financial advisor travel and client event expenses.

naftiko: '0.5'
info:
  label: SAP Concur Expense Report Processor
  description: Retrieves pending expense reports from SAP Concur for financial advisor travel and client event expenses.
  tags:
  - finance
  - expenses
  - sap-concur
capability:
  exposes:
  - type: mcp
    namespace: expense-management
    port: 8080
    tools:
    - name: get-pending-expenses
      description: Fetch pending expense reports from SAP Concur.
      inputParameters:
      - name: approver_id
        in: body
        type: string
        description: Approver user ID.
      call: concur.get-reports
      with:
        approverLoginId: '{{approver_id}}'
        status: SUBMITTED
      outputParameters:
      - name: reports
        type: array
        mapping: $.Items
      - name: total_amount
        type: number
        mapping: $.TotalAmount
  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
      operations:
      - name: get-reports
        method: GET
Open in Framework → View in Fleet → sap-concur-expense-report-processor.yml

Retrieves active CloudWatch alarms for Schwab trading infrastructure including API gateways, Lambda functions, and ECS services.

naftiko: '0.5'
info:
  label: AWS CloudWatch Trading Alarms
  description: Retrieves active CloudWatch alarms for Schwab trading infrastructure including API gateways, Lambda functions, and ECS services.
  tags:
  - monitoring
  - alarms
  - cloudwatch
  - aws
capability:
  exposes:
  - type: mcp
    namespace: cloud-alarms
    port: 8080
    tools:
    - name: get-active-alarms
      description: Fetch active CloudWatch alarms for trading infrastructure.
      inputParameters:
      - name: alarm_prefix
        in: body
        type: string
        description: Alarm name prefix filter (e.g., trading-, gateway-).
      call: cloudwatch.describe-alarms
      with:
        alarm_name_prefix: '{{alarm_prefix}}'
        state_value: ALARM
      outputParameters:
      - name: alarms
        type: array
        mapping: $.MetricAlarms
      - name: count
        type: integer
        mapping: $.MetricAlarms.length
  consumes:
  - type: http
    namespace: cloudwatch
    baseUri: https://monitoring.us-east-1.amazonaws.com
    authentication:
      type: aws-sig-v4
      access_key: $secrets.aws_access_key
      secret_key: $secrets.aws_secret_key
    resources:
    - name: alarms
      path: /
      operations:
      - name: describe-alarms
        method: POST
Open in Framework → View in Fleet → aws-cloudwatch-trading-alarms.yml

Retrieves client portfolio holdings from Snowflake, calculates asset allocation percentages, and returns a summary with sector exposure.

naftiko: '0.5'
info:
  label: Portfolio Holdings Analyzer
  description: Retrieves client portfolio holdings from Snowflake, calculates asset allocation percentages, and returns a summary with sector exposure.
  tags:
  - portfolio
  - analytics
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: portfolio-analytics
    port: 8080
    tools:
    - name: analyze-portfolio
      description: Fetch client portfolio holdings from Snowflake and return asset allocation and sector exposure summary.
      inputParameters:
      - name: account_number
        in: body
        type: string
        description: Schwab account number.
      - name: as_of_date
        in: body
        type: string
        description: Date for the snapshot in YYYY-MM-DD.
      call: snowflake.run-query
      with:
        query: SELECT h.symbol, h.quantity, h.market_value, s.sector, s.asset_class, ROUND(h.market_value / SUM(h.market_value) OVER() * 100, 2) as allocation_pct FROM portfolio_holdings h JOIN security_master s ON h.symbol = s.symbol WHERE h.account_number='{{account_number}}' AND h.as_of_date='{{as_of_date}}' ORDER BY h.market_value DESC
      outputParameters:
      - name: holdings
        type: array
        mapping: $.data
      - name: total_positions
        type: integer
        mapping: $.resultSetMetaData.numRows
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://schwab.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → portfolio-holdings-analyzer.yml

Generates tax documents (1099-DIV, 1099-INT, 1099-B) for client accounts using tax data from Snowflake.

naftiko: '0.5'
info:
  label: Intuit Tax Document Generator
  description: Generates tax documents (1099-DIV, 1099-INT, 1099-B) for client accounts using tax data from Snowflake.
  tags:
  - tax
  - reporting
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: tax-reporting
    port: 8080
    tools:
    - name: generate-tax-docs
      description: Generate tax reporting documents from Snowflake data.
      inputParameters:
      - name: account_number
        in: body
        type: string
        description: Client account number.
      - name: tax_year
        in: body
        type: string
        description: Tax year.
      - name: form_type
        in: body
        type: string
        description: Form type (1099-DIV, 1099-INT, 1099-B).
      call: snowflake.run-query
      with:
        query: CALL generate_tax_form('{{account_number}}', '{{tax_year}}', '{{form_type}}')
      outputParameters:
      - name: form_data
        type: object
        mapping: $.data[0]
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://schwab.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → intuit-tax-document-generator.yml

On new hire in Workday, provisions IT access via ServiceNow, creates a SharePoint folder, and sends a Teams welcome.

naftiko: '0.5'
info:
  label: Workday Employee Onboarding Pipeline
  description: On new hire in Workday, provisions IT access via ServiceNow, creates a SharePoint folder, and sends a Teams welcome.
  tags:
  - hr
  - onboarding
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-onboarding
    port: 8080
    tools:
    - name: trigger-onboarding
      description: Orchestrate employee onboarding across Workday, ServiceNow, and Teams.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: Workday worker ID.
      - name: start_date
        in: body
        type: string
        description: Start date.
      - name: department
        in: body
        type: string
        description: Department.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: create-it-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'IT onboarding: {{get-employee.full_name}}'
          category: onboarding
          assigned_group: IT_Provisioning
          description: Provision workstation, trading system access, and compliance training for {{get-employee.full_name}} starting {{start_date}} in {{department}}.
      - name: send-welcome
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{department}}_team'
          text: 'Welcome to Schwab, {{get-employee.first_name}}! IT ticket: {{create-it-ticket.number}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://schwab.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-employee-onboarding-pipeline.yml

Processes dividend reinvestment by fetching dividend data from Bloomberg, checking DRIP enrollment in the account system, executing reinvestment trades via OMS, and logging in Snowflake.

naftiko: '0.5'
info:
  label: Dividend Reinvestment Processing Pipeline
  description: Processes dividend reinvestment by fetching dividend data from Bloomberg, checking DRIP enrollment in the account system, executing reinvestment trades via OMS, and logging in Snowflake.
  tags:
  - dividends
  - reinvestment
  - bloomberg
  - trading
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: drip-processing
    port: 8080
    tools:
    - name: process-drip
      description: Orchestrate dividend reinvestment across Bloomberg, account system, OMS, and Snowflake.
      inputParameters:
      - name: security_id
        in: body
        type: string
        description: Security identifier.
      - name: ex_date
        in: body
        type: string
        description: Ex-dividend date.
      steps:
      - name: get-dividend
        type: call
        call: bloomberg.get-dividend
        with:
          security_id: '{{security_id}}'
          ex_date: '{{ex_date}}'
      - name: get-drip-accounts
        type: call
        call: accounts.get-drip-enrolled
        with:
          security_id: '{{security_id}}'
      - name: execute-reinvestment
        type: call
        call: oms.create-drip-orders
        with:
          security_id: '{{security_id}}'
          dividend_per_share: '{{get-dividend.amount}}'
          accounts: '{{get-drip-accounts.data}}'
      - name: log-processing
        type: call
        call: snowflake.insert-drip-log
        with:
          statement: INSERT INTO DRIP_PROCESSING_LOG VALUES ('{{security_id}}', '{{ex_date}}', {{get-drip-accounts.count}}, {{execute-reinvestment.total_shares}}, CURRENT_TIMESTAMP)
          warehouse: SCHWAB_OPERATIONS_WH
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: dividends
      path: /dividends
      operations:
      - name: get-dividend
        method: GET
  - type: http
    namespace: accounts
    baseUri: https://accounts-api.schwab.com/v2
    authentication:
      type: bearer
      token: $secrets.accounts_api_token
    resources:
    - name: drip
      path: /drip-enrollment
      operations:
      - name: get-drip-enrolled
        method: GET
  - type: http
    namespace: oms
    baseUri: https://oms-api.schwab.com/v2
    authentication:
      type: bearer
      token: $secrets.oms_api_token
    resources:
    - name: drip-orders
      path: /orders/drip
      operations:
      - name: create-drip-orders
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://schwab.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: insert-drip-log
        method: POST
Open in Framework → View in Fleet → dividend-reinvestment-processing-pipeline.yml

Retrieves payroll summary data from ADP for financial operations and compensation analysis.

naftiko: '0.5'
info:
  label: ADP Payroll Data Retriever
  description: Retrieves payroll summary data from ADP for financial operations and compensation analysis.
  tags:
  - hr
  - payroll
  - adp
capability:
  exposes:
  - type: mcp
    namespace: payroll
    port: 8080
    tools:
    - name: get-payroll-summary
      description: Fetch payroll summary data from ADP.
      inputParameters:
      - name: pay_period
        in: body
        type: string
        description: Pay period identifier.
      - name: department
        in: body
        type: string
        description: Department filter.
      call: adp.get-payroll
      with:
        period: '{{pay_period}}'
        department: '{{department}}'
      outputParameters:
      - name: total_gross
        type: number
        mapping: $.summary.total_gross
      - name: headcount
        type: integer
        mapping: $.summary.headcount
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: payroll
      path: /payroll-outputs
      operations:
      - name: get-payroll
        method: GET
Open in Framework → View in Fleet → adp-payroll-data-retriever.yml

On margin threshold breach detection, retrieves account details from Salesforce, generates a margin call notice, sends SMS via Twilio, and creates a ServiceNow case.

naftiko: '0.5'
info:
  label: Margin Call Alert Pipeline
  description: On margin threshold breach detection, retrieves account details from Salesforce, generates a margin call notice, sends SMS via Twilio, and creates a ServiceNow case.
  tags:
  - risk-management
  - margin
  - salesforce
  - twilio
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: margin-alerts
    port: 8080
    tools:
    - name: process-margin-call
      description: Orchestrate margin call notification across Salesforce, Twilio, and ServiceNow.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Client account ID.
      - name: margin_deficit
        in: body
        type: number
        description: Margin deficit amount.
      steps:
      - name: get-account
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{account_id}}'
      - name: send-sms
        type: call
        call: twilio.send-message
        with:
          To: '{{get-account.phone}}'
          Body: 'Schwab Margin Notice: Account {{account_id}} has a margin deficit of ${{margin_deficit}}. Please deposit funds or reduce positions by market close.'
          From: '+18005407000'
      - name: create-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Margin call: {{account_id}} - deficit ${{margin_deficit}}'
          category: margin_operations
          assigned_group: Margin_Operations
          description: 'Margin call for account {{account_id}}. Deficit: ${{margin_deficit}}. Client: {{get-account.name}}. SMS sent: {{send-sms.message_sid}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://schwab.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: twilio
    baseUri: https://api.twilio.com/2010-04-01/Accounts/$secrets.twilio_account_sid
    authentication:
      type: basic
      username: $secrets.twilio_account_sid
      password: $secrets.twilio_auth_token
    resources:
    - name: messages
      path: /Messages.json
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://schwab.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → margin-call-alert-pipeline.yml

Logs client-advisor email communications through Microsoft Graph for compliance recordkeeping.

naftiko: '0.5'
info:
  label: Microsoft Graph Client Communication Logger
  description: Logs client-advisor email communications through Microsoft Graph for compliance recordkeeping.
  tags:
  - compliance
  - communications
  - microsoft-graph
capability:
  exposes:
  - type: mcp
    namespace: comms-logging
    port: 8080
    tools:
    - name: log-client-email
      description: Retrieve and log a client-advisor email communication for compliance.
      inputParameters:
      - name: user_upn
        in: body
        type: string
        description: Advisor user principal name.
      - name: message_id
        in: body
        type: string
        description: Email message ID.
      call: msgraph.get-message
      with:
        user_upn: '{{user_upn}}'
        message_id: '{{message_id}}'
      outputParameters:
      - name: subject
        type: string
        mapping: $.subject
      - name: from
        type: string
        mapping: $.from.emailAddress.address
      - name: received_date
        type: string
        mapping: $.receivedDateTime
  consumes:
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{user_upn}}/messages/{{message_id}}
      inputParameters:
      - name: user_upn
        in: path
      - name: message_id
        in: path
      operations:
      - name: get-message
        method: GET
Open in Framework → View in Fleet → microsoft-graph-client-communication-logger.yml

Validates a trade order against compliance rules in Snowflake, checking for restricted securities, concentration limits, and suitability requirements before execution.

naftiko: '0.5'
info:
  label: Trade Execution Compliance Checker
  description: Validates a trade order against compliance rules in Snowflake, checking for restricted securities, concentration limits, and suitability requirements before execution.
  tags:
  - compliance
  - trading
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: trade-compliance
    port: 8080
    tools:
    - name: check-trade-compliance
      description: Validate a trade against compliance rules and create a ServiceNow exception if violations are found.
      inputParameters:
      - name: account_number
        in: body
        type: string
        description: Client account number.
      - name: symbol
        in: body
        type: string
        description: Security symbol.
      - name: side
        in: body
        type: string
        description: Trade side (BUY, SELL).
      - name: quantity
        in: body
        type: integer
        description: Order quantity.
      - name: order_type
        in: body
        type: string
        description: Order type (MARKET, LIMIT).
      steps:
      - name: check-rules
        type: call
        call: snowflake.run-query
        with:
          query: CALL check_trade_compliance('{{account_number}}', '{{symbol}}', '{{side}}', {{quantity}}, '{{order_type}}')
      - name: create-exception
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Trade compliance exception: {{symbol}} {{side}} {{quantity}} for account {{account_number}}'
          category: compliance
          urgency: high
          description: 'Trade compliance check results: {{check-rules.results}}. Account: {{account_number}}, Symbol: {{symbol}}, Side: {{side}}, Qty: {{quantity}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://schwab.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://schwab.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → trade-execution-compliance-checker.yml

Generates annual tax documents by querying Teradata for transaction history, computing gains via Intuit tax engine, storing in Amazon S3, and notifying the client via email.

naftiko: '0.5'
info:
  label: Client Tax Document Generation Pipeline
  description: Generates annual tax documents by querying Teradata for transaction history, computing gains via Intuit tax engine, storing in Amazon S3, and notifying the client via email.
  tags:
  - tax
  - document-generation
  - teradata
  - intuit
  - amazon-s3
capability:
  exposes:
  - type: mcp
    namespace: tax-documents
    port: 8080
    tools:
    - name: generate-tax-docs
      description: Orchestrate tax document generation across Teradata, Intuit, S3, and email.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Client account ID.
      - name: tax_year
        in: body
        type: integer
        description: Tax year.
      steps:
      - name: get-transactions
        type: call
        call: teradata.query-tax-data
        with:
          query: SELECT * FROM TAX_LOTS WHERE account_id = '{{account_id}}' AND tax_year = {{tax_year}}
      - name: compute-gains
        type: call
        call: intuit.calculate-gains
        with:
          account_id: '{{account_id}}'
          transactions: '{{get-transactions.data}}'
          tax_year: '{{tax_year}}'
      - name: store-document
        type: call
        call: s3.put-object
        with:
          bucket: schwab-tax-documents
          key: '{{tax_year}}/{{account_id}}/1099-B.pdf'
          body: '{{compute-gains.document}}'
      - name: notify-client
        type: call
        call: ses.send-email
        with:
          to: '{{compute-gains.client_email}}'
          subject: Your {{tax_year}} Schwab Tax Documents Are Ready
          body: Your 1099-B tax document is now available in your Schwab account document center.
  consumes:
  - type: http
    namespace: teradata
    baseUri: https://teradata.schwab.com/api/v1
    authentication:
      type: bearer
      token: $secrets.teradata_token
    resources:
    - name: queries
      path: /queries
      operations:
      - name: query-tax-data
        method: POST
  - type: http
    namespace: intuit
    baseUri: https://tax-engine.schwab.com/api/v1
    authentication:
      type: bearer
      token: $secrets.intuit_api_token
    resources:
    - name: calculations
      path: /gains-calculation
      operations:
      - name: calculate-gains
        method: POST
  - type: http
    namespace: s3
    baseUri: https://s3.us-east-1.amazonaws.com
    authentication:
      type: aws-sig-v4
      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: ses
    baseUri: https://email.us-east-1.amazonaws.com
    authentication:
      type: aws-sig-v4
      access_key: $secrets.aws_access_key
      secret_key: $secrets.aws_secret_key
    resources:
    - name: emails
      path: /v2/email/outbound-emails
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → client-tax-document-generation-pipeline.yml

Generates a trusted ticket for embedding Tableau investment analytics dashboards in the advisor portal.

naftiko: '0.5'
info:
  label: Tableau Investment Analytics Embed
  description: Generates a trusted ticket for embedding Tableau investment analytics dashboards in the advisor portal.
  tags:
  - analytics
  - visualization
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: investment-analytics
    port: 8080
    tools:
    - name: get-analytics-dashboard
      description: Generate a Tableau trusted ticket for investment analytics.
      inputParameters:
      - name: username
        in: body
        type: string
        description: Tableau username.
      call: tableau.get-trusted-ticket
      with:
        username: '{{username}}'
      outputParameters:
      - name: ticket
        type: string
        mapping: $
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://tableau.schwab.com
    authentication:
      type: basic
      username: $secrets.tableau_admin_user
      password: $secrets.tableau_admin_password
    resources:
    - name: trusted
      path: /trusted
      operations:
      - name: get-trusted-ticket
        method: POST
Open in Framework → View in Fleet → tableau-investment-analytics-embed.yml

Matches fixed income trades by comparing Calypso entries with counterparty confirmations via Tradeweb, reconciling in Snowflake, and escalating breaks via Jira.

naftiko: '0.5'
info:
  label: Fixed Income Trade Matching Orchestrator
  description: Matches fixed income trades by comparing Calypso entries with counterparty confirmations via Tradeweb, reconciling in Snowflake, and escalating breaks via Jira.
  tags:
  - fixed-income
  - trade-matching
  - calypso
  - tradeweb
  - snowflake
  - jira
capability:
  exposes:
  - type: mcp
    namespace: fi-matching
    port: 8080
    tools:
    - name: match-fi-trades
      description: Orchestrate fixed income trade matching across Calypso, Tradeweb, Snowflake, and Jira.
      inputParameters:
      - name: trade_date
        in: body
        type: string
        description: Trade date in YYYY-MM-DD.
      - name: asset_class
        in: body
        type: string
        description: Asset class (corporate, treasury, muni, agency).
      steps:
      - name: get-calypso-trades
        type: call
        call: calypso.get-fi-trades
        with:
          trade_date: '{{trade_date}}'
          asset_class: '{{asset_class}}'
      - name: get-counterparty-confirms
        type: call
        call: tradeweb.get-confirmations
        with:
          date: '{{trade_date}}'
          product: '{{asset_class}}'
      - name: run-matching
        type: call
        call: snowflake.execute-matching
        with:
          statement: CALL FI_TRADE_MATCH('{{trade_date}}', '{{asset_class}}')
          warehouse: SCHWAB_OPERATIONS_WH
      - name: escalate-breaks
        type: call
        call: jira.create-issue
        with:
          project: TRADEOPS
          summary: 'FI trade breaks: {{trade_date}} {{asset_class}} - {{run-matching.break_count}} unmatched'
          description: 'Trade date: {{trade_date}}

            Asset class: {{asset_class}}

            Matched: {{run-matching.matched_count}}

            Breaks: {{run-matching.break_count}}

            Total notional: {{run-matching.total_notional}}'
          issuetype: Task
  consumes:
  - type: http
    namespace: calypso
    baseUri: https://calypso.schwab.com/api/v1
    authentication:
      type: bearer
      token: $secrets.calypso_token
    resources:
    - name: fi-trades
      path: /trades/fixed-income
      operations:
      - name: get-fi-trades
        method: GET
  - type: http
    namespace: tradeweb
    baseUri: https://api.tradeweb.com/v1
    authentication:
      type: bearer
      token: $secrets.tradeweb_token
    resources:
    - name: confirmations
      path: /confirmations
      operations:
      - name: get-confirmations
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://schwab.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-matching
        method: POST
  - type: http
    namespace: jira
    baseUri: https://schwab.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → fixed-income-trade-matching-orchestrator.yml

Orchestrates IRA rollover requests by validating eligibility via the account system, sending DocuSign agreements, creating a ServiceNow tracking ticket, and notifying the advisor via Microsoft Teams.

naftiko: '0.5'
info:
  label: IRA Rollover Processing Orchestrator
  description: Orchestrates IRA rollover requests by validating eligibility via the account system, sending DocuSign agreements, creating a ServiceNow tracking ticket, and notifying the advisor via Microsoft Teams.
  tags:
  - retirement
  - ira-rollover
  - docusign
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ira-rollover
    port: 8080
    tools:
    - name: process-rollover
      description: Orchestrate IRA rollover processing across eligibility, DocuSign, ServiceNow, and Teams.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Source account ID.
      - name: rollover_amount
        in: body
        type: number
        description: Rollover amount.
      - name: rollover_type
        in: body
        type: string
        description: Rollover type (traditional, roth, sep).
      - name: advisor_email
        in: body
        type: string
        description: Advisor email for notification.
      steps:
      - name: validate-eligibility
        type: call
        call: accounts.check-rollover-eligibility
        with:
          account_id: '{{account_id}}'
          amount: '{{rollover_amount}}'
          type: '{{rollover_type}}'
      - name: send-agreement
        type: call
        call: docusign.create-envelope
        with:
          templateId: ira-rollover-{{rollover_type}}
          signerEmail: '{{validate-eligibility.client_email}}'
          signerName: '{{validate-eligibility.client_name}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'IRA Rollover: {{account_id}} - ${{rollover_amount}}'
          category: retirement_operations
          assigned_group: Retirement_Services
          description: '{{rollover_type}} rollover for ${{rollover_amount}}. DocuSign: {{send-agreement.envelope_id}}.'
      - name: notify-advisor
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{advisor_email}}'
          text: 'IRA rollover initiated: {{account_id}}, ${{rollover_amount}} ({{rollover_type}}). Ticket: {{create-ticket.number}}. DocuSign sent to client.'
  consumes:
  - type: http
    namespace: accounts
    baseUri: https://accounts-api.schwab.com/v2
    authentication:
      type: bearer
      token: $secrets.accounts_api_token
    resources:
    - name: rollover
      path: /rollover/eligibility
      operations:
      - name: check-rollover-eligibility
        method: POST
  - type: http
    namespace: docusign
    baseUri: https://na4.docusign.net/restapi/v2.1/accounts/$secrets.docusign_account_id
    authentication:
      type: bearer
      token: $secrets.docusign_access_token
    resources:
    - name: envelopes
      path: /envelopes
      operations:
      - name: create-envelope
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://schwab.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → ira-rollover-processing-orchestrator.yml

Generates client trading activity reports from Snowflake for quarterly account reviews.

naftiko: '0.5'
info:
  label: Snowflake Client Activity Report
  description: Generates client trading activity reports from Snowflake for quarterly account reviews.
  tags:
  - reporting
  - client-services
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: client-reporting
    port: 8080
    tools:
    - name: get-client-activity
      description: Query Snowflake for client trading activity summary.
      inputParameters:
      - name: account_number
        in: body
        type: string
        description: Account number.
      - name: quarter
        in: body
        type: string
        description: Fiscal quarter.
      call: snowflake.run-query
      with:
        query: SELECT trade_date, symbol, side, quantity, price, total_value FROM trade_history WHERE account_number='{{account_number}}' AND fiscal_quarter='{{quarter}}' ORDER BY trade_date DESC
      outputParameters:
      - name: trades
        type: array
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://schwab.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → snowflake-client-activity-report.yml

Queries Prometheus for trading platform latency metrics including order execution time, API response times, and queue depth.

naftiko: '0.5'
info:
  label: Prometheus Trading Latency Metrics
  description: Queries Prometheus for trading platform latency metrics including order execution time, API response times, and queue depth.
  tags:
  - monitoring
  - performance
  - prometheus
capability:
  exposes:
  - type: mcp
    namespace: latency-metrics
    port: 8080
    tools:
    - name: query-latency
      description: Query Prometheus for trading latency metrics.
      inputParameters:
      - name: promql
        in: body
        type: string
        description: PromQL query expression.
      - name: time_range
        in: body
        type: string
        description: Time range (e.g., 1h, 6h, 24h).
      call: prometheus.query-range
      with:
        query: '{{promql}}'
        duration: '{{time_range}}'
      outputParameters:
      - name: result
        type: array
        mapping: $.data.result
  consumes:
  - type: http
    namespace: prometheus
    baseUri: https://prometheus.schwab.com/api/v1
    authentication:
      type: bearer
      token: $secrets.prometheus_token
    resources:
    - name: query
      path: /query_range
      operations:
      - name: query-range
        method: POST
Open in Framework → View in Fleet → prometheus-trading-latency-metrics.yml

Exports financial planning model outputs from Snowflake to Google Sheets for advisor use in client meetings.

naftiko: '0.5'
info:
  label: Google Sheets Financial Planning Exporter
  description: Exports financial planning model outputs from Snowflake to Google Sheets for advisor use in client meetings.
  tags:
  - financial-planning
  - reporting
  - snowflake
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: financial-planning
    port: 8080
    tools:
    - name: export-planning-model
      description: Run a financial planning projection and export to Google Sheets.
      inputParameters:
      - name: account_number
        in: body
        type: string
        description: Client account number.
      - name: projection_years
        in: body
        type: integer
        description: Years to project.
      - name: spreadsheet_id
        in: body
        type: string
        description: Google Sheets ID.
      steps:
      - name: run-projection
        type: call
        call: snowflake.run-query
        with:
          query: CALL run_financial_projection('{{account_number}}', {{projection_years}})
      - name: write-sheet
        type: call
        call: google-sheets.update-values
        with:
          spreadsheet_id: '{{spreadsheet_id}}'
          range: Projection!A1
          values: '{{run-projection.results}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://schwab.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: google-sheets
    baseUri: https://sheets.googleapis.com/v4/spreadsheets
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: values
      path: /{{spreadsheet_id}}/values/{{range}}
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: update-values
        method: PUT
Open in Framework → View in Fleet → google-sheets-financial-planning-exporter.yml

Creates and sends market insight newsletters to Schwab clients segmented by investment interests.

naftiko: '0.5'
info:
  label: MailChimp Client Newsletter Sender
  description: Creates and sends market insight newsletters to Schwab clients segmented by investment interests.
  tags:
  - marketing
  - client-engagement
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: client-newsletters
    port: 8080
    tools:
    - name: send-newsletter
      description: Create and send a market insights newsletter via MailChimp.
      inputParameters:
      - name: list_id
        in: body
        type: string
        description: MailChimp list ID.
      - name: subject
        in: body
        type: string
        description: Email subject.
      - name: template_id
        in: body
        type: string
        description: MailChimp template ID.
      call: mailchimp.create-campaign
      with:
        type: regular
        recipients_list_id: '{{list_id}}'
        subject_line: '{{subject}}'
        template_id: '{{template_id}}'
        from_name: Charles Schwab
      outputParameters:
      - name: campaign_id
        type: string
        mapping: $.id
  consumes:
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: basic
      username: anystring
      password: $secrets.mailchimp_api_key
    resources:
    - name: campaigns
      path: /campaigns
      operations:
      - name: create-campaign
        method: POST
Open in Framework → View in Fleet → mailchimp-client-newsletter-sender.yml

Generates SEC regulatory filing data from Snowflake and uploads to SharePoint for legal review before submission.

naftiko: '0.5'
info:
  label: SEC Regulatory Filing Generator
  description: Generates SEC regulatory filing data from Snowflake and uploads to SharePoint for legal review before submission.
  tags:
  - compliance
  - regulatory
  - sec
  - snowflake
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: regulatory-filings
    port: 8080
    tools:
    - name: generate-sec-filing
      description: Generate SEC filing data from Snowflake and upload to SharePoint for review.
      inputParameters:
      - name: filing_type
        in: body
        type: string
        description: Filing type (10-K, 10-Q, 8-K, ADV).
      - name: reporting_period
        in: body
        type: string
        description: Reporting period.
      steps:
      - name: generate-data
        type: call
        call: snowflake.run-query
        with:
          query: CALL generate_sec_filing('{{filing_type}}', '{{reporting_period}}')
      - name: upload-draft
        type: call
        call: sharepoint.upload-file
        with:
          site_id: regulatory_filings
          folder_path: SEC/{{filing_type}}/{{reporting_period}}
          file_name: '{{filing_type}}_draft_{{reporting_period}}.xlsx'
          content: '{{generate-data.results}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://schwab.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → sec-regulatory-filing-generator.yml

Searches the Workday employee directory for financial advisors and support staff.

naftiko: '0.5'
info:
  label: Workday Employee Directory
  description: Searches the Workday employee directory for financial advisors and support staff.
  tags:
  - hr
  - directory
  - workday
capability:
  exposes:
  - type: mcp
    namespace: hr-directory
    port: 8080
    tools:
    - name: search-employees
      description: Search for employees in Workday.
      inputParameters:
      - name: search_term
        in: body
        type: string
        description: Search term.
      call: workday.search-workers
      with:
        search: '{{search_term}}'
      outputParameters:
      - name: employees
        type: array
        mapping: $.workers
      - name: total_count
        type: integer
        mapping: $.total
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers
      operations:
      - name: search-workers
        method: GET
Open in Framework → View in Fleet → workday-employee-directory.yml

On new financial advisor hire, creates Workday profile, provisions Okta account with MFA, sets up Salesforce user, and assigns Pluralsight training paths.

naftiko: '0.5'
info:
  label: New Advisor Provisioning Orchestrator
  description: On new financial advisor hire, creates Workday profile, provisions Okta account with MFA, sets up Salesforce user, and assigns Pluralsight training paths.
  tags:
  - hr
  - provisioning
  - workday
  - okta
  - salesforce
  - pluralsight
capability:
  exposes:
  - type: mcp
    namespace: advisor-provisioning
    port: 8080
    tools:
    - name: provision-advisor
      description: Orchestrate new advisor provisioning across Workday, Okta, Salesforce, and Pluralsight.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      - name: department
        in: body
        type: string
        description: Department name.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: create-okta-user
        type: call
        call: okta.create-user
        with:
          email: '{{get-employee.email}}'
          firstName: '{{get-employee.first_name}}'
          lastName: '{{get-employee.last_name}}'
          group: Financial_Advisors
      - name: create-sf-user
        type: call
        call: salesforce.create-user
        with:
          email: '{{get-employee.email}}'
          name: '{{get-employee.full_name}}'
          profile: Financial_Advisor
      - name: assign-training
        type: call
        call: pluralsight.assign-channel
        with:
          email: '{{get-employee.email}}'
          channel_id: advisor-onboarding-path
  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://schwab.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: salesforce
    baseUri: https://schwab.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: users
      path: /sobjects/User
      operations:
      - name: create-user
        method: POST
  - type: http
    namespace: pluralsight
    baseUri: https://api.pluralsight.com/api/v1
    authentication:
      type: bearer
      token: $secrets.pluralsight_token
    resources:
    - name: assignments
      path: /channel-assignments
      operations:
      - name: assign-channel
        method: POST
Open in Framework → View in Fleet → new-advisor-provisioning-orchestrator.yml

Creates a Zoom meeting for a client-advisor consultation and sends calendar invites.

naftiko: '0.5'
info:
  label: Zoom Client Consultation Scheduler
  description: Creates a Zoom meeting for a client-advisor consultation and sends calendar invites.
  tags:
  - client-services
  - meetings
  - zoom
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: client-meetings
    port: 8080
    tools:
    - name: schedule-consultation
      description: Create a Zoom meeting for a client consultation and send Outlook invites.
      inputParameters:
      - name: client_name
        in: body
        type: string
        description: Client name.
      - name: advisor_email
        in: body
        type: string
        description: Advisor email.
      - name: client_email
        in: body
        type: string
        description: Client email.
      - name: date_time
        in: body
        type: string
        description: Meeting date/time in ISO 8601.
      - name: topic
        in: body
        type: string
        description: Meeting topic.
      steps:
      - name: create-meeting
        type: call
        call: zoom.create-meeting
        with:
          topic: '{{topic}} - {{client_name}}'
          start_time: '{{date_time}}'
          duration: 60
          type: 2
      - name: send-invite
        type: call
        call: outlook.create-event
        with:
          subject: '{{topic}} - {{client_name}}'
          start_time: '{{date_time}}'
          body: 'Join Zoom: {{create-meeting.join_url}}'
          attendees: '{{advisor_email}},{{client_email}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_token
    resources:
    - name: meetings
      path: /users/me/meetings
      operations:
      - name: create-meeting
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: events
      path: /me/events
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → zoom-client-consultation-scheduler.yml

Triggers GitHub Actions deployment workflow for Schwab's digital platform and notifies the release team.

naftiko: '0.5'
info:
  label: GitHub Actions Platform Deployment
  description: Triggers GitHub Actions deployment workflow for Schwab's digital platform and notifies the release team.
  tags:
  - devops
  - deployment
  - github-actions
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: platform-deployment
    port: 8080
    tools:
    - name: trigger-deployment
      description: Trigger a GitHub Actions deployment workflow and notify the release team.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: Repository (org/repo).
      - name: workflow_id
        in: body
        type: string
        description: Workflow ID.
      - name: environment
        in: body
        type: string
        description: Target environment.
      steps:
      - name: dispatch-workflow
        type: call
        call: github.dispatch-workflow
        with:
          owner_repo: '{{repo}}'
          workflow_id: '{{workflow_id}}'
          ref: main
          inputs: '{"environment": "{{environment}}"}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: release_management
          text: 'Deployment triggered: {{repo}} to {{environment}}.'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflow-dispatches
      path: /repos/{{owner_repo}}/actions/workflows/{{workflow_id}}/dispatches
      inputParameters:
      - name: owner_repo
        in: path
      - name: workflow_id
        in: path
      operations:
      - name: dispatch-workflow
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → github-actions-platform-deployment.yml

Monitors Azure Data Factory pipelines that ingest market data feeds into the analytics warehouse.

naftiko: '0.5'
info:
  label: Azure Data Factory Market Data ETL
  description: Monitors Azure Data Factory pipelines that ingest market data feeds into the analytics warehouse.
  tags:
  - data-engineering
  - etl
  - azure-data-factory
capability:
  exposes:
  - type: mcp
    namespace: market-data-etl
    port: 8080
    tools:
    - name: get-pipeline-status
      description: Check the latest ADF market data pipeline status.
      inputParameters:
      - name: pipeline_name
        in: body
        type: string
        description: ADF pipeline name.
      call: adf.get-pipeline-runs
      with:
        pipeline_name: '{{pipeline_name}}'
      outputParameters:
      - name: run_id
        type: string
        mapping: $.value[0].runId
      - name: status
        type: string
        mapping: $.value[0].status
  consumes:
  - type: http
    namespace: adf
    baseUri: https://management.azure.com/subscriptions/{{subscription_id}}/resourceGroups/schwab-data-rg/providers/Microsoft.DataFactory/factories/schwab-adf
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: pipeline-runs
      path: /queryPipelineRuns
      operations:
      - name: get-pipeline-runs
        method: POST
Open in Framework → View in Fleet → azure-data-factory-market-data-etl.yml

Monitors Apache Kafka topic health and consumer lag for Schwab's real-time trade event streaming pipeline.

naftiko: '0.5'
info:
  label: Kafka Trade Event Stream Monitor
  description: Monitors Apache Kafka topic health and consumer lag for Schwab's real-time trade event streaming pipeline.
  tags:
  - streaming
  - kafka
  - trading
capability:
  exposes:
  - type: mcp
    namespace: trade-streaming
    port: 8080
    tools:
    - name: get-topic-health
      description: Check Kafka topic health and consumer lag for trade event streams.
      inputParameters:
      - name: topic_name
        in: body
        type: string
        description: Kafka topic name.
      - name: consumer_group
        in: body
        type: string
        description: Consumer group ID.
      call: kafka.get-consumer-lag
      with:
        topic: '{{topic_name}}'
        group: '{{consumer_group}}'
      outputParameters:
      - name: total_lag
        type: integer
        mapping: $.total_lag
      - name: partitions
        type: array
        mapping: $.partitions
  consumes:
  - type: http
    namespace: kafka
    baseUri: https://kafka-rest.schwab.com/v3
    authentication:
      type: bearer
      token: $secrets.kafka_rest_token
    resources:
    - name: consumer-groups
      path: /clusters/schwab-prod/consumer-groups/{{group}}/lags
      inputParameters:
      - name: group
        in: path
      operations:
      - name: get-consumer-lag
        method: GET
Open in Framework → View in Fleet → kafka-trade-event-stream-monitor.yml

Checks Microsoft Intune device compliance status for Schwab employee devices accessing trading and client data systems.

naftiko: '0.5'
info:
  label: Microsoft Intune Device Compliance Checker
  description: Checks Microsoft Intune device compliance status for Schwab employee devices accessing trading and client data systems.
  tags:
  - security
  - endpoint
  - microsoft-intune
capability:
  exposes:
  - type: mcp
    namespace: device-compliance
    port: 8080
    tools:
    - name: check-device-compliance
      description: Query Microsoft Intune for device compliance status.
      inputParameters:
      - name: device_id
        in: body
        type: string
        description: Intune device ID.
      call: intune.get-device-compliance
      with:
        device_id: '{{device_id}}'
      outputParameters:
      - name: compliance_state
        type: string
        mapping: $.complianceState
      - name: os_version
        type: string
        mapping: $.osVersion
      - name: last_sync
        type: string
        mapping: $.lastSyncDateTime
  consumes:
  - type: http
    namespace: intune
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: devices
      path: /deviceManagement/managedDevices/{{device_id}}
      inputParameters:
      - name: device_id
        in: path
      operations:
      - name: get-device-compliance
        method: GET
Open in Framework → View in Fleet → microsoft-intune-device-compliance-checker.yml

Prepares for SEC/FINRA examinations by gathering compliance data from Snowflake, pulling audit logs from Splunk, compiling documents in Box, and creating a preparation checklist in Jira.

naftiko: '0.5'
info:
  label: Regulatory Exam Preparation Orchestrator
  description: Prepares for SEC/FINRA examinations by gathering compliance data from Snowflake, pulling audit logs from Splunk, compiling documents in Box, and creating a preparation checklist in Jira.
  tags:
  - regulatory
  - examination
  - snowflake
  - splunk
  - box
  - jira
capability:
  exposes:
  - type: mcp
    namespace: exam-preparation
    port: 8080
    tools:
    - name: prepare-exam-materials
      description: Orchestrate regulatory exam preparation across Snowflake, Splunk, Box, and Jira.
      inputParameters:
      - name: exam_type
        in: body
        type: string
        description: Examination type (sec-audit, finra-cycle, state-exam).
      - name: exam_date
        in: body
        type: string
        description: Scheduled examination date.
      steps:
      - name: gather-compliance-data
        type: call
        call: snowflake.query-compliance
        with:
          statement: SELECT * FROM COMPLIANCE_METRICS WHERE report_date >= DATEADD(year, -2, CURRENT_DATE)
          warehouse: SCHWAB_COMPLIANCE_WH
      - name: pull-audit-logs
        type: call
        call: splunk.search
        with:
          query: index=audit_trail earliest=-2y | stats count by action_type, department
      - name: compile-documents
        type: call
        call: box.create-folder
        with:
          parent_folder_id: exam_materials
          name: '{{exam_type}}_{{exam_date}}'
      - name: create-checklist
        type: call
        call: jira.create-issue
        with:
          project: COMPLIANCE
          summary: 'Exam prep: {{exam_type}} - {{exam_date}}'
          description: 'Compliance data: {{gather-compliance-data.record_count}} records. Audit logs: {{pull-audit-logs.event_count}} events. Documents: {{compile-documents.url}}.'
          issuetype: Task
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://schwab.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: query-compliance
        method: POST
  - type: http
    namespace: splunk
    baseUri: https://splunk.schwab.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search
      path: /search/jobs
      operations:
      - name: search
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_access_token
    resources:
    - name: folders
      path: /folders
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: jira
    baseUri: https://schwab.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → regulatory-exam-preparation-orchestrator.yml

Triggers a reload of the Qlik Sense revenue analytics app tracking advisory fees, commission revenue, and net new assets.

naftiko: '0.5'
info:
  label: Qlik Sense Revenue Analytics Dashboard
  description: Triggers a reload of the Qlik Sense revenue analytics app tracking advisory fees, commission revenue, and net new assets.
  tags:
  - analytics
  - revenue
  - qlik-sense
capability:
  exposes:
  - type: mcp
    namespace: revenue-analytics
    port: 8080
    tools:
    - name: reload-revenue-dashboard
      description: Trigger a Qlik Sense app reload for revenue analytics.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: Qlik Sense app ID.
      call: qlik.reload-app
      with:
        app_id: '{{app_id}}'
      outputParameters:
      - name: reload_id
        type: string
        mapping: $.id
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: qlik
    baseUri: https://schwab.us.qlikcloud.com/api/v1
    authentication:
      type: bearer
      token: $secrets.qlik_api_key
    resources:
    - name: reloads
      path: /reloads
      operations:
      - name: reload-app
        method: POST
Open in Framework → View in Fleet → qlik-sense-revenue-analytics-dashboard.yml

Runs Postman test collections for Schwab's trading and account management APIs.

naftiko: '0.5'
info:
  label: Postman Trading API Test Suite
  description: Runs Postman test collections for Schwab's trading and account management APIs.
  tags:
  - qa
  - api-testing
  - postman
capability:
  exposes:
  - type: mcp
    namespace: api-testing
    port: 8080
    tools:
    - name: run-api-tests
      description: Execute a Postman API test collection.
      inputParameters:
      - name: collection_id
        in: body
        type: string
        description: Collection UID.
      - name: environment_id
        in: body
        type: string
        description: Environment UID.
      call: postman.run-collection
      with:
        collection: '{{collection_id}}'
        environment: '{{environment_id}}'
      outputParameters:
      - name: total_tests
        type: integer
        mapping: $.run.stats.tests.total
      - name: failed_tests
        type: integer
        mapping: $.run.stats.tests.failed
  consumes:
  - type: http
    namespace: postman
    baseUri: https://api.getpostman.com
    authentication:
      type: apiKey
      key: $secrets.postman_api_key
    resources:
    - name: collection-runs
      path: /monitors/{{collection_id}}/run
      inputParameters:
      - name: collection_id
        in: path
      operations:
      - name: run-collection
        method: POST
Open in Framework → View in Fleet → postman-trading-api-test-suite.yml

Monitors Schwab's data center infrastructure health via SolarWinds.

naftiko: '0.5'
info:
  label: SolarWinds Data Center Monitoring
  description: Monitors Schwab's data center infrastructure health via SolarWinds.
  tags:
  - infrastructure
  - solarwinds
capability:
  exposes:
  - type: mcp
    namespace: dc-monitoring
    port: 8080
    tools:
    - name: get-dc-health
      description: Retrieve data center health from SolarWinds.
      inputParameters:
      - name: dc_name
        in: body
        type: string
        description: Data center name.
      call: solarwinds.get-dc-stats
      with:
        datacenter: '{{dc_name}}'
      outputParameters:
      - name: overall_health
        type: string
        mapping: $.status
      - name: nodes_up
        type: integer
        mapping: $.nodes_available
  consumes:
  - type: http
    namespace: solarwinds
    baseUri: https://solarwinds.schwab.com/SolarWinds/InformationService/v3/Json
    authentication:
      type: basic
      username: $secrets.solarwinds_user
      password: $secrets.solarwinds_password
    resources:
    - name: query
      path: /Query
      operations:
      - name: get-dc-stats
        method: POST
Open in Framework → View in Fleet → solarwinds-data-center-monitoring.yml

Retrieves historical price data from Bloomberg for backtesting investment strategies.

naftiko: '0.5'
info:
  label: Bloomberg Terminal Analytics Feed
  description: Retrieves historical price data from Bloomberg for backtesting investment strategies.
  tags:
  - market-data
  - backtesting
  - bloomberg
capability:
  exposes:
  - type: mcp
    namespace: historical-data
    port: 8080
    tools:
    - name: get-historical-prices
      description: Fetch historical price data from Bloomberg for backtesting.
      inputParameters:
      - name: security_id
        in: body
        type: string
        description: Bloomberg security ID.
      - name: start_date
        in: body
        type: string
        description: Start date.
      - name: end_date
        in: body
        type: string
        description: End date.
      - name: frequency
        in: body
        type: string
        description: Data frequency (DAILY, WEEKLY, MONTHLY).
      call: bloomberg.get-history
      with:
        securities: '{{security_id}}'
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
        frequency: '{{frequency}}'
        fields: PX_LAST,PX_VOLUME
      outputParameters:
      - name: data
        type: array
        mapping: $.data
      - name: count
        type: integer
        mapping: $.count
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/datasets
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: history
      path: /histories
      operations:
      - name: get-history
        method: POST
Open in Framework → View in Fleet → bloomberg-terminal-analytics-feed.yml

Processes client address change requests by updating Salesforce CRM, verifying identity via Okta MFA, updating the mailing system, and logging the change in the compliance audit trail.

naftiko: '0.5'
info:
  label: Client Address Change Orchestrator
  description: Processes client address change requests by updating Salesforce CRM, verifying identity via Okta MFA, updating the mailing system, and logging the change in the compliance audit trail.
  tags:
  - account-services
  - address-change
  - salesforce
  - okta
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: address-changes
    port: 8080
    tools:
    - name: process-address-change
      description: Orchestrate address change across Salesforce, Okta, mailing, and compliance systems.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Client account ID.
      - name: new_address
        in: body
        type: string
        description: New mailing address.
      - name: client_email
        in: body
        type: string
        description: Client email for verification.
      steps:
      - name: verify-identity
        type: call
        call: okta.trigger-mfa
        with:
          login: '{{client_email}}'
          factor_type: push
      - name: update-crm
        type: call
        call: salesforce.update-account
        with:
          account_id: '{{account_id}}'
          field: BillingAddress
          value: '{{new_address}}'
      - name: update-mailing
        type: call
        call: mailing.update-address
        with:
          account_id: '{{account_id}}'
          address: '{{new_address}}'
      - name: log-audit
        type: call
        call: compliance.log-change
        with:
          account_id: '{{account_id}}'
          change_type: address_update
          details: 'Address changed to: {{new_address}}. MFA verified: {{verify-identity.status}}.'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://schwab.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_api_token
    resources:
    - name: factors
      path: /users/{{login}}/factors
      inputParameters:
      - name: login
        in: path
      operations:
      - name: trigger-mfa
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://schwab.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: update-account
        method: PATCH
  - type: http
    namespace: mailing
    baseUri: https://mailing-api.schwab.com/v1
    authentication:
      type: bearer
      token: $secrets.mailing_api_token
    resources:
    - name: addresses
      path: /addresses
      operations:
      - name: update-address
        method: PUT
  - type: http
    namespace: compliance
    baseUri: https://compliance-api.schwab.com/v1
    authentication:
      type: bearer
      token: $secrets.compliance_api_token
    resources:
    - name: audit
      path: /audit-trail
      operations:
      - name: log-change
        method: POST
Open in Framework → View in Fleet → client-address-change-orchestrator.yml

Monitors WebSphere servers running legacy account management systems.

naftiko: '0.5'
info:
  label: WebSphere Legacy Account System Monitor
  description: Monitors WebSphere servers running legacy account management systems.
  tags:
  - infrastructure
  - websphere
capability:
  exposes:
  - type: mcp
    namespace: legacy-health
    port: 8080
    tools:
    - name: check-legacy-server
      description: Query WebSphere for legacy server health.
      inputParameters:
      - name: server_name
        in: body
        type: string
        description: Server name.
      call: websphere.get-server-status
      with:
        server: '{{server_name}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.state
      - name: heap_usage_pct
        type: number
        mapping: $.jvm.heap_usage_pct
  consumes:
  - type: http
    namespace: websphere
    baseUri: https://websphere-admin.schwab.com/IBMJMXConnectorREST
    authentication:
      type: basic
      username: $secrets.websphere_admin_user
      password: $secrets.websphere_admin_password
    resources:
    - name: servers
      path: /mbeans/WebSphere:type=Server,name={{server}}
      inputParameters:
      - name: server
        in: path
      operations:
      - name: get-server-status
        method: GET
Open in Framework → View in Fleet → websphere-legacy-account-system-monitor.yml

Reconciles cost basis records by comparing Teradata positions with Calypso trade records, flagging discrepancies in Snowflake, and creating ServiceNow tickets for resolution.

naftiko: '0.5'
info:
  label: Cost Basis Reconciliation Orchestrator
  description: Reconciles cost basis records by comparing Teradata positions with Calypso trade records, flagging discrepancies in Snowflake, and creating ServiceNow tickets for resolution.
  tags:
  - operations
  - reconciliation
  - teradata
  - calypso
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: cost-basis-recon
    port: 8080
    tools:
    - name: reconcile-cost-basis
      description: Orchestrate cost basis reconciliation across Teradata, Calypso, Snowflake, and ServiceNow.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Account ID to reconcile.
      - name: as_of_date
        in: body
        type: string
        description: Reconciliation date in YYYY-MM-DD.
      steps:
      - name: get-positions
        type: call
        call: teradata.query-positions
        with:
          query: SELECT * FROM COST_BASIS WHERE account_id = '{{account_id}}' AND as_of_date = '{{as_of_date}}'
      - name: get-trades
        type: call
        call: calypso.get-trade-history
        with:
          account_id: '{{account_id}}'
          date: '{{as_of_date}}'
      - name: log-discrepancies
        type: call
        call: snowflake.insert-discrepancies
        with:
          statement: INSERT INTO RECON_DISCREPANCIES SELECT * FROM TABLE(COMPARE_COST_BASIS('{{account_id}}', '{{as_of_date}}'))
          warehouse: SCHWAB_OPERATIONS_WH
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Cost basis discrepancy: {{account_id}} as of {{as_of_date}}'
          category: reconciliation
          assigned_group: Operations_Reconciliation
          description: Cost basis reconciliation found discrepancies for account {{account_id}}.
  consumes:
  - type: http
    namespace: teradata
    baseUri: https://teradata.schwab.com/api/v1
    authentication:
      type: bearer
      token: $secrets.teradata_token
    resources:
    - name: queries
      path: /queries
      operations:
      - name: query-positions
        method: POST
  - type: http
    namespace: calypso
    baseUri: https://calypso.schwab.com/api/v1
    authentication:
      type: bearer
      token: $secrets.calypso_token
    resources:
    - name: trades
      path: /trades/history
      operations:
      - name: get-trade-history
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://schwab.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: insert-discrepancies
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://schwab.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → cost-basis-reconciliation-orchestrator.yml

Updates client risk profiles by collecting questionnaire results from Salesforce, running risk scoring in Databricks, updating the account system, and notifying the advisor via Microsoft Teams.

naftiko: '0.5'
info:
  label: Client Risk Profile Update Orchestrator
  description: Updates client risk profiles by collecting questionnaire results from Salesforce, running risk scoring in Databricks, updating the account system, and notifying the advisor via Microsoft Teams.
  tags:
  - risk-profiling
  - suitability
  - salesforce
  - databricks
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: risk-profiling
    port: 8080
    tools:
    - name: update-risk-profile
      description: Orchestrate risk profile update across Salesforce, Databricks, and Teams.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Client account ID.
      - name: questionnaire_id
        in: body
        type: string
        description: Completed questionnaire ID.
      steps:
      - name: get-responses
        type: call
        call: salesforce.get-questionnaire
        with:
          questionnaire_id: '{{questionnaire_id}}'
      - name: calculate-score
        type: call
        call: databricks.run-risk-model
        with:
          responses: '{{get-responses.data}}'
          model: client-risk-scoring-v3
      - name: update-account
        type: call
        call: accounts.update-risk-profile
        with:
          account_id: '{{account_id}}'
          risk_score: '{{calculate-score.score}}'
          risk_category: '{{calculate-score.category}}'
      - name: notify-advisor
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-responses.advisor_email}}'
          text: 'Risk profile updated: Account {{account_id}}. New score: {{calculate-score.score}} ({{calculate-score.category}}). Review recommended.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://schwab.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: questionnaires
      path: /sobjects/Risk_Questionnaire__c/{{questionnaire_id}}
      inputParameters:
      - name: questionnaire_id
        in: path
      operations:
      - name: get-questionnaire
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://schwab.cloud.databricks.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: serving
      path: /serving-endpoints/client-risk-scoring-v3/invocations
      operations:
      - name: run-risk-model
        method: POST
  - type: http
    namespace: accounts
    baseUri: https://accounts-api.schwab.com/v2
    authentication:
      type: bearer
      token: $secrets.accounts_api_token
    resources:
    - name: risk-profiles
      path: /accounts/{{account_id}}/risk-profile
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: update-risk-profile
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → client-risk-profile-update-orchestrator.yml

Sends account opening agreements and disclosure documents to clients for electronic signature via DocuSign.

naftiko: '0.5'
info:
  label: DocuSign Account Agreement Sender
  description: Sends account opening agreements and disclosure documents to clients for electronic signature via DocuSign.
  tags:
  - documents
  - e-signature
  - docusign
capability:
  exposes:
  - type: mcp
    namespace: document-signing
    port: 8080
    tools:
    - name: send-agreement
      description: Send an account agreement envelope for electronic signature via DocuSign.
      inputParameters:
      - name: client_email
        in: body
        type: string
        description: Client email address.
      - name: client_name
        in: body
        type: string
        description: Client full name.
      - name: template_id
        in: body
        type: string
        description: DocuSign template ID for the agreement type.
      call: docusign.create-envelope
      with:
        templateId: '{{template_id}}'
        signerEmail: '{{client_email}}'
        signerName: '{{client_name}}'
      outputParameters:
      - name: envelope_id
        type: string
        mapping: $.envelopeId
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: docusign
    baseUri: https://na4.docusign.net/restapi/v2.1/accounts/$secrets.docusign_account_id
    authentication:
      type: bearer
      token: $secrets.docusign_access_token
    resources:
    - name: envelopes
      path: /envelopes
      operations:
      - name: create-envelope
        method: POST
Open in Framework → View in Fleet → docusign-account-agreement-sender.yml

Uploads compliance and regulatory documents to Box with appropriate retention policies for SEC and FINRA requirements.

naftiko: '0.5'
info:
  label: Box Compliance Document Manager
  description: Uploads compliance and regulatory documents to Box with appropriate retention policies for SEC and FINRA requirements.
  tags:
  - compliance
  - document-management
  - box
capability:
  exposes:
  - type: mcp
    namespace: compliance-docs
    port: 8080
    tools:
    - name: upload-compliance-doc
      description: Upload a compliance document to Box with retention settings.
      inputParameters:
      - name: file_name
        in: body
        type: string
        description: Document name.
      - name: folder_id
        in: body
        type: string
        description: Box folder ID.
      - name: retention_years
        in: body
        type: integer
        description: Retention period in years.
      call: box.upload-file
      with:
        folder_id: '{{folder_id}}'
        file_name: '{{file_name}}'
        retention_policy: '{{retention_years}}_year'
      outputParameters:
      - name: file_id
        type: string
        mapping: $.entries[0].id
      - name: shared_link
        type: string
        mapping: $.entries[0].shared_link.url
  consumes:
  - type: http
    namespace: box
    baseUri: https://upload.box.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files/content
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → box-compliance-document-manager.yml

Retrieves firewall rules from Palo Alto Panorama for compliance auditing of Schwab's network perimeter protecting client data.

naftiko: '0.5'
info:
  label: Palo Alto Networks Firewall Auditor
  description: Retrieves firewall rules from Palo Alto Panorama for compliance auditing of Schwab's network perimeter protecting client data.
  tags:
  - security
  - compliance
  - palo-alto-networks
capability:
  exposes:
  - type: mcp
    namespace: network-security
    port: 8080
    tools:
    - name: audit-firewall-rules
      description: Fetch firewall security policies from Palo Alto Panorama.
      inputParameters:
      - name: device_group
        in: body
        type: string
        description: Device group.
      call: paloalto.get-security-rules
      with:
        device_group: '{{device_group}}'
      outputParameters:
      - name: rules
        type: array
        mapping: $.result.entry
      - name: total_rules
        type: integer
        mapping: $.result.@count
  consumes:
  - type: http
    namespace: paloalto
    baseUri: https://panorama.schwab.com/restapi/v10.2
    authentication:
      type: apiKey
      key: $secrets.paloalto_api_key
    resources:
    - name: security-rules
      path: /Policies/SecurityRules
      operations:
      - name: get-security-rules
        method: GET
Open in Framework → View in Fleet → palo-alto-networks-firewall-auditor.yml

Processes ACH transfers by validating bank details, running fraud screening via Splunk, submitting to the payment gateway, logging in Snowflake, and notifying the client via email.

naftiko: '0.5'
info:
  label: ACH Transfer Processing Orchestrator
  description: Processes ACH transfers by validating bank details, running fraud screening via Splunk, submitting to the payment gateway, logging in Snowflake, and notifying the client via email.
  tags:
  - payments
  - ach
  - splunk
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: ach-processing
    port: 8080
    tools:
    - name: process-ach-transfer
      description: Orchestrate ACH transfer processing across validation, fraud check, payment, and logging.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Schwab account ID.
      - name: amount
        in: body
        type: number
        description: Transfer amount.
      - name: direction
        in: body
        type: string
        description: Transfer direction (deposit, withdrawal).
      - name: external_account
        in: body
        type: string
        description: External bank account identifier.
      steps:
      - name: validate-bank
        type: call
        call: banking.validate-external-account
        with:
          external_account: '{{external_account}}'
      - name: fraud-screen
        type: call
        call: splunk.search
        with:
          query: index=ach_fraud account={{account_id}} OR bank={{external_account}} earliest=-90d | stats count as alerts
      - name: submit-transfer
        type: call
        call: payments.submit-ach
        with:
          account_id: '{{account_id}}'
          amount: '{{amount}}'
          direction: '{{direction}}'
          external_account: '{{external_account}}'
      - name: log-transfer
        type: call
        call: snowflake.insert-ach-log
        with:
          statement: INSERT INTO ACH_TRANSFER_LOG VALUES ('{{account_id}}', {{amount}}, '{{direction}}', '{{submit-transfer.confirmation_id}}', CURRENT_TIMESTAMP)
          warehouse: SCHWAB_PAYMENTS_WH
  consumes:
  - type: http
    namespace: banking
    baseUri: https://core-banking.schwab.com/api/v2
    authentication:
      type: bearer
      token: $secrets.banking_api_token
    resources:
    - name: validation
      path: /external-accounts/validate
      operations:
      - name: validate-external-account
        method: POST
  - type: http
    namespace: splunk
    baseUri: https://splunk.schwab.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search
      path: /search/jobs
      operations:
      - name: search
        method: POST
  - type: http
    namespace: payments
    baseUri: https://payments-api.schwab.com/v1
    authentication:
      type: bearer
      token: $secrets.payments_api_token
    resources:
    - name: ach
      path: /ach/transfers
      operations:
      - name: submit-ach
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://schwab.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: insert-ach-log
        method: POST
Open in Framework → View in Fleet → ach-transfer-processing-orchestrator.yml

Assigns Series 7, Series 66, and CFP study courses in Pluralsight to financial advisors.

naftiko: '0.5'
info:
  label: Pluralsight Financial Advisor Training
  description: Assigns Series 7, Series 66, and CFP study courses in Pluralsight to financial advisors.
  tags:
  - training
  - licensing
  - pluralsight
capability:
  exposes:
  - type: mcp
    namespace: advisor-training
    port: 8080
    tools:
    - name: assign-licensing-course
      description: Assign a licensing preparation course in Pluralsight.
      inputParameters:
      - name: user_email
        in: body
        type: string
        description: Advisor email.
      - name: path_id
        in: body
        type: string
        description: Learning path ID.
      - name: due_date
        in: body
        type: string
        description: Due date.
      call: pluralsight.assign-path
      with:
        email: '{{user_email}}'
        path_id: '{{path_id}}'
        due_date: '{{due_date}}'
      outputParameters:
      - name: assignment_id
        type: string
        mapping: $.id
  consumes:
  - type: http
    namespace: pluralsight
    baseUri: https://api.pluralsight.com/api/v1
    authentication:
      type: bearer
      token: $secrets.pluralsight_token
    resources:
    - name: assignments
      path: /learning-paths/{{path_id}}/assignments
      inputParameters:
      - name: path_id
        in: path
      operations:
      - name: assign-path
        method: POST
Open in Framework → View in Fleet → pluralsight-financial-advisor-training.yml

Organizes client financial planning documents in Google Drive by account and type.

naftiko: '0.5'
info:
  label: Google Drive Client Document Organizer
  description: Organizes client financial planning documents in Google Drive by account and type.
  tags:
  - document-management
  - google-drive
capability:
  exposes:
  - type: mcp
    namespace: client-documents
    port: 8080
    tools:
    - name: organize-client-doc
      description: Move a client document to the correct Drive folder.
      inputParameters:
      - name: file_id
        in: body
        type: string
        description: File ID.
      - name: account_number
        in: body
        type: string
        description: Account number.
      call: google-drive.move-file
      with:
        file_id: '{{file_id}}'
        target_folder: clients_{{account_number}}
      outputParameters:
      - name: name
        type: string
        mapping: $.name
  consumes:
  - type: http
    namespace: google-drive
    baseUri: https://www.googleapis.com/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_drive_token
    resources:
    - name: files
      path: /files/{{file_id}}
      inputParameters:
      - name: file_id
        in: path
      operations:
      - name: move-file
        method: PATCH
Open in Framework → View in Fleet → google-drive-client-document-organizer.yml

Analyzes client sentiment by extracting survey responses from Salesforce, running NLP analysis via Azure ML, updating client satisfaction scores in Snowflake, and alerting account managers via Microsoft Teams.

naftiko: '0.5'
info:
  label: Client Sentiment Analysis Pipeline
  description: Analyzes client sentiment by extracting survey responses from Salesforce, running NLP analysis via Azure ML, updating client satisfaction scores in Snowflake, and alerting account managers via Microsoft Teams.
  tags:
  - analytics
  - sentiment
  - salesforce
  - azure-machine-learning
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sentiment-analysis
    port: 8080
    tools:
    - name: analyze-sentiment
      description: Orchestrate client sentiment analysis across Salesforce, Azure ML, Snowflake, and Teams.
      inputParameters:
      - name: survey_batch_id
        in: body
        type: string
        description: Survey batch identifier.
      steps:
      - name: get-responses
        type: call
        call: salesforce.get-survey-responses
        with:
          batch_id: '{{survey_batch_id}}'
      - name: run-analysis
        type: call
        call: azure-ml.score-sentiment
        with:
          texts: '{{get-responses.comments}}'
          model: client-sentiment-v2
      - name: update-scores
        type: call
        call: snowflake.update-satisfaction
        with:
          statement: CALL UPDATE_CLIENT_SATISFACTION('{{survey_batch_id}}', '{{run-analysis.scores}}')
          warehouse: SCHWAB_ANALYTICS_WH
      - name: alert-managers
        type: call
        call: msteams.send-channel-message
        with:
          team_id: client-experience
          channel: sentiment-alerts
          text: 'Sentiment analysis complete: Batch {{survey_batch_id}}. Avg score: {{run-analysis.avg_score}}. Negative: {{run-analysis.negative_count}}. Positive: {{run-analysis.positive_count}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://schwab.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: surveys
      path: /sobjects/Survey_Response__c
      operations:
      - name: get-survey-responses
        method: GET
  - type: http
    namespace: azure-ml
    baseUri: https://schwab-ml.centralus.inference.ml.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_ml_token
    resources:
    - name: scoring
      path: /score
      operations:
      - name: score-sentiment
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://schwab.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: update-satisfaction
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → client-sentiment-analysis-pipeline.yml

Identifies expiring options positions from Snowflake, evaluates in-the-money status from Bloomberg, sends client notifications via Twilio SMS, and logs actions in Salesforce.

naftiko: '0.5'
info:
  label: Options Expiration Notification Pipeline
  description: Identifies expiring options positions from Snowflake, evaluates in-the-money status from Bloomberg, sends client notifications via Twilio SMS, and logs actions in Salesforce.
  tags:
  - options
  - expiration
  - snowflake
  - bloomberg
  - twilio
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: options-expiration
    port: 8080
    tools:
    - name: process-expirations
      description: Orchestrate options expiration notifications across Snowflake, Bloomberg, Twilio, and Salesforce.
      inputParameters:
      - name: expiration_date
        in: body
        type: string
        description: Options expiration date in YYYY-MM-DD.
      steps:
      - name: get-expiring-positions
        type: call
        call: snowflake.query-options
        with:
          statement: SELECT * FROM OPTIONS_POSITIONS WHERE expiration_date = '{{expiration_date}}' AND quantity > 0
          warehouse: SCHWAB_TRADING_WH
      - name: check-itm-status
        type: call
        call: bloomberg.check-options-status
        with:
          positions: '{{get-expiring-positions.data}}'
      - name: send-notifications
        type: call
        call: twilio.send-bulk-sms
        with:
          messages: '{{check-itm-status.notifications}}'
          from: '+18005407000'
      - name: log-notifications
        type: call
        call: salesforce.create-activities
        with:
          activities: '{{send-notifications.delivery_log}}'
          type: options_expiration_notice
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://schwab.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: query-options
        method: POST
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: options
      path: /options/itm-check
      operations:
      - name: check-options-status
        method: POST
  - type: http
    namespace: twilio
    baseUri: https://api.twilio.com/2010-04-01/Accounts/$secrets.twilio_account_sid
    authentication:
      type: basic
      username: $secrets.twilio_account_sid
      password: $secrets.twilio_auth_token
    resources:
    - name: messages
      path: /Messages.json
      operations:
      - name: send-bulk-sms
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://schwab.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: activities
      path: /sobjects/Activity__c
      operations:
      - name: create-activities
        method: POST
Open in Framework → View in Fleet → options-expiration-notification-pipeline.yml

Processes wire transfer requests by validating the account in the core banking system, running fraud checks via Splunk, creating an approval task in ServiceNow, and notifying the operations team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Wire Transfer Approval Orchestrator
  description: Processes wire transfer requests by validating the account in the core banking system, running fraud checks via Splunk, creating an approval task in ServiceNow, and notifying the operations team via Microsoft Teams.
  tags:
  - wire-transfer
  - fraud-detection
  - splunk
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: wire-transfers
    port: 8080
    tools:
    - name: process-wire-transfer
      description: Orchestrate wire transfer approval across banking system, Splunk, ServiceNow, and Teams.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Source account ID.
      - name: amount
        in: body
        type: number
        description: Wire transfer amount.
      - name: beneficiary_bank
        in: body
        type: string
        description: Beneficiary bank routing number.
      steps:
      - name: validate-account
        type: call
        call: banking.validate-wire
        with:
          account_id: '{{account_id}}'
          amount: '{{amount}}'
      - name: fraud-check
        type: call
        call: splunk.search
        with:
          query: index=fraud_alerts account_id={{account_id}} earliest=-30d | stats count as fraud_count
      - name: create-approval
        type: call
        call: servicenow.create-change
        with:
          short_description: 'Wire transfer: {{account_id}} - ${{amount}}'
          category: wire_transfer
          assigned_group: Wire_Operations
          description: 'Amount: ${{amount}}

            Beneficiary bank: {{beneficiary_bank}}

            Fraud alerts (30d): {{fraud-check.fraud_count}}

            Account status: {{validate-account.status}}'
      - name: notify-ops
        type: call
        call: msteams.send-channel-message
        with:
          team_id: operations
          channel: wire-transfers
          text: 'Wire transfer pending: {{account_id}}, ${{amount}}. Approval: {{create-approval.number}}. Fraud alerts: {{fraud-check.fraud_count}}.'
  consumes:
  - type: http
    namespace: banking
    baseUri: https://core-banking.schwab.com/api/v2
    authentication:
      type: bearer
      token: $secrets.banking_api_token
    resources:
    - name: wires
      path: /wire-validation
      operations:
      - name: validate-wire
        method: POST
  - type: http
    namespace: splunk
    baseUri: https://splunk.schwab.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://schwab.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}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → wire-transfer-approval-orchestrator.yml

Publishes investor relations content on the Schwab LinkedIn company page for earnings and corporate updates.

naftiko: '0.5'
info:
  label: LinkedIn Investor Relations Publisher
  description: Publishes investor relations content on the Schwab LinkedIn company page for earnings and corporate updates.
  tags:
  - investor-relations
  - communications
  - linkedin
capability:
  exposes:
  - type: mcp
    namespace: investor-comms
    port: 8080
    tools:
    - name: publish-ir-post
      description: Post investor relations content to the Schwab LinkedIn page.
      inputParameters:
      - name: text
        in: body
        type: string
        description: Post content.
      - name: link_url
        in: body
        type: string
        description: Link URL.
      call: linkedin.create-post
      with:
        author: urn:li:organization:{{schwab_org_id}}
        text: '{{text}}'
        link: '{{link_url}}'
      outputParameters:
      - name: post_id
        type: string
        mapping: $.id
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: ugcPosts
      path: /ugcPosts
      operations:
      - name: create-post
        method: POST
Open in Framework → View in Fleet → linkedin-investor-relations-publisher.yml

Monitors AWS Lambda function health for Schwab's trade settlement processing, returning invocation count, error rate, and duration metrics.

naftiko: '0.5'
info:
  label: AWS Lambda Trade Settlement Monitor
  description: Monitors AWS Lambda function health for Schwab's trade settlement processing, returning invocation count, error rate, and duration metrics.
  tags:
  - serverless
  - trade-settlement
  - aws-lambda
capability:
  exposes:
  - type: mcp
    namespace: settlement-monitor
    port: 8080
    tools:
    - name: get-settlement-function-health
      description: Check Lambda function health for trade settlement processing.
      inputParameters:
      - name: function_name
        in: body
        type: string
        description: Lambda function name.
      call: lambda.get-function
      with:
        FunctionName: '{{function_name}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.Configuration.State
      - name: last_modified
        type: string
        mapping: $.Configuration.LastModified
      - name: runtime
        type: string
        mapping: $.Configuration.Runtime
  consumes:
  - type: http
    namespace: lambda
    baseUri: https://lambda.us-east-1.amazonaws.com/2015-03-31
    authentication:
      type: aws-sig-v4
      access_key: $secrets.aws_access_key
      secret_key: $secrets.aws_secret_key
    resources:
    - name: functions
      path: /functions/{{FunctionName}}
      inputParameters:
      - name: FunctionName
        in: path
      operations:
      - name: get-function
        method: GET
Open in Framework → View in Fleet → aws-lambda-trade-settlement-monitor.yml

Retrieves trade lifecycle events from the Calypso trading platform for fixed income and derivatives position management.

naftiko: '0.5'
info:
  label: Calypso Trade Lifecycle Manager
  description: Retrieves trade lifecycle events from the Calypso trading platform for fixed income and derivatives position management.
  tags:
  - trading
  - lifecycle
  - calypso
capability:
  exposes:
  - type: mcp
    namespace: trade-lifecycle
    port: 8080
    tools:
    - name: get-trade-events
      description: Fetch trade lifecycle events from Calypso.
      inputParameters:
      - name: trade_id
        in: body
        type: string
        description: Calypso trade ID.
      call: calypso.get-trade
      with:
        trade_id: '{{trade_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.trade.status
      - name: product_type
        type: string
        mapping: $.trade.product_type
  consumes:
  - type: http
    namespace: calypso
    baseUri: https://calypso.schwab.com/calypsoserver/api/v1
    authentication:
      type: bearer
      token: $secrets.calypso_token
    resources:
    - name: trades
      path: /trades/{{trade_id}}
      inputParameters:
      - name: trade_id
        in: path
      operations:
      - name: get-trade
        method: GET
Open in Framework → View in Fleet → calypso-trade-lifecycle-manager.yml

Identifies clients approaching Required Minimum Distribution deadlines from Snowflake, calculates RMD amounts, sends reminders via email and SMS, and logs outreach in Salesforce.

naftiko: '0.5'
info:
  label: RMD Distribution Reminder Pipeline
  description: Identifies clients approaching Required Minimum Distribution deadlines from Snowflake, calculates RMD amounts, sends reminders via email and SMS, and logs outreach in Salesforce.
  tags:
  - retirement
  - rmd
  - snowflake
  - twilio
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: rmd-reminders
    port: 8080
    tools:
    - name: process-rmd-reminders
      description: Orchestrate RMD distribution reminders across Snowflake, Twilio, and Salesforce.
      inputParameters:
      - name: reminder_days
        in: body
        type: integer
        description: Days before deadline to send reminder.
      steps:
      - name: get-rmd-clients
        type: call
        call: snowflake.query-rmd
        with:
          statement: SELECT * FROM RMD_SCHEDULE WHERE deadline_date <= DATEADD(day, {{reminder_days}}, CURRENT_DATE) AND distributed = FALSE
          warehouse: SCHWAB_RETIREMENT_WH
      - name: send-sms-reminders
        type: call
        call: twilio.send-bulk-sms
        with:
          messages: '{{get-rmd-clients.sms_list}}'
          from: '+18005407000'
      - name: send-email-reminders
        type: call
        call: ses.send-bulk-email
        with:
          recipients: '{{get-rmd-clients.email_list}}'
          template: rmd-reminder
      - name: log-outreach
        type: call
        call: salesforce.create-bulk-activities
        with:
          activities: '{{get-rmd-clients.activity_log}}'
          type: rmd_reminder_sent
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://schwab.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: query-rmd
        method: POST
  - type: http
    namespace: twilio
    baseUri: https://api.twilio.com/2010-04-01/Accounts/$secrets.twilio_account_sid
    authentication:
      type: basic
      username: $secrets.twilio_account_sid
      password: $secrets.twilio_auth_token
    resources:
    - name: messages
      path: /Messages.json
      operations:
      - name: send-bulk-sms
        method: POST
  - type: http
    namespace: ses
    baseUri: https://email.us-east-1.amazonaws.com
    authentication:
      type: aws-sig-v4
      access_key: $secrets.aws_access_key
      secret_key: $secrets.aws_secret_key
    resources:
    - name: bulk-email
      path: /v2/email/outbound-bulk-emails
      operations:
      - name: send-bulk-email
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://schwab.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: activities
      path: /composite/sobjects/Activity__c
      operations:
      - name: create-bulk-activities
        method: POST
Open in Framework → View in Fleet → rmd-distribution-reminder-pipeline.yml

Queries Jira for all unestimated and high-priority backlog issues on a technology delivery board and posts a sprint planning agenda to the product team's Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Jira Backlog Sprint Planning Digest
  description: Queries Jira for all unestimated and high-priority backlog issues on a technology delivery board and posts a sprint planning agenda to the product team's Microsoft Teams channel.
  tags:
  - devops
  - jira
  - microsoft-teams
  - sprint-planning
  - engineering
capability:
  exposes:
  - type: mcp
    namespace: sprint-planning
    port: 8080
    tools:
    - name: generate-sprint-agenda
      description: Query Jira for prioritized unestimated backlog issues on a given board and post a sprint planning agenda to the product team Teams channel before the sprint planning ceremony.
      inputParameters:
      - name: board_id
        in: body
        type: string
        description: The Jira board ID for the product delivery team.
      - name: sprint_name
        in: body
        type: string
        description: The upcoming sprint name for the agenda header.
      steps:
      - name: get-backlog
        type: call
        call: jira.search-backlog
        with:
          board_id: '{{board_id}}'
      - name: post-agenda
        type: call
        call: msteams.post-sprint-agenda
        with:
          channel_id: product-team
          text: 'Sprint Planning Agenda: {{sprint_name}} | Board: {{board_id}} | Total backlog: {{get-backlog.total_count}} | Unestimated: {{get-backlog.unestimated}} | P1 items: {{get-backlog.priority_count}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://citi.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: backlog-issues
      path: /search
      inputParameters:
      - name: board_id
        in: query
      operations:
      - name: search-backlog
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.ms_graph_token
    resources:
    - name: team-messages
      path: /teams/technology/channels/product-team/messages
      operations:
      - name: post-sprint-agenda
        method: POST
Open in Framework → View in Fleet → jira-backlog-sprint-planning-digest.yml

After a resolved P1 incident, creates a structured post-mortem page in Confluence from ServiceNow incident data and notifies the engineering team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Confluence Incident Post-Mortem Publisher
  description: After a resolved P1 incident, creates a structured post-mortem page in Confluence from ServiceNow incident data and notifies the engineering team via Microsoft Teams.
  tags:
  - itsm
  - servicenow
  - confluence
  - microsoft-teams
  - post-mortem
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: post-mortem
    port: 8080
    tools:
    - name: publish-post-mortem
      description: Given a resolved ServiceNow P1 incident, retrieve incident timeline and resolution notes, create a structured post-mortem page in Confluence, and notify the engineering team via Teams.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow P1 incident number to document.
      - name: confluence_space_key
        in: body
        type: string
        description: The Confluence space key for the post-mortem library (e.g., ITOPS).
      steps:
      - name: get-incident
        type: call
        call: servicenow.get-incident
        with:
          incident_number: '{{incident_number}}'
      - name: create-pm-page
        type: call
        call: confluence.create-page
        with:
          space_key: '{{confluence_space_key}}'
          title: 'Post-Mortem: {{get-incident.short_description}} ({{incident_number}})'
          body: '**Incident:** {{incident_number}}

            **Summary:** {{get-incident.short_description}}

            **Duration:** {{get-incident.resolution_time}}

            **Impact:** {{get-incident.business_impact}}

            **Root Cause:** {{get-incident.cause}}

            **Resolution:** {{get-incident.close_notes}}'
      - name: notify-eng
        type: call
        call: msteams.post-pm-notification
        with:
          channel_id: engineering
          text: 'Post-Mortem Published | Incident: {{incident_number}} | {{get-incident.short_description}} | Confluence: {{create-pm-page.url}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://citi.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident/{{incident_number}}
      inputParameters:
      - name: incident_number
        in: path
      operations:
      - name: get-incident
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://citi.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.ms_graph_token
    resources:
    - name: eng-messages
      path: /teams/engineering/channels/general/messages
      operations:
      - name: post-pm-notification
        method: POST
Open in Framework → View in Fleet → confluence-incident-post-mortem-publisher.yml

Retrieves employees with incomplete annual benefits enrollment from Workday and sends targeted reminders via Microsoft Teams to employees and their HR business partners.

naftiko: '0.5'
info:
  label: Workday Benefits Enrollment Status Reminder
  description: Retrieves employees with incomplete annual benefits enrollment from Workday and sends targeted reminders via Microsoft Teams to employees and their HR business partners.
  tags:
  - hr
  - workday
  - microsoft-teams
  - benefits
  - enrollment
capability:
  exposes:
  - type: mcp
    namespace: benefits-enrollment
    port: 8080
    tools:
    - name: send-enrollment-reminders
      description: During open enrollment, retrieve all employees who have not completed benefits elections in Workday and broadcast reminder messages via Microsoft Teams to drive completion before the deadline.
      inputParameters:
      - name: enrollment_period_id
        in: body
        type: string
        description: The Workday benefits enrollment period identifier.
      - name: deadline_date
        in: body
        type: string
        description: The enrollment deadline in YYYY-MM-DD format.
      steps:
      - name: get-incomplete
        type: call
        call: workday.get-incomplete-elections
        with:
          enrollment_period: '{{enrollment_period_id}}'
      - name: send-reminder
        type: call
        call: msteams.send-benefits-reminder
        with:
          channel_id: hr-announcements
          text: 'Benefits Enrollment Reminder | Period: {{enrollment_period_id}} | Deadline: {{deadline_date}} | {{get-incomplete.count}} employees have not yet completed enrollment. Please log in to Workday to complete your benefit elections.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: benefit-elections
      path: /benefitElections
      inputParameters:
      - name: enrollment_period
        in: query
      operations:
      - name: get-incomplete-elections
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.ms_graph_token
    resources:
    - name: hr-messages
      path: /teams/hr/channels/announcements/messages
      operations:
      - name: send-benefits-reminder
        method: POST
Open in Framework → View in Fleet → workday-benefits-enrollment-status-reminder.yml

Returns a headcount snapshot by department and cost center from Workday for monthly payroll reconciliation and regulatory reporting.

naftiko: '0.5'
info:
  label: Workday Payroll Headcount Snapshot
  description: Returns a headcount snapshot by department and cost center from Workday for monthly payroll reconciliation and regulatory reporting.
  tags:
  - hr
  - finance
  - workday
  - payroll
  - headcount
capability:
  exposes:
  - type: mcp
    namespace: hr-finance
    port: 8080
    tools:
    - name: get-payroll-headcount
      description: Returns all active employees grouped by department, cost center, and employment type from Workday. Use for monthly payroll reconciliation, finance cost allocation, and regulatory headcount reporting.
      call: workday.get-workers
      outputParameters:
      - name: employees
        type: array
        mapping: $.data
        items:
        - name: worker_id
          type: string
          mapping: $.workerId
        - name: full_name
          type: string
          mapping: $.fullName
        - name: department
          type: string
          mapping: $.department
        - name: cost_center
          type: string
          mapping: $.costCenter
        - name: employment_type
          type: string
          mapping: $.employmentType
  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: get-workers
        method: GET
Open in Framework → View in Fleet → workday-payroll-headcount-snapshot.yml

Triggers a scheduled Power BI dataset refresh for the regulatory capital and liquidity reporting dashboard, pulling data from Snowflake for submission readiness.

naftiko: '0.5'
info:
  label: Power BI Regulatory Reporting Dashboard Refresh
  description: Triggers a scheduled Power BI dataset refresh for the regulatory capital and liquidity reporting dashboard, pulling data from Snowflake for submission readiness.
  tags:
  - analytics
  - power-bi
  - snowflake
  - reporting
  - regulatory
capability:
  exposes:
  - type: mcp
    namespace: regulatory-reporting
    port: 8080
    tools:
    - name: refresh-regulatory-dashboard
      description: Trigger an on-demand or scheduled Power BI dataset refresh for the regulatory capital and liquidity reporting dashboard. Use before submission deadlines or for executive review.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID for the regulatory reporting dashboard.
      call: powerbi.trigger-refresh
      with:
        dataset_id: '{{dataset_id}}'
      outputParameters:
      - name: refresh_id
        type: string
        mapping: $.id
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refreshes
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
Open in Framework → View in Fleet → power-bi-regulatory-reporting-dashboard-refresh.yml

Orchestrates the monthly general ledger period close sequence in SAP S/4HANA, running variance checks, posting journal adjustments, and notifying the controller team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP General Ledger Period Close Orchestrator
  description: Orchestrates the monthly general ledger period close sequence in SAP S/4HANA, running variance checks, posting journal adjustments, and notifying the controller team via Microsoft Teams.
  tags:
  - finance
  - sap
  - microsoft-teams
  - period-close
  - general-ledger
capability:
  exposes:
  - type: mcp
    namespace: gl-period-close
    port: 8080
    tools:
    - name: run-period-close
      description: Initiate the monthly GL period close for a given company code and fiscal period in SAP S/4HANA. Run variance checks and notify the controller team via Teams upon completion.
      inputParameters:
      - name: company_code
        in: body
        type: string
        description: The SAP company code for the period close (e.g., 1000).
      - name: fiscal_period
        in: body
        type: string
        description: The fiscal period in YYYYMM format (e.g., 202603).
      steps:
      - name: close-period
        type: call
        call: sap.close-fiscal-period
        with:
          company_code: '{{company_code}}'
          fiscal_period: '{{fiscal_period}}'
      - name: notify-controller
        type: call
        call: msteams.post-close-notification
        with:
          channel_id: finance-controllers
          text: 'Period close initiated for Company Code {{company_code}}, Period {{fiscal_period}}. Status: {{close-period.status}}. Run ID: {{close-period.run_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://citi-s4.sap.com/sap/opu/odata/sap/FAR_ACCRUAL_API_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: fiscal-periods
      path: /FiscalPeriodCloseSet
      operations:
      - name: close-fiscal-period
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.ms_graph_token
    resources:
    - name: channel-messages
      path: /teams/finance/channels/controllers/messages
      operations:
      - name: post-close-notification
        method: POST
Open in Framework → View in Fleet → sap-general-ledger-period-close-orchestrator.yml

Retrieves open job requisitions from Workday and posts them to LinkedIn Recruiter, ensuring Citi's talent pipeline remains current across both platforms.

naftiko: '0.5'
info:
  label: Workday Talent Acquisition Job Posting Sync
  description: Retrieves open job requisitions from Workday and posts them to LinkedIn Recruiter, ensuring Citi's talent pipeline remains current across both platforms.
  tags:
  - hr
  - workday
  - linkedin
  - recruiting
  - talent-acquisition
capability:
  exposes:
  - type: mcp
    namespace: talent-acquisition
    port: 8080
    tools:
    - name: sync-job-postings-to-linkedin
      description: Retrieve all open job requisitions from Workday and create or update corresponding LinkedIn job postings to maintain accurate and current talent pipeline visibility.
      inputParameters:
      - name: requisition_status
        in: body
        type: string
        description: Filter Workday requisitions by status (e.g., Open, Approved).
      steps:
      - name: get-requisitions
        type: call
        call: workday.get-job-requisitions
        with:
          status: '{{requisition_status}}'
      - name: post-to-linkedin
        type: call
        call: linkedin.create-job-posting
        with:
          company_id: citi
          title: '{{get-requisitions.job_title}}'
          description: '{{get-requisitions.job_description}}'
          location: '{{get-requisitions.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: job-requisitions
      path: /jobRequisitions
      inputParameters:
      - name: status
        in: query
      operations:
      - name: get-job-requisitions
        method: GET
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: job-postings
      path: /jobPostings
      operations:
      - name: create-job-posting
        method: POST
Open in Framework → View in Fleet → workday-talent-acquisition-job-posting-sync.yml

Processes incoming vendor invoices in SAP S/4HANA, matches them against approved purchase orders in SAP Ariba, and flags unmatched invoices via ServiceNow for AP team resolution.

naftiko: '0.5'
info:
  label: Vendor Invoice Processing and PO Match
  description: Processes incoming vendor invoices in SAP S/4HANA, matches them against approved purchase orders in SAP Ariba, and flags unmatched invoices via ServiceNow for AP team resolution.
  tags:
  - finance
  - sap
  - sap-ariba
  - servicenow
  - accounts-payable
  - invoice-processing
capability:
  exposes:
  - type: mcp
    namespace: ap-processing
    port: 8080
    tools:
    - name: process-vendor-invoice
      description: Given an invoice number and vendor ID, retrieve invoice data from SAP S/4HANA, match against the Ariba PO, and open a ServiceNow discrepancy task if amounts or line items do not align.
      inputParameters:
      - name: invoice_number
        in: body
        type: string
        description: The vendor invoice number to process.
      - name: vendor_id
        in: body
        type: string
        description: The SAP vendor ID for the submitting vendor.
      steps:
      - name: get-invoice
        type: call
        call: sap-ap.get-invoice
        with:
          invoice_number: '{{invoice_number}}'
      - name: get-po
        type: call
        call: sap-ariba.get-po
        with:
          vendor_id: '{{vendor_id}}'
          invoice_number: '{{invoice_number}}'
      - name: flag-discrepancy
        type: call
        call: servicenow.create-ap-task
        with:
          short_description: 'Invoice discrepancy: {{invoice_number}} | Vendor: {{vendor_id}}'
          invoice_amount: '{{get-invoice.total_amount}}'
          po_amount: '{{get-po.total_amount}}'
          assigned_group: AP_Team
  consumes:
  - type: http
    namespace: sap-ap
    baseUri: https://citi-s4.sap.com/sap/opu/odata/sap/API_SUPPLIER_INVOICE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: invoices
      path: /A_SupplierInvoice
      inputParameters:
      - name: invoice_number
        in: query
      operations:
      - name: get-invoice
        method: GET
  - type: http
    namespace: sap-ariba
    baseUri: https://openapi.ariba.com/api/purchase-orders/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: purchase-orders
      path: /orders
      inputParameters:
      - name: vendor_id
        in: query
      - name: invoice_number
        in: query
      operations:
      - name: get-po
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://citi.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: ap-tasks
      path: /table/sc_task
      operations:
      - name: create-ap-task
        method: POST
Open in Framework → View in Fleet → vendor-invoice-processing-and-po-match.yml

Scans GitHub Advanced Security code scanning alerts for banking application repositories and creates Jira security tickets for critical CVEs, notifying the security team via Microsoft Teams.

naftiko: '0.5'
info:
  label: GitHub DevSecOps Vulnerability Triage
  description: Scans GitHub Advanced Security code scanning alerts for banking application repositories and creates Jira security tickets for critical CVEs, notifying the security team via Microsoft Teams.
  tags:
  - security
  - github
  - jira
  - microsoft-teams
  - vulnerability-management
  - devsecops
capability:
  exposes:
  - type: mcp
    namespace: devsecops
    port: 8080
    tools:
    - name: triage-security-alerts
      description: Query GitHub Advanced Security for critical and high-severity code scanning alerts across a banking application repository and create Jira tickets for each unresolved finding, alerting the security team via Teams.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: 'The GitHub repository to scan (format: org/repo).'
      - name: min_severity
        in: body
        type: string
        description: 'Minimum severity threshold: critical or high.'
      steps:
      - name: get-alerts
        type: call
        call: github.get-scanning-alerts
        with:
          repo: '{{repo}}'
          severity: '{{min_severity}}'
      - name: create-sec-ticket
        type: call
        call: jira.create-security-issue
        with:
          project_key: SEC
          issuetype: Security
          summary: '[{{min_severity}}] Vulnerability: {{get-alerts.rule_name}} in {{repo}}'
          description: 'CVE: {{get-alerts.cve_id}}

            Repo: {{repo}}

            File: {{get-alerts.location_path}}

            URL: {{get-alerts.html_url}}'
      - name: alert-security-team
        type: call
        call: msteams.send-sec-alert
        with:
          channel_id: security-engineering
          text: 'Security Alert | {{min_severity}} | {{repo}} | {{get-alerts.rule_name}} | Jira: {{create-sec-ticket.key}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: scanning-alerts
      path: /repos/{{repo}}/code-scanning/alerts
      inputParameters:
      - name: repo
        in: path
      - name: severity
        in: query
      operations:
      - name: get-scanning-alerts
        method: GET
  - type: http
    namespace: jira
    baseUri: https://citi.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: security-issues
      path: /issue
      operations:
      - name: create-security-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.ms_graph_token
    resources:
    - name: security-messages
      path: /teams/security/channels/engineering/messages
      operations:
      - name: send-sec-alert
        method: POST
Open in Framework → View in Fleet → github-devsecops-vulnerability-triage.yml

When a potential regulatory compliance breach is flagged in ServiceNow, creates a Jira compliance investigation ticket and notifies the Chief Compliance Officer via Microsoft Teams.

naftiko: '0.5'
info:
  label: Regulatory Compliance Incident Reporter
  description: When a potential regulatory compliance breach is flagged in ServiceNow, creates a Jira compliance investigation ticket and notifies the Chief Compliance Officer via Microsoft Teams.
  tags:
  - compliance
  - servicenow
  - jira
  - microsoft-teams
  - regulatory
  - financial-compliance
capability:
  exposes:
  - type: mcp
    namespace: compliance-ops
    port: 8080
    tools:
    - name: report-compliance-incident
      description: Given a ServiceNow compliance incident ID, retrieve the details, create a Jira investigation ticket in the Compliance project, and notify the CCO via Teams for immediate awareness.
      inputParameters:
      - name: incident_id
        in: body
        type: string
        description: The ServiceNow compliance incident ID.
      - name: regulation_type
        in: body
        type: string
        description: The regulation category (e.g., AML, KYC, SOX, GDPR).
      steps:
      - name: get-incident
        type: call
        call: servicenow.get-compliance-incident
        with:
          incident_id: '{{incident_id}}'
      - name: create-jira-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: COMP
          issuetype: Compliance Incident
          summary: '[{{regulation_type}}] Compliance breach: {{get-incident.short_description}}'
          description: 'ServiceNow: {{incident_id}}

            Regulation: {{regulation_type}}

            Details: {{get-incident.description}}

            Reported by: {{get-incident.reported_by}}'
      - name: notify-cco
        type: call
        call: msteams.send-cco-alert
        with:
          channel_id: compliance-executive
          text: 'COMPLIANCE INCIDENT REPORTED | {{regulation_type}} | {{get-incident.short_description}} | Jira: {{create-jira-ticket.key}} | SN: {{incident_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://citi.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: compliance-incidents
      path: /table/incident/{{incident_id}}
      inputParameters:
      - name: incident_id
        in: path
      operations:
      - name: get-compliance-incident
        method: GET
  - type: http
    namespace: jira
    baseUri: https://citi.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.ms_graph_token
    resources:
    - name: compliance-messages
      path: /teams/compliance/channels/executive/messages
      operations:
      - name: send-cco-alert
        method: POST
Open in Framework → View in Fleet → regulatory-compliance-incident-reporter.yml

Retrieves Datadog APM latency metrics for critical banking APIs and posts a weekly performance digest to the platform engineering Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Datadog APM Latency Anomaly Digest
  description: Retrieves Datadog APM latency metrics for critical banking APIs and posts a weekly performance digest to the platform engineering Microsoft Teams channel.
  tags:
  - observability
  - datadog
  - microsoft-teams
  - performance
  - apm
capability:
  exposes:
  - type: mcp
    namespace: apm-reporting
    port: 8080
    tools:
    - name: digest-api-latency
      description: Retrieve p50, p95, and p99 latency metrics for a set of critical banking APIs from Datadog APM and post a weekly performance digest to the platform engineering Teams channel.
      inputParameters:
      - name: service_tag
        in: body
        type: string
        description: The Datadog service tag to filter APM metrics (e.g., service:payments-api).
      - name: reporting_week
        in: body
        type: string
        description: The week label for the digest (e.g., 'Week of 2026-03-17').
      steps:
      - name: get-latency-metrics
        type: call
        call: datadog.get-apm-metrics
        with:
          service_tag: '{{service_tag}}'
      - name: post-digest
        type: call
        call: msteams.post-apm-digest
        with:
          channel_id: platform-engineering
          text: 'API Latency Digest | {{reporting_week}} | Service: {{service_tag}} | p50: {{get-latency-metrics.p50_ms}}ms | p95: {{get-latency-metrics.p95_ms}}ms | p99: {{get-latency-metrics.p99_ms}}ms | Error Rate: {{get-latency-metrics.error_rate_pct}}%'
  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: apm-metrics
      path: /query
      inputParameters:
      - name: service_tag
        in: query
      operations:
      - name: get-apm-metrics
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.ms_graph_token
    resources:
    - name: platform-messages
      path: /teams/platform-engineering/channels/general/messages
      operations:
      - name: post-apm-digest
        method: POST
Open in Framework → View in Fleet → datadog-apm-latency-anomaly-digest.yml

Executes automated data quality assertions on Snowflake trading and position data tables, opening Jira tickets for any rows that breach null rate or value range thresholds.

naftiko: '0.5'
info:
  label: Snowflake Trading Data Quality Check
  description: Executes automated data quality assertions on Snowflake trading and position data tables, opening Jira tickets for any rows that breach null rate or value range thresholds.
  tags:
  - data
  - snowflake
  - jira
  - data-quality
  - trading
capability:
  exposes:
  - type: mcp
    namespace: trading-data-quality
    port: 8080
    tools:
    - name: check-trading-data-quality
      description: Given a Snowflake trading or position table name and quality thresholds, run null rate and value range assertions. If breached, open a Jira data quality ticket for the data engineering team.
      inputParameters:
      - name: table_name
        in: body
        type: string
        description: The fully qualified Snowflake table name (e.g., PROD.TRADING.POSITIONS).
      - name: null_threshold_pct
        in: body
        type: number
        description: Maximum acceptable null percentage for key columns.
      steps:
      - name: run-assertions
        type: call
        call: snowflake.run-quality-assertions
        with:
          table_name: '{{table_name}}'
          null_threshold: '{{null_threshold_pct}}'
      - name: open-dq-ticket
        type: call
        call: jira.create-dq-ticket
        with:
          project_key: DATA
          issuetype: Bug
          summary: Data quality breach in {{table_name}}
          description: 'Table: {{table_name}}

            Null Rate: {{run-assertions.null_rate_pct}}%

            Threshold: {{null_threshold_pct}}%

            Affected Rows: {{run-assertions.affected_row_count}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://citi.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: run-quality-assertions
        method: POST
  - type: http
    namespace: jira
    baseUri: https://citi.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: dq-tickets
      path: /issue
      operations:
      - name: create-dq-ticket
        method: POST
Open in Framework → View in Fleet → snowflake-trading-data-quality-check.yml

Retrieves all ServiceNow change requests pending CAB board approval for the upcoming change window and posts a digest to the IT change management Microsoft Teams channel.

naftiko: '0.5'
info:
  label: ServiceNow IT Change Request Approval Digest
  description: Retrieves all ServiceNow change requests pending CAB board approval for the upcoming change window and posts a digest to the IT change management Microsoft Teams channel.
  tags:
  - itsm
  - servicenow
  - microsoft-teams
  - change-management
  - approval
capability:
  exposes:
  - type: mcp
    namespace: change-management
    port: 8080
    tools:
    - name: digest-cab-changes
      description: Retrieve all ServiceNow change requests scheduled for the upcoming CAB approval window and post a risk-sorted digest to the IT change management Teams channel.
      inputParameters:
      - name: change_date
        in: body
        type: string
        description: The change window date in YYYY-MM-DD format.
      steps:
      - name: get-pending-changes
        type: call
        call: servicenow.get-cab-changes
        with:
          planned_date: '{{change_date}}'
      - name: post-digest
        type: call
        call: msteams.post-cab-digest
        with:
          channel_id: it-change-management
          text: 'CAB Change Digest | Window: {{change_date}} | Changes: {{get-pending-changes.count}} | High Risk: {{get-pending-changes.high_risk_count}} | Normal: {{get-pending-changes.normal_count}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://citi.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-requests
      path: /table/change_request
      inputParameters:
      - name: planned_date
        in: query
      operations:
      - name: get-cab-changes
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.ms_graph_token
    resources:
    - name: change-messages
      path: /teams/it/channels/change-management/messages
      operations:
      - name: post-cab-digest
        method: POST
Open in Framework → View in Fleet → servicenow-it-change-request-approval-digest.yml

Enriches new Salesforce leads for corporate banking prospects with firmographic data and routes them to the correct relationship manager, notifying via Microsoft Teams.

naftiko: '0.5'
info:
  label: Salesforce Corporate Banking CRM Lead Routing
  description: Enriches new Salesforce leads for corporate banking prospects with firmographic data and routes them to the correct relationship manager, notifying via Microsoft Teams.
  tags:
  - sales
  - salesforce
  - microsoft-teams
  - crm
  - lead-management
  - corporate-banking
capability:
  exposes:
  - type: mcp
    namespace: crm-lead-routing
    port: 8080
    tools:
    - name: route-corporate-lead
      description: Given a Salesforce lead ID for a corporate banking prospect, retrieve the lead, assign it to the appropriate relationship manager based on industry and revenue band, and notify via Teams.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: The Salesforce lead ID for the corporate banking prospect.
      steps:
      - name: get-lead
        type: call
        call: salesforce-lead.get-lead
        with:
          lead_id: '{{lead_id}}'
      - name: assign-lead
        type: call
        call: salesforce-update.update-lead-owner
        with:
          lead_id: '{{lead_id}}'
          status: Assigned
      - name: notify-rm
        type: call
        call: msteams.notify-rm
        with:
          channel_id: corporate-banking-rms
          text: 'New Corporate Lead Assigned | Company: {{get-lead.company}} | Contact: {{get-lead.first_name}} {{get-lead.last_name}} | Title: {{get-lead.title}} | Lead: {{lead_id}}'
  consumes:
  - type: http
    namespace: salesforce-lead
    baseUri: https://citi.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: get-lead
        method: GET
  - type: http
    namespace: salesforce-update
    baseUri: https://citi.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: lead-updates
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: update-lead-owner
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.ms_graph_token
    resources:
    - name: rm-messages
      path: /teams/corporate-banking/channels/leads/messages
      operations:
      - name: notify-rm
        method: POST
Open in Framework → View in Fleet → salesforce-corporate-banking-crm-lead-routing.yml

Queries Salesforce for high-value institutional client relationships with contract renewals due within 90 days and posts a prioritized alert to the relationship management Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Salesforce Client Relationship Renewal Alert
  description: Queries Salesforce for high-value institutional client relationships with contract renewals due within 90 days and posts a prioritized alert to the relationship management Microsoft Teams channel.
  tags:
  - sales
  - salesforce
  - microsoft-teams
  - renewals
  - account-management
  - institutional-banking
capability:
  exposes:
  - type: mcp
    namespace: rm-renewals
    port: 8080
    tools:
    - name: alert-client-renewals
      description: Query Salesforce for institutional banking client contracts expiring within a given number of days and post a ranked renewal alert to the relationship management Teams channel.
      inputParameters:
      - name: days_ahead
        in: body
        type: integer
        description: Number of days ahead to scan for expiring client contracts.
      - name: min_revenue_usd
        in: body
        type: number
        description: Minimum annual revenue threshold to include in the alert.
      steps:
      - name: get-expiring-contracts
        type: call
        call: salesforce.get-expiring-contracts
        with:
          days_ahead: '{{days_ahead}}'
          min_revenue: '{{min_revenue_usd}}'
      - name: post-renewal-alert
        type: call
        call: msteams.post-renewal-alert
        with:
          channel_id: relationship-management
          text: 'Client Renewal Alert | Expiring in {{days_ahead}} days | Contracts: {{get-expiring-contracts.count}} | Total Revenue at Risk: ${{get-expiring-contracts.total_revenue}} | Top Client: {{get-expiring-contracts.top_client}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://citi.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: expiring-contracts
      path: /query
      inputParameters:
      - name: days_ahead
        in: query
      - name: min_revenue
        in: query
      operations:
      - name: get-expiring-contracts
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.ms_graph_token
    resources:
    - name: rm-messages
      path: /teams/institutional-banking/channels/rm/messages
      operations:
      - name: post-renewal-alert
        method: POST
Open in Framework → View in Fleet → salesforce-client-relationship-renewal-alert.yml

Initiates the annual compensation review cycle in Workday for a given organization unit, creates planning Jira tasks for HR business partners, and notifies them via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Compensation Review Cycle Trigger
  description: Initiates the annual compensation review cycle in Workday for a given organization unit, creates planning Jira tasks for HR business partners, and notifies them via Microsoft Teams.
  tags:
  - hr
  - workday
  - jira
  - microsoft-teams
  - compensation
  - performance-management
capability:
  exposes:
  - type: mcp
    namespace: compensation-review
    port: 8080
    tools:
    - name: trigger-compensation-review
      description: Given a Workday organization unit and review cycle name, initiate the compensation review process, create Jira planning tasks for each HR BP, and notify the HR leadership team via Teams.
      inputParameters:
      - name: org_unit_id
        in: body
        type: string
        description: The Workday organization unit ID for the compensation review.
      - name: review_cycle_name
        in: body
        type: string
        description: The name of the compensation review cycle (e.g., '2026 Annual Review').
      - name: deadline
        in: body
        type: string
        description: The review completion deadline in YYYY-MM-DD format.
      steps:
      - name: initiate-review
        type: call
        call: workday.initiate-compensation-review
        with:
          org_unit_id: '{{org_unit_id}}'
          review_cycle_name: '{{review_cycle_name}}'
      - name: create-planning-task
        type: call
        call: jira.create-hr-task
        with:
          project_key: HROP
          issuetype: Task
          summary: 'Compensation review cycle: {{review_cycle_name}} - {{org_unit_id}}'
          due_date: '{{deadline}}'
      - name: notify-hr-team
        type: call
        call: msteams.notify-hr
        with:
          channel_id: hr-leadership
          text: 'Compensation Review Initiated | Cycle: {{review_cycle_name}} | Org: {{org_unit_id}} | Deadline: {{deadline}} | Jira Task: {{create-planning-task.key}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: compensation-reviews
      path: /compensationReviews
      operations:
      - name: initiate-compensation-review
        method: POST
  - type: http
    namespace: jira
    baseUri: https://citi.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: hr-tasks
      path: /issue
      operations:
      - name: create-hr-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.ms_graph_token
    resources:
    - name: hr-messages
      path: /teams/hr/channels/leadership/messages
      operations:
      - name: notify-hr
        method: POST
Open in Framework → View in Fleet → workday-compensation-review-cycle-trigger.yml

Syncs HubSpot lead nurture workflow contacts that have reached a buying stage into Salesforce as qualified leads, triggering corporate banking relationship manager assignment.

naftiko: '0.5'
info:
  label: HubSpot Marketing Lead Nurture to Salesforce Sync
  description: Syncs HubSpot lead nurture workflow contacts that have reached a buying stage into Salesforce as qualified leads, triggering corporate banking relationship manager assignment.
  tags:
  - marketing
  - hubspot
  - salesforce
  - lead-management
  - corporate-banking
  - crm
capability:
  exposes:
  - type: mcp
    namespace: lead-nurture-sync
    port: 8080
    tools:
    - name: sync-nurtured-leads
      description: Retrieve contacts from a HubSpot lead nurture workflow that have reached MQL status and create qualified leads in Salesforce for corporate banking RM assignment and follow-up.
      inputParameters:
      - name: hubspot_workflow_id
        in: body
        type: string
        description: The HubSpot workflow ID for the lead nurture sequence.
      - name: mql_stage
        in: body
        type: string
        description: The HubSpot lifecycle stage that qualifies a contact as MQL (e.g., 'marketingqualifiedlead').
      steps:
      - name: get-mql-contacts
        type: call
        call: hubspot.get-workflow-contacts
        with:
          workflow_id: '{{hubspot_workflow_id}}'
          lifecycle_stage: '{{mql_stage}}'
      - name: create-sf-leads
        type: call
        call: salesforce.create-lead
        with:
          first_name: '{{get-mql-contacts.first_name}}'
          last_name: '{{get-mql-contacts.last_name}}'
          company: '{{get-mql-contacts.company}}'
          email: '{{get-mql-contacts.email}}'
          lead_source: HubSpot Nurture
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: workflow-contacts
      path: /objects/contacts
      inputParameters:
      - name: workflow_id
        in: query
      - name: lifecycle_stage
        in: query
      operations:
      - name: get-workflow-contacts
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://citi.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead
      operations:
      - name: create-lead
        method: POST
Open in Framework → View in Fleet → hubspot-marketing-lead-nurture-to-salesforce-sync.yml

Triggers a Terraform Cloud workspace run for network infrastructure changes in Citi's cloud environments and creates a ServiceNow change record to gate the deployment approval.

naftiko: '0.5'
info:
  label: Terraform Cloud Network Provisioning Request
  description: Triggers a Terraform Cloud workspace run for network infrastructure changes in Citi's cloud environments and creates a ServiceNow change record to gate the deployment approval.
  tags:
  - cloud
  - terraform
  - servicenow
  - infrastructure
  - network
capability:
  exposes:
  - type: mcp
    namespace: network-provisioning
    port: 8080
    tools:
    - name: request-network-provisioning
      description: Given a Terraform Cloud workspace ID and change description, trigger an infrastructure plan run for network changes and create a ServiceNow change request for CAB board approval.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: The Terraform Cloud workspace ID for the network provisioning run.
      - name: change_description
        in: body
        type: string
        description: Description of the network infrastructure change.
      - name: environment
        in: body
        type: string
        description: Target environment (e.g., prod, staging, dr).
      steps:
      - name: trigger-run
        type: call
        call: terraform.create-run
        with:
          workspace_id: '{{workspace_id}}'
          message: '{{change_description}} [env: {{environment}}]'
      - name: create-change
        type: call
        call: servicenow.create-change-request
        with:
          short_description: 'Network provisioning: {{workspace_id}} in {{environment}}'
          description: '{{change_description}}

            Terraform Run: {{trigger-run.run_id}}'
          category: network_infrastructure
          risk: high
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: runs
      path: /runs
      operations:
      - name: create-run
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://citi.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
Open in Framework → View in Fleet → terraform-cloud-network-provisioning-request.yml

When a new regulatory document is uploaded to SharePoint, uses the Anthropic API to generate an executive summary and action item list, posting the output to the compliance Microsoft Teams channel.

naftiko: '0.5'
info:
  label: AI-Assisted Regulatory Document Summarizer
  description: When a new regulatory document is uploaded to SharePoint, uses the Anthropic API to generate an executive summary and action item list, posting the output to the compliance Microsoft Teams channel.
  tags:
  - ai
  - sharepoint
  - anthropic
  - microsoft-teams
  - compliance
  - regulatory
capability:
  exposes:
  - type: mcp
    namespace: reg-doc-ai
    port: 8080
    tools:
    - name: summarize-regulatory-document
      description: Given a SharePoint document ID for a new regulatory filing or guidance update, retrieve the document text and use Claude to generate an executive summary with required action items, then post to the compliance Teams channel.
      inputParameters:
      - name: document_id
        in: body
        type: string
        description: The SharePoint document unique ID.
      - name: site_id
        in: body
        type: string
        description: The SharePoint site ID where the regulatory document is stored.
      - name: document_title
        in: body
        type: string
        description: The title of the regulatory document.
      steps:
      - name: get-document
        type: call
        call: sharepoint.get-document-content
        with:
          site_id: '{{site_id}}'
          document_id: '{{document_id}}'
      - name: generate-summary
        type: call
        call: anthropic.create-message
        with:
          model: claude-3-5-sonnet-20241022
          prompt: 'You are a financial regulatory compliance analyst. Summarize the following regulatory document for executive review. Include: 1) Key requirements, 2) Compliance deadlines, 3) Required action items for a global bank. Document: {{get-document.content}}'
      - name: post-summary
        type: call
        call: msteams.post-reg-summary
        with:
          channel_id: compliance-team
          text: 'Regulatory Document Summary: {{document_title}}


            {{generate-summary.content}}'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.ms_graph_token
    resources:
    - name: document-content
      path: /sites/{{site_id}}/drive/items/{{document_id}}/content
      inputParameters:
      - name: site_id
        in: path
      - name: document_id
        in: path
      operations:
      - name: get-document-content
        method: GET
  - type: http
    namespace: anthropic
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: messages
      path: /messages
      operations:
      - name: create-message
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.ms_graph_token
    resources:
    - name: compliance-messages
      path: /teams/compliance/channels/general/messages
      operations:
      - name: post-reg-summary
        method: POST
Open in Framework → View in Fleet → ai-assisted-regulatory-document-summarizer.yml

When a Datadog monitor fires for a banking application, creates a ServiceNow P1 incident, opens a Jira investigation issue, and alerts the on-call engineering team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Datadog Application Performance Alert Handler
  description: When a Datadog monitor fires for a banking application, creates a ServiceNow P1 incident, opens a Jira investigation issue, and alerts the on-call engineering team via Microsoft Teams.
  tags:
  - observability
  - datadog
  - servicenow
  - jira
  - microsoft-teams
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: app-observability
    port: 8080
    tools:
    - name: handle-application-alert
      description: Given a Datadog monitor alert for a critical banking application, create a ServiceNow P1 incident, link a Jira investigation issue, and page the on-call team via Teams.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: The Datadog monitor ID that triggered the alert.
      - name: monitor_name
        in: body
        type: string
        description: The human-readable Datadog monitor name.
      - name: application_name
        in: body
        type: string
        description: The name of the affected banking application.
      - name: severity
        in: body
        type: string
        description: 'Alert severity: CRITICAL or WARNING.'
      steps:
      - name: create-snow-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: '[{{severity}}] {{application_name}} performance degradation: {{monitor_name}}'
          category: application_performance
          priority: '1'
          assigned_group: Application_Support
      - name: create-jira-issue
        type: call
        call: jira.create-issue
        with:
          project_key: APPOPS
          issuetype: Incident
          summary: 'App Alert: {{application_name}} - {{monitor_name}}'
          description: 'Monitor ID: {{monitor_id}}

            Severity: {{severity}}

            ServiceNow: {{create-snow-incident.number}}'
      - name: alert-oncall
        type: call
        call: msteams.send-oncall-alert
        with:
          channel_id: oncall-engineering
          text: 'P1 APP ALERT | {{application_name}} | {{monitor_name}} | Severity: {{severity}} | SNOW: {{create-snow-incident.number}} | Jira: {{create-jira-issue.key}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://citi.service-now.com/api/now
    authentication:
      type: 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://citi.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.ms_graph_token
    resources:
    - name: oncall-messages
      path: /teams/engineering/channels/oncall/messages
      operations:
      - name: send-oncall-alert
        method: POST
Open in Framework → View in Fleet → datadog-application-performance-alert-handler.yml

Looks up a SAP S/4HANA purchase order by PO number and returns current approval status, vendor details, and total value for procurement and accounts payable queries.

naftiko: '0.5'
info:
  label: SAP Purchase Order Status Lookup
  description: Looks up a SAP S/4HANA purchase order by PO number and returns current approval status, vendor details, and total value for procurement and accounts payable queries.
  tags:
  - finance
  - sap
  - procurement
  - erp
capability:
  exposes:
  - type: mcp
    namespace: erp-procurement
    port: 8080
    tools:
    - name: get-purchase-order
      description: Given a SAP purchase order number, retrieve the PO header status, vendor name, total amount, and currency from SAP S/4HANA. Use for AP reconciliation and procurement approvals.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: The SAP purchase order number (e.g., 4500001234).
      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://citi-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: purchase-orders
      path: /A_PurchaseOrder('{{po_number}}')
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-po
        method: GET
        outputRawFormat: xml
Open in Framework → View in Fleet → sap-purchase-order-status-lookup.yml

Retrieves submitted expense reports from SAP Concur and creates Jira audit tasks for finance compliance when reports exceed policy thresholds or contain restricted categories.

naftiko: '0.5'
info:
  label: SAP Concur Expense Policy Violation Audit
  description: Retrieves submitted expense reports from SAP Concur and creates Jira audit tasks for finance compliance when reports exceed policy thresholds or contain restricted categories.
  tags:
  - finance
  - sap-concur
  - jira
  - expense-management
  - compliance
  - audit
capability:
  exposes:
  - type: mcp
    namespace: expense-audit
    port: 8080
    tools:
    - name: audit-expense-policy-violations
      description: Retrieve expense reports from SAP Concur for a given period and automatically create Jira compliance audit tasks for any reports exceeding the single-transaction threshold or containing flagged categories.
      inputParameters:
      - name: period
        in: body
        type: string
        description: The expense period to audit (e.g., '2026-03').
      - name: threshold_usd
        in: body
        type: number
        description: Single-transaction threshold in USD that triggers a policy flag.
      steps:
      - name: get-flagged-reports
        type: call
        call: concur.get-expense-reports
        with:
          period: '{{period}}'
          exceeds_amount: '{{threshold_usd}}'
      - name: create-audit-task
        type: call
        call: jira.create-audit-task
        with:
          project_key: FIN
          issuetype: Task
          summary: 'Expense policy violation: {{get-flagged-reports.report_name}} ({{period}})'
          description: 'Report ID: {{get-flagged-reports.report_id}}

            Submitter: {{get-flagged-reports.submitted_by}}

            Amount: {{get-flagged-reports.total}}

            Threshold: {{threshold_usd}}'
  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
      inputParameters:
      - name: period
        in: query
      - name: exceeds_amount
        in: query
      operations:
      - name: get-expense-reports
        method: GET
  - type: http
    namespace: jira
    baseUri: https://citi.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: audit-tasks
      path: /issue
      operations:
      - name: create-audit-task
        method: POST
Open in Framework → View in Fleet → sap-concur-expense-policy-violation-audit.yml

Processes a home loan application by running credit checks, property valuation, and submitting for approval with broker notification.

naftiko: '0.5'
info:
  label: Home Loan Application Pipeline
  description: Processes a home loan application by running credit checks, property valuation, and submitting for approval with broker notification.
  tags:
  - lending
  - home-loans
  - credit-check
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: home-loan-application
    port: 8080
    tools:
    - name: run-home-loan-application-pipeline
      description: Processes a home loan application by running credit checks, property valuation, and submitting for approval with broker notification.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: corebanking.get-account
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: ml.run-model
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: msteams.send-notification
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: corebanking
    baseUri: https://api.internal.commbank.com.au/core/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: ml
    baseUri: https://ml.internal.commbank.com.au/v1
    authentication:
      type: bearer
      token: $secrets.ml_token
    resources:
    - name: models
      path: /predict
      operations:
      - name: run-model
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/messages
      operations:
      - name: send-notification
        method: POST
Open in Framework → View in Fleet → home-loan-application-pipeline.yml

Retrieves insurance policy details from CommInsure including coverage and premium.

naftiko: '0.5'
info:
  label: CommInsure Policy Lookup
  description: Retrieves insurance policy details from CommInsure including coverage and premium.
  tags:
  - insurance
  - comminsure
capability:
  exposes:
  - type: mcp
    namespace: insurance
    port: 8080
    tools:
    - name: get-data
      description: Retrieves insurance policy details from CommInsure including coverage and premium.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary identifier.
      call: comminsure.get-data
      with:
        input_id: '{{input_id}}'
  consumes:
  - type: http
    namespace: comminsure
    baseUri: https://api.internal.commbank.com.au/insurance/v1
    authentication:
      type: bearer
      token: $secrets.comminsure_token
    resources:
    - name: data
      path: /{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → comminsure-policy-lookup.yml

Retrieves application performance metrics from Dynatrace, returning response time, failure rate, throughput, and user satisfaction score.

naftiko: '0.5'
info:
  label: Dynatrace Application Performance Lookup
  description: Retrieves application performance metrics from Dynatrace, returning response time, failure rate, throughput, and user satisfaction score.
  tags:
  - monitoring
  - apm
  - dynatrace
capability:
  exposes:
  - type: mcp
    namespace: apm
    port: 8080
    tools:
    - name: get-app-performance
      description: Look up application performance in Dynatrace. Returns response time, failure rate, throughput, and satisfaction score.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The Dynatrace application entity ID.
      call: dynatrace.get-app-metrics
      with:
        entity_id: '{{entity_id}}'
      outputParameters:
      - name: response_time_ms
        type: number
        mapping: $.result[0].data[0].values.avg
      - name: failure_rate
        type: number
        mapping: $.result[1].data[0].values.avg
      - name: throughput
        type: number
        mapping: $.result[2].data[0].values.count
  consumes:
  - type: http
    namespace: dynatrace
    baseUri: https://commbank.live.dynatrace.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: metrics
      path: /metrics/query
      operations:
      - name: get-app-metrics
        method: POST
Open in Framework → View in Fleet → dynatrace-application-performance-lookup.yml

Retrieves the status of a ServiceNow change request, returning current state, approval status, planned start date, and risk assessment.

naftiko: '0.5'
info:
  label: ServiceNow Change Request Status
  description: Retrieves the status of a ServiceNow change request, returning current state, approval status, planned start date, and risk assessment.
  tags:
  - change-management
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: change-management
    port: 8080
    tools:
    - name: get-change-request
      description: Look up a ServiceNow change request. Returns state, approval status, planned start, and risk assessment.
      inputParameters:
      - name: change_number
        in: body
        type: string
        description: The ServiceNow change request number (e.g., CHG0012345).
      call: servicenow.get-change
      with:
        change_number: '{{change_number}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.result.state
      - name: approval
        type: string
        mapping: $.result.approval
      - name: planned_start
        type: string
        mapping: $.result.start_date
      - name: risk
        type: string
        mapping: $.result.risk
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://commbank.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: get-change
        method: GET
Open in Framework → View in Fleet → servicenow-change-request-status.yml

Manages Open Banking data sharing by validating consent, extracting account data, and serving via the CDR API.

naftiko: '0.5'
info:
  label: Open Banking Data Sharing Pipeline
  description: Manages Open Banking data sharing by validating consent, extracting account data, and serving via the CDR API.
  tags:
  - open-banking
  - cdr
  - consent-management
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: open-banking-data-sharing
    port: 8080
    tools:
    - name: run-open-banking-data-sharing-pipeline
      description: Manages Open Banking data sharing by validating consent, extracting account data, and serving via the CDR API.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: corebanking.get-account
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: compliance.run-check
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: corebanking
    baseUri: https://api.internal.commbank.com.au/core/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: compliance
    baseUri: https://api.internal.commbank.com.au/compliance/v1
    authentication:
      type: bearer
      token: $secrets.compliance_token
    resources:
    - name: checks
      path: /checks
      operations:
      - name: run-check
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://commbank.service-now.com/api/now/table
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → open-banking-data-sharing-pipeline.yml

Processes super fund rollovers by verifying member details, initiating transfer, and confirming with the member.

naftiko: '0.5'
info:
  label: Superannuation Rollover Pipeline
  description: Processes super fund rollovers by verifying member details, initiating transfer, and confirming with the member.
  tags:
  - superannuation
  - colonial-first-state
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: superannuation-rollover
    port: 8080
    tools:
    - name: run-superannuation-rollover-pipeline
      description: Processes super fund rollovers by verifying member details, initiating transfer, and confirming with the member.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: cfs.get-fund
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: corebanking.get-account
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: outlook.send-email
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: cfs
    baseUri: https://api.internal.commbank.com.au/cfs/v1
    authentication:
      type: bearer
      token: $secrets.cfs_token
    resources:
    - name: funds
      path: /funds
      operations:
      - name: get-fund
        method: GET
  - type: http
    namespace: corebanking
    baseUri: https://api.internal.commbank.com.au/core/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → superannuation-rollover-pipeline.yml

Retrieves automated property valuation estimate for a given property address.

naftiko: '0.5'
info:
  label: CBA Property Valuation Lookup
  description: Retrieves automated property valuation estimate for a given property address.
  tags:
  - lending
  - property-valuation
capability:
  exposes:
  - type: mcp
    namespace: lending
    port: 8080
    tools:
    - name: get-data
      description: Retrieves automated property valuation estimate for a given property address.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary identifier.
      call: property_valuation.get-data
      with:
        input_id: '{{input_id}}'
  consumes:
  - type: http
    namespace: property_valuation
    baseUri: https://api.internal.commbank.com.au/lending/v1
    authentication:
      type: bearer
      token: $secrets.property_valuation_token
    resources:
    - name: data
      path: /{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → cba-property-valuation-lookup.yml

Runs a data quality validation query against Teradata and returns row count, null percentage, and duplicate count for a given table.

naftiko: '0.5'
info:
  label: Teradata Data Quality Check
  description: Runs a data quality validation query against Teradata and returns row count, null percentage, and duplicate count for a given table.
  tags:
  - data-quality
  - teradata
  - data-governance
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: check-data-quality
      description: Run data quality checks on a Teradata table. Returns row count, null percentage, and duplicate count.
      inputParameters:
      - name: database_name
        in: body
        type: string
        description: The Teradata database name.
      - name: table_name
        in: body
        type: string
        description: The table name to validate.
      - name: key_column
        in: body
        type: string
        description: The primary key column for duplicate checking.
      call: teradata.run-quality-check
      with:
        database: '{{database_name}}'
        table: '{{table_name}}'
        key_column: '{{key_column}}'
      outputParameters:
      - name: row_count
        type: number
        mapping: $.quality.rowCount
      - name: null_pct
        type: number
        mapping: $.quality.nullPercentage
      - name: duplicate_count
        type: number
        mapping: $.quality.duplicateCount
  consumes:
  - type: http
    namespace: teradata
    baseUri: https://teradata.internal.commbank.com.au/api/v1
    authentication:
      type: bearer
      token: $secrets.teradata_token
    resources:
    - name: quality
      path: /quality/check
      operations:
      - name: run-quality-check
        method: POST
Open in Framework → View in Fleet → teradata-data-quality-check.yml

Processes personal loan top-up requests by checking eligibility, running credit assessment, and disbursing funds.

naftiko: '0.5'
info:
  label: Personal Loan Top-Up Pipeline
  description: Processes personal loan top-up requests by checking eligibility, running credit assessment, and disbursing funds.
  tags:
  - lending
  - personal-loans
  - core-banking
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: personal-loan-top-up
    port: 8080
    tools:
    - name: run-personal-loan-top-up-pipeline
      description: Processes personal loan top-up requests by checking eligibility, running credit assessment, and disbursing funds.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: corebanking.get-account
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: ml.run-model
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: msteams.send-notification
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: corebanking
    baseUri: https://api.internal.commbank.com.au/core/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: ml
    baseUri: https://ml.internal.commbank.com.au/v1
    authentication:
      type: bearer
      token: $secrets.ml_token
    resources:
    - name: models
      path: /predict
      operations:
      - name: run-model
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/messages
      operations:
      - name: send-notification
        method: POST
Open in Framework → View in Fleet → personal-loan-top-up-pipeline.yml

When a business loan application advances to document collection, generates required document checklist in ServiceNow, creates a SharePoint folder for uploads, and emails the applicant via Microsoft Outlook with upload instructions.

naftiko: '0.5'
info:
  label: Loan Origination Document Pipeline
  description: When a business loan application advances to document collection, generates required document checklist in ServiceNow, creates a SharePoint folder for uploads, and emails the applicant via Microsoft Outlook with upload instructions.
  tags:
  - lending
  - loan-origination
  - servicenow
  - sharepoint
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: business-lending
    port: 8080
    tools:
    - name: initiate-doc-collection
      description: Given a loan application ID, create the document checklist, provision storage, and notify the applicant.
      inputParameters:
      - name: application_id
        in: body
        type: string
        description: The loan application identifier.
      - name: applicant_email
        in: body
        type: string
        description: The applicant's email address.
      - name: loan_type
        in: body
        type: string
        description: The loan type (e.g., commercial, equipment, property).
      steps:
      - name: create-checklist
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Document collection: Application {{application_id}}'
          category: loan_origination
          description: 'Loan type: {{loan_type}}. Required documents per policy for {{loan_type}} loans.'
      - name: create-folder
        type: call
        call: sharepoint.create-folder
        with:
          site_id: lending_docs
          folder_path: Applications/{{application_id}}
      - name: send-email
        type: call
        call: outlook.send-email
        with:
          to: '{{applicant_email}}'
          subject: Document Upload Required - Loan Application {{application_id}}
          body: 'Please upload your required documents to: {{create-folder.url}}. Your document checklist reference is {{create-checklist.number}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://commbank.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: 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: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/{{from}}/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → loan-origination-document-pipeline.yml

Processes debit card disputes by investigating the transaction, issuing provisional credit, and notifying the customer.

naftiko: '0.5'
info:
  label: Debit Card Dispute Pipeline
  description: Processes debit card disputes by investigating the transaction, issuing provisional credit, and notifying the customer.
  tags:
  - retail-banking
  - disputes
  - payments
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: debit-card-dispute
    port: 8080
    tools:
    - name: run-debit-card-dispute-pipeline
      description: Processes debit card disputes by investigating the transaction, issuing provisional credit, and notifying the customer.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: corebanking.get-account
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: servicenow.create-incident
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: outlook.send-email
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: corebanking
    baseUri: https://api.internal.commbank.com.au/core/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://commbank.service-now.com/api/now/table
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → debit-card-dispute-pipeline.yml

Handles regulatory breach notifications by assessing impact, filing with APRA, and notifying the board.

naftiko: '0.5'
info:
  label: Regulatory Breach Notification Pipeline
  description: Handles regulatory breach notifications by assessing impact, filing with APRA, and notifying the board.
  tags:
  - compliance
  - apra
  - regulatory
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: regulatory-breach-notification
    port: 8080
    tools:
    - name: run-regulatory-breach-notification-pipe
      description: Handles regulatory breach notifications by assessing impact, filing with APRA, and notifying the board.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: compliance.run-check
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: corebanking.get-account
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: outlook.send-email
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: compliance
    baseUri: https://api.internal.commbank.com.au/compliance/v1
    authentication:
      type: bearer
      token: $secrets.compliance_token
    resources:
    - name: checks
      path: /checks
      operations:
      - name: run-check
        method: POST
  - type: http
    namespace: corebanking
    baseUri: https://api.internal.commbank.com.au/core/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → regulatory-breach-notification-pipeline.yml

Retrieves a document from Box by file ID, returning file name, size, download URL, and last modified date.

naftiko: '0.5'
info:
  label: Box Document Retrieval
  description: Retrieves a document from Box by file ID, returning file name, size, download URL, and last modified date.
  tags:
  - document-management
  - box
capability:
  exposes:
  - type: mcp
    namespace: document-store
    port: 8080
    tools:
    - name: get-document
      description: Retrieve a document from Box by file ID. Returns file name, size, download URL, and last modified.
      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: number
        mapping: $.size
      - name: download_url
        type: string
        mapping: $.shared_link.download_url
      - name: modified_at
        type: string
        mapping: $.modified_at
  consumes:
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files/{{file_id}}
      inputParameters:
      - name: file_id
        in: path
      operations:
      - name: get-file
        method: GET
Open in Framework → View in Fleet → box-document-retrieval.yml

Retrieves portfolio company details from x15 Ventures investment tracking.

naftiko: '0.5'
info:
  label: x15 Ventures Portfolio Lookup
  description: Retrieves portfolio company details from x15 Ventures investment tracking.
  tags:
  - innovation
  - x15-ventures
capability:
  exposes:
  - type: mcp
    namespace: innovation
    port: 8080
    tools:
    - name: get-data
      description: Retrieves portfolio company details from x15 Ventures investment tracking.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary identifier.
      call: x15_ventures.get-data
      with:
        input_id: '{{input_id}}'
  consumes:
  - type: http
    namespace: x15_ventures
    baseUri: https://api.internal.commbank.com.au/innovation/v1
    authentication:
      type: bearer
      token: $secrets.x15_ventures_token
    resources:
    - name: data
      path: /{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → x15-ventures-portfolio-lookup.yml

Looks up a SAP payment order by reference number and returns status, amount, currency, and beneficiary details for the payments operations team.

naftiko: '0.5'
info:
  label: SAP Payment Order Status
  description: Looks up a SAP payment order by reference number and returns status, amount, currency, and beneficiary details for the payments operations team.
  tags:
  - payments
  - erp
  - sap
  - finance
capability:
  exposes:
  - type: mcp
    namespace: payments
    port: 8080
    tools:
    - name: get-payment-order
      description: Look up a SAP payment order by reference number. Returns status, amount, currency, and beneficiary.
      inputParameters:
      - name: payment_ref
        in: body
        type: string
        description: The SAP payment order reference number.
      call: sap.get-payment
      with:
        payment_ref: '{{payment_ref}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.d.PaymentStatus
      - name: amount
        type: string
        mapping: $.d.Amount
      - name: currency
        type: string
        mapping: $.d.Currency
      - name: beneficiary
        type: string
        mapping: $.d.BeneficiaryName
  consumes:
  - type: http
    namespace: sap
    baseUri: https://commbank-s4.sap.com/sap/opu/odata/sap/FI_PAYMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: payment-orders
      path: /A_PaymentOrder('{{payment_ref}}')
      inputParameters:
      - name: payment_ref
        in: path
      operations:
      - name: get-payment
        method: GET
Open in Framework → View in Fleet → sap-payment-order-status.yml

Retrieves current home loan interest rates by product type and LVR band.

naftiko: '0.5'
info:
  label: Home Loan Rate Lookup
  description: Retrieves current home loan interest rates by product type and LVR band.
  tags:
  - lending
  - home-loans
capability:
  exposes:
  - type: mcp
    namespace: lending
    port: 8080
    tools:
    - name: get-data
      description: Retrieves current home loan interest rates by product type and LVR band.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary identifier.
      call: home_loans.get-data
      with:
        input_id: '{{input_id}}'
  consumes:
  - type: http
    namespace: home_loans
    baseUri: https://api.internal.commbank.com.au/lending/v1
    authentication:
      type: bearer
      token: $secrets.home_loans_token
    resources:
    - name: data
      path: /{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → home-loan-rate-lookup.yml

Retrieves fraud alert details from Splunk for a given transaction ID, returning risk score, alert category, and flagged patterns for the fraud operations team.

naftiko: '0.5'
info:
  label: Transaction Fraud Alert Lookup
  description: Retrieves fraud alert details from Splunk for a given transaction ID, returning risk score, alert category, and flagged patterns for the fraud operations team.
  tags:
  - fraud
  - security
  - splunk
  - transaction-monitoring
capability:
  exposes:
  - type: mcp
    namespace: fraud-ops
    port: 8080
    tools:
    - name: get-fraud-alert
      description: Look up a fraud alert by transaction ID in Splunk. Returns risk score, alert category, and flagged patterns.
      inputParameters:
      - name: transaction_id
        in: body
        type: string
        description: The unique transaction identifier.
      call: splunk.search-alert
      with:
        transaction_id: '{{transaction_id}}'
      outputParameters:
      - name: risk_score
        type: number
        mapping: $.results[0].risk_score
      - name: alert_category
        type: string
        mapping: $.results[0].category
      - name: flagged_patterns
        type: string
        mapping: $.results[0].patterns
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.internal.commbank.com.au:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search
      path: /search/jobs/export
      operations:
      - name: search-alert
        method: POST
Open in Framework → View in Fleet → transaction-fraud-alert-lookup.yml

Certifies staff system access by pulling entitlements from SailPoint, routing reviews, and revoking uncertified access.

naftiko: '0.5'
info:
  label: Staff Access Certification Pipeline
  description: Certifies staff system access by pulling entitlements from SailPoint, routing reviews, and revoking uncertified access.
  tags:
  - security
  - sailpoint
  - access-certification
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: staff-access-certification
    port: 8080
    tools:
    - name: run-staff-access-certification-pipeline
      description: Certifies staff system access by pulling entitlements from SailPoint, routing reviews, and revoking uncertified access.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: sailpoint.get-identity
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: compliance.run-check
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: msteams.send-notification
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: sailpoint
    baseUri: https://commbank.api.identitynow.com/v3
    authentication:
      type: bearer
      token: $secrets.sailpoint_token
    resources:
    - name: identities
      path: /identities
      operations:
      - name: get-identity
        method: GET
  - type: http
    namespace: compliance
    baseUri: https://api.internal.commbank.com.au/compliance/v1
    authentication:
      type: bearer
      token: $secrets.compliance_token
    resources:
    - name: checks
      path: /checks
      operations:
      - name: run-check
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/messages
      operations:
      - name: send-notification
        method: POST
Open in Framework → View in Fleet → staff-access-certification-pipeline.yml

Retrieves metadata for a Tableau workbook including view count, last refresh time, and data source connection status.

naftiko: '0.5'
info:
  label: Tableau Dashboard Lookup
  description: Retrieves metadata for a Tableau workbook including view count, last refresh time, and data source connection status.
  tags:
  - analytics
  - tableau
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: bi-analytics
    port: 8080
    tools:
    - name: get-workbook-info
      description: Look up Tableau workbook metadata. Returns view count, last refresh time, and data source status.
      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: view_count
        type: number
        mapping: $.workbook.viewCount
      - name: last_refresh
        type: string
        mapping: $.workbook.updatedAt
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://tableau.internal.commbank.com.au/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/{{site_id}}/workbooks/{{workbook_id}}
      inputParameters:
      - name: workbook_id
        in: path
      operations:
      - name: get-workbook
        method: GET
Open in Framework → View in Fleet → tableau-dashboard-lookup.yml

Conducts wealth portfolio reviews by pulling positions from Colonial First State, computing performance, and emailing the advisor.

naftiko: '0.5'
info:
  label: Wealth Portfolio Review Pipeline
  description: Conducts wealth portfolio reviews by pulling positions from Colonial First State, computing performance, and emailing the advisor.
  tags:
  - wealth-management
  - colonial-first-state
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: wealth-portfolio-review
    port: 8080
    tools:
    - name: run-wealth-portfolio-review-pipeline
      description: Conducts wealth portfolio reviews by pulling positions from Colonial First State, computing performance, and emailing the advisor.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: cfs.get-fund
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: snowflake.execute-query
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: outlook.send-email
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: cfs
    baseUri: https://api.internal.commbank.com.au/cfs/v1
    authentication:
      type: bearer
      token: $secrets.cfs_token
    resources:
    - name: funds
      path: /funds
      operations:
      - name: get-fund
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://commbank.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → wealth-portfolio-review-pipeline.yml

Retrieves the status of a registered machine learning model in Databricks MLflow, returning model version, stage, and last transition date.

naftiko: '0.5'
info:
  label: Databricks ML Model Status
  description: Retrieves the status of a registered machine learning model in Databricks MLflow, returning model version, stage, and last transition date.
  tags:
  - machine-learning
  - databricks
  - mlops
capability:
  exposes:
  - type: mcp
    namespace: ml-ops
    port: 8080
    tools:
    - name: get-model-status
      description: Look up a registered ML model in Databricks MLflow. Returns version, stage, and last transition date.
      inputParameters:
      - name: model_name
        in: body
        type: string
        description: The registered model name.
      call: databricks.get-model-version
      with:
        model_name: '{{model_name}}'
      outputParameters:
      - name: version
        type: string
        mapping: $.model_version.version
      - name: stage
        type: string
        mapping: $.model_version.current_stage
      - name: last_transition
        type: string
        mapping: $.model_version.last_updated_timestamp
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://commbank.cloud.databricks.com/api/2.0/mlflow
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: model-versions
      path: /registered-models/get-latest-versions
      operations:
      - name: get-model-version
        method: POST
Open in Framework → View in Fleet → databricks-ml-model-status.yml

Retrieves digital channel performance metrics from Google Analytics for the CommBank app, returning sessions, conversion rate, and bounce rate.

naftiko: '0.5'
info:
  label: Google Analytics Digital Channel Report
  description: Retrieves digital channel performance metrics from Google Analytics for the CommBank app, returning sessions, conversion rate, and bounce rate.
  tags:
  - digital-analytics
  - google-analytics
  - marketing
capability:
  exposes:
  - type: mcp
    namespace: digital-analytics
    port: 8080
    tools:
    - name: get-channel-report
      description: Look up Google Analytics channel metrics. Returns sessions, conversion rate, and bounce rate.
      inputParameters:
      - name: property_id
        in: body
        type: string
        description: The Google Analytics 4 property ID.
      - name: date_range
        in: body
        type: string
        description: The date range (e.g., last7days, last30days).
      call: ga4.get-report
      with:
        property_id: '{{property_id}}'
        date_range: '{{date_range}}'
      outputParameters:
      - name: sessions
        type: number
        mapping: $.rows[0].metricValues[0].value
      - name: conversion_rate
        type: number
        mapping: $.rows[0].metricValues[1].value
      - name: bounce_rate
        type: number
        mapping: $.rows[0].metricValues[2].value
  consumes:
  - type: http
    namespace: ga4
    baseUri: https://analyticsdata.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: reports
      path: /properties/{{property_id}}:runReport
      inputParameters:
      - name: property_id
        in: path
      operations:
      - name: get-report
        method: POST
Open in Framework → View in Fleet → google-analytics-digital-channel-report.yml

On new retail customer creation in Salesforce, provisions a core banking profile, runs KYC screening, and sends a welcome notification via Microsoft Teams to the relationship manager.

naftiko: '0.5'
info:
  label: Customer Onboarding Orchestrator
  description: On new retail customer creation in Salesforce, provisions a core banking profile, runs KYC screening, and sends a welcome notification via Microsoft Teams to the relationship manager.
  tags:
  - banking
  - onboarding
  - salesforce
  - servicenow
  - microsoft-teams
  - kyc
capability:
  exposes:
  - type: mcp
    namespace: customer-onboarding
    port: 8080
    tools:
    - name: trigger-customer-onboarding
      description: Given a Salesforce contact ID and account type, orchestrate the full retail customer onboarding across core banking, KYC, and notification systems.
      inputParameters:
      - name: contact_id
        in: body
        type: string
        description: The Salesforce contact ID for the new customer.
      - name: account_type
        in: body
        type: string
        description: The banking account type (e.g., savings, transaction, term-deposit).
      - name: branch_code
        in: body
        type: string
        description: The branch code where the account is being opened.
      steps:
      - name: get-contact
        type: call
        call: salesforce.get-contact
        with:
          contact_id: '{{contact_id}}'
      - name: create-core-profile
        type: call
        call: core-banking.create-customer
        with:
          full_name: '{{get-contact.Name}}'
          email: '{{get-contact.Email}}'
          account_type: '{{account_type}}'
          branch_code: '{{branch_code}}'
      - name: run-kyc
        type: call
        call: kyc-service.screen-customer
        with:
          customer_id: '{{create-core-profile.customer_id}}'
          full_name: '{{get-contact.Name}}'
      - name: notify-rm
        type: call
        call: msteams.send-message
        with:
          channel_id: retail-onboarding
          text: 'New customer onboarded: {{get-contact.Name}} ({{account_type}}). KYC status: {{run-kyc.status}}. Core ID: {{create-core-profile.customer_id}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://commbank.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /sobjects/Contact/{{contact_id}}
      inputParameters:
      - name: contact_id
        in: path
      operations:
      - name: get-contact
        method: GET
  - type: http
    namespace: core-banking
    baseUri: https://api.internal.commbank.com.au/core/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: customers
      path: /customers
      operations:
      - name: create-customer
        method: POST
  - type: http
    namespace: kyc-service
    baseUri: https://api.internal.commbank.com.au/kyc/v1
    authentication:
      type: bearer
      token: $secrets.kyc_token
    resources:
    - name: screening
      path: /screen
      operations:
      - name: screen-customer
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → customer-onboarding-orchestrator.yml

Opens new business accounts by verifying ABN/ACN, running AML checks, and provisioning the account.

naftiko: '0.5'
info:
  label: Business Account Opening Pipeline
  description: Opens new business accounts by verifying ABN/ACN, running AML checks, and provisioning the account.
  tags:
  - business-banking
  - compliance
  - core-banking
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: business-account-opening
    port: 8080
    tools:
    - name: run-business-account-opening-pipeline
      description: Opens new business accounts by verifying ABN/ACN, running AML checks, and provisioning the account.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: compliance.run-check
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: corebanking.get-account
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: msteams.send-notification
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: compliance
    baseUri: https://api.internal.commbank.com.au/compliance/v1
    authentication:
      type: bearer
      token: $secrets.compliance_token
    resources:
    - name: checks
      path: /checks
      operations:
      - name: run-check
        method: POST
  - type: http
    namespace: corebanking
    baseUri: https://api.internal.commbank.com.au/core/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/messages
      operations:
      - name: send-notification
        method: POST
Open in Framework → View in Fleet → business-account-opening-pipeline.yml

Retrieves Osko real-time payment status via the New Payments Platform.

naftiko: '0.5'
info:
  label: Osko Instant Payment Status
  description: Retrieves Osko real-time payment status via the New Payments Platform.
  tags:
  - payments
  - osko
capability:
  exposes:
  - type: mcp
    namespace: payments
    port: 8080
    tools:
    - name: get-data
      description: Retrieves Osko real-time payment status via the New Payments Platform.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary identifier.
      call: osko.get-data
      with:
        input_id: '{{input_id}}'
  consumes:
  - type: http
    namespace: osko
    baseUri: https://api.internal.commbank.com.au/payments/v1
    authentication:
      type: bearer
      token: $secrets.osko_token
    resources:
    - name: data
      path: /{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → osko-instant-payment-status.yml

Retrieves managed fund details and unit prices from Colonial First State.

naftiko: '0.5'
info:
  label: Colonial First State Fund Lookup
  description: Retrieves managed fund details and unit prices from Colonial First State.
  tags:
  - wealth-management
  - colonial-first-state
capability:
  exposes:
  - type: mcp
    namespace: wealth-management
    port: 8080
    tools:
    - name: get-data
      description: Retrieves managed fund details and unit prices from Colonial First State.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary identifier.
      call: colonial_first_state.get-data
      with:
        input_id: '{{input_id}}'
  consumes:
  - type: http
    namespace: colonial_first_state
    baseUri: https://api.internal.commbank.com.au/wealth-management/v1
    authentication:
      type: bearer
      token: $secrets.colonial_first_state_token
    resources:
    - name: data
      path: /{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → colonial-first-state-fund-lookup.yml

Retrieves a Grafana alert rule by UID, returning rule name, current state, evaluation interval, and associated dashboard.

naftiko: '0.5'
info:
  label: Grafana Alert Rule Lookup
  description: Retrieves a Grafana alert rule by UID, returning rule name, current state, evaluation interval, and associated dashboard.
  tags:
  - monitoring
  - grafana
  - alerting
capability:
  exposes:
  - type: mcp
    namespace: observability-alerts
    port: 8080
    tools:
    - name: get-alert-rule
      description: Look up a Grafana alert rule by UID. Returns rule name, state, evaluation interval, and dashboard.
      inputParameters:
      - name: rule_uid
        in: body
        type: string
        description: The Grafana alert rule UID.
      call: grafana.get-alert-rule
      with:
        rule_uid: '{{rule_uid}}'
      outputParameters:
      - name: title
        type: string
        mapping: $.title
      - name: state
        type: string
        mapping: $.state
      - name: eval_interval
        type: string
        mapping: $.intervalSeconds
  consumes:
  - type: http
    namespace: grafana
    baseUri: https://grafana.internal.commbank.com.au/api
    authentication:
      type: bearer
      token: $secrets.grafana_token
    resources:
    - name: alert-rules
      path: /v1/provisioning/alert-rules/{{rule_uid}}
      inputParameters:
      - name: rule_uid
        in: path
      operations:
      - name: get-alert-rule
        method: GET
Open in Framework → View in Fleet → grafana-alert-rule-lookup.yml

Retrieves the current foreign exchange rate for a currency pair from Bloomberg Enterprise Data, returning bid, ask, mid, and timestamp.

naftiko: '0.5'
info:
  label: Real-Time FX Rate Lookup
  description: Retrieves the current foreign exchange rate for a currency pair from Bloomberg Enterprise Data, returning bid, ask, mid, and timestamp.
  tags:
  - treasury
  - forex
  - bloomberg
  - bloomberg-enterprise-data
capability:
  exposes:
  - type: mcp
    namespace: treasury
    port: 8080
    tools:
    - name: get-fx-rate
      description: Look up the real-time FX rate for a currency pair from Bloomberg. Returns bid, ask, mid, and timestamp.
      inputParameters:
      - name: currency_pair
        in: body
        type: string
        description: The currency pair (e.g., AUDUSD, EURAUD).
      call: bloomberg.get-fx-rate
      with:
        currency_pair: '{{currency_pair}}'
      outputParameters:
      - name: bid
        type: number
        mapping: $.data.PX_BID
      - name: ask
        type: number
        mapping: $.data.PX_ASK
      - name: mid
        type: number
        mapping: $.data.PX_MID
      - name: timestamp
        type: string
        mapping: $.data.LAST_UPDATE
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://bsapi.bloomberg.com/eap/catalogs/bbg/datasets
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: fx-rates
      path: /snapshots/{{currency_pair}}+Curncy
      inputParameters:
      - name: currency_pair
        in: path
      operations:
      - name: get-fx-rate
        method: GET
Open in Framework → View in Fleet → real-time-fx-rate-lookup.yml

Executes institutional trades by sourcing prices from Bloomberg, booking in the OMS, and confirming with the client.

naftiko: '0.5'
info:
  label: Institutional Trade Execution Pipeline
  description: Executes institutional trades by sourcing prices from Bloomberg, booking in the OMS, and confirming with the client.
  tags:
  - institutional-banking
  - bloomberg
  - oms
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: institutional-trade-execution
    port: 8080
    tools:
    - name: run-institutional-trade-execution-pipel
      description: Executes institutional trades by sourcing prices from Bloomberg, booking in the OMS, and confirming with the client.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: bloomberg.get-data
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: corebanking.get-account
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: outlook.send-email
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://bsapi.bloomberg.com/eap/catalogs/bbg
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: data
      path: /datasets
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: corebanking
    baseUri: https://api.internal.commbank.com.au/core/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → institutional-trade-execution-pipeline.yml

Forecasts ATM cash demand by analyzing transaction patterns, running ML predictions, and scheduling replenishment.

naftiko: '0.5'
info:
  label: ATM Cash Forecasting Pipeline
  description: Forecasts ATM cash demand by analyzing transaction patterns, running ML predictions, and scheduling replenishment.
  tags:
  - operations
  - atm
  - snowflake
  - machine-learning
capability:
  exposes:
  - type: mcp
    namespace: atm-cash-forecasting
    port: 8080
    tools:
    - name: run-atm-cash-forecasting-pipeline
      description: Forecasts ATM cash demand by analyzing transaction patterns, running ML predictions, and scheduling replenishment.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: snowflake.execute-query
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: ml.run-model
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: msteams.send-notification
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://commbank.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: ml
    baseUri: https://ml.internal.commbank.com.au/v1
    authentication:
      type: bearer
      token: $secrets.ml_token
    resources:
    - name: models
      path: /predict
      operations:
      - name: run-model
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/messages
      operations:
      - name: send-notification
        method: POST
Open in Framework → View in Fleet → atm-cash-forecasting-pipeline.yml

Retrieves customer account balance from NetBank core banking by BSB and account number.

naftiko: '0.5'
info:
  label: NetBank Account Balance Lookup
  description: Retrieves customer account balance from NetBank core banking by BSB and account number.
  tags:
  - retail-banking
  - netbank
capability:
  exposes:
  - type: mcp
    namespace: retail-banking
    port: 8080
    tools:
    - name: get-data
      description: Retrieves customer account balance from NetBank core banking by BSB and account number.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary identifier.
      call: netbank.get-data
      with:
        input_id: '{{input_id}}'
  consumes:
  - type: http
    namespace: netbank
    baseUri: https://api.internal.commbank.com.au/retail-banking/v1
    authentication:
      type: bearer
      token: $secrets.netbank_token
    resources:
    - name: data
      path: /{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → netbank-account-balance-lookup.yml

Triggers a release pipeline in Azure DevOps for a given project and definition, then posts the release status to Microsoft Teams.

naftiko: '0.5'
info:
  label: Azure DevOps Release Pipeline Trigger
  description: Triggers a release pipeline in Azure DevOps for a given project and definition, then posts the release status to Microsoft Teams.
  tags:
  - ci-cd
  - azure-devops
  - microsoft-teams
  - deployment
capability:
  exposes:
  - type: mcp
    namespace: release-management
    port: 8080
    tools:
    - name: trigger-release
      description: Trigger an Azure DevOps release pipeline and notify the team in Microsoft Teams with release status.
      inputParameters:
      - name: project
        in: body
        type: string
        description: The Azure DevOps project name.
      - name: definition_id
        in: body
        type: string
        description: The release definition ID.
      - name: artifact_version
        in: body
        type: string
        description: The build artifact version to deploy.
      steps:
      - name: create-release
        type: call
        call: azdo.create-release
        with:
          project: '{{project}}'
          definition_id: '{{definition_id}}'
          artifact_version: '{{artifact_version}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: releases
          text: 'Release triggered: {{project}} definition {{definition_id}} version {{artifact_version}}. Release ID: {{create-release.id}}. Status: {{create-release.status}}.'
  consumes:
  - type: http
    namespace: azdo
    baseUri: https://vsrm.dev.azure.com/commbank
    authentication:
      type: basic
      username: ''
      password: $secrets.azdo_pat
    resources:
    - name: releases
      path: /{{project}}/_apis/release/releases
      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: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → azure-devops-release-pipeline-trigger.yml

Retrieves APRA prudential reporting data including capital adequacy ratios.

naftiko: '0.5'
info:
  label: APRA Prudential Data Lookup
  description: Retrieves APRA prudential reporting data including capital adequacy ratios.
  tags:
  - regulatory
  - apra
capability:
  exposes:
  - type: mcp
    namespace: regulatory
    port: 8080
    tools:
    - name: get-data
      description: Retrieves APRA prudential reporting data including capital adequacy ratios.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary identifier.
      call: apra.get-data
      with:
        input_id: '{{input_id}}'
  consumes:
  - type: http
    namespace: apra
    baseUri: https://api.internal.commbank.com.au/regulatory/v1
    authentication:
      type: bearer
      token: $secrets.apra_token
    resources:
    - name: data
      path: /{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → apra-prudential-data-lookup.yml

Retrieves an employee's current compensation from Workday, compares against Mercer market data, and creates a compensation review task in ServiceNow for HR approval.

naftiko: '0.5'
info:
  label: Workday Compensation Review Pipeline
  description: Retrieves an employee's current compensation from Workday, compares against Mercer market data, and creates a compensation review task in ServiceNow for HR approval.
  tags:
  - hr
  - compensation
  - workday
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: hr-compensation
    port: 8080
    tools:
    - name: initiate-comp-review
      description: Given an employee ID and job profile, pull current compensation from Workday, compare to market data, and create a review task.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      - name: job_profile
        in: body
        type: string
        description: The Workday job profile code.
      steps:
      - name: get-compensation
        type: call
        call: workday.get-compensation
        with:
          worker_id: '{{employee_id}}'
      - name: get-market-data
        type: call
        call: mercer.get-benchmark
        with:
          job_profile: '{{job_profile}}'
          country: AU
      - name: create-review
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Compensation review: {{employee_id}}'
          category: hr_compensation
          description: 'Current: {{get-compensation.total_base_pay}} AUD. Market P50: {{get-market-data.p50}}. Market P75: {{get-market-data.p75}}.'
  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: mercer
    baseUri: https://api.mercer.com/compensation/v1
    authentication:
      type: bearer
      token: $secrets.mercer_token
    resources:
    - name: benchmarks
      path: /benchmarks
      operations:
      - name: get-benchmark
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://commbank.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → workday-compensation-review-pipeline.yml

Investigates AML alerts by pulling transaction data, running enhanced due diligence, and filing reports.

naftiko: '0.5'
info:
  label: Anti-Money Laundering Investigation Pipeline
  description: Investigates AML alerts by pulling transaction data, running enhanced due diligence, and filing reports.
  tags:
  - compliance
  - aml
  - austrac
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: anti-money-laundering-investigation
    port: 8080
    tools:
    - name: run-anti-money-laundering-investigation
      description: Investigates AML alerts by pulling transaction data, running enhanced due diligence, and filing reports.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: corebanking.get-account
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: compliance.run-check
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: msteams.send-notification
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: corebanking
    baseUri: https://api.internal.commbank.com.au/core/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: compliance
    baseUri: https://api.internal.commbank.com.au/compliance/v1
    authentication:
      type: bearer
      token: $secrets.compliance_token
    resources:
    - name: checks
      path: /checks
      operations:
      - name: run-check
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/messages
      operations:
      - name: send-notification
        method: POST
Open in Framework → View in Fleet → anti-money-laundering-investigation-pipeline.yml

Checks the health and connectivity status of an Albert POS terminal.

naftiko: '0.5'
info:
  label: Albert POS Terminal Status
  description: Checks the health and connectivity status of an Albert POS terminal.
  tags:
  - merchant-services
  - albert-pos
capability:
  exposes:
  - type: mcp
    namespace: merchant-services
    port: 8080
    tools:
    - name: get-data
      description: Checks the health and connectivity status of an Albert POS terminal.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary identifier.
      call: albert_pos.get-data
      with:
        input_id: '{{input_id}}'
  consumes:
  - type: http
    namespace: albert_pos
    baseUri: https://api.internal.commbank.com.au/merchant-services/v1
    authentication:
      type: bearer
      token: $secrets.albert_pos_token
    resources:
    - name: data
      path: /{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → albert-pos-terminal-status.yml

When a customer raises a credit card dispute in Salesforce Service Cloud, retrieves the transaction from core banking, creates a case in ServiceNow, and notifies the disputes team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Credit Card Dispute Resolution Pipeline
  description: When a customer raises a credit card dispute in Salesforce Service Cloud, retrieves the transaction from core banking, creates a case in ServiceNow, and notifies the disputes team via Microsoft Teams.
  tags:
  - credit-cards
  - disputes
  - salesforce-service-cloud
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: card-disputes
    port: 8080
    tools:
    - name: process-card-dispute
      description: Given a Salesforce case ID and transaction reference, orchestrate dispute resolution across core banking, ServiceNow, and Teams.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: The Salesforce Service Cloud case ID.
      - name: transaction_ref
        in: body
        type: string
        description: The credit card transaction reference.
      steps:
      - name: get-case
        type: call
        call: salesforce.get-case
        with:
          case_id: '{{case_id}}'
      - name: get-transaction
        type: call
        call: core-banking.get-card-transaction
        with:
          transaction_ref: '{{transaction_ref}}'
      - name: create-dispute-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Card dispute: {{get-case.Subject}}'
          category: card_disputes
          description: 'Customer: {{get-case.ContactName}}. Amount: {{get-transaction.amount}} {{get-transaction.currency}}. Merchant: {{get-transaction.merchant_name}}.'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: card-disputes
          text: 'New dispute: {{get-case.Subject}} - ${{get-transaction.amount}} at {{get-transaction.merchant_name}}. ServiceNow: {{create-dispute-ticket.number}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://commbank.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: core-banking
    baseUri: https://api.internal.commbank.com.au/core/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: card-transactions
      path: /cards/transactions/{{transaction_ref}}
      inputParameters:
      - name: transaction_ref
        in: path
      operations:
      - name: get-card-transaction
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://commbank.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → credit-card-dispute-resolution-pipeline.yml

When a mortgage application is submitted via Salesforce, retrieves the applicant credit score from Equifax, runs affordability checks, and updates the Salesforce opportunity with decision status and notifies the broker via Microsoft Teams.

naftiko: '0.5'
info:
  label: Mortgage Application Pipeline
  description: When a mortgage application is submitted via Salesforce, retrieves the applicant credit score from Equifax, runs affordability checks, and updates the Salesforce opportunity with decision status and notifies the broker via Microsoft Teams.
  tags:
  - lending
  - mortgage
  - salesforce
  - credit
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: lending
    port: 8080
    tools:
    - name: process-mortgage-application
      description: Given a Salesforce opportunity ID, orchestrate credit check, affordability assessment, and broker notification for a mortgage application.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID for the mortgage application.
      - name: applicant_id
        in: body
        type: string
        description: The customer identifier for the applicant.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: credit-check
        type: call
        call: equifax.get-credit-score
        with:
          applicant_id: '{{applicant_id}}'
          full_name: '{{get-opportunity.ContactName}}'
      - name: affordability-check
        type: call
        call: lending-engine.assess-affordability
        with:
          loan_amount: '{{get-opportunity.Amount}}'
          credit_score: '{{credit-check.score}}'
          income: '{{get-opportunity.AnnualIncome}}'
      - name: update-opportunity
        type: call
        call: salesforce.update-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
          stage: '{{affordability-check.decision}}'
      - name: notify-broker
        type: call
        call: msteams.send-message
        with:
          channel_id: mortgage-decisions
          text: 'Mortgage {{opportunity_id}} for {{get-opportunity.ContactName}}: Credit score {{credit-check.score}}, Decision: {{affordability-check.decision}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://commbank.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: update-opportunity
        method: PATCH
  - type: http
    namespace: equifax
    baseUri: https://api.equifax.com.au/v2
    authentication:
      type: bearer
      token: $secrets.equifax_token
    resources:
    - name: credit-scores
      path: /credit/score
      operations:
      - name: get-credit-score
        method: POST
  - type: http
    namespace: lending-engine
    baseUri: https://api.internal.commbank.com.au/lending/v1
    authentication:
      type: bearer
      token: $secrets.lending_token
    resources:
    - name: affordability
      path: /assess
      operations:
      - name: assess-affordability
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → mortgage-application-pipeline.yml

Retrieves cash transaction threshold report details submitted to AUSTRAC.

naftiko: '0.5'
info:
  label: AUSTRAC CTT Report Lookup
  description: Retrieves cash transaction threshold report details submitted to AUSTRAC.
  tags:
  - compliance
  - austrac
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: get-data
      description: Retrieves cash transaction threshold report details submitted to AUSTRAC.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary identifier.
      call: austrac.get-data
      with:
        input_id: '{{input_id}}'
  consumes:
  - type: http
    namespace: austrac
    baseUri: https://api.internal.commbank.com.au/compliance/v1
    authentication:
      type: bearer
      token: $secrets.austrac_token
    resources:
    - name: data
      path: /{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → austrac-ctt-report-lookup.yml

Triggers a Qlik Sense app reload for a given app ID and returns the reload status and task execution time.

naftiko: '0.5'
info:
  label: Qlik Sense Dashboard Reload
  description: Triggers a Qlik Sense app reload for a given app ID and returns the reload status and task execution time.
  tags:
  - analytics
  - qlik-sense
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: bi-qlik
    port: 8080
    tools:
    - name: reload-qlik-app
      description: Trigger a Qlik Sense app reload. Returns reload status and execution time.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: The Qlik Sense app ID.
      call: qlik.reload-app
      with:
        app_id: '{{app_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: execution_time
        type: number
        mapping: $.executionTime
  consumes:
  - type: http
    namespace: qlik
    baseUri: https://qlik.internal.commbank.com.au/api/v1
    authentication:
      type: bearer
      token: $secrets.qlik_token
    resources:
    - name: reloads
      path: /reloads
      operations:
      - name: reload-app
        method: POST
Open in Framework → View in Fleet → qlik-sense-dashboard-reload.yml

Assesses climate risk for the loan portfolio by pulling property data, running climate models, and reporting.

naftiko: '0.5'
info:
  label: Climate Risk Assessment Pipeline
  description: Assesses climate risk for the loan portfolio by pulling property data, running climate models, and reporting.
  tags:
  - risk-management
  - climate
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: climate-risk-assessment
    port: 8080
    tools:
    - name: run-climate-risk-assessment-pipeline
      description: Assesses climate risk for the loan portfolio by pulling property data, running climate models, and reporting.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: snowflake.execute-query
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: ml.run-model
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: msteams.send-notification
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://commbank.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: ml
    baseUri: https://ml.internal.commbank.com.au/v1
    authentication:
      type: bearer
      token: $secrets.ml_token
    resources:
    - name: models
      path: /predict
      operations:
      - name: run-model
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/messages
      operations:
      - name: send-notification
        method: POST
Open in Framework → View in Fleet → climate-risk-assessment-pipeline.yml

Provides institutional FX advisory quotes by fetching market rates, computing spread, and delivering via Microsoft Teams.

naftiko: '0.5'
info:
  label: FX Advisory Quote Pipeline
  description: Provides institutional FX advisory quotes by fetching market rates, computing spread, and delivering via Microsoft Teams.
  tags:
  - treasury
  - forex
  - bloomberg
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: fx-advisory-quote
    port: 8080
    tools:
    - name: run-fx-advisory-quote-pipeline
      description: Provides institutional FX advisory quotes by fetching market rates, computing spread, and delivering via Microsoft Teams.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: bloomberg.get-data
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: ml.run-model
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: msteams.send-notification
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://bsapi.bloomberg.com/eap/catalogs/bbg
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: data
      path: /datasets
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: ml
    baseUri: https://ml.internal.commbank.com.au/v1
    authentication:
      type: bearer
      token: $secrets.ml_token
    resources:
    - name: models
      path: /predict
      operations:
      - name: run-model
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/messages
      operations:
      - name: send-notification
        method: POST
Open in Framework → View in Fleet → fx-advisory-quote-pipeline.yml

On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint document folder, and sends a Microsoft Teams welcome message.

naftiko: '0.5'
info:
  label: Employee Onboarding Pipeline
  description: On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint document folder, and sends a Microsoft Teams welcome message.
  tags:
  - hr
  - onboarding
  - workday
  - servicenow
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-onboarding
    port: 8080
    tools:
    - name: trigger-employee-onboarding
      description: Given a Workday employee ID, orchestrate the full employee 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 hire.
      - name: start_date
        in: body
        type: string
        description: The employee start date in YYYY-MM-DD format.
      - name: department
        in: body
        type: string
        description: The department the new hire is joining.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: open-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'New hire onboarding: {{get-employee.full_name}}'
          category: hr_onboarding
          assigned_group: IT_Onboarding
          description: Onboarding for {{get-employee.full_name}} starting {{start_date}} in {{department}}.
      - name: provision-folder
        type: call
        call: sharepoint.create-folder
        with:
          site_id: hr_onboarding_site
          folder_path: OnboardingDocs/{{get-employee.full_name}}_{{start_date}}
      - name: send-welcome
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.work_email}}'
          text: Welcome to Commonwealth Bank, {{get-employee.first_name}}! Your IT onboarding ticket is {{open-ticket.number}}. Documents are ready at {{provision-folder.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: servicenow
    baseUri: https://commbank.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → employee-onboarding-pipeline.yml

Processes customer hardship claims by reviewing account history, assessing eligibility, and creating a support case.

naftiko: '0.5'
info:
  label: Customer Hardship Assessment Pipeline
  description: Processes customer hardship claims by reviewing account history, assessing eligibility, and creating a support case.
  tags:
  - customer-support
  - hardship
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: customer-hardship-assessment
    port: 8080
    tools:
    - name: run-customer-hardship-assessment-pipeli
      description: Processes customer hardship claims by reviewing account history, assessing eligibility, and creating a support case.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: salesforce.get-account
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: corebanking.get-account
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: msteams.send-notification
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://commbank.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: corebanking
    baseUri: https://api.internal.commbank.com.au/core/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/messages
      operations:
      - name: send-notification
        method: POST
Open in Framework → View in Fleet → customer-hardship-assessment-pipeline.yml

Responds to cybersecurity incidents by correlating Splunk alerts, creating ServiceNow incidents, and notifying the CISO.

naftiko: '0.5'
info:
  label: Cybersecurity Incident Response Pipeline
  description: Responds to cybersecurity incidents by correlating Splunk alerts, creating ServiceNow incidents, and notifying the CISO.
  tags:
  - security
  - splunk
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cybersecurity-incident-response
    port: 8080
    tools:
    - name: run-cybersecurity-incident-response-pip
      description: Responds to cybersecurity incidents by correlating Splunk alerts, creating ServiceNow incidents, and notifying the CISO.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: splunk.create-search
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: servicenow.create-incident
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: msteams.send-notification
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.commbank.com.au:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search
      path: /search/jobs
      operations:
      - name: create-search
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://commbank.service-now.com/api/now/table
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /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/messages
      operations:
      - name: send-notification
        method: POST
Open in Framework → View in Fleet → cybersecurity-incident-response-pipeline.yml

Retrieves mobile banking app session details for customer engagement analytics.

naftiko: '0.5'
info:
  label: CommBank App Session Lookup
  description: Retrieves mobile banking app session details for customer engagement analytics.
  tags:
  - digital-banking
  - commbank-app
capability:
  exposes:
  - type: mcp
    namespace: digital-banking
    port: 8080
    tools:
    - name: get-data
      description: Retrieves mobile banking app session details for customer engagement analytics.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary identifier.
      call: commbank_app.get-data
      with:
        input_id: '{{input_id}}'
  consumes:
  - type: http
    namespace: commbank_app
    baseUri: https://api.internal.commbank.com.au/digital-banking/v1
    authentication:
      type: bearer
      token: $secrets.commbank_app_token
    resources:
    - name: data
      path: /{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → commbank-app-session-lookup.yml

Retrieves the performance metrics of a HubSpot marketing campaign, returning email sent count, open rate, click rate, and conversion count.

naftiko: '0.5'
info:
  label: HubSpot Marketing Campaign Status
  description: Retrieves the performance metrics of a HubSpot marketing campaign, returning email sent count, open rate, click rate, and conversion count.
  tags:
  - marketing
  - hubspot
  - campaign
capability:
  exposes:
  - type: mcp
    namespace: marketing-ops
    port: 8080
    tools:
    - name: get-campaign-performance
      description: Look up HubSpot campaign performance. Returns emails sent, open rate, click rate, and conversions.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The HubSpot campaign ID.
      call: hubspot.get-campaign
      with:
        campaign_id: '{{campaign_id}}'
      outputParameters:
      - name: emails_sent
        type: number
        mapping: $.counters.sent
      - name: open_rate
        type: number
        mapping: $.counters.openRate
      - name: click_rate
        type: number
        mapping: $.counters.clickRate
      - name: conversions
        type: number
        mapping: $.counters.conversions
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/marketing/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: campaigns
      path: /campaigns/{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-campaign
        method: GET
Open in Framework → View in Fleet → hubspot-marketing-campaign-status.yml

Retrieves BPAY payment transaction status by payment reference.

naftiko: '0.5'
info:
  label: BPAY Payment Status Lookup
  description: Retrieves BPAY payment transaction status by payment reference.
  tags:
  - payments
  - bpay
capability:
  exposes:
  - type: mcp
    namespace: payments
    port: 8080
    tools:
    - name: get-data
      description: Retrieves BPAY payment transaction status by payment reference.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary identifier.
      call: bpay.get-data
      with:
        input_id: '{{input_id}}'
  consumes:
  - type: http
    namespace: bpay
    baseUri: https://api.internal.commbank.com.au/payments/v1
    authentication:
      type: bearer
      token: $secrets.bpay_token
    resources:
    - name: data
      path: /{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → bpay-payment-status-lookup.yml

Processes pension payments by calculating entitlements, executing payments, and notifying members.

naftiko: '0.5'
info:
  label: Pension Payment Processing Pipeline
  description: Processes pension payments by calculating entitlements, executing payments, and notifying members.
  tags:
  - superannuation
  - pension
  - bpay
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: pension-payment-processing
    port: 8080
    tools:
    - name: run-pension-payment-processing-pipeline
      description: Processes pension payments by calculating entitlements, executing payments, and notifying members.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: cfs.get-fund
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: corebanking.get-account
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: outlook.send-email
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: cfs
    baseUri: https://api.internal.commbank.com.au/cfs/v1
    authentication:
      type: bearer
      token: $secrets.cfs_token
    resources:
    - name: funds
      path: /funds
      operations:
      - name: get-fund
        method: GET
  - type: http
    namespace: corebanking
    baseUri: https://api.internal.commbank.com.au/core/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → pension-payment-processing-pipeline.yml

Updates a feature flag for the CommBank mobile app, triggers a Harness deployment pipeline, and notifies the mobile team via Microsoft Teams with rollout percentage.

naftiko: '0.5'
info:
  label: Mobile Banking Feature Toggle Pipeline
  description: Updates a feature flag for the CommBank mobile app, triggers a Harness deployment pipeline, and notifies the mobile team via Microsoft Teams with rollout percentage.
  tags:
  - mobile-banking
  - feature-flags
  - harness
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: mobile-ops
    port: 8080
    tools:
    - name: toggle-mobile-feature
      description: Given a feature flag key and rollout percentage, update the flag in Harness and notify the mobile team.
      inputParameters:
      - name: feature_key
        in: body
        type: string
        description: The Harness feature flag key.
      - name: rollout_pct
        in: body
        type: number
        description: The target rollout percentage (0-100).
      - name: environment
        in: body
        type: string
        description: The target environment (e.g., production, staging).
      steps:
      - name: update-flag
        type: call
        call: harness.update-feature-flag
        with:
          feature_key: '{{feature_key}}'
          environment: '{{environment}}'
          rollout_percentage: '{{rollout_pct}}'
      - name: notify-mobile-team
        type: call
        call: msteams.send-message
        with:
          channel_id: mobile-releases
          text: 'Feature flag ''{{feature_key}}'' updated in {{environment}}: rollout now {{rollout_pct}}%. Updated by automation.'
  consumes:
  - type: http
    namespace: harness
    baseUri: https://app.harness.io/cf/admin
    authentication:
      type: bearer
      token: $secrets.harness_token
    resources:
    - name: feature-flags
      path: /features/{{feature_key}}
      inputParameters:
      - name: feature_key
        in: path
      operations:
      - name: update-feature-flag
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → mobile-banking-feature-toggle-pipeline.yml

Submits a bond trade request via Tradeweb, records the execution in Bloomberg AIM, and notifies the trading desk via Microsoft Teams with fill details.

naftiko: '0.5'
info:
  label: Tradeweb Bond Trade Execution Pipeline
  description: Submits a bond trade request via Tradeweb, records the execution in Bloomberg AIM, and notifies the trading desk via Microsoft Teams with fill details.
  tags:
  - trading
  - fixed-income
  - tradeweb
  - bloomberg-aim
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: fixed-income-trading
    port: 8080
    tools:
    - name: execute-bond-trade
      description: Given bond details and trade parameters, submit an order via Tradeweb, record in Bloomberg AIM, and notify the desk.
      inputParameters:
      - name: isin
        in: body
        type: string
        description: The bond ISIN code.
      - name: side
        in: body
        type: string
        description: The trade side (buy or sell).
      - name: notional
        in: body
        type: number
        description: The notional amount of the trade.
      - name: counterparty
        in: body
        type: string
        description: The counterparty dealer ID.
      steps:
      - name: submit-rfq
        type: call
        call: tradeweb.submit-rfq
        with:
          isin: '{{isin}}'
          side: '{{side}}'
          notional: '{{notional}}'
          counterparty: '{{counterparty}}'
      - name: record-trade
        type: call
        call: bloomberg-aim.record-execution
        with:
          trade_id: '{{submit-rfq.trade_id}}'
          isin: '{{isin}}'
          price: '{{submit-rfq.fill_price}}'
          notional: '{{notional}}'
      - name: notify-desk
        type: call
        call: msteams.send-message
        with:
          channel_id: fi-trading-desk
          text: 'Bond trade executed: {{isin}} {{side}} {{notional}} @ {{submit-rfq.fill_price}}. Tradeweb ID: {{submit-rfq.trade_id}}. AIM ref: {{record-trade.aim_reference}}.'
  consumes:
  - type: http
    namespace: tradeweb
    baseUri: https://api.tradeweb.com/v2
    authentication:
      type: bearer
      token: $secrets.tradeweb_token
    resources:
    - name: rfq
      path: /rfq
      operations:
      - name: submit-rfq
        method: POST
  - type: http
    namespace: bloomberg-aim
    baseUri: https://bsapi.bloomberg.com/aim/api/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_aim_token
    resources:
    - name: executions
      path: /executions
      operations:
      - name: record-execution
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → tradeweb-bond-trade-execution-pipeline.yml

Generates branch performance reports by pulling metrics from Salesforce, computing KPIs, and refreshing dashboards.

naftiko: '0.5'
info:
  label: Branch Performance Reporting Pipeline
  description: Generates branch performance reports by pulling metrics from Salesforce, computing KPIs, and refreshing dashboards.
  tags:
  - operations
  - salesforce
  - snowflake
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: branch-performance-reporting
    port: 8080
    tools:
    - name: run-branch-performance-reporting-pipeli
      description: Generates branch performance reports by pulling metrics from Salesforce, computing KPIs, and refreshing dashboards.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: salesforce.get-account
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: snowflake.execute-query
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: powerbi.refresh-dataset
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://commbank.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://commbank.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/refresh
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → branch-performance-reporting-pipeline.yml

When an expense report is submitted in SAP Concur, validates policy compliance, routes for manager approval in Workday, and notifies the submitter via Microsoft Outlook.

naftiko: '0.5'
info:
  label: SAP Concur Expense Approval Pipeline
  description: When an expense report is submitted in SAP Concur, validates policy compliance, routes for manager approval in Workday, and notifies the submitter via Microsoft Outlook.
  tags:
  - expense-management
  - sap-concur
  - workday
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: expense-management
    port: 8080
    tools:
    - name: process-expense-report
      description: Given a Concur expense report ID, validate against policy, route for approval, and notify the submitter.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The SAP Concur expense report ID.
      - name: submitter_employee_id
        in: body
        type: string
        description: The Workday employee ID of the submitter.
      steps:
      - name: get-report
        type: call
        call: concur.get-expense-report
        with:
          report_id: '{{report_id}}'
      - name: get-submitter
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{submitter_employee_id}}'
      - name: get-manager
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{get-submitter.manager_id}}'
      - name: notify-submitter
        type: call
        call: outlook.send-email
        with:
          to: '{{get-submitter.work_email}}'
          subject: Expense report {{report_id}} submitted for approval
          body: Your expense report totalling {{get-report.total_amount}} {{get-report.currency}} has been routed to {{get-manager.full_name}} for approval.
  consumes:
  - type: http
    namespace: concur
    baseUri: https://us2.api.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: expense-reports
      path: /expense/reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-expense-report
        method: GET
  - type: http
    namespace: 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: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/{{to}}/sendMail
      inputParameters:
      - name: to
        in: path
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → sap-concur-expense-approval-pipeline.yml

Pulls Azure consumption data, identifies underutilized resources, creates a cost optimization recommendation in ServiceNow, and notifies the FinOps team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Cloud Cost Optimization Pipeline
  description: Pulls Azure consumption data, identifies underutilized resources, creates a cost optimization recommendation in ServiceNow, and notifies the FinOps team via Microsoft Teams.
  tags:
  - finops
  - cloud-cost
  - microsoft-azure
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finops
    port: 8080
    tools:
    - name: optimize-cloud-costs
      description: Given an Azure subscription ID, identify cost optimization opportunities and create recommendations.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: The Azure subscription ID.
      - name: lookback_days
        in: body
        type: number
        description: Number of days to analyze for usage patterns.
      steps:
      - name: get-consumption
        type: call
        call: azure.get-consumption
        with:
          subscription_id: '{{subscription_id}}'
          days: '{{lookback_days}}'
      - name: get-advisor-recommendations
        type: call
        call: azure.get-advisor
        with:
          subscription_id: '{{subscription_id}}'
          category: Cost
      - name: create-ticket
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Cloud cost optimization: {{subscription_id}}'
          description: 'Total spend: ${{get-consumption.total_cost}}. Potential savings: ${{get-advisor-recommendations.estimated_savings}}. Top recommendations: {{get-advisor-recommendations.summary}}.'
      - name: notify-finops
        type: call
        call: msteams.send-message
        with:
          channel_id: finops
          text: 'Cost optimization identified for subscription {{subscription_id}}: ${{get-advisor-recommendations.estimated_savings}} potential savings. ServiceNow task: {{create-ticket.number}}.'
  consumes:
  - type: http
    namespace: azure
    baseUri: https://management.azure.com/subscriptions
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: consumption
      path: /{{subscription_id}}/providers/Microsoft.Consumption/usageDetails
      inputParameters:
      - name: subscription_id
        in: path
      operations:
      - name: get-consumption
        method: GET
    - name: advisor
      path: /{{subscription_id}}/providers/Microsoft.Advisor/recommendations
      inputParameters:
      - name: subscription_id
        in: path
      operations:
      - name: get-advisor
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://commbank.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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → cloud-cost-optimization-pipeline.yml

Retrieves the status of an Alteryx workflow execution, returning workflow name, run status, output record count, and duration.

naftiko: '0.5'
info:
  label: Alteryx Data Workflow Status
  description: Retrieves the status of an Alteryx workflow execution, returning workflow name, run status, output record count, and duration.
  tags:
  - data-engineering
  - alteryx
  - etl
capability:
  exposes:
  - type: mcp
    namespace: data-engineering
    port: 8080
    tools:
    - name: get-workflow-status
      description: Look up an Alteryx workflow execution status. Returns name, status, output records, and duration.
      inputParameters:
      - name: job_id
        in: body
        type: string
        description: The Alteryx workflow job ID.
      call: alteryx.get-job
      with:
        job_id: '{{job_id}}'
      outputParameters:
      - name: workflow_name
        type: string
        mapping: $.name
      - name: status
        type: string
        mapping: $.status
      - name: output_records
        type: number
        mapping: $.outputRecordCount
      - name: duration_seconds
        type: number
        mapping: $.duration
  consumes:
  - type: http
    namespace: alteryx
    baseUri: https://alteryx.internal.commbank.com.au/api/v3
    authentication:
      type: bearer
      token: $secrets.alteryx_token
    resources:
    - name: jobs
      path: /jobs/{{job_id}}
      inputParameters:
      - name: job_id
        in: path
      operations:
      - name: get-job
        method: GET
Open in Framework → View in Fleet → alteryx-data-workflow-status.yml

Searches Confluence for a knowledge article by keyword and returns the article title, URL, and last updated date.

naftiko: '0.5'
info:
  label: Confluence Knowledge Article Lookup
  description: Searches Confluence for a knowledge article by keyword and returns the article title, URL, and last updated date.
  tags:
  - knowledge-management
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: knowledge-base
    port: 8080
    tools:
    - name: search-knowledge-article
      description: Search Confluence for a knowledge article by keyword. Returns title, URL, and last updated date.
      inputParameters:
      - name: query
        in: body
        type: string
        description: The search keyword or phrase.
      call: confluence.search
      with:
        query: '{{query}}'
      outputParameters:
      - name: title
        type: string
        mapping: $.results[0].title
      - name: url
        type: string
        mapping: $.results[0]._links.webui
      - name: last_updated
        type: string
        mapping: $.results[0].version.when
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://commbank.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content/search
      operations:
      - name: search
        method: GET
Open in Framework → View in Fleet → confluence-knowledge-article-lookup.yml

Retrieves the latest GitHub Actions workflow run status for a given repository, returning run conclusion, duration, and triggering commit SHA.

naftiko: '0.5'
info:
  label: GitHub Actions Build Status
  description: Retrieves the latest GitHub Actions workflow run status for a given repository, returning run conclusion, duration, and triggering commit SHA.
  tags:
  - ci-cd
  - github-actions
  - engineering
capability:
  exposes:
  - type: mcp
    namespace: ci-cd
    port: 8080
    tools:
    - name: get-build-status
      description: Look up the latest GitHub Actions workflow run for a repository. Returns conclusion, duration, and commit SHA.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The repository in owner/repo format.
      - name: workflow_id
        in: body
        type: string
        description: The workflow file name or ID.
      call: github.get-workflow-run
      with:
        repo: '{{repo}}'
        workflow_id: '{{workflow_id}}'
      outputParameters:
      - name: conclusion
        type: string
        mapping: $.workflow_runs[0].conclusion
      - name: duration_seconds
        type: number
        mapping: $.workflow_runs[0].run_duration
      - name: head_sha
        type: string
        mapping: $.workflow_runs[0].head_sha
  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
      inputParameters:
      - name: repo
        in: path
      - name: workflow_id
        in: path
      operations:
      - name: get-workflow-run
        method: GET
Open in Framework → View in Fleet → github-actions-build-status.yml

Runs a vulnerability scan report from SolarWinds, correlates findings with the CMDB in ServiceNow, and creates remediation tasks assigned to the owning team.

naftiko: '0.5'
info:
  label: Vulnerability Scan Report Pipeline
  description: Runs a vulnerability scan report from SolarWinds, correlates findings with the CMDB in ServiceNow, and creates remediation tasks assigned to the owning team.
  tags:
  - security
  - vulnerability-management
  - solarwinds
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: vuln-management
    port: 8080
    tools:
    - name: process-vuln-report
      description: Given a scan ID, retrieve SolarWinds vulnerability results, match to CMDB, and create ServiceNow remediation tasks.
      inputParameters:
      - name: scan_id
        in: body
        type: string
        description: The SolarWinds vulnerability scan ID.
      steps:
      - name: get-scan-results
        type: call
        call: solarwinds.get-scan
        with:
          scan_id: '{{scan_id}}'
      - name: get-cmdb-ci
        type: call
        call: servicenow.get-ci
        with:
          ip_address: '{{get-scan-results.host_ip}}'
      - name: create-remediation
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Vulnerability remediation: {{get-scan-results.top_vuln}} on {{get-cmdb-ci.name}}'
          category: security_remediation
          assigned_group: '{{get-cmdb-ci.support_group}}'
          description: 'Critical vulns: {{get-scan-results.critical_count}}. High: {{get-scan-results.high_count}}. Host: {{get-scan-results.host_ip}}. CI: {{get-cmdb-ci.name}}.'
  consumes:
  - type: http
    namespace: solarwinds
    baseUri: https://solarwinds.internal.commbank.com.au/api/v2
    authentication:
      type: bearer
      token: $secrets.solarwinds_token
    resources:
    - name: scans
      path: /scans/{{scan_id}}/results
      inputParameters:
      - name: scan_id
        in: path
      operations:
      - name: get-scan
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://commbank.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: get-ci
        method: GET
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → vulnerability-scan-report-pipeline.yml

Manages property settlement by coordinating with the conveyancer, releasing funds, and registering the mortgage.

naftiko: '0.5'
info:
  label: Property Settlement Pipeline
  description: Manages property settlement by coordinating with the conveyancer, releasing funds, and registering the mortgage.
  tags:
  - lending
  - property
  - settlements
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: property-settlement
    port: 8080
    tools:
    - name: run-property-settlement-pipeline
      description: Manages property settlement by coordinating with the conveyancer, releasing funds, and registering the mortgage.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: corebanking.get-account
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: ml.run-model
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: msteams.send-notification
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: corebanking
    baseUri: https://api.internal.commbank.com.au/core/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: ml
    baseUri: https://ml.internal.commbank.com.au/v1
    authentication:
      type: bearer
      token: $secrets.ml_token
    resources:
    - name: models
      path: /predict
      operations:
      - name: run-model
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/messages
      operations:
      - name: send-notification
        method: POST
Open in Framework → View in Fleet → property-settlement-pipeline.yml

Generates daily treasury cash positions by aggregating across all accounts, computing net position, and distributing.

naftiko: '0.5'
info:
  label: Treasury Daily Cash Position Pipeline
  description: Generates daily treasury cash positions by aggregating across all accounts, computing net position, and distributing.
  tags:
  - treasury
  - core-banking
  - bloomberg
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: treasury-daily-cash-position
    port: 8080
    tools:
    - name: run-treasury-daily-cash-position-pipeli
      description: Generates daily treasury cash positions by aggregating across all accounts, computing net position, and distributing.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: corebanking.get-account
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: bloomberg.get-data
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: msteams.send-notification
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: corebanking
    baseUri: https://api.internal.commbank.com.au/core/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: bloomberg
    baseUri: https://bsapi.bloomberg.com/eap/catalogs/bbg
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: data
      path: /datasets
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/messages
      operations:
      - name: send-notification
        method: POST
Open in Framework → View in Fleet → treasury-daily-cash-position-pipeline.yml

Refreshes KYC profiles by pulling latest customer data, running screening checks, and updating compliance records.

naftiko: '0.5'
info:
  label: KYC Refresh Pipeline
  description: Refreshes KYC profiles by pulling latest customer data, running screening checks, and updating compliance records.
  tags:
  - compliance
  - kyc
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: kyc-refresh
    port: 8080
    tools:
    - name: run-kyc-refresh-pipeline
      description: Refreshes KYC profiles by pulling latest customer data, running screening checks, and updating compliance records.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: salesforce.get-account
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: kyc.screen-customer
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: msteams.send-notification
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://commbank.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: kyc
    baseUri: https://api.internal.commbank.com.au/kyc/v1
    authentication:
      type: bearer
      token: $secrets.kyc_token
    resources:
    - name: screening
      path: /screen
      operations:
      - name: screen-customer
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/messages
      operations:
      - name: send-notification
        method: POST
Open in Framework → View in Fleet → kyc-refresh-pipeline.yml

Runs a Terraform plan against the current state, identifies drift, creates a ServiceNow change request for remediation, and alerts the platform team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Terraform Infrastructure Drift Detection Pipeline
  description: Runs a Terraform plan against the current state, identifies drift, creates a ServiceNow change request for remediation, and alerts the platform team via Microsoft Teams.
  tags:
  - infrastructure
  - terraform
  - servicenow
  - microsoft-teams
  - platform
capability:
  exposes:
  - type: mcp
    namespace: infra-ops
    port: 8080
    tools:
    - name: detect-infra-drift
      description: Given a Terraform workspace, run a plan to detect drift, create a change request, and notify the platform team.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: The Terraform Cloud workspace ID.
      - name: organization
        in: body
        type: string
        description: The Terraform Cloud organization name.
      steps:
      - name: trigger-plan
        type: call
        call: terraform.create-run
        with:
          workspace_id: '{{workspace_id}}'
          is_destroy: false
          message: Automated drift detection
      - name: create-change
        type: call
        call: servicenow.create-change
        with:
          short_description: 'Infrastructure drift detected: workspace {{workspace_id}}'
          category: infrastructure
          description: 'Terraform plan run {{trigger-plan.id}} detected changes. Resources to add: {{trigger-plan.resource_additions}}, change: {{trigger-plan.resource_changes}}, destroy: {{trigger-plan.resource_destructions}}.'
      - name: notify-platform
        type: call
        call: msteams.send-message
        with:
          channel_id: platform-engineering
          text: 'Infrastructure drift detected in workspace {{workspace_id}}. Plan: +{{trigger-plan.resource_additions}} ~{{trigger-plan.resource_changes}} -{{trigger-plan.resource_destructions}}. CHG: {{create-change.number}}.'
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: runs
      path: /runs
      operations:
      - name: create-run
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://commbank.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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → terraform-infrastructure-drift-detection-pipeline.yml

Retrieves loyalty rewards points balance and transaction history.

naftiko: '0.5'
info:
  label: CommBank Rewards Points Lookup
  description: Retrieves loyalty rewards points balance and transaction history.
  tags:
  - loyalty
  - commbank-rewards
capability:
  exposes:
  - type: mcp
    namespace: loyalty
    port: 8080
    tools:
    - name: get-data
      description: Retrieves loyalty rewards points balance and transaction history.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary identifier.
      call: commbank_rewards.get-data
      with:
        input_id: '{{input_id}}'
  consumes:
  - type: http
    namespace: commbank_rewards
    baseUri: https://api.internal.commbank.com.au/loyalty/v1
    authentication:
      type: bearer
      token: $secrets.commbank_rewards_token
    resources:
    - name: data
      path: /{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → commbank-rewards-points-lookup.yml

Extracts transaction data from SAP BW, transforms it into APRA reporting format, uploads the report to SharePoint, and notifies the compliance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Regulatory Reporting Pipeline
  description: Extracts transaction data from SAP BW, transforms it into APRA reporting format, uploads the report to SharePoint, and notifies the compliance team via Microsoft Teams.
  tags:
  - compliance
  - regulatory-reporting
  - sap-bw
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: regulatory-reporting
    port: 8080
    tools:
    - name: generate-apra-report
      description: Given a reporting period and report type, extract data from SAP BW, generate the APRA report, and distribute to compliance.
      inputParameters:
      - name: report_period
        in: body
        type: string
        description: The reporting period in YYYY-MM format.
      - name: report_type
        in: body
        type: string
        description: The APRA report type (e.g., ARF_320_0, ARF_330_0).
      steps:
      - name: extract-data
        type: call
        call: sapbw.run-query
        with:
          query_name: APRA_{{report_type}}
          period: '{{report_period}}'
      - name: generate-report
        type: call
        call: reporting-engine.transform
        with:
          data: '{{extract-data.results}}'
          template: '{{report_type}}'
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: compliance_reports
          file_path: APRA/{{report_type}}/{{report_period}}.xlsx
          content: '{{generate-report.file_content}}'
      - name: notify-compliance
        type: call
        call: msteams.send-message
        with:
          channel_id: regulatory-reporting
          text: 'APRA report {{report_type}} for {{report_period}} generated and uploaded. File: {{upload-report.url}}.'
  consumes:
  - type: http
    namespace: sapbw
    baseUri: https://commbank-bw.sap.com/sap/bw/ina
    authentication:
      type: basic
      username: $secrets.sapbw_user
      password: $secrets.sapbw_password
    resources:
    - name: queries
      path: /GetResponse
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: reporting-engine
    baseUri: https://api.internal.commbank.com.au/reporting/v1
    authentication:
      type: bearer
      token: $secrets.reporting_token
    resources:
    - name: transform
      path: /transform
      operations:
      - name: transform
        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:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → regulatory-reporting-pipeline.yml

Retrieves the current deployment status of a workload on Azure Kubernetes Service, returning replica count, available replicas, and image version.

naftiko: '0.5'
info:
  label: Azure Kubernetes Deployment Status
  description: Retrieves the current deployment status of a workload on Azure Kubernetes Service, returning replica count, available replicas, and image version.
  tags:
  - platform
  - kubernetes
  - azure-kubernetes-service
  - deployment
capability:
  exposes:
  - type: mcp
    namespace: platform-ops
    port: 8080
    tools:
    - name: get-deployment-status
      description: Look up the deployment status of an AKS workload. Returns replica count, available replicas, and image version.
      inputParameters:
      - name: cluster_name
        in: body
        type: string
        description: The AKS cluster name.
      - name: namespace
        in: body
        type: string
        description: The Kubernetes namespace.
      - name: deployment_name
        in: body
        type: string
        description: The Kubernetes deployment name.
      call: aks.get-deployment
      with:
        cluster_name: '{{cluster_name}}'
        namespace: '{{namespace}}'
        deployment_name: '{{deployment_name}}'
      outputParameters:
      - name: replicas
        type: number
        mapping: $.status.replicas
      - name: available_replicas
        type: number
        mapping: $.status.availableReplicas
      - name: image
        type: string
        mapping: $.spec.template.spec.containers[0].image
  consumes:
  - type: http
    namespace: aks
    baseUri: https://management.azure.com/subscriptions/{{subscription_id}}/resourceGroups/{{rg}}/providers/Microsoft.ContainerService/managedClusters
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: deployments
      path: /{{cluster_name}}/apis/apps/v1/namespaces/{{namespace}}/deployments/{{deployment_name}}
      inputParameters:
      - name: cluster_name
        in: path
      - name: namespace
        in: path
      - name: deployment_name
        in: path
      operations:
      - name: get-deployment
        method: GET
Open in Framework → View in Fleet → azure-kubernetes-deployment-status.yml

Processes CommInsure claims by verifying policy, assessing claim, and routing to the claims team.

naftiko: '0.5'
info:
  label: Insurance Claim Processing Pipeline
  description: Processes CommInsure claims by verifying policy, assessing claim, and routing to the claims team.
  tags:
  - insurance
  - comminsure
  - servicenow
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: insurance-claim-processing
    port: 8080
    tools:
    - name: run-insurance-claim-processing-pipeline
      description: Processes CommInsure claims by verifying policy, assessing claim, and routing to the claims team.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: corebanking.get-account
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: servicenow.create-incident
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: outlook.send-email
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: corebanking
    baseUri: https://api.internal.commbank.com.au/core/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://commbank.service-now.com/api/now/table
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → insurance-claim-processing-pipeline.yml

Checks the health of digital banking APIs via Apigee, retrieves error rates from New Relic, and posts a combined health report to Microsoft Teams.

naftiko: '0.5'
info:
  label: Digital Banking API Health Pipeline
  description: Checks the health of digital banking APIs via Apigee, retrieves error rates from New Relic, and posts a combined health report to Microsoft Teams.
  tags:
  - digital-banking
  - apigee
  - new-relic
  - microsoft-teams
  - api-management
capability:
  exposes:
  - type: mcp
    namespace: api-health
    port: 8080
    tools:
    - name: check-api-health
      description: Given an API proxy name, check its health in Apigee and New Relic and post a summary to Teams.
      inputParameters:
      - name: api_proxy
        in: body
        type: string
        description: The Apigee API proxy name.
      - name: newrelic_app_id
        in: body
        type: string
        description: The New Relic application ID.
      steps:
      - name: get-apigee-stats
        type: call
        call: apigee.get-proxy-stats
        with:
          proxy_name: '{{api_proxy}}'
      - name: get-newrelic-metrics
        type: call
        call: newrelic.get-app-metrics
        with:
          app_id: '{{newrelic_app_id}}'
      - name: post-report
        type: call
        call: msteams.send-message
        with:
          channel_id: api-health
          text: 'API Health: {{api_proxy}} - Traffic: {{get-apigee-stats.total_requests}}/hr, Errors: {{get-apigee-stats.error_rate}}%, Apdex: {{get-newrelic-metrics.apdex_score}}, Response: {{get-newrelic-metrics.avg_response_time}}ms.'
  consumes:
  - type: http
    namespace: apigee
    baseUri: https://api.enterprise.apigee.com/v1/organizations/commbank
    authentication:
      type: bearer
      token: $secrets.apigee_token
    resources:
    - name: stats
      path: /environments/prod/stats/apiproxy/{{proxy_name}}
      inputParameters:
      - name: proxy_name
        in: path
      operations:
      - name: get-proxy-stats
        method: GET
  - type: http
    namespace: newrelic
    baseUri: https://api.newrelic.com/v2
    authentication:
      type: apiKey
      key: $secrets.newrelic_api_key
    resources:
    - name: applications
      path: /applications/{{app_id}}/metrics/data.json
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: get-app-metrics
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → digital-banking-api-health-pipeline.yml

Retrieves consumer group lag metrics for a Kafka topic from the Kafka monitoring API, returning total lag, partition count, and maximum partition lag.

naftiko: '0.5'
info:
  label: Kafka Consumer Lag Monitor
  description: Retrieves consumer group lag metrics for a Kafka topic from the Kafka monitoring API, returning total lag, partition count, and maximum partition lag.
  tags:
  - streaming
  - kafka
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: event-streaming
    port: 8080
    tools:
    - name: get-consumer-lag
      description: Look up consumer group lag for a Kafka topic. Returns total lag, partition count, and max partition lag.
      inputParameters:
      - name: consumer_group
        in: body
        type: string
        description: The Kafka consumer group name.
      - name: topic
        in: body
        type: string
        description: The Kafka topic name.
      call: kafka-monitor.get-lag
      with:
        consumer_group: '{{consumer_group}}'
        topic: '{{topic}}'
      outputParameters:
      - name: total_lag
        type: number
        mapping: $.consumerGroup.totalLag
      - name: partition_count
        type: number
        mapping: $.consumerGroup.partitionCount
      - name: max_partition_lag
        type: number
        mapping: $.consumerGroup.maxPartitionLag
  consumes:
  - type: http
    namespace: kafka-monitor
    baseUri: https://kafka-monitor.internal.commbank.com.au/api/v1
    authentication:
      type: bearer
      token: $secrets.kafka_monitor_token
    resources:
    - name: consumer-groups
      path: /consumer-groups/{{consumer_group}}/topics/{{topic}}/lag
      inputParameters:
      - name: consumer_group
        in: path
      - name: topic
        in: path
      operations:
      - name: get-lag
        method: GET
Open in Framework → View in Fleet → kafka-consumer-lag-monitor.yml

Retrieves personalized Yello merchant offers available to a customer.

naftiko: '0.5'
info:
  label: CommBank Yello Offer Lookup
  description: Retrieves personalized Yello merchant offers available to a customer.
  tags:
  - loyalty
  - commbank-yello
capability:
  exposes:
  - type: mcp
    namespace: loyalty
    port: 8080
    tools:
    - name: get-data
      description: Retrieves personalized Yello merchant offers available to a customer.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary identifier.
      call: commbank_yello.get-data
      with:
        input_id: '{{input_id}}'
  consumes:
  - type: http
    namespace: commbank_yello
    baseUri: https://api.internal.commbank.com.au/loyalty/v1
    authentication:
      type: bearer
      token: $secrets.commbank_yello_token
    resources:
    - name: data
      path: /{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → commbank-yello-offer-lookup.yml

Manages technology changes by creating ServiceNow change requests, running pre-deployment checks, and notifying teams.

naftiko: '0.5'
info:
  label: Technology Change Management Pipeline
  description: Manages technology changes by creating ServiceNow change requests, running pre-deployment checks, and notifying teams.
  tags:
  - operations
  - servicenow
  - azure-devops
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: technology-change-management
    port: 8080
    tools:
    - name: run-technology-change-management-pipeli
      description: Manages technology changes by creating ServiceNow change requests, running pre-deployment checks, and notifying teams.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: servicenow.create-incident
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: snowflake.execute-query
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: msteams.send-notification
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://commbank.service-now.com/api/now/table
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://commbank.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/messages
      operations:
      - name: send-notification
        method: POST
Open in Framework → View in Fleet → technology-change-management-pipeline.yml

Provisions digital wallet cards by verifying the customer, tokenizing the card, and confirming activation.

naftiko: '0.5'
info:
  label: Digital Wallet Provisioning Pipeline
  description: Provisions digital wallet cards by verifying the customer, tokenizing the card, and confirming activation.
  tags:
  - digital-banking
  - payments
  - tokenization
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: digital-wallet-provisioning
    port: 8080
    tools:
    - name: run-digital-wallet-provisioning-pipelin
      description: Provisions digital wallet cards by verifying the customer, tokenizing the card, and confirming activation.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: corebanking.get-account
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: ml.run-model
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: msteams.send-notification
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: corebanking
    baseUri: https://api.internal.commbank.com.au/core/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: ml
    baseUri: https://ml.internal.commbank.com.au/v1
    authentication:
      type: bearer
      token: $secrets.ml_token
    resources:
    - name: models
      path: /predict
      operations:
      - name: run-model
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/messages
      operations:
      - name: send-notification
        method: POST
Open in Framework → View in Fleet → digital-wallet-provisioning-pipeline.yml

Processes credit card applications by running identity verification, credit assessment, and provisioning.

naftiko: '0.5'
info:
  label: Credit Card Application Pipeline
  description: Processes credit card applications by running identity verification, credit assessment, and provisioning.
  tags:
  - retail-banking
  - credit-cards
  - identity-verification
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: credit-card-application
    port: 8080
    tools:
    - name: run-credit-card-application-pipeline
      description: Processes credit card applications by running identity verification, credit assessment, and provisioning.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: corebanking.get-account
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: ml.run-model
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: msteams.send-notification
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: corebanking
    baseUri: https://api.internal.commbank.com.au/core/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: ml
    baseUri: https://ml.internal.commbank.com.au/v1
    authentication:
      type: bearer
      token: $secrets.ml_token
    resources:
    - name: models
      path: /predict
      operations:
      - name: run-model
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/messages
      operations:
      - name: send-notification
        method: POST
Open in Framework → View in Fleet → credit-card-application-pipeline.yml

Onboards API developers by provisioning sandbox access, creating portal accounts, and sending documentation.

naftiko: '0.5'
info:
  label: API Developer Onboarding Pipeline
  description: Onboards API developers by provisioning sandbox access, creating portal accounts, and sending documentation.
  tags:
  - developer-platform
  - api-gateway
  - apigee
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: api-developer-onboarding
    port: 8080
    tools:
    - name: run-api-developer-onboarding-pipeline
      description: Onboards API developers by provisioning sandbox access, creating portal accounts, and sending documentation.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: corebanking.get-account
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: salesforce.get-account
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: outlook.send-email
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: corebanking
    baseUri: https://api.internal.commbank.com.au/core/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://commbank.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → api-developer-onboarding-pipeline.yml

Processes a New Payments Platform (NPP) real-time payment by validating the PayID, debiting the source account, crediting the destination, and logging the transaction in the audit system.

naftiko: '0.5'
info:
  label: NPP Real-Time Payment Processing Pipeline
  description: Processes a New Payments Platform (NPP) real-time payment by validating the PayID, debiting the source account, crediting the destination, and logging the transaction in the audit system.
  tags:
  - payments
  - npp
  - real-time-payments
  - core-banking
capability:
  exposes:
  - type: mcp
    namespace: real-time-payments
    port: 8080
    tools:
    - name: process-npp-payment
      description: Given source and destination details, process an NPP real-time payment including PayID validation, debit, credit, and audit logging.
      inputParameters:
      - name: source_bsb
        in: body
        type: string
        description: The source account BSB.
      - name: source_account
        in: body
        type: string
        description: The source account number.
      - name: payid
        in: body
        type: string
        description: The destination PayID (email or phone).
      - name: amount
        in: body
        type: number
        description: The payment amount in AUD.
      - name: description
        in: body
        type: string
        description: The payment description.
      steps:
      - name: resolve-payid
        type: call
        call: npp.resolve-payid
        with:
          payid: '{{payid}}'
      - name: debit-source
        type: call
        call: core-banking.debit-account
        with:
          bsb: '{{source_bsb}}'
          account: '{{source_account}}'
          amount: '{{amount}}'
          reference: '{{description}}'
      - name: credit-destination
        type: call
        call: npp.submit-payment
        with:
          destination_bsb: '{{resolve-payid.bsb}}'
          destination_account: '{{resolve-payid.account_number}}'
          amount: '{{amount}}'
          description: '{{description}}'
      - name: log-audit
        type: call
        call: audit.log-transaction
        with:
          transaction_id: '{{credit-destination.transaction_id}}'
          type: NPP_PAYMENT
          amount: '{{amount}}'
          status: '{{credit-destination.status}}'
  consumes:
  - type: http
    namespace: npp
    baseUri: https://api.internal.commbank.com.au/npp/v1
    authentication:
      type: bearer
      token: $secrets.npp_token
    resources:
    - name: payid
      path: /payid/resolve
      operations:
      - name: resolve-payid
        method: POST
    - name: payments
      path: /payments
      operations:
      - name: submit-payment
        method: POST
  - type: http
    namespace: core-banking
    baseUri: https://api.internal.commbank.com.au/core/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: accounts
      path: /accounts/debit
      operations:
      - name: debit-account
        method: POST
  - type: http
    namespace: audit
    baseUri: https://api.internal.commbank.com.au/audit/v1
    authentication:
      type: bearer
      token: $secrets.audit_token
    resources:
    - name: transactions
      path: /log
      operations:
      - name: log-transaction
        method: POST
Open in Framework → View in Fleet → npp-real-time-payment-processing-pipeline.yml

Assesses first home buyer eligibility by checking grant qualification, running serviceability, and generating pre-approval.

naftiko: '0.5'
info:
  label: First Home Buyer Assessment Pipeline
  description: Assesses first home buyer eligibility by checking grant qualification, running serviceability, and generating pre-approval.
  tags:
  - lending
  - first-home-buyer
  - home-loans
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: first-home-buyer-assessment
    port: 8080
    tools:
    - name: run-first-home-buyer-assessment-pipelin
      description: Assesses first home buyer eligibility by checking grant qualification, running serviceability, and generating pre-approval.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: corebanking.get-account
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: ml.run-model
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: msteams.send-notification
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: corebanking
    baseUri: https://api.internal.commbank.com.au/core/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: ml
    baseUri: https://ml.internal.commbank.com.au/v1
    authentication:
      type: bearer
      token: $secrets.ml_token
    resources:
    - name: models
      path: /predict
      operations:
      - name: run-model
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/messages
      operations:
      - name: send-notification
        method: POST
Open in Framework → View in Fleet → first-home-buyer-assessment-pipeline.yml

Assesses SME cash flow lending by pulling accounting data from Xero, running risk models, and generating loan offers.

naftiko: '0.5'
info:
  label: SME Cash Flow Lending Pipeline
  description: Assesses SME cash flow lending by pulling accounting data from Xero, running risk models, and generating loan offers.
  tags:
  - business-banking
  - sme-lending
  - xero
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: sme-cash-flow-lending
    port: 8080
    tools:
    - name: run-sme-cash-flow-lending-pipeline
      description: Assesses SME cash flow lending by pulling accounting data from Xero, running risk models, and generating loan offers.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: xero.get-accounts
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: ml.run-model
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: salesforce.get-account
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: xero
    baseUri: https://api.xero.com/api.xro/2.0
    authentication:
      type: bearer
      token: $secrets.xero_token
    resources:
    - name: accounts
      path: /Accounts
      operations:
      - name: get-accounts
        method: GET
  - type: http
    namespace: ml
    baseUri: https://ml.internal.commbank.com.au/v1
    authentication:
      type: bearer
      token: $secrets.ml_token
    resources:
    - name: models
      path: /predict
      operations:
      - name: run-model
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://commbank.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account
      operations:
      - name: get-account
        method: GET
Open in Framework → View in Fleet → sme-cash-flow-lending-pipeline.yml

Triggers a dataset refresh in Power BI for a given workspace and dataset, returning the refresh status and completion time.

naftiko: '0.5'
info:
  label: Power BI Report Refresh Trigger
  description: Triggers a dataset refresh in Power BI for a given workspace and dataset, returning the refresh status and completion time.
  tags:
  - analytics
  - reporting
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: bi-reporting
    port: 8080
    tools:
    - name: refresh-dataset
      description: Trigger a Power BI dataset refresh. Returns refresh status and estimated completion time.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: The Power BI workspace ID.
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID.
      call: powerbi.refresh-dataset
      with:
        workspace_id: '{{workspace_id}}'
        dataset_id: '{{dataset_id}}'
      outputParameters:
      - name: refresh_id
        type: string
        mapping: $.id
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: workspace_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → power-bi-report-refresh-trigger.yml

Processes data portability requests under CDR by extracting customer data, packaging it, and delivering via the API.

naftiko: '0.5'
info:
  label: Customer Data Portability Pipeline
  description: Processes data portability requests under CDR by extracting customer data, packaging it, and delivering via the API.
  tags:
  - open-banking
  - cdr
  - data-portability
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: customer-data-portability
    port: 8080
    tools:
    - name: run-customer-data-portability-pipeline
      description: Processes data portability requests under CDR by extracting customer data, packaging it, and delivering via the API.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: corebanking.get-account
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: compliance.run-check
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: msteams.send-notification
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: corebanking
    baseUri: https://api.internal.commbank.com.au/core/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: compliance
    baseUri: https://api.internal.commbank.com.au/compliance/v1
    authentication:
      type: bearer
      token: $secrets.compliance_token
    resources:
    - name: checks
      path: /checks
      operations:
      - name: run-check
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/messages
      operations:
      - name: send-notification
        method: POST
Open in Framework → View in Fleet → customer-data-portability-pipeline.yml

Investigates suspected fraud by pulling transaction history, running ML fraud scoring, and creating a case in ServiceNow.

naftiko: '0.5'
info:
  label: Fraud Transaction Investigation Pipeline
  description: Investigates suspected fraud by pulling transaction history, running ML fraud scoring, and creating a case in ServiceNow.
  tags:
  - fraud
  - payments
  - machine-learning
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: fraud-transaction-investigation
    port: 8080
    tools:
    - name: run-fraud-transaction-investigation-pip
      description: Investigates suspected fraud by pulling transaction history, running ML fraud scoring, and creating a case in ServiceNow.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: corebanking.get-account
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: ml.run-model
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: corebanking
    baseUri: https://api.internal.commbank.com.au/core/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: ml
    baseUri: https://ml.internal.commbank.com.au/v1
    authentication:
      type: bearer
      token: $secrets.ml_token
    resources:
    - name: models
      path: /predict
      operations:
      - name: run-model
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://commbank.service-now.com/api/now/table
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → fraud-transaction-investigation-pipeline.yml

Aggregates customer data from Salesforce CRM, core banking, and Workday financial planning to build a unified customer profile for relationship managers.

naftiko: '0.5'
info:
  label: Customer 360 View Builder
  description: Aggregates customer data from Salesforce CRM, core banking, and Workday financial planning to build a unified customer profile for relationship managers.
  tags:
  - customer-360
  - salesforce
  - core-banking
  - crm
capability:
  exposes:
  - type: mcp
    namespace: customer-insights
    port: 8080
    tools:
    - name: build-customer-360
      description: Given a customer ID, aggregate data from Salesforce, core banking, and financial systems into a unified profile.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The core banking customer identifier.
      steps:
      - name: get-crm-profile
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{customer_id}}'
      - name: get-banking-profile
        type: call
        call: core-banking.get-customer
        with:
          customer_id: '{{customer_id}}'
      - name: get-products
        type: call
        call: core-banking.get-customer-products
        with:
          customer_id: '{{customer_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://commbank.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: core-banking
    baseUri: https://api.internal.commbank.com.au/core/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: customers
      path: /customers/{{customer_id}}
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: get-customer
        method: GET
    - name: products
      path: /customers/{{customer_id}}/products
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: get-customer-products
        method: GET
Open in Framework → View in Fleet → customer-360-view-builder.yml

When a customer authorizes data sharing via CDR, records the consent in the consent registry, provisions API access tokens, and notifies the data recipient via webhook.

naftiko: '0.5'
info:
  label: Open Banking Consent Management Pipeline
  description: When a customer authorizes data sharing via CDR, records the consent in the consent registry, provisions API access tokens, and notifies the data recipient via webhook.
  tags:
  - open-banking
  - cdr
  - consent
  - api-management
capability:
  exposes:
  - type: mcp
    namespace: open-banking
    port: 8080
    tools:
    - name: process-cdr-consent
      description: Given a customer ID and data recipient, process a CDR consent authorization including registry update, token provisioning, and recipient notification.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The banking customer identifier.
      - name: data_recipient_id
        in: body
        type: string
        description: The accredited data recipient identifier.
      - name: scopes
        in: body
        type: string
        description: The consented data scopes (e.g., accounts, transactions, balances).
      steps:
      - name: register-consent
        type: call
        call: consent-registry.create-consent
        with:
          customer_id: '{{customer_id}}'
          recipient_id: '{{data_recipient_id}}'
          scopes: '{{scopes}}'
      - name: provision-token
        type: call
        call: token-service.create-token
        with:
          consent_id: '{{register-consent.consent_id}}'
          scopes: '{{scopes}}'
      - name: notify-recipient
        type: call
        call: webhook.send-notification
        with:
          recipient_url: '{{register-consent.callback_url}}'
          consent_id: '{{register-consent.consent_id}}'
          status: active
  consumes:
  - type: http
    namespace: consent-registry
    baseUri: https://api.internal.commbank.com.au/openbanking/v1
    authentication:
      type: bearer
      token: $secrets.openbanking_token
    resources:
    - name: consents
      path: /consents
      operations:
      - name: create-consent
        method: POST
  - type: http
    namespace: token-service
    baseUri: https://api.internal.commbank.com.au/openbanking/v1
    authentication:
      type: bearer
      token: $secrets.openbanking_token
    resources:
    - name: tokens
      path: /tokens
      operations:
      - name: create-token
        method: POST
  - type: http
    namespace: webhook
    baseUri: https://api.internal.commbank.com.au/webhooks/v1
    authentication:
      type: bearer
      token: $secrets.webhook_token
    resources:
    - name: notifications
      path: /send
      operations:
      - name: send-notification
        method: POST
Open in Framework → View in Fleet → open-banking-consent-management-pipeline.yml

Processes international money transfers by screening via sanctions lists, executing via SWIFT, and confirming.

naftiko: '0.5'
info:
  label: International Money Transfer Pipeline
  description: Processes international money transfers by screening via sanctions lists, executing via SWIFT, and confirming.
  tags:
  - payments
  - swift
  - sanctions-screening
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: international-money-transfer
    port: 8080
    tools:
    - name: run-international-money-transfer-pipeli
      description: Processes international money transfers by screening via sanctions lists, executing via SWIFT, and confirming.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: corebanking.get-account
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: compliance.run-check
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: outlook.send-email
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: corebanking
    baseUri: https://api.internal.commbank.com.au/core/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: compliance
    baseUri: https://api.internal.commbank.com.au/compliance/v1
    authentication:
      type: bearer
      token: $secrets.compliance_token
    resources:
    - name: checks
      path: /checks
      operations:
      - name: run-check
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → international-money-transfer-pipeline.yml

Reconciles New Payments Platform transactions by matching against core banking records and notifying treasury.

naftiko: '0.5'
info:
  label: NPP Payment Reconciliation Pipeline
  description: Reconciles New Payments Platform transactions by matching against core banking records and notifying treasury.
  tags:
  - payments
  - npp
  - core-banking
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: npp-payment-reconciliation
    port: 8080
    tools:
    - name: run-npp-payment-reconciliation-pipeline
      description: Reconciles New Payments Platform transactions by matching against core banking records and notifying treasury.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: corebanking.get-account
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: snowflake.execute-query
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: msteams.send-notification
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: corebanking
    baseUri: https://api.internal.commbank.com.au/core/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://commbank.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/messages
      operations:
      - name: send-notification
        method: POST
Open in Framework → View in Fleet → npp-payment-reconciliation-pipeline.yml

Handles customer complaints by logging in Salesforce, assessing severity, and escalating to the relevant team.

naftiko: '0.5'
info:
  label: Customer Complaint Handling Pipeline
  description: Handles customer complaints by logging in Salesforce, assessing severity, and escalating to the relevant team.
  tags:
  - customer-support
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: customer-complaint-handling
    port: 8080
    tools:
    - name: run-customer-complaint-handling-pipelin
      description: Handles customer complaints by logging in Salesforce, assessing severity, and escalating to the relevant team.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: salesforce.get-account
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: servicenow.create-incident
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: msteams.send-notification
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://commbank.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://commbank.service-now.com/api/now/table
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /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/messages
      operations:
      - name: send-notification
        method: POST
Open in Framework → View in Fleet → customer-complaint-handling-pipeline.yml

Onboards new merchants by verifying ABN, provisioning POS terminals, and creating accounts with notification.

naftiko: '0.5'
info:
  label: Merchant Onboarding Pipeline
  description: Onboards new merchants by verifying ABN, provisioning POS terminals, and creating accounts with notification.
  tags:
  - merchant-services
  - albert-pos
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: merchant-onboarding
    port: 8080
    tools:
    - name: run-merchant-onboarding-pipeline
      description: Onboards new merchants by verifying ABN, provisioning POS terminals, and creating accounts with notification.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: salesforce.get-account
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: corebanking.get-account
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: msteams.send-notification
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://commbank.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: corebanking
    baseUri: https://api.internal.commbank.com.au/core/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/messages
      operations:
      - name: send-notification
        method: POST
Open in Framework → View in Fleet → merchant-onboarding-pipeline.yml

When a new business banking lead is created in Salesforce, enriches it with Bloomberg Intelligence firmographic data, scores the lead, and assigns to the appropriate relationship manager.

naftiko: '0.5'
info:
  label: Salesforce Lead Qualification Pipeline
  description: When a new business banking lead is created in Salesforce, enriches it with Bloomberg Intelligence firmographic data, scores the lead, and assigns to the appropriate relationship manager.
  tags:
  - sales
  - crm
  - salesforce
  - bloomberg-intelligence
  - lead-management
capability:
  exposes:
  - type: mcp
    namespace: sales-ops
    port: 8080
    tools:
    - name: qualify-business-lead
      description: Given a Salesforce lead ID, enrich with firmographic data from Bloomberg, score the lead, and assign to a RM.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: The Salesforce lead ID.
      steps:
      - name: get-lead
        type: call
        call: salesforce.get-lead
        with:
          lead_id: '{{lead_id}}'
      - name: get-firmographics
        type: call
        call: bloomberg.get-company-profile
        with:
          company_name: '{{get-lead.Company}}'
      - name: update-lead
        type: call
        call: salesforce.update-lead
        with:
          lead_id: '{{lead_id}}'
          annual_revenue: '{{get-firmographics.revenue}}'
          industry: '{{get-firmographics.industry}}'
          employee_count: '{{get-firmographics.employee_count}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://commbank.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: get-lead
        method: GET
      - name: update-lead
        method: PATCH
  - type: http
    namespace: bloomberg
    baseUri: https://bsapi.bloomberg.com/eap/catalogs/bbg/datasets
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: company-profiles
      path: /company/{{company_name}}
      inputParameters:
      - name: company_name
        in: path
      operations:
      - name: get-company-profile
        method: GET
Open in Framework → View in Fleet → salesforce-lead-qualification-pipeline.yml

When a wealth portfolio drifts beyond threshold, pulls current allocations from Bloomberg AIM, calculates rebalance trades, and submits orders to the trading system while notifying the portfolio manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: Wealth Management Portfolio Rebalance Pipeline
  description: When a wealth portfolio drifts beyond threshold, pulls current allocations from Bloomberg AIM, calculates rebalance trades, and submits orders to the trading system while notifying the portfolio manager via Microsoft Teams.
  tags:
  - wealth-management
  - portfolio
  - bloomberg-aim
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: wealth-management
    port: 8080
    tools:
    - name: rebalance-portfolio
      description: Given a portfolio ID and drift threshold, calculate and submit rebalancing trades and notify the portfolio manager.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The Bloomberg AIM portfolio identifier.
      - name: drift_threshold
        in: body
        type: number
        description: The maximum allowable drift percentage before rebalancing.
      steps:
      - name: get-allocations
        type: call
        call: bloomberg-aim.get-portfolio
        with:
          portfolio_id: '{{portfolio_id}}'
      - name: calculate-trades
        type: call
        call: rebalance-engine.calculate
        with:
          current_allocations: '{{get-allocations.positions}}'
          target_allocations: '{{get-allocations.model}}'
          threshold: '{{drift_threshold}}'
      - name: submit-orders
        type: call
        call: bloomberg-aim.submit-orders
        with:
          portfolio_id: '{{portfolio_id}}'
          orders: '{{calculate-trades.trade_list}}'
      - name: notify-pm
        type: call
        call: msteams.send-message
        with:
          channel_id: wealth-trading
          text: Portfolio {{portfolio_id}} rebalanced. {{calculate-trades.trade_count}} trades submitted. Max drift was {{calculate-trades.max_drift}}%.
  consumes:
  - type: http
    namespace: bloomberg-aim
    baseUri: https://bsapi.bloomberg.com/aim/api/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_aim_token
    resources:
    - name: portfolios
      path: /portfolios/{{portfolio_id}}
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: get-portfolio
        method: GET
    - name: orders
      path: /orders
      operations:
      - name: submit-orders
        method: POST
  - type: http
    namespace: rebalance-engine
    baseUri: https://api.internal.commbank.com.au/wealth/v1
    authentication:
      type: bearer
      token: $secrets.wealth_token
    resources:
    - name: rebalance
      path: /rebalance/calculate
      operations:
      - name: calculate
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → wealth-management-portfolio-rebalance-pipeline.yml

Assesses business lending by pulling financials from Xero, running credit scoring, and routing for approval via Salesforce.

naftiko: '0.5'
info:
  label: Business Lending Assessment Pipeline
  description: Assesses business lending by pulling financials from Xero, running credit scoring, and routing for approval via Salesforce.
  tags:
  - lending
  - business-banking
  - xero
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: business-lending-assessment
    port: 8080
    tools:
    - name: run-business-lending-assessment-pipelin
      description: Assesses business lending by pulling financials from Xero, running credit scoring, and routing for approval via Salesforce.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      - name: scope
        in: body
        type: string
        description: The processing scope.
      steps:
      - name: fetch-data
        type: call
        call: xero.get-accounts
        with:
          input_id: '{{input_id}}'
      - name: process-data
        type: call
        call: ml.run-model
        with:
          data: '{{fetch-data.result}}'
      - name: deliver-results
        type: call
        call: salesforce.get-account
        with:
          data: '{{process-data.result}}'
  consumes:
  - type: http
    namespace: xero
    baseUri: https://api.xero.com/api.xro/2.0
    authentication:
      type: bearer
      token: $secrets.xero_token
    resources:
    - name: accounts
      path: /Accounts
      operations:
      - name: get-accounts
        method: GET
  - type: http
    namespace: ml
    baseUri: https://ml.internal.commbank.com.au/v1
    authentication:
      type: bearer
      token: $secrets.ml_token
    resources:
    - name: models
      path: /predict
      operations:
      - name: run-model
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://commbank.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account
      operations:
      - name: get-account
        method: GET
Open in Framework → View in Fleet → business-lending-assessment-pipeline.yml

Executes the Snowflake regulatory data preparation procedure for daily compliance reporting and notifies the regulatory reporting team in Microsoft Teams when the data is ready.

naftiko: '0.5'
info:
  label: Snowflake Regulatory Reporting Data Load
  description: Executes the Snowflake regulatory data preparation procedure for daily compliance reporting and notifies the regulatory reporting team in Microsoft Teams when the data is ready.
  tags:
  - compliance
  - regulatory
  - snowflake
  - reporting
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: regulatory-reporting
    port: 8080
    tools:
    - name: prepare-regulatory-report-data
      description: Given a reporting date and report type, execute the Snowflake regulatory data preparation procedure and notify the regulatory reporting Microsoft Teams channel when ready for submission.
      inputParameters:
      - name: reporting_date
        in: body
        type: string
        description: ISO 8601 date for the regulatory report.
      - name: report_type
        in: body
        type: string
        description: Type of regulatory report (e.g. COREP, FINREP, LCR).
      steps:
      - name: prepare-data
        type: call
        call: snowflake.execute-query
        with:
          statement: CALL prepare_regulatory_data('{{reporting_date}}', '{{report_type}}')
      - name: notify-reg-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_regulatory_team_id
          channel_id: $secrets.teams_regulatory_channel_id
          text: 'Regulatory data ready: {{report_type}} for {{reporting_date}} | Status: {{prepare-data.status}}. Data is available for review and submission.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://deutschebank.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → snowflake-regulatory-reporting-data-load.yml

Runs data quality checks on core Snowflake risk and financial data tables and creates Jira bugs when tables fail minimum row count or completeness thresholds.

naftiko: '0.5'
info:
  label: Snowflake Data Quality Validation
  description: Runs data quality checks on core Snowflake risk and financial data tables and creates Jira bugs when tables fail minimum row count or completeness thresholds.
  tags:
  - data
  - analytics
  - snowflake
  - jira
  - data-quality
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: validate-data-table
      description: Given a Snowflake table name, expected minimum row count, and check date, execute a data quality validation and open a Jira bug if the table fails the threshold.
      inputParameters:
      - name: table_name
        in: body
        type: string
        description: Fully qualified Snowflake table name to validate.
      - name: expected_min_rows
        in: body
        type: integer
        description: Minimum expected row count for the check to pass.
      - name: check_date
        in: body
        type: string
        description: ISO 8601 date for the data partition being validated.
      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 {{check_date}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://deutschebank.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://deutschebank.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → snowflake-data-quality-validation.yml

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

naftiko: '0.5'
info:
  label: GitHub DevOps Pipeline Failure Handler
  description: When a GitHub Actions pipeline fails on a core banking platform repository, creates a Datadog event and opens a Jira bug for the engineering team to 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 on a banking platform repository, create a Datadog event and open a Jira bug with full failure context for the 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 GitHub Actions 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: ENG
          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://deutschebank.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → github-devops-pipeline-failure-handler.yml

When Datadog detects a P1 infrastructure failure, 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 P1 Response
  description: When Datadog detects a P1 infrastructure failure, 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-infrastructure-incident
      description: Given a Datadog P1 alert, create a ServiceNow critical incident with full context, page the on-call SRE team 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 message 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-sre
        type: call
        call: pagerduty.create-incident
        with:
          title: 'P1 Infrastructure: {{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-sre.html_url}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://deutschebank.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_api_key
      placement: header
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → it-infrastructure-incident-p1-response.yml

Retrieves the current health status and error rate for a Deutsche Bank service from Datadog APM.

naftiko: '0.5'
info:
  label: Datadog Service Health Lookup
  description: Retrieves the current health status and error rate for a Deutsche Bank service from Datadog APM.
  tags:
  - monitoring
  - datadog
  - operations
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: observability-lookup
    port: 8080
    tools:
    - name: get-service-health
      description: Given a Datadog service name, return the current health status and error rate.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The Datadog APM service name.
      call: datadog.get-service-summary
      with:
        service: '{{service_name}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.data.attributes.status
      - name: error_rate
        type: number
        mapping: $.data.attributes.error_rate
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: services
      path: /services/{{service}}
      inputParameters:
      - name: service
        in: path
      operations:
      - name: get-service-summary
        method: GET
Open in Framework → View in Fleet → datadog-service-health-lookup.yml

Retrieves a Salesforce client account record and returns key relationship health indicators for use by relationship managers in quarterly reviews and client planning.

naftiko: '0.5'
info:
  label: Salesforce Client Account Health Review
  description: Retrieves a Salesforce client account record and returns key relationship health indicators for use by relationship managers in quarterly reviews and client planning.
  tags:
  - sales
  - crm
  - salesforce
  - relationship-management
capability:
  exposes:
  - type: mcp
    namespace: rm-tools
    port: 8080
    tools:
    - name: get-client-account-health
      description: Given a Salesforce account ID, retrieve the client's health indicators including last contact date, open opportunities, and contract status. Use for quarterly relationship reviews and client planning sessions.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Salesforce account ID for the banking 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://deutschebank.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
Open in Framework → View in Fleet → salesforce-client-account-health-review.yml

Looks up a SAP purchase order by number and returns the header status, vendor, and total value for procurement and finance operations.

naftiko: '0.5'
info:
  label: SAP S/4HANA Purchase Order Status Lookup
  description: Looks up a SAP purchase order by number and returns the header status, vendor, and total value for procurement and finance operations.
  tags:
  - finance
  - procurement
  - sap
  - erp
capability:
  exposes:
  - type: mcp
    namespace: erp-finance
    port: 8080
    tools:
    - name: get-purchase-order-status
      description: Given a SAP purchase order number, retrieve the PO header status, vendor name, total amount, and currency from SAP S/4HANA. Use for procurement audits and payment processing verification.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: SAP purchase order number to look up.
      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_amount
        type: string
        mapping: $.d.TotalAmount
      - name: currency
        type: string
        mapping: $.d.TransactionCurrency
  consumes:
  - type: http
    namespace: sap
    baseUri: https://deutschebank-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: purchase-orders
      path: /A_PurchaseOrder('{{po_number}}')
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-po
        method: GET
        outputRawFormat: xml
Open in Framework → View in Fleet → sap-s-4hana-purchase-order-status-lookup.yml

When a Salesforce deal opportunity reaches Closed Won, creates a corresponding SAP project code and notifies the deal team in Microsoft Teams to begin project setup.

naftiko: '0.5'
info:
  label: Salesforce Opportunity to SAP Project Sync
  description: When a Salesforce deal opportunity reaches Closed Won, creates a corresponding SAP project code and notifies the deal team in Microsoft Teams to begin project setup.
  tags:
  - sales
  - crm
  - salesforce
  - sap
  - erp
capability:
  exposes:
  - type: mcp
    namespace: deal-management
    port: 8080
    tools:
    - name: activate-won-deal-project
      description: Given a Salesforce opportunity ID that reached Closed Won, create a SAP project code for the engagement and notify the deal team in Microsoft Teams to initiate project setup.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID for the won deal.
      - name: deal_team_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID for the deal team.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: create-sap-project
        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-sap-project.project_id}}'
      - name: notify-deal-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_deals_team_id
          channel_id: '{{deal_team_channel_id}}'
          text: 'Deal closed: {{get-opportunity.name}} for {{get-opportunity.account_name}} | SAP project: {{create-sap-project.project_id}}. Project setup can begin.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://deutschebank.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://deutschebank-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://deutschebank.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: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → salesforce-opportunity-to-sap-project-sync.yml

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

naftiko: '0.5'
info:
  label: Datadog Trading Platform Health Monitor
  description: Retrieves the current status of all critical trading platform monitors from Datadog and returns a structured health summary for the technology operations team.
  tags:
  - observability
  - monitoring
  - datadog
  - trading
  - operations
capability:
  exposes:
  - type: mcp
    namespace: trading-health
    port: 8080
    tools:
    - name: get-trading-platform-health
      description: Given a Datadog service tag for a trading system, retrieve all monitor statuses and return a structured health report. Use before trading hours and during incident investigations.
      inputParameters:
      - name: service_tag
        in: body
        type: string
        description: Datadog service tag to filter monitors (e.g. service:trading-engine or env:production).
      call: datadog.get-monitors
      with:
        monitor_tags: '{{service_tag}}'
      outputParameters:
      - name: monitors
        type: array
        mapping: $.monitors
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor
      inputParameters:
      - name: monitor_tags
        in: query
      operations:
      - name: get-monitors
        method: GET
Open in Framework → View in Fleet → datadog-trading-platform-health-monitor.yml

Runs a Snowflake procedure to compute daily market risk and credit exposure aggregates and stores the results for risk reporting and regulatory compliance.

naftiko: '0.5'
info:
  label: Snowflake Risk Analytics Daily Snapshot
  description: Runs a Snowflake procedure to compute daily market risk and credit exposure aggregates and stores the results for risk reporting and regulatory compliance.
  tags:
  - risk
  - analytics
  - snowflake
  - reporting
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: risk-analytics
    port: 8080
    tools:
    - name: compute-daily-risk-snapshot
      description: Given a reporting date, execute the Snowflake risk aggregation procedure to compute VaR, credit exposure, and counterparty risk metrics, then store the results for risk reporting and regulatory submissions.
      inputParameters:
      - name: reporting_date
        in: body
        type: string
        description: ISO 8601 date for the risk analytics snapshot.
      call: snowflake.execute-query
      with:
        statement: CALL compute_daily_risk_aggregates('{{reporting_date}}')
      outputParameters:
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://deutschebank.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → snowflake-risk-analytics-daily-snapshot.yml

Retrieves the health status of a specified Azure resource in Deutsche Bank cloud infrastructure.

naftiko: '0.5'
info:
  label: Azure Resource Health Lookup
  description: Retrieves the health status of a specified Azure resource in Deutsche Bank cloud infrastructure.
  tags:
  - cloud
  - azure
  - monitoring
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: cloud-health
    port: 8080
    tools:
    - name: get-resource-health
      description: Given an Azure resource ID, return the availability status and summary.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: The full Azure resource ID.
      call: azure.get-resource-health
      with:
        resource_id: '{{resource_id}}'
      outputParameters:
      - name: availability_state
        type: string
        mapping: $.properties.availabilityState
      - name: summary
        type: string
        mapping: $.properties.summary
  consumes:
  - type: http
    namespace: azure
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: resource-health
      path: /{{resource_id}}/providers/Microsoft.ResourceHealth/availabilityStatuses/current?api-version=2023-07-01
      inputParameters:
      - name: resource_id
        in: path
      operations:
      - name: get-resource-health
        method: GET
Open in Framework → View in Fleet → azure-resource-health-lookup.yml

When an employee is terminated in Workday, disables their Microsoft 365 account, creates a ServiceNow offboarding task, and notifies IT security in Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Employee Offboarding Access Revocation
  description: When an employee is terminated in Workday, disables their Microsoft 365 account, creates a ServiceNow offboarding task, and notifies IT security in Microsoft Teams.
  tags:
  - hr
  - offboarding
  - workday
  - microsoft-365
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: revoke-employee-access
      description: Given a Workday employee ID and Microsoft 365 UPN, disable the M365 account, create a ServiceNow offboarding task for full access revocation, and notify IT security in 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 UPN 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: 'IT 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://deutschebank.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → workday-employee-offboarding-access-revocation.yml

Submits a ServiceNow change request for planned changes to trading or risk systems, assigns it to the CAB, and notifies the technology operations Microsoft Teams channel.

naftiko: '0.5'
info:
  label: ServiceNow IT Change Request for Trading Systems
  description: Submits a ServiceNow change request for planned changes to trading or risk systems, assigns it to the CAB, and notifies the technology operations Microsoft Teams channel.
  tags:
  - itsm
  - change-management
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: change-management
    port: 8080
    tools:
    - name: submit-trading-system-change
      description: Given a change description, risk level, and planned window for a trading or risk system, create a ServiceNow change request for CAB review and notify the technology operations Microsoft Teams channel.
      inputParameters:
      - name: short_description
        in: body
        type: string
        description: Brief description of the planned system 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.
      - name: systems_affected
        in: body
        type: string
        description: Comma-separated list of trading or risk systems affected.
      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-tech-ops
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_tech_ops_team_id
          channel_id: $secrets.teams_cab_channel_id
          text: 'Change request: {{short_description}} | Systems: {{systems_affected}} | Window: {{planned_start}} to {{planned_end}} | SNOW: {{create-cr.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://deutschebank.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-requests
      path: /table/change_request
      operations:
      - name: create-change-request
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → servicenow-it-change-request-for-trading-systems.yml

Retrieves real-time market data from Refinitiv Eikon for a given security instrument at Deutsche Bank.

naftiko: '0.5'
info:
  label: Refinitiv Market Data Lookup
  description: Retrieves real-time market data from Refinitiv Eikon for a given security instrument at Deutsche Bank.
  tags:
  - trading
  - market-data
  - refinitiv
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: market-data-refinitiv
    port: 8080
    tools:
    - name: get-refinitiv-price
      description: Given a Refinitiv instrument code, return the last price and bid/ask spread.
      inputParameters:
      - name: ric_code
        in: body
        type: string
        description: The Refinitiv Instrument Code (RIC).
      call: refinitiv.get-pricing
      with:
        ric: '{{ric_code}}'
      outputParameters:
      - name: last_price
        type: number
        mapping: $.data[0].fields.TRDPRC_1
      - name: bid
        type: number
        mapping: $.data[0].fields.BID
      - name: ask
        type: number
        mapping: $.data[0].fields.ASK
  consumes:
  - type: http
    namespace: refinitiv
    baseUri: https://api.refinitiv.com/data/pricing/v1
    authentication:
      type: bearer
      token: $secrets.refinitiv_token
    resources:
    - name: pricing
      path: /{{ric}}
      inputParameters:
      - name: ric
        in: path
      operations:
      - name: get-pricing
        method: GET
Open in Framework → View in Fleet → refinitiv-market-data-lookup.yml

Retrieves a PagerDuty incident by ID for Deutsche Bank operations.

naftiko: '0.5'
info:
  label: PagerDuty Incident Lookup
  description: Retrieves a PagerDuty incident by ID for Deutsche Bank operations.
  tags:
  - operations
  - pagerduty
  - itsm
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: ops-lookup
    port: 8080
    tools:
    - name: get-pagerduty-incident
      description: Given a PagerDuty incident ID, return the title, urgency, and status.
      inputParameters:
      - name: incident_id
        in: body
        type: string
        description: The PagerDuty incident ID.
      call: pagerduty.get-incident
      with:
        incident_id: '{{incident_id}}'
      outputParameters:
      - name: title
        type: string
        mapping: $.incident.title
      - name: urgency
        type: string
        mapping: $.incident.urgency
      - name: status
        type: string
        mapping: $.incident.status
  consumes:
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incidents
      path: /incidents/{{incident_id}}
      inputParameters:
      - name: incident_id
        in: path
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → pagerduty-incident-lookup.yml

When a new hire is created in Workday, provisions Microsoft 365 access, opens a ServiceNow onboarding ticket, and sends a Microsoft Teams welcome message to the new hire's division team.

naftiko: '0.5'
info:
  label: New Employee Onboarding Orchestration
  description: When a new hire is created in Workday, provisions Microsoft 365 access, opens a ServiceNow onboarding ticket, and sends a Microsoft Teams welcome message to the new hire's division team.
  tags:
  - hr
  - onboarding
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-onboarding
    port: 8080
    tools:
    - name: trigger-employee-onboarding
      description: Given a Workday employee ID and start date, provision Microsoft 365 access, create a ServiceNow onboarding ticket, and send a Teams welcome message to the new hire's division 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: division_team_id
        in: body
        type: string
        description: Microsoft Teams team ID for the new hire's banking division.
      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: create-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: '{{division_team_id}}'
          channel_id: $secrets.teams_general_channel_id
          text: 'Welcome to Deutsche Bank, {{get-employee.first_name}}! IT onboarding ticket: {{create-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://deutschebank.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → new-employee-onboarding-orchestration.yml

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

naftiko: '0.5'
info:
  label: ServiceNow SLA Breach Escalation
  description: Monitors ServiceNow tickets for SLA breaches and escalates overdue tickets by updating priority and notifying the IT service delivery manager in Microsoft Teams.
  tags:
  - itsm
  - sla
  - servicenow
  - microsoft-teams
  - escalation
capability:
  exposes:
  - type: mcp
    namespace: sla-management
    port: 8080
    tools:
    - name: escalate-sla-breach
      description: Given a ServiceNow incident number that has breached its SLA, update the ticket priority, reassign it, 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.
      - 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. Escalated to IT Service Delivery.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://deutschebank.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident/{{number}}
      inputParameters:
      - name: number
        in: path
      operations:
      - name: update-incident
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → servicenow-sla-breach-escalation.yml

Queries Jira for sprint progress across platform engineering projects and posts a weekly digest to the engineering Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Jira Platform Engineering Sprint Digest
  description: Queries Jira for sprint progress across platform engineering projects and posts a weekly digest to the engineering Microsoft Teams channel.
  tags:
  - devops
  - engineering
  - jira
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: eng-reporting
    port: 8080
    tools:
    - name: digest-engineering-sprint
      description: Given a Jira board ID and sprint ID, retrieve sprint issue counts and velocity metrics, then post a weekly progress digest to the platform engineering Microsoft Teams channel.
      inputParameters:
      - name: board_id
        in: body
        type: string
        description: Jira board ID for the engineering team.
      - name: sprint_id
        in: body
        type: string
        description: Jira sprint ID to report on.
      steps:
      - name: get-sprint-issues
        type: call
        call: jira.get-sprint-issues
        with:
          board_id: '{{board_id}}'
          sprint_id: '{{sprint_id}}'
      - name: post-digest
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_engineering_team_id
          channel_id: $secrets.teams_engineering_channel_id
          text: 'Sprint digest — board {{board_id}} sprint {{sprint_id}}: {{get-sprint-issues.total}} total issues | {{get-sprint-issues.done}} done | {{get-sprint-issues.in_progress}} in progress'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://deutschebank.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: sprint-issues
      path: /board/{{board_id}}/sprint/{{sprint_id}}/issue
      inputParameters:
      - name: board_id
        in: path
      - name: sprint_id
        in: path
      operations:
      - name: get-sprint-issues
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → jira-platform-engineering-sprint-digest.yml

Retrieves purchase order details from SAP S/4HANA for Deutsche Bank procurement teams.

naftiko: '0.5'
info:
  label: SAP Purchase Order Lookup
  description: Retrieves purchase order details from SAP S/4HANA for Deutsche Bank procurement teams.
  tags:
  - finance
  - procurement
  - sap
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: erp-procurement
    port: 8080
    tools:
    - name: get-purchase-order
      description: Given a SAP purchase order number, return the PO status, vendor, and total amount.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: SAP purchase order number.
      call: sap-erp.get-po
      with:
        po_number: '{{po_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.d.OverallStatus
      - name: vendor
        type: string
        mapping: $.d.Supplier.CompanyName
  consumes:
  - type: http
    namespace: sap-erp
    baseUri: https://db-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: purchase-orders
      path: /A_PurchaseOrder('{{po_number}}')
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-po
        method: GET
Open in Framework → View in Fleet → sap-purchase-order-lookup.yml

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

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

Retrieves the current run status for a Terraform Cloud workspace used in Deutsche Bank infrastructure provisioning.

naftiko: '0.5'
info:
  label: Terraform Workspace Status Lookup
  description: Retrieves the current run status for a Terraform Cloud workspace used in Deutsche Bank infrastructure provisioning.
  tags:
  - cloud
  - infrastructure
  - terraform
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: infra-lookup
    port: 8080
    tools:
    - name: get-workspace-status
      description: Given a Terraform Cloud workspace name, return the current run status.
      inputParameters:
      - name: workspace_name
        in: body
        type: string
        description: The Terraform Cloud workspace name.
      call: terraform.get-workspace
      with:
        workspace_name: '{{workspace_name}}'
      outputParameters:
      - name: current_run_status
        type: string
        mapping: $.data.attributes.current-run.status
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: workspaces
      path: /organizations/deutsche-bank/workspaces/{{workspace_name}}
      inputParameters:
      - name: workspace_name
        in: path
      operations:
      - name: get-workspace
        method: GET
Open in Framework → View in Fleet → terraform-workspace-status-lookup.yml

Retrieves vendor master data from SAP by vendor number for Deutsche Bank procurement.

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

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

naftiko: '0.5'
info:
  label: Microsoft 365 Access Provisioning on Role Change
  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 permission changes.
  tags:
  - hr
  - access-management
  - workday
  - microsoft-365
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: access-management
    port: 8080
    tools:
    - name: reprovision-access-on-role-change
      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://deutschebank.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → microsoft-365-access-provisioning-on-role-change.yml

Retrieves a Zendesk support ticket by ID for Deutsche Bank customer service.

naftiko: '0.5'
info:
  label: Zendesk Ticket Lookup
  description: Retrieves a Zendesk support ticket by ID for Deutsche Bank customer service.
  tags:
  - support
  - zendesk
  - customer-service
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: support-lookup
    port: 8080
    tools:
    - name: get-ticket
      description: Given a Zendesk ticket ID, return the subject, status, and priority.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: The Zendesk ticket ID.
      call: zendesk.get-ticket
      with:
        ticket_id: '{{ticket_id}}'
      outputParameters:
      - name: subject
        type: string
        mapping: $.ticket.subject
      - name: status
        type: string
        mapping: $.ticket.status
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://deutschebank.zendesk.com/api/v2
    authentication:
      type: basic
      username: $secrets.zendesk_user
      password: $secrets.zendesk_token
    resources:
    - name: tickets
      path: /tickets/{{ticket_id}}
      inputParameters:
      - name: ticket_id
        in: path
      operations:
      - name: get-ticket
        method: GET
Open in Framework → View in Fleet → zendesk-ticket-lookup.yml

Retrieves the currently on-call engineer for a Deutsche Bank 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 Deutsche Bank 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 for that service. Use at the beginning of incident response to identify who to engage immediately.
      inputParameters:
      - name: schedule_id
        in: body
        type: string
        description: PagerDuty schedule ID for the service's on-call rotation.
      call: pagerduty.get-oncall
      with:
        schedule_id: '{{schedule_id}}'
      outputParameters:
      - name: user_name
        type: string
        mapping: $.oncalls[0].user.name
      - name: user_email
        type: string
        mapping: $.oncalls[0].user.email
  consumes:
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_api_key
      placement: header
    resources:
    - name: oncalls
      path: /oncalls
      inputParameters:
      - name: schedule_id
        in: query
      operations:
      - name: get-oncall
        method: GET
Open in Framework → View in Fleet → pagerduty-on-call-roster-lookup.yml

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

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 begin sourcing.
  tags:
  - hr
  - recruiting
  - workday
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: talent-acquisition
    port: 8080
    tools:
    - name: activate-recruiting-position
      description: Given a Workday position requisition ID, job title, and division, 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: division
        in: body
        type: string
        description: Deutsche Bank division requesting the headcount.
      steps:
      - name: create-recruiting-task
        type: call
        call: jira.create-issue
        with:
          project_key: HR
          issuetype: Task
          summary: 'Recruiting: {{job_title}} — {{division}}'
          description: Position requisition {{requisition_id}} approved. Begin sourcing for {{job_title}} in {{division}}.
      - 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 {{division}} | Jira: {{create-recruiting-task.key}} | Workday req: {{requisition_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://deutschebank.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → workday-position-approval-for-recruiting.yml

Retrieves the current balance for a specified SAP general ledger account and company code at Deutsche Bank.

naftiko: '0.5'
info:
  label: SAP General Ledger Balance Lookup
  description: Retrieves the current balance for a specified SAP general ledger account and company code at Deutsche Bank.
  tags:
  - finance
  - erp
  - sap
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: erp-finance
    port: 8080
    tools:
    - name: get-gl-balance
      description: Given an SAP GL account number and company code, return the current period balance and currency.
      inputParameters:
      - name: gl_account
        in: body
        type: string
        description: The SAP general ledger account number.
      - name: company_code
        in: body
        type: string
        description: The SAP company code.
      call: sap-erp.get-gl-balance
      with:
        gl_account: '{{gl_account}}'
        company_code: '{{company_code}}'
      outputParameters:
      - name: balance
        type: string
        mapping: $.d.Balance
      - name: currency
        type: string
        mapping: $.d.Currency
  consumes:
  - type: http
    namespace: sap-erp
    baseUri: https://db-s4.sap.com/sap/opu/odata/sap/API_GLACCOUNTBALANCE
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: gl-balances
      path: /GLAccountBalanceSet(GLAccount='{{gl_account}}',CompanyCode='{{company_code}}')
      inputParameters:
      - name: gl_account
        in: path
      - name: company_code
        in: path
      operations:
      - name: get-gl-balance
        method: GET
Open in Framework → View in Fleet → sap-general-ledger-balance-lookup.yml

Enriches a Salesforce client account with LinkedIn executive profile data to give relationship managers context before client meetings and business development calls.

naftiko: '0.5'
info:
  label: Salesforce Client Relationship Enrichment
  description: Enriches a Salesforce client account with LinkedIn executive profile data to give relationship managers context before client meetings and business development calls.
  tags:
  - sales
  - crm
  - salesforce
  - linkedin
  - relationship-management
capability:
  exposes:
  - type: mcp
    namespace: client-intelligence
    port: 8080
    tools:
    - name: enrich-client-from-linkedin
      description: Given a Salesforce contact ID and LinkedIn member URN for a client executive, retrieve the LinkedIn profile and update the Salesforce contact with current title, industry, and profile URL for relationship managers.
      inputParameters:
      - name: contact_id
        in: body
        type: string
        description: Salesforce contact ID for the client executive.
      - name: linkedin_member_urn
        in: body
        type: string
        description: LinkedIn member URN for the client executive.
      steps:
      - name: get-linkedin-profile
        type: call
        call: linkedin.get-profile
        with:
          member_urn: '{{linkedin_member_urn}}'
      - name: update-contact
        type: call
        call: salesforce.update-contact
        with:
          contact_id: '{{contact_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://deutschebank.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
Open in Framework → View in Fleet → salesforce-client-relationship-enrichment.yml

Retrieves a Confluence page by ID for Deutsche Bank knowledge management.

naftiko: '0.5'
info:
  label: Confluence Page Lookup
  description: Retrieves a Confluence page by ID for Deutsche Bank knowledge management.
  tags:
  - knowledge
  - confluence
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: knowledge-lookup
    port: 8080
    tools:
    - name: get-confluence-page
      description: Given a Confluence page ID, return the page title, body content, and last modified date.
      inputParameters:
      - name: page_id
        in: body
        type: string
        description: The Confluence page ID.
      call: confluence.get-page
      with:
        page_id: '{{page_id}}'
      outputParameters:
      - name: title
        type: string
        mapping: $.title
      - name: body
        type: string
        mapping: $.body.storage.value
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://deutschebank.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: pages
      path: /content/{{page_id}}?expand=body.storage,version
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: get-page
        method: GET
Open in Framework → View in Fleet → confluence-page-lookup.yml

Retrieves the last refresh status for a Power BI dataset used in Deutsche Bank financial reporting.

naftiko: '0.5'
info:
  label: Power BI Dataset Refresh Status Lookup
  description: Retrieves the last refresh status for a Power BI dataset used in Deutsche Bank financial reporting.
  tags:
  - analytics
  - power-bi
  - reporting
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: bi-lookup
    port: 8080
    tools:
    - name: get-dataset-refresh-status
      description: Given a Power BI workspace and dataset ID, return the last refresh status.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: The Power BI workspace ID.
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID.
      call: powerbi.get-refresh-history
      with:
        group_id: '{{workspace_id}}'
        dataset_id: '{{dataset_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.value[0].status
      - name: end_time
        type: string
        mapping: $.value[0].endTime
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: refresh-history
      path: /groups/{{group_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: group_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: get-refresh-history
        method: GET
Open in Framework → View in Fleet → power-bi-dataset-refresh-status-lookup.yml

Retrieves metadata for a Deutsche Bank GitHub repository including default branch, open issues count, and last push date.

naftiko: '0.5'
info:
  label: GitHub Repository Lookup
  description: Retrieves metadata for a Deutsche Bank GitHub repository including default branch, open issues count, and last push date.
  tags:
  - devops
  - github
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: devops-lookup
    port: 8080
    tools:
    - name: get-repository
      description: Given a GitHub repository name, return the default branch and open issues count.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: The GitHub repository name.
      call: github.get-repo
      with:
        repo: '{{repo_name}}'
      outputParameters:
      - name: default_branch
        type: string
        mapping: $.default_branch
      - name: open_issues
        type: number
        mapping: $.open_issues_count
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: repos
      path: /repos/{{repo}}
      inputParameters:
      - name: repo
        in: path
      operations:
      - name: get-repo
        method: GET
Open in Framework → View in Fleet → github-repository-lookup.yml

Generates a weekly digest of the Salesforce corporate banking pipeline by deal stage and sends the summary to the global markets Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Salesforce Pipeline Revenue Forecast Digest
  description: Generates a weekly digest of the Salesforce corporate banking pipeline by deal stage and sends the summary to the global markets Microsoft Teams channel.
  tags:
  - sales
  - crm
  - salesforce
  - reporting
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pipeline-reporting
    port: 8080
    tools:
    - name: digest-pipeline-forecast
      description: Given a Salesforce division filter and reporting date, query the open opportunity pipeline by stage and post a weekly revenue forecast digest to the global markets Microsoft Teams channel.
      inputParameters:
      - name: division
        in: body
        type: string
        description: Deutsche Bank division to filter opportunities (e.g. Corporate Bank, Investment Bank).
      - 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 Division__c = '{{division}}' GROUP BY StageName
      - name: post-digest
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_markets_team_id
          channel_id: $secrets.teams_markets_channel_id
          text: 'Pipeline forecast — {{division}} as of {{report_date}}: {{query-pipeline.total}} open deals. Review in Salesforce for stage breakdown.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://deutschebank.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query
      inputParameters:
      - name: q
        in: query
      operations:
      - name: query-opportunities
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → salesforce-pipeline-revenue-forecast-digest.yml

Triggers a Power BI dataset refresh for Deutsche Bank's executive financial dashboard after Snowflake data pipelines complete, ensuring current P&L and revenue data is available to leadership.

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

Retrieves the status of a DocuSign envelope for Deutsche Bank contract signing workflows.

naftiko: '0.5'
info:
  label: DocuSign Envelope Status Lookup
  description: Retrieves the status of a DocuSign envelope for Deutsche Bank contract signing workflows.
  tags:
  - legal
  - docusign
  - contracts
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: legal-lookup
    port: 8080
    tools:
    - name: get-envelope-status
      description: Given a DocuSign envelope ID, return the envelope status and sender name.
      inputParameters:
      - name: envelope_id
        in: body
        type: string
        description: The DocuSign envelope ID.
      call: docusign.get-envelope
      with:
        envelope_id: '{{envelope_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: sender
        type: string
        mapping: $.sender.userName
  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/{{envelope_id}}
      inputParameters:
      - name: envelope_id
        in: path
      operations:
      - name: get-envelope
        method: GET
Open in Framework → View in Fleet → docusign-envelope-status-lookup.yml

Retrieves an Okta user profile by login email for Deutsche Bank identity management.

naftiko: '0.5'
info:
  label: Okta User Status Lookup
  description: Retrieves an Okta user profile by login email for Deutsche Bank identity management.
  tags:
  - security
  - identity
  - okta
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: identity-lookup
    port: 8080
    tools:
    - name: get-okta-user
      description: Given an Okta user login email, return the user status and last login.
      inputParameters:
      - name: user_email
        in: body
        type: string
        description: The user login email address.
      call: okta.get-user
      with:
        login: '{{user_email}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: last_login
        type: string
        mapping: $.lastLogin
  consumes:
  - type: http
    namespace: okta
    baseUri: https://deutschebank.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_token
      placement: header
    resources:
    - name: users
      path: /users/{{login}}
      inputParameters:
      - name: login
        in: path
      operations:
      - name: get-user
        method: GET
Open in Framework → View in Fleet → okta-user-status-lookup.yml

Executes a Snowflake query to retrieve daily trade volume aggregates for a given Deutsche Bank trading desk.

naftiko: '0.5'
info:
  label: Snowflake Trading Data Query
  description: Executes a Snowflake query to retrieve daily trade volume aggregates for a given Deutsche Bank trading desk.
  tags:
  - data
  - analytics
  - snowflake
  - trading
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: trading-analytics
    port: 8080
    tools:
    - name: get-trade-volume
      description: Given a trading desk code and date, return aggregated trade volume from Snowflake.
      inputParameters:
      - name: desk_code
        in: body
        type: string
        description: The trading desk code.
      - name: trade_date
        in: body
        type: string
        description: Trade date in YYYY-MM-DD format.
      call: snowflake.execute-statement
      with:
        statement: SELECT desk_code, SUM(volume) as total_volume FROM trading.daily_trades WHERE desk_code = '{{desk_code}}' AND trade_date = '{{trade_date}}' GROUP BY desk_code
      outputParameters:
      - name: total_volume
        type: number
        mapping: $.data[0].total_volume
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://deutschebank.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
Open in Framework → View in Fleet → snowflake-trading-data-query.yml

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

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

Checks Okta user at Dow Jones.

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

Routes changes at Dow Jones through ServiceNow and CAB approval.

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

Retrieves SharePoint metadata at Dow Jones.

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

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

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

Checks license compliance at Dow Jones via scanning, entitlements, and procurement.

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

Plans capacity at Dow Jones by collecting utilization and forecasting.

naftiko: '0.5'
info:
  label: Capacity Planning Pipeline
  description: Plans capacity at Dow Jones by collecting utilization and forecasting.
  tags:
  - infrastructure
  - capacity-planning
  - forecasting
capability:
  exposes:
  - type: mcp
    namespace: capacity
    port: 8080
    tools:
    - name: plan-capacity
      description: Plan capacity at Dow Jones.
      inputParameters:
      - name: resource
        in: body
        type: string
        description: Resource type.
      - name: months
        in: body
        type: number
        description: Forecast months.
      steps:
      - name: util
        type: call
        call: monitoring.get-util
        with:
          resource: '{{resource}}'
      - name: forecast
        type: call
        call: analytics.forecast
        with:
          current: '{{util.pct}}'
          months: '{{months}}'
      - name: procure
        type: call
        call: servicenow.create-request
        with:
          type: capacity
          resource: '{{resource}}'
      - name: dashboard
        type: call
        call: power-bi.refresh
        with:
          dataset: capacity
  consumes:
  - type: http
    namespace: monitoring
    baseUri: https://monitoring.dowjones.com/api/v1
    authentication:
      type: bearer
      token: $secrets.monitoring_token
    resources:
    - name: util
      path: /resources/{{resource}}/util
      inputParameters:
      - name: resource
        in: path
      operations:
      - name: get-util
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://analytics.dowjones.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: forecast
      path: /demand
      operations:
      - name: forecast
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://dowjones.com.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
  - type: http
    namespace: power-bi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.power_bi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset}}/refreshes
      inputParameters:
      - name: dataset
        in: path
      operations:
      - name: refresh
        method: POST
Open in Framework → View in Fleet → capacity-planning-pipeline.yml

Retrieves the current status of an AWS CloudFormation stack including resources, events, and drift detection results.

naftiko: '0.5'
info:
  label: CloudFormation Stack Status
  description: Retrieves the current status of an AWS CloudFormation stack including resources, events, and drift detection results.
  tags:
  - infrastructure
  - cloudformation
capability:
  exposes:
  - type: mcp
    namespace: cloud-infra
    port: 8080
    tools:
    - name: get-stack-status
      description: Fetch AWS CloudFormation stack status by stack name.
      inputParameters:
      - name: stack_name
        in: body
        type: string
        description: The CloudFormation stack name.
      call: cfn.describe-stack
      with:
        stack_name: '{{stack_name}}'
  consumes:
  - type: http
    namespace: cfn
    baseUri: https://cloudformation.us-east-1.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_token
    resources:
    - name: stacks
      path: /
      operations:
      - name: describe-stack
        method: POST
Open in Framework → View in Fleet → cloudformation-stack-status.yml

Publishes an Instagram story from a CMS-provided image URL and caption, tracking engagement via a Datadog custom metric.

naftiko: '0.5'
info:
  label: Instagram Story Publish
  description: Publishes an Instagram story from a CMS-provided image URL and caption, tracking engagement via a Datadog custom metric.
  tags:
  - social-media
  - publishing
  - instagram
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: social-instagram
    port: 8080
    tools:
    - name: publish-instagram-story
      description: Post an Instagram story with tracking and publish a Datadog metric.
      inputParameters:
      - name: image_url
        in: body
        type: string
        description: URL of the image to post.
      - name: caption
        in: body
        type: string
        description: Story caption text.
      steps:
      - name: create-post
        type: call
        call: instagram.create-story
        with:
          image_url: '{{image_url}}'
          caption: '{{caption}}'
      - name: track-metric
        type: call
        call: datadog.submit-metric
        with:
          metric: social.instagram.stories_published
          value: 1
          tags: channel:instagram,type:story
  consumes:
  - type: http
    namespace: instagram
    baseUri: https://graph.facebook.com/v17.0
    authentication:
      type: bearer
      token: $secrets.instagram_token
    resources:
    - name: stories
      path: /media
      operations:
      - name: create-story
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /series
      operations:
      - name: submit-metric
        method: POST
Open in Framework → View in Fleet → instagram-story-publish.yml

Checks SAP PO at Dow Jones.

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

Creates a new lead in Salesforce from an inbound subscription inquiry and notifies the sales team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Salesforce Lead Capture
  description: Creates a new lead in Salesforce from an inbound subscription inquiry and notifies the sales team in Microsoft Teams.
  tags:
  - sales
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sales-leads
    port: 8080
    tools:
    - name: capture-lead
      description: Create a Salesforce lead from inquiry data and notify the sales team.
      inputParameters:
      - name: email
        in: body
        type: string
        description: Lead email address.
      - name: company
        in: body
        type: string
        description: Lead company name.
      - name: source
        in: body
        type: string
        description: Lead source (web, event, referral).
      steps:
      - name: create-lead
        type: call
        call: salesforce.create-lead
        with:
          email: '{{email}}'
          company: '{{company}}'
          source: '{{source}}'
      - name: notify-sales
        type: call
        call: msteams.send-message
        with:
          channel_id: sales_leads
          text: 'New lead from {{company}} ({{source}}): {{email}}. SF ID: {{create-lead.id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://dowjones.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead
      operations:
      - name: create-lead
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-lead-capture.yml

Checks Power BI refresh at Dow Jones.

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

Checks release readiness at Dow Jones.

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

Checks GitHub repo at Dow Jones.

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

Audits expenses at Dow Jones via Concur, compliance checks, and email.

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

Triggers a Google Apps Script function by script ID and function name, and returns the execution result.

naftiko: '0.5'
info:
  label: Google Apps Script Execution
  description: Triggers a Google Apps Script function by script ID and function name, and returns the execution result.
  tags:
  - automation
  - google-apps-script
capability:
  exposes:
  - type: mcp
    namespace: gscript-automation
    port: 8080
    tools:
    - name: run-apps-script
      description: Execute a Google Apps Script function by script ID and function name.
      inputParameters:
      - name: script_id
        in: body
        type: string
        description: The Apps Script project ID.
      - name: function_name
        in: body
        type: string
        description: The function name to execute.
      - name: parameters
        in: body
        type: string
        description: JSON array of function parameters.
      call: gscript.run
      with:
        script_id: '{{script_id}}'
        function: '{{function_name}}'
        parameters: '{{parameters}}'
  consumes:
  - type: http
    namespace: gscript
    baseUri: https://script.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_apps_script_token
    resources:
    - name: scripts
      path: /scripts/{{script_id}}:run
      inputParameters:
      - name: script_id
        in: path
      operations:
      - name: run
        method: POST
Open in Framework → View in Fleet → google-apps-script-execution.yml

Monitors SLAs at Dow Jones via Datadog and Slack.

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

Scans a draft article through Palo Alto Networks content filter, checks for restricted terms in Elasticsearch, and routes flagged content to a ServiceNow compliance task.

naftiko: '0.5'
info:
  label: Content Compliance Review
  description: Scans a draft article through Palo Alto Networks content filter, checks for restricted terms in Elasticsearch, and routes flagged content to a ServiceNow compliance task.
  tags:
  - compliance
  - publishing
  - palo-alto-networks
  - elasticsearch
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: content-compliance
    port: 8080
    tools:
    - name: review-content-compliance
      description: Scan article for compliance issues, check restricted terms, and route flagged items to compliance team.
      inputParameters:
      - name: article_id
        in: body
        type: string
        description: The CMS article ID to review.
      - name: author_email
        in: body
        type: string
        description: Author email for notification.
      steps:
      - name: fetch-article
        type: call
        call: cms.get-article
        with:
          article_id: '{{article_id}}'
      - name: scan-content
        type: call
        call: paloalto.scan-content
        with:
          content: '{{fetch-article.content}}'
      - name: check-terms
        type: call
        call: elasticsearch.search
        with:
          index: restricted_terms
          query: '{{fetch-article.content}}'
      - name: create-review-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Compliance review: {{fetch-article.headline}}'
          description: 'Scan result: {{scan-content.status}}. Restricted terms found: {{check-terms.hits_total}}. Author: {{author_email}}.'
          assigned_group: Editorial_Compliance
  consumes:
  - type: http
    namespace: cms
    baseUri: https://cms.dowjones.com/api/v2
    authentication:
      type: bearer
      token: $secrets.cms_token
    resources:
    - name: articles
      path: /articles/{{article_id}}
      inputParameters:
      - name: article_id
        in: path
      operations:
      - name: get-article
        method: GET
  - type: http
    namespace: paloalto
    baseUri: https://api.paloaltonetworks.com/v1
    authentication:
      type: bearer
      token: $secrets.paloalto_token
    resources:
    - name: scans
      path: /content-scan
      operations:
      - name: scan-content
        method: POST
  - type: http
    namespace: elasticsearch
    baseUri: https://search.dowjones.com
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: search
      path: /{{index}}/_search
      inputParameters:
      - name: index
        in: path
      operations:
      - name: search
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://dowjones.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → content-compliance-review.yml

Reviews vendors at Dow Jones.

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

Reads editorial assignments from Google Forms responses, creates corresponding tasks in Microsoft Planner, and notifies editors in Microsoft Teams.

naftiko: '0.5'
info:
  label: Editorial Calendar Sync
  description: Reads editorial assignments from Google Forms responses, creates corresponding tasks in Microsoft Planner, and notifies editors in Microsoft Teams.
  tags:
  - publishing
  - planning
  - google-forms
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: editorial-calendar
    port: 8080
    tools:
    - name: sync-editorial-calendar
      description: Pull form submissions, create planner tasks, and notify editors.
      inputParameters:
      - name: form_id
        in: body
        type: string
        description: The Google Forms form identifier.
      - name: team_channel
        in: body
        type: string
        description: Microsoft Teams channel for notifications.
      steps:
      - name: get-responses
        type: call
        call: gforms.get-responses
        with:
          form_id: '{{form_id}}'
      - name: create-tasks
        type: call
        call: planner.create-task
        with:
          plan_id: editorial_plan
          title: '{{get-responses.latest_title}}'
          due_date: '{{get-responses.latest_due_date}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{team_channel}}'
          text: 'New editorial assignment: {{get-responses.latest_title}} due {{get-responses.latest_due_date}}.'
  consumes:
  - type: http
    namespace: gforms
    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: planner
    baseUri: https://graph.microsoft.com/v1.0/planner
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: tasks
      path: /tasks
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → editorial-calendar-sync.yml

Checks K8s pod health at Dow Jones.

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

Searches Confluence at Dow Jones.

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

Fetches results from a Google Optimize experiment and returns variant performance metrics.

naftiko: '0.5'
info:
  label: Google Optimize A/B Test Results
  description: Fetches results from a Google Optimize experiment and returns variant performance metrics.
  tags:
  - analytics
  - experimentation
  - google-optimize
capability:
  exposes:
  - type: mcp
    namespace: experimentation
    port: 8080
    tools:
    - name: get-experiment-results
      description: Retrieve Google Optimize experiment results by experiment ID.
      inputParameters:
      - name: experiment_id
        in: body
        type: string
        description: The Google Optimize experiment identifier.
      call: optimize.get-experiment
      with:
        experiment_id: '{{experiment_id}}'
  consumes:
  - type: http
    namespace: optimize
    baseUri: https://www.googleapis.com/analytics/v3
    authentication:
      type: bearer
      token: $secrets.google_optimize_token
    resources:
    - name: experiments
      path: /management/accounts/dowjones/experiments/{{experiment_id}}
      inputParameters:
      - name: experiment_id
        in: path
      operations:
      - name: get-experiment
        method: GET
Open in Framework → View in Fleet → google-optimize-a-b-test-results.yml

Checks New Relic APM at Dow Jones.

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

Maintains KB at Dow Jones by finding stale articles and notifying owners.

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

Checks the status of an Azure Databricks job run and returns the run state, result, and execution duration.

naftiko: '0.5'
info:
  label: Azure Databricks Job Status
  description: Checks the status of an Azure Databricks job run and returns the run state, result, and execution duration.
  tags:
  - data
  - azure-databricks
capability:
  exposes:
  - type: mcp
    namespace: databricks-ops
    port: 8080
    tools:
    - name: get-job-status
      description: Fetch Azure Databricks job run status by run ID.
      inputParameters:
      - name: run_id
        in: body
        type: string
        description: The Databricks run identifier.
      call: databricks.get-run
      with:
        run_id: '{{run_id}}'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://eastus.azuredatabricks.net/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: runs
      path: /jobs/runs/get
      operations:
      - name: get-run
        method: GET
Open in Framework → View in Fleet → azure-databricks-job-status.yml

Initiates the SAP monthly financial close process, validates balances against Oracle Cloud, and generates a Crystal Reports summary for the finance team via SharePoint.

naftiko: '0.5'
info:
  label: SAP Financial Close Orchestrator
  description: Initiates the SAP monthly financial close process, validates balances against Oracle Cloud, and generates a Crystal Reports summary for the finance team via SharePoint.
  tags:
  - finance
  - sap
  - oracle-cloud
  - crystal-reports
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: financial-close
    port: 8080
    tools:
    - name: run-financial-close
      description: Execute monthly close in SAP, cross-check Oracle, and generate finance report.
      inputParameters:
      - name: period
        in: body
        type: string
        description: The fiscal period (e.g., 2026-03).
      - name: company_code
        in: body
        type: string
        description: SAP company code.
      steps:
      - name: close-period
        type: call
        call: sap.close-period
        with:
          period: '{{period}}'
          company_code: '{{company_code}}'
      - name: validate-oracle
        type: call
        call: oraclecloud.get-balances
        with:
          period: '{{period}}'
      - name: generate-report
        type: call
        call: crystal.generate-report
        with:
          template_id: monthly_close
          parameters: '{"period":"{{period}}","sap_balance":"{{close-period.balance}}","oracle_balance":"{{validate-oracle.balance}}"}'
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: finance_site
          folder_path: MonthlyClose/{{period}}
          file_name: close_report_{{period}}.pdf
          content: '{{generate-report.output_url}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://dowjones-sap.s4hana.cloud/api/v1
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: periods
      path: /financial-close
      operations:
      - name: close-period
        method: POST
  - type: http
    namespace: oraclecloud
    baseUri: https://usageapi.us-ashburn-1.oci.oraclecloud.com/20200107
    authentication:
      type: bearer
      token: $secrets.oracle_cloud_token
    resources:
    - name: balances
      path: /balances
      operations:
      - name: get-balances
        method: POST
  - type: http
    namespace: crystal
    baseUri: https://reports.dowjones.com/api/v1
    authentication:
      type: bearer
      token: $secrets.crystal_reports_token
    resources:
    - name: reports
      path: /reports/generate
      operations:
      - name: generate-report
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → sap-financial-close-orchestrator.yml

When a subscription nears expiration in SAP, sends a renewal reminder via Microsoft Outlook, creates a follow-up task in Salesforce, and logs the outreach in Datadog.

naftiko: '0.5'
info:
  label: Subscriber Renewal Orchestrator
  description: When a subscription nears expiration in SAP, sends a renewal reminder via Microsoft Outlook, creates a follow-up task in Salesforce, and logs the outreach in Datadog.
  tags:
  - subscriptions
  - renewals
  - sap
  - microsoft-outlook
  - salesforce
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: renewals
    port: 8080
    tools:
    - name: trigger-renewal-outreach
      description: Send renewal reminders, create follow-up tasks, and log the outreach.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The SAP subscription account ID.
      - name: subscriber_email
        in: body
        type: string
        description: Subscriber email address.
      steps:
      - name: get-subscription
        type: call
        call: sap.get-subscription
        with:
          account_id: '{{account_id}}'
      - name: send-reminder
        type: call
        call: outlook.send-email
        with:
          to: '{{subscriber_email}}'
          subject: Your Dow Jones subscription expires {{get-subscription.expiry_date}}
          body: Dear subscriber, your {{get-subscription.plan_name}} plan expires on {{get-subscription.expiry_date}}. Renew now to maintain access.
      - name: create-task
        type: call
        call: salesforce.create-task
        with:
          subject: 'Renewal follow-up: {{account_id}}'
          description: Subscription {{get-subscription.plan_name}} expiring {{get-subscription.expiry_date}}.
          due_date: '{{get-subscription.expiry_date}}'
      - name: log-outreach
        type: call
        call: datadog.send-event
        with:
          title: 'Renewal outreach: {{account_id}}'
          text: Reminder sent to {{subscriber_email}} for plan {{get-subscription.plan_name}}
          tags: renewals,subscriptions
  consumes:
  - type: http
    namespace: sap
    baseUri: https://dowjones-sap.s4hana.cloud/api/v1
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: subscriptions
      path: /subscriptions/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-subscription
        method: GET
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/noreply@dowjones.com/sendMail
      operations:
      - name: send-email
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://dowjones.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: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: events
      path: /events
      operations:
      - name: send-event
        method: POST
Open in Framework → View in Fleet → subscriber-renewal-orchestrator.yml

Reviews access at Dow Jones via Okta, IAM, and Jira.

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

Publishes a post to the Dow Jones Facebook page with a link and message text.

naftiko: '0.5'
info:
  label: Facebook Page Post
  description: Publishes a post to the Dow Jones Facebook page with a link and message text.
  tags:
  - social-media
  - facebook
capability:
  exposes:
  - type: mcp
    namespace: social-facebook
    port: 8080
    tools:
    - name: post-to-facebook
      description: Publish a post to the Dow Jones Facebook page.
      inputParameters:
      - name: message
        in: body
        type: string
        description: The post message text.
      - name: link
        in: body
        type: string
        description: URL to attach to the post.
      call: facebook.create-post
      with:
        message: '{{message}}'
        link: '{{link}}'
  consumes:
  - type: http
    namespace: facebook
    baseUri: https://graph.facebook.com/v17.0
    authentication:
      type: bearer
      token: $secrets.facebook_token
    resources:
    - name: posts
      path: /me/feed
      operations:
      - name: create-post
        method: POST
Open in Framework → View in Fleet → facebook-page-post.yml

Pulls subscriber engagement data from Google Analytics and SAP subscription records, runs a churn prediction in Azure Databricks, and creates a retention campaign in Salesforce.

naftiko: '0.5'
info:
  label: Subscriber Churn Prediction Pipeline
  description: Pulls subscriber engagement data from Google Analytics and SAP subscription records, runs a churn prediction in Azure Databricks, and creates a retention campaign in Salesforce.
  tags:
  - subscriptions
  - analytics
  - google-analytics
  - sap
  - azure-databricks
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: churn-prediction
    port: 8080
    tools:
    - name: predict-churn
      description: Run churn prediction for a subscriber segment and create retention campaigns.
      inputParameters:
      - name: segment_id
        in: body
        type: string
        description: The subscriber segment identifier.
      - name: date_range
        in: body
        type: string
        description: Analysis date range (e.g., last_30d).
      steps:
      - name: get-engagement
        type: call
        call: ga.get-report
        with:
          property_id: dj_subscriber_property
          date_from: '{{date_range}}'
          date_to: today
      - name: get-subscriptions
        type: call
        call: sap.get-segment
        with:
          segment_id: '{{segment_id}}'
      - name: run-prediction
        type: call
        call: databricks.submit-job
        with:
          job_name: churn_prediction
          parameters: '{"segment":"{{segment_id}}","engagement":"{{get-engagement.summary}}"}'
      - name: create-campaign
        type: call
        call: salesforce.create-campaign
        with:
          name: Retention — {{segment_id}}
          description: 'Auto-generated retention campaign. Churn risk: {{run-prediction.risk_score}}'
  consumes:
  - type: http
    namespace: ga
    baseUri: https://analyticsdata.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: reports
      path: /properties/{{property_id}}:runReport
      inputParameters:
      - name: property_id
        in: path
      operations:
      - name: get-report
        method: POST
  - type: http
    namespace: sap
    baseUri: https://dowjones-sap.s4hana.cloud/api/v1
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: segments
      path: /segments/{{segment_id}}
      inputParameters:
      - name: segment_id
        in: path
      operations:
      - name: get-segment
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://eastus.azuredatabricks.net/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: submit-job
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://dowjones.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign
      operations:
      - name: create-campaign
        method: POST
Open in Framework → View in Fleet → subscriber-churn-prediction-pipeline.yml

Monitors cert expiry at Dow Jones.

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

Analyzes budget variance at Dow Jones via Oracle, Workday, and Slack.

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

Synchronizes product listings from SAP to the BigCommerce storefront and updates the Elasticsearch product search index.

naftiko: '0.5'
info:
  label: BigCommerce Product Catalog Sync
  description: Synchronizes product listings from SAP to the BigCommerce storefront and updates the Elasticsearch product search index.
  tags:
  - ecommerce
  - bigcommerce
  - sap
  - elasticsearch
capability:
  exposes:
  - type: mcp
    namespace: product-sync
    port: 8080
    tools:
    - name: sync-product
      description: Push a SAP product to BigCommerce and update the search index.
      inputParameters:
      - name: product_id
        in: body
        type: string
        description: The SAP material number.
      steps:
      - name: get-product
        type: call
        call: sap.get-product
        with:
          product_id: '{{product_id}}'
      - name: upsert-bigcommerce
        type: call
        call: bigcommerce.upsert-product
        with:
          sku: '{{product_id}}'
          name: '{{get-product.name}}'
          price: '{{get-product.price}}'
          description: '{{get-product.description}}'
      - name: update-index
        type: call
        call: elasticsearch.index-document
        with:
          index: products
          document_id: '{{product_id}}'
          body: '{"name":"{{get-product.name}}","price":"{{get-product.price}}"}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://dowjones-sap.s4hana.cloud/api/v1
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: products
      path: /products/{{product_id}}
      inputParameters:
      - name: product_id
        in: path
      operations:
      - name: get-product
        method: GET
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/dowjones/v3
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: products
      path: /catalog/products
      operations:
      - name: upsert-product
        method: POST
  - type: http
    namespace: elasticsearch
    baseUri: https://search.dowjones.com
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: documents
      path: /{{index}}/_doc/{{document_id}}
      inputParameters:
      - name: index
        in: path
      - name: document_id
        in: path
      operations:
      - name: index-document
        method: PUT
Open in Framework → View in Fleet → bigcommerce-product-catalog-sync.yml

Checks device compliance status in Microsoft Endpoint Manager and returns compliance state, OS version, and last check-in time.

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

Retrieves a Bloomberg Intelligence research report by report ID and returns the executive summary, sector, and analyst details.

naftiko: '0.5'
info:
  label: Bloomberg Intelligence Report Fetch
  description: Retrieves a Bloomberg Intelligence research report by report ID and returns the executive summary, sector, and analyst details.
  tags:
  - research
  - bloomberg-intelligence
capability:
  exposes:
  - type: mcp
    namespace: bi-research
    port: 8080
    tools:
    - name: get-bi-report
      description: Fetch a Bloomberg Intelligence report by ID.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The Bloomberg Intelligence report identifier.
      call: bi.get-report
      with:
        report_id: '{{report_id}}'
  consumes:
  - type: http
    namespace: bi
    baseUri: https://api.bloomberg.com/bi/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: reports
      path: /reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-report
        method: GET
Open in Framework → View in Fleet → bloomberg-intelligence-report-fetch.yml

Exports a Sparx Enterprise Architect model package as XMI and uploads it to SharePoint for architecture review.

naftiko: '0.5'
info:
  label: Sparx Enterprise Architect Model Export
  description: Exports a Sparx Enterprise Architect model package as XMI and uploads it to SharePoint for architecture review.
  tags:
  - architecture
  - sparx-enterprise-architect
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: architecture-models
    port: 8080
    tools:
    - name: export-model
      description: Export a Sparx EA model package and store in SharePoint.
      inputParameters:
      - name: package_id
        in: body
        type: string
        description: The Sparx EA package GUID.
      - name: output_folder
        in: body
        type: string
        description: SharePoint folder for the export.
      steps:
      - name: export-package
        type: call
        call: sparxea.export-package
        with:
          package_id: '{{package_id}}'
      - name: upload-export
        type: call
        call: sharepoint.upload-file
        with:
          site_id: architecture_site
          folder_path: '{{output_folder}}'
          file_name: '{{export-package.file_name}}'
          content: '{{export-package.xmi_url}}'
  consumes:
  - type: http
    namespace: sparxea
    baseUri: https://sparxea.dowjones.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sparxea_token
    resources:
    - name: packages
      path: /packages/{{package_id}}/export
      inputParameters:
      - name: package_id
        in: path
      operations:
      - name: export-package
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → sparx-enterprise-architect-model-export.yml

Uploads a video to YouTube from an editorial brief, creates the listing metadata, and shares the link across Twitter and LinkedIn.

naftiko: '0.5'
info:
  label: YouTube Video Upload Pipeline
  description: Uploads a video to YouTube from an editorial brief, creates the listing metadata, and shares the link across Twitter and LinkedIn.
  tags:
  - publishing
  - video
  - youtube
  - twitter
  - linkedin
capability:
  exposes:
  - type: mcp
    namespace: video-publishing
    port: 8080
    tools:
    - name: publish-video
      description: Upload a video to YouTube and distribute links to social channels.
      inputParameters:
      - name: video_url
        in: body
        type: string
        description: URL of the video file to upload.
      - name: title
        in: body
        type: string
        description: Video title.
      - name: description
        in: body
        type: string
        description: Video description.
      steps:
      - name: upload-video
        type: call
        call: youtube.upload-video
        with:
          video_url: '{{video_url}}'
          title: '{{title}}'
          description: '{{description}}'
      - name: share-twitter
        type: call
        call: twitter.create-tweet
        with:
          text: 'NEW VIDEO: {{title}} — Watch now: {{upload-video.url}}'
      - name: share-linkedin
        type: call
        call: linkedin.create-post
        with:
          text: 'New video from Dow Jones: {{title}} — {{upload-video.url}}'
  consumes:
  - type: http
    namespace: youtube
    baseUri: https://www.googleapis.com/upload/youtube/v3
    authentication:
      type: bearer
      token: $secrets.youtube_token
    resources:
    - name: videos
      path: /videos
      operations:
      - name: upload-video
        method: POST
  - type: http
    namespace: twitter
    baseUri: https://api.twitter.com/2
    authentication:
      type: bearer
      token: $secrets.twitter_token
    resources:
    - name: tweets
      path: /tweets
      operations:
      - name: create-tweet
        method: POST
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: posts
      path: /ugcPosts
      operations:
      - name: create-post
        method: POST
Open in Framework → View in Fleet → youtube-video-upload-pipeline.yml

Retrieves the current alert status from SolarWinds for a monitored node and returns severity, message, and timestamp.

naftiko: '0.5'
info:
  label: SolarWinds Infrastructure Alert
  description: Retrieves the current alert status from SolarWinds for a monitored node and returns severity, message, and timestamp.
  tags:
  - infrastructure
  - monitoring
  - solarwinds
capability:
  exposes:
  - type: mcp
    namespace: infra-monitoring
    port: 8080
    tools:
    - name: get-node-alerts
      description: Fetch active alerts for a SolarWinds monitored node.
      inputParameters:
      - name: node_id
        in: body
        type: string
        description: The SolarWinds node identifier.
      call: solarwinds.get-alerts
      with:
        node_id: '{{node_id}}'
  consumes:
  - type: http
    namespace: solarwinds
    baseUri: https://solarwinds.dowjones.com:17778/SolarWinds/InformationService/v3/Json
    authentication:
      type: basic
      username: $secrets.solarwinds_user
      password: $secrets.solarwinds_password
    resources:
    - name: alerts
      path: /Query
      operations:
      - name: get-alerts
        method: POST
Open in Framework → View in Fleet → solarwinds-infrastructure-alert.yml

Queries Cisco network infrastructure for device status, interface health, and uptime metrics.

naftiko: '0.5'
info:
  label: Cisco Network Device Status
  description: Queries Cisco network infrastructure for device status, interface health, and uptime metrics.
  tags:
  - infrastructure
  - networking
  - cisco
capability:
  exposes:
  - type: mcp
    namespace: network-status
    port: 8080
    tools:
    - name: get-device-status
      description: Fetch Cisco device status by hostname or IP.
      inputParameters:
      - name: device_id
        in: body
        type: string
        description: The Cisco device hostname or IP address.
      call: cisco.get-device
      with:
        device_id: '{{device_id}}'
  consumes:
  - type: http
    namespace: cisco
    baseUri: https://sandboxdnac.cisco.com/dna/intent/api/v1
    authentication:
      type: bearer
      token: $secrets.cisco_token
    resources:
    - name: devices
      path: /network-device/{{device_id}}
      inputParameters:
      - name: device_id
        in: path
      operations:
      - name: get-device
        method: GET
Open in Framework → View in Fleet → cisco-network-device-status.yml

Triggers a Terraform plan for a specified workspace, retrieves the plan output, and posts a summary to Microsoft Teams for approval.

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

Checks ES index at Dow Jones.

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

Detects infrastructure drift at Dow Jones via Terraform, Slack, and Jira.

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

Pulls latest market data from Bloomberg Enterprise Data, enriches it with Factiva news sentiment, and pushes a consolidated feed to the internal data warehouse via Azure Databricks.

naftiko: '0.5'
info:
  label: Bloomberg Data Feed Sync
  description: Pulls latest market data from Bloomberg Enterprise Data, enriches it with Factiva news sentiment, and pushes a consolidated feed to the internal data warehouse via Azure Databricks.
  tags:
  - data
  - market-data
  - bloomberg-enterprise-data
  - factiva
  - azure-databricks
capability:
  exposes:
  - type: mcp
    namespace: market-data-sync
    port: 8080
    tools:
    - name: sync-market-feed
      description: Pull market data from Bloomberg, enrich with Factiva sentiment, and load into Databricks.
      inputParameters:
      - name: instrument_id
        in: body
        type: string
        description: Bloomberg instrument identifier.
      - name: date
        in: body
        type: string
        description: Market date in YYYY-MM-DD format.
      steps:
      - name: get-market-data
        type: call
        call: bloomberg.get-instrument-data
        with:
          instrument_id: '{{instrument_id}}'
          date: '{{date}}'
      - name: get-sentiment
        type: call
        call: factiva.search-articles
        with:
          query: '{{get-market-data.issuer_name}}'
          date_from: '{{date}}'
          date_to: '{{date}}'
      - name: load-to-warehouse
        type: call
        call: databricks.submit-job
        with:
          job_name: market_data_load
          parameters: '{"instrument":"{{instrument_id}}","sentiment_score":"{{get-sentiment.avg_score}}"}'
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: instruments
      path: /data/{{instrument_id}}
      inputParameters:
      - name: instrument_id
        in: path
      operations:
      - name: get-instrument-data
        method: GET
  - type: http
    namespace: factiva
    baseUri: https://api.dowjones.com/factiva/v1
    authentication:
      type: bearer
      token: $secrets.factiva_token
    resources:
    - name: articles
      path: /search
      operations:
      - name: search-articles
        method: POST
  - type: http
    namespace: databricks
    baseUri: https://eastus.azuredatabricks.net/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: submit-job
        method: POST
Open in Framework → View in Fleet → bloomberg-data-feed-sync.yml

Retrieves cost and usage data from Oracle Cloud for a specified compartment and date range.

naftiko: '0.5'
info:
  label: Oracle Cloud Cost Reporting
  description: Retrieves cost and usage data from Oracle Cloud for a specified compartment and date range.
  tags:
  - finance
  - cloud
  - oracle-cloud
capability:
  exposes:
  - type: mcp
    namespace: cloud-costs
    port: 8080
    tools:
    - name: get-cloud-costs
      description: Fetch Oracle Cloud cost and usage data by compartment and date range.
      inputParameters:
      - name: compartment_id
        in: body
        type: string
        description: The Oracle Cloud compartment OCID.
      - name: start_date
        in: body
        type: string
        description: Start date YYYY-MM-DD.
      - name: end_date
        in: body
        type: string
        description: End date YYYY-MM-DD.
      call: oraclecloud.get-usage
      with:
        compartment_id: '{{compartment_id}}'
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
  consumes:
  - type: http
    namespace: oraclecloud
    baseUri: https://usageapi.us-ashburn-1.oci.oraclecloud.com/20200107
    authentication:
      type: bearer
      token: $secrets.oracle_cloud_token
    resources:
    - name: usage
      path: /usage
      operations:
      - name: get-usage
        method: POST
Open in Framework → View in Fleet → oracle-cloud-cost-reporting.yml

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

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

Checks Terraform workspace at Dow Jones.

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

Retrieves DNS records for a Cloudflare-managed zone by record name and type.

naftiko: '0.5'
info:
  label: Cloudflare DNS Record Lookup
  description: Retrieves DNS records for a Cloudflare-managed zone by record name and type.
  tags:
  - infrastructure
  - dns
  - cloudflare
capability:
  exposes:
  - type: mcp
    namespace: dns-mgmt
    port: 8080
    tools:
    - name: lookup-dns-record
      description: Look up Cloudflare DNS records by zone and record name.
      inputParameters:
      - name: zone_id
        in: body
        type: string
        description: The Cloudflare zone identifier.
      - name: record_name
        in: body
        type: string
        description: The DNS record name to look up.
      call: cloudflare.get-dns-records
      with:
        zone_id: '{{zone_id}}'
        record_name: '{{record_name}}'
  consumes:
  - type: http
    namespace: cloudflare
    baseUri: https://api.cloudflare.com/client/v4
    authentication:
      type: bearer
      token: $secrets.cloudflare_token
    resources:
    - name: dns-records
      path: /zones/{{zone_id}}/dns_records
      inputParameters:
      - name: zone_id
        in: path
      - name: record_name
        in: query
      operations:
      - name: get-dns-records
        method: GET
Open in Framework → View in Fleet → cloudflare-dns-record-lookup.yml

Queries Datadog for a specific metric time series over a given window. Returns data points for dashboards and alerting.

naftiko: '0.5'
info:
  label: Datadog Metric Query
  description: Queries Datadog for a specific metric time series over a given window. Returns data points for dashboards and alerting.
  tags:
  - monitoring
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: metrics
    port: 8080
    tools:
    - name: query-metric
      description: Query a Datadog metric by name and time range.
      inputParameters:
      - name: metric_name
        in: body
        type: string
        description: The Datadog metric name.
      - name: from_ts
        in: body
        type: string
        description: Start timestamp (epoch seconds).
      - name: to_ts
        in: body
        type: string
        description: End timestamp (epoch seconds).
      call: datadog.query-metric
      with:
        query: '{{metric_name}}'
        from: '{{from_ts}}'
        to: '{{to_ts}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /query
      operations:
      - name: query-metric
        method: GET
Open in Framework → View in Fleet → datadog-metric-query.yml

Checks Datadog monitor at Dow Jones.

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

Checks on-call at Dow Jones.

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

Retrieves the current status of an F5 virtual server including pool member health, active connections, and throughput.

naftiko: '0.5'
info:
  label: F5 Networks Load Balancer Status
  description: Retrieves the current status of an F5 virtual server including pool member health, active connections, and throughput.
  tags:
  - infrastructure
  - networking
  - f5-networks
capability:
  exposes:
  - type: mcp
    namespace: load-balancer
    port: 8080
    tools:
    - name: get-virtual-server-status
      description: Fetch F5 virtual server health and connection stats.
      inputParameters:
      - name: virtual_server_name
        in: body
        type: string
        description: The F5 virtual server name.
      call: f5.get-virtual-server
      with:
        name: '{{virtual_server_name}}'
  consumes:
  - type: http
    namespace: f5
    baseUri: https://f5.dowjones.com/mgmt/tm
    authentication:
      type: basic
      username: $secrets.f5_user
      password: $secrets.f5_password
    resources:
    - name: virtual-servers
      path: /ltm/virtual/{{name}}/stats
      inputParameters:
      - name: name
        in: path
      operations:
      - name: get-virtual-server
        method: GET
Open in Framework → View in Fleet → f5-networks-load-balancer-status.yml

Checks Redis at Dow Jones.

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

Checks IT incident in ServiceNow for Dow Jones.

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

When an editor approves a story in the CMS, publishes the article to the website, indexes it in Elasticsearch for search, and sends a push notification via WhatsApp and Twitter.

naftiko: '0.5'
info:
  label: Article Publishing Pipeline
  description: When an editor approves a story in the CMS, publishes the article to the website, indexes it in Elasticsearch for search, and sends a push notification via WhatsApp and Twitter.
  tags:
  - publishing
  - news
  - elasticsearch
  - twitter
  - whatsapp
capability:
  exposes:
  - type: mcp
    namespace: publishing
    port: 8080
    tools:
    - name: publish-article
      description: Given a CMS article ID, publish to the website, index in Elasticsearch, and distribute via social channels.
      inputParameters:
      - name: article_id
        in: body
        type: string
        description: The CMS article identifier.
      - name: publish_channel
        in: body
        type: string
        description: Target publish channel (web, mobile, all).
      steps:
      - name: fetch-article
        type: call
        call: cms.get-article
        with:
          article_id: '{{article_id}}'
      - name: index-article
        type: call
        call: elasticsearch.index-document
        with:
          index: articles
          document_id: '{{article_id}}'
          body: '{{fetch-article.content}}'
      - name: post-twitter
        type: call
        call: twitter.create-tweet
        with:
          text: 'NEW: {{fetch-article.headline}} — {{fetch-article.url}}'
      - name: send-whatsapp
        type: call
        call: whatsapp.send-message
        with:
          channel_id: breaking_news
          text: '{{fetch-article.headline}}: {{fetch-article.summary}}'
  consumes:
  - type: http
    namespace: cms
    baseUri: https://cms.dowjones.com/api/v2
    authentication:
      type: bearer
      token: $secrets.cms_token
    resources:
    - name: articles
      path: /articles/{{article_id}}
      inputParameters:
      - name: article_id
        in: path
      operations:
      - name: get-article
        method: GET
  - type: http
    namespace: elasticsearch
    baseUri: https://search.dowjones.com
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: documents
      path: /{{index}}/_doc/{{document_id}}
      inputParameters:
      - name: index
        in: path
      - name: document_id
        in: path
      operations:
      - name: index-document
        method: PUT
  - type: http
    namespace: twitter
    baseUri: https://api.twitter.com/2
    authentication:
      type: bearer
      token: $secrets.twitter_token
    resources:
    - name: tweets
      path: /tweets
      operations:
      - name: create-tweet
        method: POST
  - type: http
    namespace: whatsapp
    baseUri: https://graph.facebook.com/v17.0
    authentication:
      type: bearer
      token: $secrets.whatsapp_token
    resources:
    - name: messages
      path: /{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → article-publishing-pipeline.yml

Assigns a Pluralsight learning path to employees by department from PeopleSoft and tracks completion in Microsoft Teams.

naftiko: '0.5'
info:
  label: Pluralsight Training Assignment
  description: Assigns a Pluralsight learning path to employees by department from PeopleSoft and tracks completion in Microsoft Teams.
  tags:
  - learning
  - pluralsight
  - peoplesoft
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: training
    port: 8080
    tools:
    - name: assign-training
      description: Assign a Pluralsight path to a department and notify via Teams.
      inputParameters:
      - name: department_id
        in: body
        type: string
        description: PeopleSoft department identifier.
      - name: path_id
        in: body
        type: string
        description: Pluralsight learning path ID.
      steps:
      - name: get-department
        type: call
        call: peoplesoft.get-department
        with:
          department_id: '{{department_id}}'
      - name: assign-path
        type: call
        call: pluralsight.assign-path
        with:
          path_id: '{{path_id}}'
          emails: '{{get-department.employee_emails}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: learning_dev
          text: 'New training assigned: Pluralsight path {{path_id}} for {{get-department.name}} ({{get-department.employee_count}} employees).'
  consumes:
  - type: http
    namespace: peoplesoft
    baseUri: https://peoplesoft.dowjones.com/PSIGW/RESTListeningConnector/PSFT_HR
    authentication:
      type: basic
      username: $secrets.peoplesoft_user
      password: $secrets.peoplesoft_password
    resources:
    - name: departments
      path: /departments/{{department_id}}
      inputParameters:
      - name: department_id
        in: path
      operations:
      - name: get-department
        method: GET
  - type: http
    namespace: pluralsight
    baseUri: https://api.pluralsight.com/v1
    authentication:
      type: bearer
      token: $secrets.pluralsight_token
    resources:
    - name: assignments
      path: /assignments
      operations:
      - name: assign-path
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → pluralsight-training-assignment.yml

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

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

Onboards employees at Dow Jones with Okta, ServiceNow, Slack, and calendar.

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

Verifies backups at Dow Jones.

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

Reallocates costs at Dow Jones.

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

Runs a segment-level Adobe Analytics report for a specified report suite and date range, returning visitor and page view breakdowns.

naftiko: '0.5'
info:
  label: Adobe Analytics Segment Report
  description: Runs a segment-level Adobe Analytics report for a specified report suite and date range, returning visitor and page view breakdowns.
  tags:
  - analytics
  - adobe-analytics
capability:
  exposes:
  - type: mcp
    namespace: adobe-analytics
    port: 8080
    tools:
    - name: get-segment-report
      description: Run an Adobe Analytics segment report by suite, segment, and date range.
      inputParameters:
      - name: report_suite_id
        in: body
        type: string
        description: Adobe Analytics report suite ID.
      - name: segment_id
        in: body
        type: string
        description: The segment identifier.
      - 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.
      call: adobeanalytics.get-report
      with:
        rsid: '{{report_suite_id}}'
        segment_id: '{{segment_id}}'
        date_from: '{{date_from}}'
        date_to: '{{date_to}}'
  consumes:
  - type: http
    namespace: adobeanalytics
    baseUri: https://analytics.adobe.io/api
    authentication:
      type: bearer
      token: $secrets.adobe_analytics_token
    resources:
    - name: reports
      path: /{{rsid}}/reports
      inputParameters:
      - name: rsid
        in: path
      operations:
      - name: get-report
        method: POST
Open in Framework → View in Fleet → adobe-analytics-segment-report.yml

Executes a full-text search against the Factiva database and returns matching articles with metadata, source, and relevance scores.

naftiko: '0.5'
info:
  label: Factiva Search Query
  description: Executes a full-text search against the Factiva database and returns matching articles with metadata, source, and relevance scores.
  tags:
  - data
  - search
  - factiva
capability:
  exposes:
  - type: mcp
    namespace: factiva-search
    port: 8080
    tools:
    - name: search-factiva
      description: Search the Factiva news archive by keyword, date range, and source filter. Returns article summaries and metadata.
      inputParameters:
      - name: query
        in: body
        type: string
        description: Full-text search query string.
      - name: date_from
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: date_to
        in: body
        type: string
        description: End date in YYYY-MM-DD format.
      call: factiva.search-articles
      with:
        query: '{{query}}'
        date_from: '{{date_from}}'
        date_to: '{{date_to}}'
  consumes:
  - type: http
    namespace: factiva
    baseUri: https://api.dowjones.com/factiva/v1
    authentication:
      type: bearer
      token: $secrets.factiva_token
    resources:
    - name: articles
      path: /search
      operations:
      - name: search-articles
        method: POST
Open in Framework → View in Fleet → factiva-search-query.yml

Triggers a WebSphere application deployment, monitors the deployment status, and sends a completion notification to Microsoft Teams.

naftiko: '0.5'
info:
  label: WebSphere Application Deployment
  description: Triggers a WebSphere application deployment, monitors the deployment status, and sends a completion notification to Microsoft Teams.
  tags:
  - deployment
  - websphere
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: app-deployment
    port: 8080
    tools:
    - name: deploy-application
      description: Deploy an application to WebSphere and notify the team on completion.
      inputParameters:
      - name: app_name
        in: body
        type: string
        description: The application name to deploy.
      - name: version
        in: body
        type: string
        description: The application version.
      - name: team_channel
        in: body
        type: string
        description: Teams channel for deployment notification.
      steps:
      - name: trigger-deploy
        type: call
        call: websphere.deploy-app
        with:
          app_name: '{{app_name}}'
          version: '{{version}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{team_channel}}'
          text: 'Deployment complete: {{app_name}} v{{version}} — Status: {{trigger-deploy.status}}'
  consumes:
  - type: http
    namespace: websphere
    baseUri: https://websphere.dowjones.com/IBMJMXConnectorREST/mbeans
    authentication:
      type: basic
      username: $secrets.websphere_user
      password: $secrets.websphere_password
    resources:
    - name: deployments
      path: /deployments
      operations:
      - name: deploy-app
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → websphere-application-deployment.yml

Retrieves sprint progress at Dow Jones.

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

Generates a formatted Microsoft Office document from a template stored in SharePoint, populates with data, and returns the download URL.

naftiko: '0.5'
info:
  label: Microsoft Office Document Generation
  description: Generates a formatted Microsoft Office document from a template stored in SharePoint, populates with data, and returns the download URL.
  tags:
  - content
  - microsoft-office
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: doc-generation
    port: 8080
    tools:
    - name: generate-document
      description: Generate an Office document from a SharePoint template with data merge.
      inputParameters:
      - name: template_path
        in: body
        type: string
        description: SharePoint path to the document template.
      - name: data
        in: body
        type: string
        description: JSON data to merge into the template.
      steps:
      - name: get-template
        type: call
        call: sharepoint.get-file
        with:
          site_id: templates_site
          file_path: '{{template_path}}'
      - name: generate-doc
        type: call
        call: sharepoint.create-file-from-template
        with:
          site_id: templates_site
          template_url: '{{get-template.download_url}}'
          data: '{{data}}'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{file_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: get-file
        method: GET
      - name: create-file-from-template
        method: POST
Open in Framework → View in Fleet → microsoft-office-document-generation.yml

Checks the latest Veritas InfoScale backup job status for a given volume group and returns completion state and size.

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

Looks up active user sessions on Citrix NetScaler by username and returns session count, duration, and gateway details.

naftiko: '0.5'
info:
  label: Citrix NetScaler Session Lookup
  description: Looks up active user sessions on Citrix NetScaler by username and returns session count, duration, and gateway details.
  tags:
  - infrastructure
  - remote-access
  - citrix-netscaler
capability:
  exposes:
  - type: mcp
    namespace: remote-access
    port: 8080
    tools:
    - name: get-user-sessions
      description: Look up active Citrix NetScaler sessions by username.
      inputParameters:
      - name: username
        in: body
        type: string
        description: The user's network login name.
      call: netscaler.get-sessions
      with:
        username: '{{username}}'
  consumes:
  - type: http
    namespace: netscaler
    baseUri: https://netscaler.dowjones.com/nitro/v1
    authentication:
      type: basic
      username: $secrets.netscaler_user
      password: $secrets.netscaler_password
    resources:
    - name: sessions
      path: /config/aaasession
      operations:
      - name: get-sessions
        method: GET
Open in Framework → View in Fleet → citrix-netscaler-session-lookup.yml

Escalates IT incidents at Dow Jones via ServiceNow, PagerDuty, and Slack.

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

Checks Vault secret at Dow Jones.

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

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

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

Syndicates a published Dow Jones article to LinkedIn as a company post and tracks impressions via Google Analytics.

naftiko: '0.5'
info:
  label: LinkedIn Article Syndication
  description: Syndicates a published Dow Jones article to LinkedIn as a company post and tracks impressions via Google Analytics.
  tags:
  - publishing
  - social-media
  - linkedin
  - google-analytics
capability:
  exposes:
  - type: mcp
    namespace: social-syndication
    port: 8080
    tools:
    - name: syndicate-to-linkedin
      description: Publish a Dow Jones article summary to LinkedIn and tag a GA tracking parameter.
      inputParameters:
      - name: article_id
        in: body
        type: string
        description: The CMS article identifier.
      steps:
      - name: fetch-article
        type: call
        call: cms.get-article
        with:
          article_id: '{{article_id}}'
      - name: post-linkedin
        type: call
        call: linkedin.create-post
        with:
          text: '{{fetch-article.headline}} — {{fetch-article.summary}} {{fetch-article.url}}?utm_source=linkedin'
  consumes:
  - type: http
    namespace: cms
    baseUri: https://cms.dowjones.com/api/v2
    authentication:
      type: bearer
      token: $secrets.cms_token
    resources:
    - name: articles
      path: /articles/{{article_id}}
      inputParameters:
      - name: article_id
        in: path
      operations:
      - name: get-article
        method: GET
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: posts
      path: /ugcPosts
      operations:
      - name: create-post
        method: POST
Open in Framework → View in Fleet → linkedin-article-syndication.yml

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

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

Searches Splunk at Dow Jones.

naftiko: '0.5'
info:
  label: Splunk Log Search
  description: Searches Splunk at Dow Jones.
  tags:
  - security
  - splunk
  - logging
capability:
  exposes:
  - type: mcp
    namespace: splunk-search
    port: 8080
    tools:
    - name: search-logs
      description: Search logs at Dow Jones.
      inputParameters:
      - name: query
        in: body
        type: string
        description: SPL query.
      call: splunk.search
      with:
        query: '{{query}}'
      outputParameters:
      - name: count
        type: number
        mapping: $.results.count
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.dowjones.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search
      path: /search/jobs
      operations:
      - name: search
        method: POST
Open in Framework → View in Fleet → splunk-log-search.yml

Queries Palo Alto Networks for threat intelligence on an IP address or domain and returns threat classification, severity, and associated campaigns.

naftiko: '0.5'
info:
  label: Palo Alto Networks Threat Intelligence
  description: Queries Palo Alto Networks for threat intelligence on an IP address or domain and returns threat classification, severity, and associated campaigns.
  tags:
  - security
  - threat-intelligence
  - palo-alto-networks
capability:
  exposes:
  - type: mcp
    namespace: threat-intel
    port: 8080
    tools:
    - name: query-threat-intel
      description: Look up threat intelligence for an indicator in Palo Alto Networks.
      inputParameters:
      - name: indicator
        in: body
        type: string
        description: IP address or domain to investigate.
      - name: indicator_type
        in: body
        type: string
        description: Type of indicator (ip, domain, url).
      call: paloalto.get-threat-intel
      with:
        indicator: '{{indicator}}'
        type: '{{indicator_type}}'
  consumes:
  - type: http
    namespace: paloalto
    baseUri: https://api.paloaltonetworks.com/v1
    authentication:
      type: bearer
      token: $secrets.paloalto_token
    resources:
    - name: threats
      path: /threats/{{indicator}}
      inputParameters:
      - name: indicator
        in: path
      operations:
      - name: get-threat-intel
        method: GET
Open in Framework → View in Fleet → palo-alto-networks-threat-intelligence.yml

Creates a new digital subscription in SAP, provisions access in Azure Active Directory, and sends the welcome email via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Subscription Activation
  description: Creates a new digital subscription in SAP, provisions access in Azure Active Directory, and sends the welcome email via Microsoft Outlook.
  tags:
  - subscriptions
  - sap
  - azure-active-directory
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: subscriptions
    port: 8080
    tools:
    - name: activate-subscription
      description: Given subscriber details, create the SAP subscription record, provision AD access, and send welcome email.
      inputParameters:
      - name: subscriber_email
        in: body
        type: string
        description: The subscriber email address.
      - name: plan_id
        in: body
        type: string
        description: The subscription plan identifier.
      - name: subscriber_name
        in: body
        type: string
        description: Full name of the subscriber.
      steps:
      - name: create-subscription
        type: call
        call: sap.create-subscription
        with:
          email: '{{subscriber_email}}'
          plan_id: '{{plan_id}}'
          name: '{{subscriber_name}}'
      - name: provision-access
        type: call
        call: azuread.create-user
        with:
          email: '{{subscriber_email}}'
          display_name: '{{subscriber_name}}'
          group: subscribers_{{plan_id}}
      - name: send-welcome
        type: call
        call: outlook.send-email
        with:
          to: '{{subscriber_email}}'
          subject: Welcome to Dow Jones — Your subscription is active
          body: 'Dear {{subscriber_name}}, your {{plan_id}} subscription is now active. Account ID: {{create-subscription.account_id}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://dowjones-sap.s4hana.cloud/api/v1
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: subscriptions
      path: /subscriptions
      operations:
      - name: create-subscription
        method: POST
  - type: http
    namespace: azuread
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users
      operations:
      - name: create-user
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/noreply@dowjones.com/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → subscription-activation.yml

Creates or updates an Elasticsearch index with specified mappings and settings for content management.

naftiko: '0.5'
info:
  label: Elasticsearch Index Management
  description: Creates or updates an Elasticsearch index with specified mappings and settings for content management.
  tags:
  - data
  - elasticsearch
capability:
  exposes:
  - type: mcp
    namespace: search-admin
    port: 8080
    tools:
    - name: manage-index
      description: Create or update an Elasticsearch index with mappings.
      inputParameters:
      - name: index_name
        in: body
        type: string
        description: The Elasticsearch index name.
      - name: mappings
        in: body
        type: string
        description: JSON index mappings.
      call: elasticsearch.create-index
      with:
        index: '{{index_name}}'
        body: '{{mappings}}'
  consumes:
  - type: http
    namespace: elasticsearch
    baseUri: https://search.dowjones.com
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: indices
      path: /{{index}}
      inputParameters:
      - name: index
        in: path
      operations:
      - name: create-index
        method: PUT
Open in Framework → View in Fleet → elasticsearch-index-management.yml

Retrieves the latest pipeline status and merge request summary for a GitLab project.

naftiko: '0.5'
info:
  label: GitLab Repository Status
  description: Retrieves the latest pipeline status and merge request summary for a GitLab project.
  tags:
  - development
  - gitlab
capability:
  exposes:
  - type: mcp
    namespace: gitlab-ops
    port: 8080
    tools:
    - name: get-project-status
      description: Fetch latest GitLab pipeline status and open MR count for a project.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GitLab project ID.
      call: gitlab.get-project
      with:
        project_id: '{{project_id}}'
  consumes:
  - type: http
    namespace: gitlab
    baseUri: https://gitlab.dowjones.com/api/v4
    authentication:
      type: bearer
      token: $secrets.gitlab_token
    resources:
    - name: projects
      path: /projects/{{project_id}}
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-project
        method: GET
Open in Framework → View in Fleet → gitlab-repository-status.yml

Fetches the latest CI run status from GitHub Actions for a given repository and branch.

naftiko: '0.5'
info:
  label: GitHub Actions CI Status
  description: Fetches the latest CI run status from GitHub Actions for a given repository and branch.
  tags:
  - development
  - ci
  - github-actions
capability:
  exposes:
  - type: mcp
    namespace: ci-status
    port: 8080
    tools:
    - name: get-ci-status
      description: Check the latest GitHub Actions workflow run status for a repo and branch.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: Repository name (owner/repo).
      - name: branch
        in: body
        type: string
        description: Branch name.
      call: github.get-workflow-runs
      with:
        repo: '{{repo}}'
        branch: '{{branch}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflow-runs
      path: /repos/{{repo}}/actions/runs
      inputParameters:
      - name: repo
        in: path
      - name: branch
        in: query
      operations:
      - name: get-workflow-runs
        method: GET
Open in Framework → View in Fleet → github-actions-ci-status.yml

Checks Grafana dashboard at Dow Jones.

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

Generates monthly security reports at Dow Jones from Splunk and Qualys.

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

Retrieves Teams activity at Dow Jones.

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

Fetches the latest bond quote from Tradeweb by instrument ISIN and returns bid, ask, yield, and last-traded timestamp.

naftiko: '0.5'
info:
  label: Tradeweb Bond Quote Lookup
  description: Fetches the latest bond quote from Tradeweb by instrument ISIN and returns bid, ask, yield, and last-traded timestamp.
  tags:
  - data
  - trading
  - tradeweb
capability:
  exposes:
  - type: mcp
    namespace: bond-trading
    port: 8080
    tools:
    - name: get-bond-quote
      description: Look up a Tradeweb bond quote by ISIN. Returns bid, ask, yield, and timestamp.
      inputParameters:
      - name: isin
        in: body
        type: string
        description: The bond ISIN identifier.
      call: tradeweb.get-quote
      with:
        isin: '{{isin}}'
  consumes:
  - type: http
    namespace: tradeweb
    baseUri: https://api.tradeweb.com/v1
    authentication:
      type: bearer
      token: $secrets.tradeweb_token
    resources:
    - name: quotes
      path: /quotes/{{isin}}
      inputParameters:
      - name: isin
        in: path
      operations:
      - name: get-quote
        method: GET
Open in Framework → View in Fleet → tradeweb-bond-quote-lookup.yml

On breaking news flag in CMS, pushes alerts to Twitter, Instagram, LinkedIn, and WhatsApp simultaneously, then logs the distribution event in Datadog.

naftiko: '0.5'
info:
  label: Breaking News Alert Orchestrator
  description: On breaking news flag in CMS, pushes alerts to Twitter, Instagram, LinkedIn, and WhatsApp simultaneously, then logs the distribution event in Datadog.
  tags:
  - news
  - alerts
  - twitter
  - instagram
  - linkedin
  - whatsapp
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: breaking-news
    port: 8080
    tools:
    - name: distribute-breaking-alert
      description: Distribute a breaking news alert across all social channels and log to monitoring.
      inputParameters:
      - name: article_id
        in: body
        type: string
        description: The CMS article ID for the breaking story.
      - name: headline
        in: body
        type: string
        description: The breaking news headline.
      - name: url
        in: body
        type: string
        description: The article URL.
      steps:
      - name: post-twitter
        type: call
        call: twitter.create-tweet
        with:
          text: 'BREAKING: {{headline}} {{url}}'
      - name: post-linkedin
        type: call
        call: linkedin.create-post
        with:
          text: 'BREAKING: {{headline}} — Read more: {{url}}'
      - name: post-instagram
        type: call
        call: instagram.create-post
        with:
          caption: 'BREAKING: {{headline}}'
          link: '{{url}}'
      - name: send-whatsapp
        type: call
        call: whatsapp.send-message
        with:
          channel_id: breaking_alerts
          text: 'BREAKING: {{headline}} {{url}}'
      - name: log-distribution
        type: call
        call: datadog.send-event
        with:
          title: 'Breaking news distributed: {{article_id}}'
          text: '{{headline}} pushed to 4 channels'
          tags: breaking,news
  consumes:
  - type: http
    namespace: twitter
    baseUri: https://api.twitter.com/2
    authentication:
      type: bearer
      token: $secrets.twitter_token
    resources:
    - name: tweets
      path: /tweets
      operations:
      - name: create-tweet
        method: POST
  - 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
  - type: http
    namespace: instagram
    baseUri: https://graph.facebook.com/v17.0
    authentication:
      type: bearer
      token: $secrets.instagram_token
    resources:
    - name: media
      path: /media
      operations:
      - name: create-post
        method: POST
  - type: http
    namespace: whatsapp
    baseUri: https://graph.facebook.com/v17.0
    authentication:
      type: bearer
      token: $secrets.whatsapp_token
    resources:
    - name: messages
      path: /{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: events
      path: /events
      operations:
      - name: send-event
        method: POST
Open in Framework → View in Fleet → breaking-news-alert-orchestrator.yml

Retrieves a Google Analytics traffic report for a specified date range and property, returning page views, sessions, and bounce rate.

naftiko: '0.5'
info:
  label: Google Analytics Report Fetch
  description: Retrieves a Google Analytics traffic report for a specified date range and property, returning page views, sessions, and bounce rate.
  tags:
  - analytics
  - google-analytics
capability:
  exposes:
  - type: mcp
    namespace: web-analytics
    port: 8080
    tools:
    - name: get-analytics-report
      description: Fetch a Google Analytics report by property ID and date range.
      inputParameters:
      - name: property_id
        in: body
        type: string
        description: The GA4 property ID.
      - name: date_from
        in: body
        type: string
        description: Report start date YYYY-MM-DD.
      - name: date_to
        in: body
        type: string
        description: Report end date YYYY-MM-DD.
      call: ga.get-report
      with:
        property_id: '{{property_id}}'
        date_from: '{{date_from}}'
        date_to: '{{date_to}}'
  consumes:
  - type: http
    namespace: ga
    baseUri: https://analyticsdata.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: reports
      path: /properties/{{property_id}}:runReport
      inputParameters:
      - name: property_id
        in: path
      operations:
      - name: get-report
        method: POST
Open in Framework → View in Fleet → google-analytics-report-fetch.yml

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

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

When a SolarWinds critical alert fires, creates a ServiceNow incident, pages the on-call team via Microsoft Teams, and opens a Datadog investigation dashboard.

naftiko: '0.5'
info:
  label: Incident Response Orchestrator
  description: When a SolarWinds critical alert fires, creates a ServiceNow incident, pages the on-call team via Microsoft Teams, and opens a Datadog investigation dashboard.
  tags:
  - incident-response
  - solarwinds
  - servicenow
  - microsoft-teams
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: incident-response
    port: 8080
    tools:
    - name: handle-critical-alert
      description: On critical SolarWinds alert, create incident, page team, and open investigation.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The SolarWinds alert identifier.
      - name: node_name
        in: body
        type: string
        description: The affected node name.
      - name: severity
        in: body
        type: string
        description: Alert severity level.
      steps:
      - name: get-alert-detail
        type: call
        call: solarwinds.get-alert-detail
        with:
          alert_id: '{{alert_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Critical alert on {{node_name}}: {{get-alert-detail.message}}'
          severity: '{{severity}}'
          assigned_group: NOC
          description: 'SolarWinds alert {{alert_id}} on {{node_name}}. Details: {{get-alert-detail.message}}'
      - name: page-oncall
        type: call
        call: msteams.send-message
        with:
          channel_id: noc_alerts
          text: 'CRITICAL: {{node_name}} — {{get-alert-detail.message}}. Incident: {{create-incident.number}}. Severity: {{severity}}'
      - name: create-dashboard
        type: call
        call: datadog.create-dashboard
        with:
          title: 'Investigation: {{node_name}} — {{alert_id}}'
          widgets: '{"node":"{{node_name}}","metric":"system.cpu.user"}'
  consumes:
  - type: http
    namespace: solarwinds
    baseUri: https://solarwinds.dowjones.com:17778/SolarWinds/InformationService/v3/Json
    authentication:
      type: basic
      username: $secrets.solarwinds_user
      password: $secrets.solarwinds_password
    resources:
    - name: alerts
      path: /Query
      operations:
      - name: get-alert-detail
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://dowjones.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: dashboards
      path: /dashboard
      operations:
      - name: create-dashboard
        method: POST
Open in Framework → View in Fleet → incident-response-orchestrator.yml

Checks build at Dow Jones.

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

Aggregates Google Analytics page metrics, Elasticsearch article counts, and Salesforce subscription conversions to build a daily newsroom performance snapshot and posts it to Microsoft Teams.

naftiko: '0.5'
info:
  label: Newsroom Performance Dashboard
  description: Aggregates Google Analytics page metrics, Elasticsearch article counts, and Salesforce subscription conversions to build a daily newsroom performance snapshot and posts it to Microsoft Teams.
  tags:
  - analytics
  - news
  - google-analytics
  - elasticsearch
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: newsroom-dashboard
    port: 8080
    tools:
    - name: build-daily-snapshot
      description: Aggregate metrics from GA, Elasticsearch, and Salesforce, then post summary to Teams.
      inputParameters:
      - name: date
        in: body
        type: string
        description: Snapshot date YYYY-MM-DD.
      - name: channel_id
        in: body
        type: string
        description: Teams channel for the summary.
      steps:
      - name: get-traffic
        type: call
        call: ga.get-report
        with:
          property_id: dj_web_property
          date_from: '{{date}}'
          date_to: '{{date}}'
      - name: get-article-count
        type: call
        call: elasticsearch.count
        with:
          index: articles
          date: '{{date}}'
      - name: get-conversions
        type: call
        call: salesforce.get-conversions
        with:
          date: '{{date}}'
      - name: post-summary
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{channel_id}}'
          text: 'Daily Snapshot ({{date}}): {{get-traffic.sessions}} sessions, {{get-article-count.count}} articles, {{get-conversions.total}} conversions.'
  consumes:
  - type: http
    namespace: ga
    baseUri: https://analyticsdata.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: reports
      path: /properties/{{property_id}}:runReport
      inputParameters:
      - name: property_id
        in: path
      operations:
      - name: get-report
        method: POST
  - type: http
    namespace: elasticsearch
    baseUri: https://search.dowjones.com
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: count
      path: /{{index}}/_count
      inputParameters:
      - name: index
        in: path
      operations:
      - name: count
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://dowjones.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: conversions
      path: /query
      operations:
      - name: get-conversions
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → newsroom-performance-dashboard.yml

Searches the PeopleSoft employee directory by name or employee ID and returns contact information, department, and location.

naftiko: '0.5'
info:
  label: PeopleSoft Employee Directory Lookup
  description: Searches the PeopleSoft employee directory by name or employee ID and returns contact information, department, and location.
  tags:
  - hr
  - peoplesoft
capability:
  exposes:
  - type: mcp
    namespace: employee-directory
    port: 8080
    tools:
    - name: search-employee
      description: Search PeopleSoft employee directory by name or ID.
      inputParameters:
      - name: search_term
        in: body
        type: string
        description: Employee name or ID to search.
      call: peoplesoft.search-employees
      with:
        query: '{{search_term}}'
  consumes:
  - type: http
    namespace: peoplesoft
    baseUri: https://peoplesoft.dowjones.com/PSIGW/RESTListeningConnector/PSFT_HR
    authentication:
      type: basic
      username: $secrets.peoplesoft_user
      password: $secrets.peoplesoft_password
    resources:
    - name: employees
      path: /employees
      operations:
      - name: search-employees
        method: GET
Open in Framework → View in Fleet → peoplesoft-employee-directory-lookup.yml

When a reader accesses premium content, validates their SAP subscription status via Azure Active Directory, and either grants access or redirects to the subscription page, logging the event in Elasticsearch.

naftiko: '0.5'
info:
  label: Content Paywall Enforcement
  description: When a reader accesses premium content, validates their SAP subscription status via Azure Active Directory, and either grants access or redirects to the subscription page, logging the event in Elasticsearch.
  tags:
  - subscriptions
  - access-control
  - sap
  - azure-active-directory
  - elasticsearch
capability:
  exposes:
  - type: mcp
    namespace: paywall
    port: 8080
    tools:
    - name: enforce-paywall
      description: Validate subscriber access to premium content and log the access attempt.
      inputParameters:
      - name: user_email
        in: body
        type: string
        description: The reader email address.
      - name: article_id
        in: body
        type: string
        description: The premium article identifier.
      steps:
      - name: lookup-user
        type: call
        call: azuread.get-user
        with:
          upn: '{{user_email}}'
      - name: check-subscription
        type: call
        call: sap.get-subscription
        with:
          account_id: '{{lookup-user.extension_account_id}}'
      - name: log-access
        type: call
        call: elasticsearch.index-document
        with:
          index: paywall_events
          document_id: '{{article_id}}_{{user_email}}'
          body: '{"article":"{{article_id}}","user":"{{user_email}}","status":"{{check-subscription.status}}"}'
  consumes:
  - type: http
    namespace: azuread
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users/{{upn}}
      inputParameters:
      - name: upn
        in: path
      operations:
      - name: get-user
        method: GET
  - type: http
    namespace: sap
    baseUri: https://dowjones-sap.s4hana.cloud/api/v1
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: subscriptions
      path: /subscriptions/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-subscription
        method: GET
  - type: http
    namespace: elasticsearch
    baseUri: https://search.dowjones.com
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: documents
      path: /{{index}}/_doc/{{document_id}}
      inputParameters:
      - name: index
        in: path
      - name: document_id
        in: path
      operations:
      - name: index-document
        method: PUT
Open in Framework → View in Fleet → content-paywall-enforcement.yml

Triggers an Azure Functions deployment from a GitHub Actions build artifact and monitors the deployment status.

naftiko: '0.5'
info:
  label: Azure Functions Deployment Trigger
  description: Triggers an Azure Functions deployment from a GitHub Actions build artifact and monitors the deployment status.
  tags:
  - deployment
  - azure-functions
  - github-actions
capability:
  exposes:
  - type: mcp
    namespace: serverless-deploy
    port: 8080
    tools:
    - name: deploy-azure-function
      description: Deploy an Azure Function from a GitHub Actions build artifact.
      inputParameters:
      - name: function_app_name
        in: body
        type: string
        description: The Azure Function App name.
      - name: artifact_url
        in: body
        type: string
        description: URL of the build artifact.
      steps:
      - name: deploy-function
        type: call
        call: azurefunctions.deploy
        with:
          app_name: '{{function_app_name}}'
          artifact_url: '{{artifact_url}}'
      - name: check-status
        type: call
        call: azurefunctions.get-status
        with:
          app_name: '{{function_app_name}}'
  consumes:
  - type: http
    namespace: azurefunctions
    baseUri: https://management.azure.com/subscriptions/{{subscription_id}}/resourceGroups/dj-rg/providers/Microsoft.Web/sites
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: deployments
      path: /{{app_name}}/extensions/MSDeploy
      inputParameters:
      - name: app_name
        in: path
      operations:
      - name: deploy
        method: PUT
    - name: status
      path: /{{app_name}}
      inputParameters:
      - name: app_name
        in: path
      operations:
      - name: get-status
        method: GET
Open in Framework → View in Fleet → azure-functions-deployment-trigger.yml

Triggers a Crystal Reports generation job for a specified report template and parameters, then stores the output PDF in SharePoint.

naftiko: '0.5'
info:
  label: Crystal Reports Generation
  description: Triggers a Crystal Reports generation job for a specified report template and parameters, then stores the output PDF in SharePoint.
  tags:
  - reporting
  - crystal-reports
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: reporting
    port: 8080
    tools:
    - name: generate-report
      description: Generate a Crystal Report and store the result in SharePoint.
      inputParameters:
      - name: template_id
        in: body
        type: string
        description: Crystal Reports template identifier.
      - name: parameters
        in: body
        type: string
        description: JSON-encoded report parameters.
      - name: output_folder
        in: body
        type: string
        description: SharePoint folder path for output.
      steps:
      - name: run-report
        type: call
        call: crystal.generate-report
        with:
          template_id: '{{template_id}}'
          parameters: '{{parameters}}'
      - name: upload-to-sharepoint
        type: call
        call: sharepoint.upload-file
        with:
          site_id: reports_site
          folder_path: '{{output_folder}}'
          file_name: '{{run-report.file_name}}'
          content: '{{run-report.output_url}}'
  consumes:
  - type: http
    namespace: crystal
    baseUri: https://reports.dowjones.com/api/v1
    authentication:
      type: bearer
      token: $secrets.crystal_reports_token
    resources:
    - name: reports
      path: /reports/generate
      operations:
      - name: generate-report
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → crystal-reports-generation.yml

Creates postmortems at Dow Jones.

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

Offboards employees at Dow Jones via Okta, Slack, ServiceNow, and storage.

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

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

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

On a critical Datadog alert for trading infrastructure, creates a ServiceNow P1 incident, pages the on-call team via PagerDuty, and posts to the operations Teams channel.

naftiko: '0.5'
info:
  label: IT Incident P1 Response Chain
  description: On a critical Datadog alert for trading infrastructure, creates a ServiceNow P1 incident, pages the on-call team via PagerDuty, and posts to the operations Teams channel.
  tags:
  - itsm
  - incident-response
  - datadog
  - servicenow
  - pagerduty
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: itsm-ops
    port: 8080
    tools:
    - name: handle-critical-alert
      description: Given a Datadog alert ID and monitor name, create a ServiceNow P1 incident, trigger PagerDuty escalation, and notify the operations Teams channel.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The Datadog alert or event ID triggering the P1 incident.
      - name: monitor_name
        in: body
        type: string
        description: The name of the Datadog monitor that fired.
      steps:
      - name: create-p1-incident
        type: call
        call: servicenow.create-p1
        with:
          short_description: 'P1: {{monitor_name}}'
          impact: '1'
          urgency: '1'
      - name: page-oncall
        type: call
        call: pagerduty.create-incident
        with:
          title: 'P1: {{monitor_name}}'
          service_id: $secrets.pagerduty_service_id
          body: 'ServiceNow: {{create-p1-incident.number}}'
      - name: notify-ops
        type: call
        call: msteams.post-p1-alert
        with:
          channel: it-ops-p1
          text: 'P1 Incident opened: {{monitor_name}} | SN: {{create-p1-incident.number}} | PD: {{page-oncall.id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://goldmansachs.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-p1
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/it-ops/channels/p1/messages
      operations:
      - name: post-p1-alert
        method: POST
Open in Framework → View in Fleet → it-incident-p1-response-chain.yml

Runs data quality checks in Snowflake, sends alerts to PagerDuty on failures, and logs issues in Jira for data engineering follow-up.

naftiko: '0.5'
info:
  label: Data Quality Alerting Pipeline
  description: Runs data quality checks in Snowflake, sends alerts to PagerDuty on failures, and logs issues in Jira for data engineering follow-up.
  tags:
  - data-quality
  - snowflake
  - pagerduty
  - jira
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: run-data-quality-check
      description: Execute data quality validation and alert on failures.
      inputParameters:
      - name: dataset
        in: body
        type: string
        description: Snowflake dataset name.
      - name: threshold
        in: body
        type: string
        description: Acceptable error threshold percentage.
      steps:
      - name: run-check
        type: call
        call: snowflake-api.run-query
        with:
          query: SELECT COUNT(*) as errors FROM {{dataset}} WHERE is_valid = false
      - name: alert-oncall
        type: call
        call: pagerduty-api.create-event
        with:
          routing_key: $secrets.pagerduty_routing_key
          summary: 'Data quality failure: {{dataset}} has {{run-check.errors}} errors (threshold: {{threshold}}%)'
      - name: log-issue
        type: call
        call: jira-api.create-issue
        with:
          project: DATA
          summary: 'Data quality: {{dataset}}'
          description: 'Errors: {{run-check.errors}}. Threshold: {{threshold}}%. PagerDuty incident: {{alert-oncall.dedup_key}}.'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://goldmansachs.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: pagerduty-api
    baseUri: https://events.pagerduty.com/v2
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: events
      path: /enqueue
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://goldmansachs.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_password
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → data-quality-alerting-pipeline.yml

Polls SolarWinds for degraded network nodes, creates ServiceNow incidents, and notifies network ops via Microsoft Teams.

naftiko: '0.5'
info:
  label: SolarWinds Network Health to ServiceNow
  description: Polls SolarWinds for degraded network nodes, creates ServiceNow incidents, and notifies network ops via Microsoft Teams.
  tags:
  - networking
  - solarwinds
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: solarwinds-health
    port: 8080
    tools:
    - name: report-network-degradation
      description: Detect degraded network nodes and create incident tickets.
      inputParameters:
      - name: node_id
        in: body
        type: string
        description: SolarWinds node identifier.
      steps:
      - name: get-node
        type: call
        call: solarwinds-api.get-node-status
        with:
          node_id: '{{node_id}}'
      - name: create-incident
        type: call
        call: servicenow-api.create-incident
        with:
          short_description: 'Network degradation: {{get-node.name}}'
          description: 'Status: {{get-node.status}}. CPU: {{get-node.cpu_pct}}%. Memory: {{get-node.memory_pct}}%.'
          priority: '2'
      - name: notify-ops
        type: call
        call: msteams-api.post-message
        with:
          team_id: network-ops
          channel_id: alerts
          message: 'Network node {{get-node.name}} degraded. Incident: {{create-incident.number}}.'
  consumes:
  - type: http
    namespace: solarwinds-api
    baseUri: https://solarwinds.goldmansachs.com/SolarWinds/InformationService/v3/Json
    authentication:
      type: basic
      username: $secrets.solarwinds_user
      password: $secrets.solarwinds_password
    resources:
    - name: nodes
      path: /Query
      operations:
      - name: get-node-status
        method: GET
  - type: http
    namespace: servicenow-api
    baseUri: https://goldmansachs.service-now.com/api/now
    authentication:
      type: 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-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_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: post-message
        method: POST
Open in Framework → View in Fleet → solarwinds-network-health-to-servicenow.yml

Retrieves GitHub Advanced Security code scanning alerts for critical findings and creates prioritized Jira security issues for the application security team.

naftiko: '0.5'
info:
  label: GitHub Code Security Alert to Jira Sync
  description: Retrieves GitHub Advanced Security code scanning alerts for critical findings and creates prioritized Jira security issues for the application security team.
  tags:
  - security
  - devops
  - github
  - jira
  - code-scanning
capability:
  exposes:
  - type: mcp
    namespace: security-devops
    port: 8080
    tools:
    - name: sync-security-alerts-to-jira
      description: Given a GitHub repository and severity filter, fetch all open code scanning alerts at or above that severity and create Jira security issues for each critical finding.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository full name to scan, e.g. goldman-sachs/platform.
      - name: severity_filter
        in: body
        type: string
        description: 'Minimum severity level to import: critical, high, or medium.'
      steps:
      - name: get-alerts
        type: call
        call: github.list-code-scanning-alerts
        with:
          repo: '{{repo}}'
          severity: '{{severity_filter}}'
      - name: create-security-issues
        type: call
        call: jira.create-issue
        with:
          project_key: APPSEC
          summary: 'Security alerts in {{repo}}: {{get-alerts.total}} {{severity_filter}}+ findings'
          description: 'Top finding: {{get-alerts.top_rule}}

            Severity filter: {{severity_filter}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: code-scanning-alerts
      path: /repos/{{repo}}/code-scanning/alerts
      inputParameters:
      - name: repo
        in: path
      operations:
      - name: list-code-scanning-alerts
        method: GET
  - type: http
    namespace: jira
    baseUri: https://goldmansachs.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → github-code-security-alert-to-jira-sync.yml

Checks the health and status of Oracle Cloud Infrastructure resources provisioned for Goldman Sachs applications.

naftiko: '0.5'
info:
  label: Oracle Cloud Infrastructure Status Check
  description: Checks the health and status of Oracle Cloud Infrastructure resources provisioned for Goldman Sachs applications.
  tags:
  - infrastructure
  - oracle-cloud
capability:
  exposes:
  - type: mcp
    namespace: oracle-cloud
    port: 8080
    tools:
    - name: check-infra-status
      description: Retrieve the current status of OCI compute and network resources.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: OCI resource OCID.
      call: oci-api.get-resource-status
      with:
        resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: oci-api
    baseUri: https://iaas.us-ashburn-1.oraclecloud.com/20160918
    authentication:
      type: bearer
      token: $secrets.oci_token
    resources:
    - name: resources
      path: /instances/{{resource_id}}
      inputParameters:
      - name: resource_id
        in: path
      operations:
      - name: get-resource-status
        method: GET
Open in Framework → View in Fleet → oracle-cloud-infrastructure-status-check.yml

Searches Confluence for regulatory policy documents matching a keyword query within the compliance knowledge base.

naftiko: '0.5'
info:
  label: Confluence Regulatory Policy Search
  description: Searches Confluence for regulatory policy documents matching a keyword query within the compliance knowledge base.
  tags:
  - compliance
  - documentation
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: policy-search
    port: 8080
    tools:
    - name: search-policy
      description: Given a keyword, search for matching regulatory policy pages in Confluence. Use when compliance officers need to find specific policy documentation.
      inputParameters:
      - name: keyword
        in: body
        type: string
        description: The search keyword.
      call: confluence-api.search-content
      with:
        keyword: '{{keyword}}'
      outputParameters:
      - name: page_id
        type: string
        mapping: $.results[0].id
      - name: title
        type: string
        mapping: $.results[0].title
      - name: url
        type: string
        mapping: $.results[0]._links.webui
  consumes:
  - type: http
    namespace: confluence-api
    baseUri: https://gs-engineering.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: content
      path: /content/search
      inputParameters:
      - name: keyword
        in: query
      operations:
      - name: search-content
        method: GET
Open in Framework → View in Fleet → confluence-regulatory-policy-search.yml

Submits a ServiceNow change request for trading system infrastructure changes, routes it to the CAB, and notifies stakeholders via Microsoft Teams.

naftiko: '0.5'
info:
  label: ServiceNow Change Management for Trading Systems
  description: Submits a ServiceNow change request for trading system infrastructure changes, routes it to the CAB, and notifies stakeholders via Microsoft Teams.
  tags:
  - itsm
  - change-management
  - servicenow
  - microsoft-teams
  - trading-infrastructure
capability:
  exposes:
  - type: mcp
    namespace: change-mgmt
    port: 8080
    tools:
    - name: submit-trading-change-request
      description: Given change details for a trading system modification, create a ServiceNow change request, assign to the trading CAB group, and notify approvers in Teams.
      inputParameters:
      - name: short_description
        in: body
        type: string
        description: Description of the trading system change being requested.
      - name: change_type
        in: body
        type: string
        description: 'ServiceNow change type: normal, standard, or emergency.'
      - name: risk_level
        in: body
        type: string
        description: 'Risk level: low, medium, or high.'
      - name: approver_email
        in: body
        type: string
        description: Email of the primary change approver.
      steps:
      - name: create-change
        type: call
        call: servicenow.create-change-request
        with:
          short_description: '{{short_description}}'
          type: '{{change_type}}'
          risk: '{{risk_level}}'
          assignment_group: Trading_CAB
      - name: notify-approver
        type: call
        call: msteams.notify-approver
        with:
          recipient: '{{approver_email}}'
          text: 'Change request {{create-change.number}} awaiting your approval: {{short_description}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://goldmansachs.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-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}}/sendMail
      inputParameters:
      - name: recipient
        in: path
      operations:
      - name: notify-approver
        method: POST
Open in Framework → View in Fleet → servicenow-change-management-for-trading-systems.yml

Audits all Okta users for MFA enrollment, flags non-compliant users, and creates a ServiceNow compliance incident for the security team.

naftiko: '0.5'
info:
  label: Okta MFA Compliance Audit
  description: Audits all Okta users for MFA enrollment, flags non-compliant users, and creates a ServiceNow compliance incident for the security team.
  tags:
  - identity
  - security
  - okta
  - servicenow
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: security-compliance
    port: 8080
    tools:
    - name: audit-mfa-compliance
      description: List all active Okta users, identify those without MFA enrolled, and open a ServiceNow compliance incident when non-compliance exceeds threshold.
      inputParameters:
      - name: compliance_threshold
        in: body
        type: number
        description: Maximum allowed percentage of non-MFA users before opening a compliance incident.
      steps:
      - name: list-users
        type: call
        call: okta.list-active-users
      - name: create-compliance-incident
        type: call
        call: servicenow.create-compliance-incident
        with:
          short_description: 'Okta MFA non-compliance: threshold exceeded at {{compliance_threshold}}%'
          category: security_compliance
  consumes:
  - type: http
    namespace: okta
    baseUri: https://goldmansachs.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: users
      path: /users
      operations:
      - name: list-active-users
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://goldmansachs.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-compliance-incident
        method: POST
Open in Framework → View in Fleet → okta-mfa-compliance-audit.yml

Posts a message to a Microsoft Teams channel for real-time team communication and alerting.

naftiko: '0.5'
info:
  label: Microsoft Teams Channel Message Post
  description: Posts a message to a Microsoft Teams channel for real-time team communication and alerting.
  tags:
  - communication
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: msteams
    port: 8080
    tools:
    - name: post-channel-message
      description: Send a message to a specific Teams channel.
      inputParameters:
      - name: team_id
        in: body
        type: string
        description: Teams team identifier.
      - name: channel_id
        in: body
        type: string
        description: Teams channel identifier.
      - name: message
        in: body
        type: string
        description: Message text to post.
      call: msteams-api.post-message
      with:
        team_id: '{{team_id}}'
        channel_id: '{{channel_id}}'
        message: '{{message}}'
  consumes:
  - type: http
    namespace: msteams-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_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: post-message
        method: POST
Open in Framework → View in Fleet → microsoft-teams-channel-message-post.yml

Extracts resolved incidents from ServiceNow, generates knowledge articles in Confluence, and indexes them in SharePoint search.

naftiko: '0.5'
info:
  label: Confluence Knowledge Base Update Pipeline
  description: Extracts resolved incidents from ServiceNow, generates knowledge articles in Confluence, and indexes them in SharePoint search.
  tags:
  - knowledge-management
  - servicenow
  - confluence
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: kb-update
    port: 8080
    tools:
    - name: update-knowledge-base
      description: Convert resolved incidents into knowledge base articles.
      inputParameters:
      - name: category
        in: body
        type: string
        description: Incident category to process.
      - name: since_date
        in: body
        type: string
        description: Date to search from YYYY-MM-DD.
      steps:
      - name: get-resolved
        type: call
        call: servicenow-api.list-incidents
        with:
          category: '{{category}}'
          state: resolved
          since: '{{since_date}}'
      - name: create-article
        type: call
        call: confluence-api.create-page
        with:
          space: KB
          title: 'KB: {{get-resolved.top.short_description}}'
          body: 'Resolution: {{get-resolved.top.resolution_notes}}. Category: {{category}}.'
      - name: index-article
        type: call
        call: sharepoint-api.create-file
        with:
          site_id: knowledge-base
          path: Articles/{{category}}/{{get-resolved.top.number}}.html
  consumes:
  - type: http
    namespace: servicenow-api
    baseUri: https://goldmansachs.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: list-incidents
        method: GET
  - type: http
    namespace: confluence-api
    baseUri: https://goldmansachs.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_password
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: sharepoint-api
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: path
        in: path
      operations:
      - name: create-file
        method: PUT
Open in Framework → View in Fleet → confluence-knowledge-base-update-pipeline.yml

Detects ETL failures in Snowflake, restarts the pipeline via GitHub Actions, and logs the incident in ServiceNow.

naftiko: '0.5'
info:
  label: Snowflake ETL Failure Recovery Pipeline
  description: Detects ETL failures in Snowflake, restarts the pipeline via GitHub Actions, and logs the incident in ServiceNow.
  tags:
  - data-engineering
  - snowflake
  - github-actions
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: etl-recovery
    port: 8080
    tools:
    - name: recover-etl-pipeline
      description: Detect and recover from ETL pipeline failures.
      inputParameters:
      - name: pipeline_name
        in: body
        type: string
        description: ETL pipeline name.
      - name: run_date
        in: body
        type: string
        description: Pipeline run date YYYY-MM-DD.
      steps:
      - name: check-status
        type: call
        call: snowflake-api.run-query
        with:
          query: SELECT * FROM etl.pipeline_runs WHERE name = '{{pipeline_name}}' AND run_date = '{{run_date}}'
      - name: restart-pipeline
        type: call
        call: github-api.dispatch-workflow
        with:
          repo: etl-pipelines
          workflow: '{{pipeline_name}}.yml'
          ref: main
      - name: log-incident
        type: call
        call: servicenow-api.create-incident
        with:
          short_description: 'ETL failure: {{pipeline_name}} on {{run_date}}'
          description: 'Status: {{check-status.status}}. Restart workflow: {{restart-pipeline.id}}.'
          category: data_engineering
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://goldmansachs.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: github-api
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflows
      path: /repos/goldman-sachs/{{repo}}/actions/workflows/{{workflow}}/dispatches
      inputParameters:
      - name: repo
        in: path
      - name: workflow
        in: path
      operations:
      - name: dispatch-workflow
        method: POST
  - type: http
    namespace: servicenow-api
    baseUri: https://goldmansachs.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → snowflake-etl-failure-recovery-pipeline.yml

Retrieves company firmographic data from ZoomInfo to enrich CRM records for business development.

naftiko: '0.5'
info:
  label: ZoomInfo Company Enrichment Lookup
  description: Retrieves company firmographic data from ZoomInfo to enrich CRM records for business development.
  tags:
  - data-enrichment
  - zoominfo
capability:
  exposes:
  - type: mcp
    namespace: zoominfo
    port: 8080
    tools:
    - name: get-company-info
      description: Look up company firmographics by domain name.
      inputParameters:
      - name: domain
        in: body
        type: string
        description: Company website domain.
      call: zoominfo-api.enrich-company
      with:
        domain: '{{domain}}'
  consumes:
  - type: http
    namespace: zoominfo-api
    baseUri: https://api.zoominfo.com
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: companies
      path: /enrich/company
      operations:
      - name: enrich-company
        method: POST
Open in Framework → View in Fleet → zoominfo-company-enrichment-lookup.yml

Retrieves metadata for an object stored in an S3 bucket used for risk data archival.

naftiko: '0.5'
info:
  label: Amazon S3 Bucket Object Lookup
  description: Retrieves metadata for an object stored in an S3 bucket used for risk data archival.
  tags:
  - storage
  - amazon-s3
capability:
  exposes:
  - type: mcp
    namespace: s3
    port: 8080
    tools:
    - name: get-object-metadata
      description: Get metadata for an object in a given S3 bucket.
      inputParameters:
      - name: bucket
        in: body
        type: string
        description: S3 bucket name.
      - name: key
        in: body
        type: string
        description: S3 object key.
      call: s3-api.head-object
      with:
        bucket: '{{bucket}}'
        key: '{{key}}'
  consumes:
  - type: http
    namespace: s3-api
    baseUri: https://s3.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_sig_v4
      placement: header
    resources:
    - name: objects
      path: /{{bucket}}/{{key}}
      inputParameters:
      - name: bucket
        in: path
      - name: key
        in: path
      operations:
      - name: head-object
        method: HEAD
Open in Framework → View in Fleet → amazon-s3-bucket-object-lookup.yml

Pulls website traffic metrics from Google Analytics for Goldman Sachs digital properties.

naftiko: '0.5'
info:
  label: Google Analytics Traffic Report
  description: Pulls website traffic metrics from Google Analytics for Goldman Sachs digital properties.
  tags:
  - analytics
  - google-analytics
capability:
  exposes:
  - type: mcp
    namespace: google-analytics
    port: 8080
    tools:
    - name: get-traffic-report
      description: Fetch a traffic summary for a given property and date range.
      inputParameters:
      - name: property_id
        in: body
        type: string
        description: GA4 property 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: ga-api.run-report
      with:
        property_id: '{{property_id}}'
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
  consumes:
  - type: http
    namespace: ga-api
    baseUri: https://analyticsdata.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: reports
      path: /properties/{{property_id}}:runReport
      inputParameters:
      - name: property_id
        in: path
      operations:
      - name: run-report
        method: POST
Open in Framework → View in Fleet → google-analytics-traffic-report.yml

Runs data quality validation queries on Snowflake financial data tables and posts completeness and anomaly results to the data engineering team in Teams.

naftiko: '0.5'
info:
  label: Snowflake Financial Data Quality Check
  description: Runs data quality validation queries on Snowflake financial data tables and posts completeness and anomaly results to the data engineering team in Teams.
  tags:
  - data-analytics
  - snowflake
  - microsoft-teams
  - data-quality
  - finance
capability:
  exposes:
  - type: mcp
    namespace: financial-data-ops
    port: 8080
    tools:
    - name: run-financial-data-quality
      description: Given a Snowflake database and table name for financial data, execute a quality check query and post completeness and anomaly results to the data engineering Teams channel.
      inputParameters:
      - name: database
        in: body
        type: string
        description: The Snowflake database containing the financial data table.
      - name: table_name
        in: body
        type: string
        description: The Snowflake table to run quality checks against.
      steps:
      - name: run-quality-check
        type: call
        call: snowflake.execute-statement
        with:
          database: '{{database}}'
          statement: SELECT COUNT(*) as total, COUNT_IF(trade_id IS NULL) as missing_ids, COUNT_IF(amount IS NULL) as missing_amounts FROM {{table_name}}
      - name: post-results
        type: call
        call: msteams.post-quality-results
        with:
          channel: data-engineering
          text: 'Data quality check on {{table_name}}: Total={{run-quality-check.total}}, Missing IDs={{run-quality-check.missing_ids}}, Missing Amounts={{run-quality-check.missing_amounts}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://goldmansachs.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/data-engineering/channels/general/messages
      operations:
      - name: post-quality-results
        method: POST
Open in Framework → View in Fleet → snowflake-financial-data-quality-check.yml

Detects cloud infrastructure cost anomalies in Datadog, opens a ServiceNow change request for remediation, and notifies the FinOps team in Teams.

naftiko: '0.5'
info:
  label: Datadog Cloud Cost Anomaly Response
  description: Detects cloud infrastructure cost anomalies in Datadog, opens a ServiceNow change request for remediation, and notifies the FinOps team in Teams.
  tags:
  - cloud
  - observability
  - datadog
  - servicenow
  - cost-management
  - finops
capability:
  exposes:
  - type: mcp
    namespace: finops-ops
    port: 8080
    tools:
    - name: respond-to-cost-anomaly
      description: Given a Datadog monitor ID flagging a cost anomaly, retrieve monitor details, open a ServiceNow change request, and alert the FinOps team in Teams.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: The Datadog monitor ID that detected the cost anomaly.
      - name: resource_type
        in: body
        type: string
        description: The cloud resource type with the anomaly, e.g. EC2, S3, GKE.
      steps:
      - name: get-monitor
        type: call
        call: datadog.get-monitor
        with:
          monitor_id: '{{monitor_id}}'
      - name: create-change
        type: call
        call: servicenow.create-change
        with:
          short_description: 'Cost anomaly: {{resource_type}} — {{get-monitor.name}}'
          category: cloud_cost
          priority: '2'
      - name: notify-finops
        type: call
        call: msteams.post-cost-alert
        with:
          channel: cloud-finops
          text: 'Cost anomaly on {{resource_type}}: {{get-monitor.name}}. Change: {{create-change.number}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor/{{monitor_id}}
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: get-monitor
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://goldmansachs.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/finops/channels/general/messages
      operations:
      - name: post-cost-alert
        method: POST
Open in Framework → View in Fleet → datadog-cloud-cost-anomaly-response.yml

Queries Snowflake for profit and loss attribution data by desk and strategy for a specified trading date.

naftiko: '0.5'
info:
  label: Snowflake PnL Attribution Query
  description: Queries Snowflake for profit and loss attribution data by desk and strategy for a specified trading date.
  tags:
  - trading
  - analytics
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: pnl-attribution
    port: 8080
    tools:
    - name: query-pnl
      description: Given a trading desk and date, return the PnL breakdown by strategy. Use when risk managers need daily PnL attribution reports.
      inputParameters:
      - name: desk
        in: body
        type: string
        description: The trading desk identifier.
      - name: trade_date
        in: body
        type: string
        description: The trade date in YYYY-MM-DD format.
      call: snowflake-api.run-pnl-query
      with:
        desk: '{{desk}}'
        trade_date: '{{trade_date}}'
      outputParameters:
      - name: total_pnl
        type: number
        mapping: $.data[0].total_pnl
      - name: strategy_count
        type: integer
        mapping: $.data[0].strategy_count
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://gs-analytics.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-pnl-query
        method: POST
Open in Framework → View in Fleet → snowflake-pnl-attribution-query.yml

Registers a new supplier in SAP Ariba, creates a ServiceNow vendor request ticket, and notifies the procurement team in Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Ariba Supplier Onboarding
  description: Registers a new supplier in SAP Ariba, creates a ServiceNow vendor request ticket, and notifies the procurement team in Microsoft Teams.
  tags:
  - procurement
  - sap-ariba
  - servicenow
  - microsoft-teams
  - supplier-management
capability:
  exposes:
  - type: mcp
    namespace: supplier-onboarding
    port: 8080
    tools:
    - name: onboard-supplier
      description: Given a supplier name, contact email, and spend category, register in SAP Ariba, open a ServiceNow vendor request, and notify the procurement team in Teams.
      inputParameters:
      - name: supplier_name
        in: body
        type: string
        description: Legal name of the new supplier.
      - name: supplier_email
        in: body
        type: string
        description: Primary contact email for the supplier.
      - name: spend_category
        in: body
        type: string
        description: Ariba spend category, e.g. Technology Services, Professional Services.
      steps:
      - name: register-supplier
        type: call
        call: ariba.create-supplier
        with:
          name: '{{supplier_name}}'
          email: '{{supplier_email}}'
          category: '{{spend_category}}'
      - name: create-vendor-ticket
        type: call
        call: servicenow.create-vendor-request
        with:
          short_description: 'Supplier onboarding: {{supplier_name}}'
          supplier_id: '{{register-supplier.supplier_id}}'
      - name: notify-procurement
        type: call
        call: msteams.notify-procurement
        with:
          channel: procurement-ops
          text: 'Supplier {{supplier_name}} registered in Ariba (ID: {{register-supplier.supplier_id}}). SN: {{create-vendor-ticket.number}}'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/supplier/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: suppliers
      path: /suppliers
      operations:
      - name: create-supplier
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://goldmansachs.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: vendor-requests
      path: /table/u_vendor_request
      operations:
      - name: create-vendor-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: /teams/procurement/channels/general/messages
      operations:
      - name: notify-procurement
        method: POST
Open in Framework → View in Fleet → sap-ariba-supplier-onboarding.yml

Collects cost data from AWS CloudWatch, analyzes spend in Datadog, and creates optimization recommendations in Jira.

naftiko: '0.5'
info:
  label: Infrastructure Cost Optimization Pipeline
  description: Collects cost data from AWS CloudWatch, analyzes spend in Datadog, and creates optimization recommendations in Jira.
  tags:
  - finops
  - cloudwatch
  - datadog
  - jira
capability:
  exposes:
  - type: mcp
    namespace: cost-optimization
    port: 8080
    tools:
    - name: run-cost-analysis
      description: Analyze infrastructure costs and create optimization tickets.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: AWS account identifier.
      - name: threshold_pct
        in: body
        type: string
        description: Overspend threshold percentage.
      steps:
      - name: get-costs
        type: call
        call: cloudwatch-api.get-metric-data
        with:
          account_id: '{{account_id}}'
          metric: EstimatedCharges
      - name: analyze-trend
        type: call
        call: datadog-api.query-metrics
        with:
          query: aws.billing.estimated_charges{account:{{account_id}}}
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: FINOPS
          summary: 'Cost optimization: account {{account_id}}'
          description: 'Current spend: {{get-costs.total}}. Trend: {{analyze-trend.trend}}. Threshold: {{threshold_pct}}%.'
  consumes:
  - type: http
    namespace: cloudwatch-api
    baseUri: https://monitoring.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_sig_v4
      placement: header
    resources:
    - name: metrics
      path: /?Action=GetMetricData
      operations:
      - name: get-metric-data
        method: POST
  - type: http
    namespace: datadog-api
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: metrics
      path: /query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: jira-api
    baseUri: https://goldmansachs.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_password
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → infrastructure-cost-optimization-pipeline.yml

Identifies expiring contracts in SAP Ariba, notifies procurement in Jira, and sends renewal reminders through Microsoft Outlook.

naftiko: '0.5'
info:
  label: SAP Ariba Contract Renewal Pipeline
  description: Identifies expiring contracts in SAP Ariba, notifies procurement in Jira, and sends renewal reminders through Microsoft Outlook.
  tags:
  - procurement
  - sap-ariba
  - jira
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: contract-renewal
    port: 8080
    tools:
    - name: process-contract-renewals
      description: Identify and process expiring vendor contracts.
      inputParameters:
      - name: days_until_expiry
        in: body
        type: string
        description: Number of days before expiry to trigger renewal.
      steps:
      - name: get-contracts
        type: call
        call: ariba-api.list-expiring-contracts
        with:
          days: '{{days_until_expiry}}'
      - name: create-tasks
        type: call
        call: jira-api.create-issue
        with:
          project: PROCUREMENT
          summary: 'Contract renewal: {{get-contracts.top.vendor_name}}'
          description: 'Contract: {{get-contracts.top.contract_id}}. Expires: {{get-contracts.top.expiry_date}}. Value: {{get-contracts.top.value}}.'
      - name: send-reminder
        type: call
        call: outlook-api.send-mail
        with:
          to: '{{get-contracts.top.owner_email}}'
          subject: 'Contract renewal required: {{get-contracts.top.vendor_name}}'
          body: 'Your contract with {{get-contracts.top.vendor_name}} expires on {{get-contracts.top.expiry_date}}. Jira: {{create-tasks.key}}.'
  consumes:
  - type: http
    namespace: ariba-api
    baseUri: https://openapi.ariba.com/api/sourcing-projects/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: contracts
      path: /contracts
      operations:
      - name: list-expiring-contracts
        method: GET
  - type: http
    namespace: jira-api
    baseUri: https://goldmansachs.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_password
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: outlook-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → sap-ariba-contract-renewal-pipeline.yml

Retrieves the current state of a CloudWatch alarm to determine if a trading infrastructure metric has breached its threshold.

naftiko: '0.5'
info:
  label: CloudWatch Metric Alarm Check
  description: Retrieves the current state of a CloudWatch alarm to determine if a trading infrastructure metric has breached its threshold.
  tags:
  - monitoring
  - cloudwatch
capability:
  exposes:
  - type: mcp
    namespace: cloudwatch
    port: 8080
    tools:
    - name: get-alarm-state
      description: Check whether a named CloudWatch alarm is in OK, ALARM, or INSUFFICIENT_DATA state.
      inputParameters:
      - name: alarm_name
        in: body
        type: string
        description: CloudWatch alarm name.
      call: aws-cloudwatch.describe-alarm
      with:
        alarm_name: '{{alarm_name}}'
  consumes:
  - type: http
    namespace: aws-cloudwatch
    baseUri: https://monitoring.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_sig_v4
      placement: header
    resources:
    - name: alarms
      path: /?Action=DescribeAlarms&AlarmNames.member.1={{alarm_name}}
      inputParameters:
      - name: alarm_name
        in: query
      operations:
      - name: describe-alarm
        method: GET
Open in Framework → View in Fleet → cloudwatch-metric-alarm-check.yml

Creates a Snowflake data share for a client, registers access in Okta, and notifies the client via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Snowflake Data Sharing Setup Pipeline
  description: Creates a Snowflake data share for a client, registers access in Okta, and notifies the client via Microsoft Outlook.
  tags:
  - data-sharing
  - snowflake
  - okta
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: data-sharing
    port: 8080
    tools:
    - name: setup-data-share
      description: Provision a Snowflake data share with access control and notification.
      inputParameters:
      - name: share_name
        in: body
        type: string
        description: Data share name.
      - name: client_email
        in: body
        type: string
        description: Client email address.
      - name: datasets
        in: body
        type: string
        description: Comma-separated dataset names.
      steps:
      - name: create-share
        type: call
        call: snowflake-api.run-query
        with:
          query: CREATE SHARE IF NOT EXISTS {{share_name}}
      - name: grant-access
        type: call
        call: okta-api.assign-app
        with:
          login: '{{client_email}}'
          app_id: snowflake-data-share
      - name: notify-client
        type: call
        call: outlook-api.send-mail
        with:
          to: '{{client_email}}'
          subject: 'Data Share Ready: {{share_name}}'
          body: 'Your Snowflake data share {{share_name}} is now available. Datasets: {{datasets}}.'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://goldmansachs.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: okta-api
    baseUri: https://goldmansachs.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: apps
      path: /apps/{{app_id}}/users
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: assign-app
        method: POST
  - type: http
    namespace: outlook-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → snowflake-data-sharing-setup-pipeline.yml

Retrieves the priority and assignment details of a ServiceNow incident by number.

naftiko: '0.5'
info:
  label: ServiceNow Incident Priority Lookup
  description: Retrieves the priority and assignment details of a ServiceNow incident by number.
  tags:
  - it-operations
  - incident-management
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: incident-priority
    port: 8080
    tools:
    - name: get-incident-priority
      description: Given a ServiceNow incident number, return the priority, state, and assigned group. Use when operations needs quick incident triage information.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number.
      call: servicenow-api.get-incident
      with:
        incident_number: '{{incident_number}}'
      outputParameters:
      - name: priority
        type: string
        mapping: $.result.priority
      - name: state
        type: string
        mapping: $.result.state
      - name: assignment_group
        type: string
        mapping: $.result.assignment_group.display_value
  consumes:
  - type: http
    namespace: servicenow-api
    baseUri: https://gs.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident/{{incident_number}}
      inputParameters:
      - name: incident_number
        in: path
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → servicenow-incident-priority-lookup.yml

Checks Azure Functions execution logs, identifies failures in Datadog, and creates ServiceNow incidents for degraded functions.

naftiko: '0.5'
info:
  label: Azure Functions Health Check Pipeline
  description: Checks Azure Functions execution logs, identifies failures in Datadog, and creates ServiceNow incidents for degraded functions.
  tags:
  - serverless
  - azure-functions
  - datadog
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: azfunc-health
    port: 8080
    tools:
    - name: check-functions-health
      description: Monitor Azure Functions health and alert on failures.
      inputParameters:
      - name: function_app
        in: body
        type: string
        description: Azure Function App name.
      steps:
      - name: get-logs
        type: call
        call: azure-api.get-function-logs
        with:
          function_app: '{{function_app}}'
      - name: check-errors
        type: call
        call: datadog-api.query-metrics
        with:
          query: azure.functions.errors{function_app:{{function_app}}}
      - name: create-incident
        type: call
        call: servicenow-api.create-incident
        with:
          short_description: 'Azure Function degraded: {{function_app}}'
          description: 'Error count: {{check-errors.value}}. Last execution: {{get-logs.last_execution}}.'
          category: serverless
  consumes:
  - type: http
    namespace: azure-api
    baseUri: https://management.azure.com/subscriptions
    authentication:
      type: bearer
      token: $secrets.azure_management_token
    resources:
    - name: functions
      path: /resourceGroups/gs-prod/providers/Microsoft.Web/sites/{{function_app}}/functions
      inputParameters:
      - name: function_app
        in: path
      operations:
      - name: get-function-logs
        method: GET
  - type: http
    namespace: datadog-api
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: metrics
      path: /query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: servicenow-api
    baseUri: https://goldmansachs.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → azure-functions-health-check-pipeline.yml

Monitors an ECS deployment via CloudWatch, triggers rollback on failure, and notifies the team through Microsoft Teams.

naftiko: '0.5'
info:
  label: AWS ECS Deployment Rollback Pipeline
  description: Monitors an ECS deployment via CloudWatch, triggers rollback on failure, and notifies the team through Microsoft Teams.
  tags:
  - deployment
  - amazon-ecs
  - cloudwatch
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ecs-rollback
    port: 8080
    tools:
    - name: rollback-ecs-deployment
      description: Monitor an ECS deployment and roll back on failure.
      inputParameters:
      - name: cluster
        in: body
        type: string
        description: ECS cluster name.
      - name: service
        in: body
        type: string
        description: ECS service name.
      steps:
      - name: check-health
        type: call
        call: cloudwatch-api.get-metric-data
        with:
          metric: HealthyHostCount
          dimensions: ClusterName={{cluster}},ServiceName={{service}}
      - name: trigger-rollback
        type: call
        call: ecs-api.update-service
        with:
          cluster: '{{cluster}}'
          service: '{{service}}'
          task_definition: '{{service}}:previous'
      - name: notify-team
        type: call
        call: msteams-api.post-message
        with:
          team_id: platform-team
          channel_id: deployments
          message: 'ECS rollback triggered for {{service}} in {{cluster}}. Health: {{check-health.value}}.'
  consumes:
  - type: http
    namespace: cloudwatch-api
    baseUri: https://monitoring.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_sig_v4
      placement: header
    resources:
    - name: metrics
      path: /?Action=GetMetricData
      operations:
      - name: get-metric-data
        method: POST
  - type: http
    namespace: ecs-api
    baseUri: https://ecs.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_sig_v4
      placement: header
    resources:
    - name: services
      path: /?Action=UpdateService
      operations:
      - name: update-service
        method: POST
  - type: http
    namespace: msteams-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_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: post-message
        method: POST
Open in Framework → View in Fleet → aws-ecs-deployment-rollback-pipeline.yml

Triggers a Power BI dataset refresh for the divisional P&L dashboard and notifies the finance team in Microsoft Teams upon completion.

naftiko: '0.5'
info:
  label: Power BI Financial Performance Dashboard Refresh
  description: Triggers a Power BI dataset refresh for the divisional P&L dashboard and notifies the finance team in Microsoft Teams upon completion.
  tags:
  - finance
  - data-analytics
  - power-bi
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: finance-reporting
    port: 8080
    tools:
    - name: refresh-pl-dashboard
      description: Given a Power BI workspace and dataset ID for the P&L dashboard, trigger a refresh and notify the CFO team channel in Teams.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: The Power BI workspace GUID containing the P&L dashboard.
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset GUID to refresh.
      steps:
      - name: trigger-refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          workspace_id: '{{workspace_id}}'
          dataset_id: '{{dataset_id}}'
      - name: notify-finance
        type: call
        call: msteams.notify-finance
        with:
          channel: cfo-finance-analytics
          text: P&L dashboard dataset {{dataset_id}} refresh triggered.
  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: /teams/finance/channels/analytics/messages
      operations:
      - name: notify-finance
        method: POST
Open in Framework → View in Fleet → power-bi-financial-performance-dashboard-refresh.yml

Analyzes Oracle database performance metrics, identifies slow queries in Datadog, and creates optimization tasks in Jira.

naftiko: '0.5'
info:
  label: Oracle Database Performance Tuning Workflow
  description: Analyzes Oracle database performance metrics, identifies slow queries in Datadog, and creates optimization tasks in Jira.
  tags:
  - database
  - oracle
  - datadog
  - jira
capability:
  exposes:
  - type: mcp
    namespace: oracle-tuning
    port: 8080
    tools:
    - name: tune-oracle-performance
      description: Analyze database performance and create tuning tasks.
      inputParameters:
      - name: db_instance
        in: body
        type: string
        description: Oracle database instance name.
      steps:
      - name: get-metrics
        type: call
        call: oracle-api.get-performance
        with:
          instance: '{{db_instance}}'
      - name: analyze-queries
        type: call
        call: datadog-api.query-metrics
        with:
          query: oracle.queries.slow{instance:{{db_instance}}}
      - name: create-task
        type: call
        call: jira-api.create-issue
        with:
          project: DBA
          summary: 'Oracle tuning: {{db_instance}}'
          description: 'Slow queries: {{analyze-queries.count}}. Avg response: {{get-metrics.avg_response_ms}}ms.'
  consumes:
  - type: http
    namespace: oracle-api
    baseUri: https://oracle-cloud.goldmansachs.com/api/v1
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: instances
      path: /dbSystems/{{instance}}/metrics
      inputParameters:
      - name: instance
        in: path
      operations:
      - name: get-performance
        method: GET
  - type: http
    namespace: datadog-api
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: metrics
      path: /query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: jira-api
    baseUri: https://goldmansachs.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_password
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → oracle-database-performance-tuning-workflow.yml

Retrieves a pending SAP Ariba purchase requisition, validates against procurement policy, and routes it for approval via ServiceNow.

naftiko: '0.5'
info:
  label: SAP Ariba Procurement Approval Routing
  description: Retrieves a pending SAP Ariba purchase requisition, validates against procurement policy, and routes it for approval via ServiceNow.
  tags:
  - procurement
  - sap-ariba
  - servicenow
  - approval
  - finance
capability:
  exposes:
  - type: mcp
    namespace: procurement-ops
    port: 8080
    tools:
    - name: route-procurement-approval
      description: Given an Ariba purchase requisition ID, retrieve the requisition details and create a ServiceNow approval task routed to the appropriate approver.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The SAP Ariba purchase requisition ID to process.
      - name: approver_email
        in: body
        type: string
        description: Email of the approver to route the requisition to.
      steps:
      - name: get-requisition
        type: call
        call: ariba.get-requisition
        with:
          requisition_id: '{{requisition_id}}'
      - name: create-approval
        type: call
        call: servicenow.create-procurement-approval
        with:
          short_description: 'Procurement approval: {{get-requisition.title}}'
          amount: '{{get-requisition.total_amount}}'
          approver: '{{approver_email}}'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/requisition/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: servicenow
    baseUri: https://goldmansachs.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: approvals
      path: /table/sysapproval_approver
      operations:
      - name: create-procurement-approval
        method: POST
Open in Framework → View in Fleet → sap-ariba-procurement-approval-routing.yml

Reads issues from a Jira project, creates corresponding GitHub issues, and posts a migration summary to Microsoft Teams.

naftiko: '0.5'
info:
  label: Jira to GitHub Issue Migration
  description: Reads issues from a Jira project, creates corresponding GitHub issues, and posts a migration summary to Microsoft Teams.
  tags:
  - project-management
  - jira
  - github
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: jira-github-migration
    port: 8080
    tools:
    - name: migrate-jira-to-github
      description: Migrate Jira issues to GitHub and report on the migration.
      inputParameters:
      - name: jira_project
        in: body
        type: string
        description: Jira project key.
      - name: github_repo
        in: body
        type: string
        description: Target GitHub repository.
      steps:
      - name: get-issues
        type: call
        call: jira-api.search-issues
        with:
          project: '{{jira_project}}'
      - name: create-gh-issue
        type: call
        call: github-api.create-issue
        with:
          repo: '{{github_repo}}'
          title: '{{get-issues.top.summary}}'
          body: 'Migrated from Jira {{get-issues.top.key}}. Description: {{get-issues.top.description}}'
      - name: post-summary
        type: call
        call: msteams-api.post-message
        with:
          team_id: engineering
          channel_id: migrations
          message: Migrated {{get-issues.total}} issues from Jira {{jira_project}} to GitHub {{github_repo}}.
  consumes:
  - type: http
    namespace: jira-api
    baseUri: https://goldmansachs.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_password
    resources:
    - name: search
      path: /search
      operations:
      - name: search-issues
        method: GET
  - type: http
    namespace: github-api
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: issues
      path: /repos/goldman-sachs/{{repo}}/issues
      inputParameters:
      - name: repo
        in: path
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_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: post-message
        method: POST
Open in Framework → View in Fleet → jira-to-github-issue-migration.yml

Receives order instructions from Bloomberg AIM, validates against compliance rules in Snowflake, and routes to Tradeweb for execution.

naftiko: '0.5'
info:
  label: Bloomberg AIM Order Routing Pipeline
  description: Receives order instructions from Bloomberg AIM, validates against compliance rules in Snowflake, and routes to Tradeweb for execution.
  tags:
  - trading
  - bloomberg-aim
  - snowflake
  - tradeweb
capability:
  exposes:
  - type: mcp
    namespace: aim-routing
    port: 8080
    tools:
    - name: route-aim-order
      description: Validate and route a Bloomberg AIM order to Tradeweb.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: Bloomberg AIM order identifier.
      steps:
      - name: get-order
        type: call
        call: aim-api.get-order
        with:
          order_id: '{{order_id}}'
      - name: check-compliance
        type: call
        call: snowflake-api.run-query
        with:
          query: SELECT * FROM compliance.order_rules WHERE instrument = '{{get-order.instrument}}'
      - name: route-to-tradeweb
        type: call
        call: tradeweb-api.submit-rfq
        with:
          instrument: '{{get-order.instrument}}'
          quantity: '{{get-order.quantity}}'
          side: '{{get-order.side}}'
  consumes:
  - type: http
    namespace: aim-api
    baseUri: https://api.bloomberg.com/aim/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_aim_token
    resources:
    - name: orders
      path: /orders/{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
  - type: http
    namespace: snowflake-api
    baseUri: https://goldmansachs.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: tradeweb-api
    baseUri: https://api.tradeweb.com/v1
    authentication:
      type: bearer
      token: $secrets.tradeweb_token
    resources:
    - name: rfqs
      path: /rfq
      operations:
      - name: submit-rfq
        method: POST
Open in Framework → View in Fleet → bloomberg-aim-order-routing-pipeline.yml

Fetches a triggered PagerDuty incident, creates a corresponding Jira ticket, and posts an update to Microsoft Teams.

naftiko: '0.5'
info:
  label: PagerDuty Incident to Jira Sync
  description: Fetches a triggered PagerDuty incident, creates a corresponding Jira ticket, and posts an update to Microsoft Teams.
  tags:
  - incident-management
  - pagerduty
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pd-jira-sync
    port: 8080
    tools:
    - name: sync-incident-to-jira
      description: Sync a PagerDuty incident into Jira and notify the team.
      inputParameters:
      - name: incident_id
        in: body
        type: string
        description: PagerDuty incident ID.
      steps:
      - name: get-incident
        type: call
        call: pagerduty-api.get-incident
        with:
          incident_id: '{{incident_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          summary: 'PD: {{get-incident.title}}'
          description: 'Severity: {{get-incident.urgency}}. Service: {{get-incident.service}}.'
      - name: notify-team
        type: call
        call: msteams-api.post-message
        with:
          team_id: sre-team
          channel_id: incidents
          message: 'PagerDuty incident {{incident_id}} synced to Jira: {{create-ticket.key}}.'
  consumes:
  - type: http
    namespace: pagerduty-api
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: incidents
      path: /incidents/{{incident_id}}
      inputParameters:
      - name: incident_id
        in: path
      operations:
      - name: get-incident
        method: GET
  - type: http
    namespace: jira-api
    baseUri: https://goldmansachs.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_password
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_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: post-message
        method: POST
Open in Framework → View in Fleet → pagerduty-incident-to-jira-sync.yml

Queries Datadog for the p99 latency of trading platform services over the last hour.

naftiko: '0.5'
info:
  label: Datadog Trading Platform Latency Check
  description: Queries Datadog for the p99 latency of trading platform services over the last hour.
  tags:
  - monitoring
  - trading
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: trading-latency
    port: 8080
    tools:
    - name: check-trading-latency
      description: Given a trading service name, return the p99 latency metric. Use when SREs need to verify trading platform performance meets SLAs.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The Datadog service name for the trading platform.
      call: datadog-api.get-latency
      with:
        service_name: '{{service_name}}'
      outputParameters:
      - name: p99_latency_ms
        type: number
        mapping: $.series[0].pointlist[-1][1]
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: datadog-api
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /query
      inputParameters:
      - name: service_name
        in: query
      operations:
      - name: get-latency
        method: GET
Open in Framework → View in Fleet → datadog-trading-platform-latency-check.yml

Retrieves indicative bond pricing from the Tradeweb platform for fixed-income trading desks.

naftiko: '0.5'
info:
  label: Tradeweb Bond Price Lookup
  description: Retrieves indicative bond pricing from the Tradeweb platform for fixed-income trading desks.
  tags:
  - trading
  - tradeweb
capability:
  exposes:
  - type: mcp
    namespace: tradeweb
    port: 8080
    tools:
    - name: get-bond-price
      description: Fetch indicative price for a bond by ISIN.
      inputParameters:
      - name: isin
        in: body
        type: string
        description: Bond ISIN identifier.
      call: tradeweb-api.get-price
      with:
        isin: '{{isin}}'
  consumes:
  - type: http
    namespace: tradeweb-api
    baseUri: https://api.tradeweb.com/v1
    authentication:
      type: bearer
      token: $secrets.tradeweb_token
    resources:
    - name: prices
      path: /bonds/{{isin}}/price
      inputParameters:
      - name: isin
        in: path
      operations:
      - name: get-price
        method: GET
Open in Framework → View in Fleet → tradeweb-bond-price-lookup.yml

Queries Snowflake for the daily profit and loss summary for a given Goldman Sachs trading desk and date.

naftiko: '0.5'
info:
  label: Snowflake Daily PnL Report Lookup
  description: Queries Snowflake for the daily profit and loss summary for a given Goldman Sachs trading desk and date.
  tags:
  - trading
  - snowflake
  - pnl
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: pnl-report
    port: 8080
    tools:
    - name: get-daily-pnl
      description: Given a trading desk code and date, returns the daily PnL summary from Snowflake. Use for end-of-day trading reviews.
      inputParameters:
      - name: desk_code
        in: body
        type: string
        description: The trading desk identifier code.
      - name: report_date
        in: body
        type: string
        description: The report date in YYYY-MM-DD format.
      call: snowflake-pnl.query-pnl
      with:
        desk: '{{desk_code}}'
        date: '{{report_date}}'
      outputParameters:
      - name: total_pnl
        type: number
        mapping: $.data[0].TOTAL_PNL
      - name: realized_pnl
        type: number
        mapping: $.data[0].REALIZED_PNL
  consumes:
  - type: http
    namespace: snowflake-pnl
    baseUri: https://goldmansachs.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      inputParameters:
      - name: desk
        in: body
      - name: date
        in: body
      operations:
      - name: query-pnl
        method: POST
Open in Framework → View in Fleet → snowflake-daily-pnl-report-lookup.yml

Pulls economic indicators from Bloomberg Economics, generates a summary, and distributes it via Confluence and Microsoft Outlook.

naftiko: '0.5'
info:
  label: Bloomberg Economics Briefing Generator
  description: Pulls economic indicators from Bloomberg Economics, generates a summary, and distributes it via Confluence and Microsoft Outlook.
  tags:
  - research
  - bloomberg-economics
  - confluence
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: economics-briefing
    port: 8080
    tools:
    - name: generate-economics-briefing
      description: Generate and distribute an economics briefing.
      inputParameters:
      - name: region
        in: body
        type: string
        description: Economic region (e.g. US, EU, APAC).
      - name: date
        in: body
        type: string
        description: Briefing date YYYY-MM-DD.
      steps:
      - name: get-indicators
        type: call
        call: bloomberg-econ-api.get-indicators
        with:
          region: '{{region}}'
          date: '{{date}}'
      - name: create-page
        type: call
        call: confluence-api.create-page
        with:
          space: RESEARCH
          title: 'Economics Briefing: {{region}} - {{date}}'
          body: 'GDP: {{get-indicators.gdp}}. CPI: {{get-indicators.cpi}}. Unemployment: {{get-indicators.unemployment}}.'
      - name: email-briefing
        type: call
        call: outlook-api.send-mail
        with:
          to: research-distribution@goldmansachs.com
          subject: 'Economics Briefing: {{region}} - {{date}}'
          body: The {{region}} economics briefing for {{date}} is available in Confluence.
  consumes:
  - type: http
    namespace: bloomberg-econ-api
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/datasets
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: indicators
      path: /economics/{{region}}
      inputParameters:
      - name: region
        in: path
      operations:
      - name: get-indicators
        method: GET
  - type: http
    namespace: confluence-api
    baseUri: https://goldmansachs.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_password
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: outlook-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → bloomberg-economics-briefing-generator.yml

Promotes a trained ML model from Azure ML staging to production, validates metrics in Datadog, and notifies stakeholders via Microsoft Teams.

naftiko: '0.5'
info:
  label: Azure Machine Learning Model Promotion
  description: Promotes a trained ML model from Azure ML staging to production, validates metrics in Datadog, and notifies stakeholders via Microsoft Teams.
  tags:
  - ml-ops
  - azure-machine-learning
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ml-promotion
    port: 8080
    tools:
    - name: promote-ml-model
      description: Promote an ML model to production with validation and notification.
      inputParameters:
      - name: model_name
        in: body
        type: string
        description: Azure ML model name.
      - name: version
        in: body
        type: string
        description: Model version to promote.
      steps:
      - name: promote-model
        type: call
        call: azureml-api.promote-model
        with:
          model_name: '{{model_name}}'
          version: '{{version}}'
      - name: validate-metrics
        type: call
        call: datadog-api.query-metrics
        with:
          query: ml.model.accuracy{model:{{model_name}},version:{{version}}}
      - name: notify-team
        type: call
        call: msteams-api.post-message
        with:
          team_id: data-science
          channel_id: deployments
          message: 'Model {{model_name}} v{{version}} promoted to production. Accuracy: {{validate-metrics.value}}.'
  consumes:
  - type: http
    namespace: azureml-api
    baseUri: https://ml.azure.com/api/v1
    authentication:
      type: bearer
      token: $secrets.azure_ml_token
    resources:
    - name: models
      path: /models/{{model_name}}/versions/{{version}}/promote
      inputParameters:
      - name: model_name
        in: path
      - name: version
        in: path
      operations:
      - name: promote-model
        method: POST
  - type: http
    namespace: datadog-api
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: metrics
      path: /query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: msteams-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_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: post-message
        method: POST
Open in Framework → View in Fleet → azure-machine-learning-model-promotion.yml

Checks the status of an Azure DevOps build pipeline run to confirm successful deployment artifacts.

naftiko: '0.5'
info:
  label: Azure DevOps Build Status Check
  description: Checks the status of an Azure DevOps build pipeline run to confirm successful deployment artifacts.
  tags:
  - cicd
  - azure-devops
capability:
  exposes:
  - type: mcp
    namespace: azure-devops
    port: 8080
    tools:
    - name: get-build-status
      description: Get the current status of an Azure DevOps build by ID.
      inputParameters:
      - name: build_id
        in: body
        type: string
        description: Azure DevOps build identifier.
      call: azdo-api.get-build
      with:
        build_id: '{{build_id}}'
  consumes:
  - type: http
    namespace: azdo-api
    baseUri: https://dev.azure.com/goldmansachs
    authentication:
      type: basic
      username: ''
      password: $secrets.azdo_pat
    resources:
    - name: builds
      path: /_apis/build/builds/{{build_id}}
      inputParameters:
      - name: build_id
        in: path
      operations:
      - name: get-build
        method: GET
Open in Framework → View in Fleet → azure-devops-build-status-check.yml

Fetches route configuration from the Kong API Gateway to verify service routing for internal APIs.

naftiko: '0.5'
info:
  label: Kong API Gateway Route Lookup
  description: Fetches route configuration from the Kong API Gateway to verify service routing for internal APIs.
  tags:
  - api-management
  - kong
capability:
  exposes:
  - type: mcp
    namespace: kong
    port: 8080
    tools:
    - name: get-route
      description: Retrieve a Kong route by its identifier.
      inputParameters:
      - name: route_id
        in: body
        type: string
        description: Kong route ID.
      call: kong-api.get-route
      with:
        route_id: '{{route_id}}'
  consumes:
  - type: http
    namespace: kong-api
    baseUri: https://kong-admin.goldmansachs.com
    authentication:
      type: apikey
      key: apikey
      value: $secrets.kong_admin_key
      placement: header
    resources:
    - name: routes
      path: /routes/{{route_id}}
      inputParameters:
      - name: route_id
        in: path
      operations:
      - name: get-route
        method: GET
Open in Framework → View in Fleet → kong-api-gateway-route-lookup.yml

Pulls research reports from FactSet, stores them in SharePoint, and notifies portfolio managers via Microsoft Teams.

naftiko: '0.5'
info:
  label: FactSet Research Distribution Pipeline
  description: Pulls research reports from FactSet, stores them in SharePoint, and notifies portfolio managers via Microsoft Teams.
  tags:
  - research
  - factset
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: research-distribution
    port: 8080
    tools:
    - name: distribute-research
      description: Pull and distribute research reports to portfolio managers.
      inputParameters:
      - name: topic
        in: body
        type: string
        description: Research topic or sector.
      - name: date
        in: body
        type: string
        description: Report date YYYY-MM-DD.
      steps:
      - name: get-research
        type: call
        call: factset-api.search-research
        with:
          topic: '{{topic}}'
          date: '{{date}}'
      - name: store-report
        type: call
        call: sharepoint-api.create-file
        with:
          site_id: research
          path: Reports/{{topic}}/{{date}}.pdf
      - name: notify-pms
        type: call
        call: msteams-api.post-message
        with:
          team_id: portfolio-mgmt
          channel_id: research
          message: 'New {{topic}} research available for {{date}}. Reports: {{get-research.count}}. View in SharePoint.'
  consumes:
  - type: http
    namespace: factset-api
    baseUri: https://api.factset.com/content/factset-research/v1
    authentication:
      type: basic
      username: $secrets.factset_user
      password: $secrets.factset_password
    resources:
    - name: research
      path: /research/articles
      operations:
      - name: search-research
        method: GET
  - type: http
    namespace: sharepoint-api
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: path
        in: path
      operations:
      - name: create-file
        method: PUT
  - type: http
    namespace: msteams-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_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: post-message
        method: POST
Open in Framework → View in Fleet → factset-research-distribution-pipeline.yml

Retrieves the current backlog count and velocity metrics for a trade operations Jira project.

naftiko: '0.5'
info:
  label: Jira Trade Ops Backlog Status
  description: Retrieves the current backlog count and velocity metrics for a trade operations Jira project.
  tags:
  - project-management
  - trading
  - jira
capability:
  exposes:
  - type: mcp
    namespace: backlog-status
    port: 8080
    tools:
    - name: get-backlog-status
      description: Given a Jira project key, return the open issue count and sprint velocity. Use when trade ops managers need backlog health metrics.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The Jira project key.
      call: jira-api.get-backlog
      with:
        project_key: '{{project_key}}'
      outputParameters:
      - name: open_count
        type: integer
        mapping: $.total
      - name: high_priority
        type: integer
        mapping: $.high_priority_count
  consumes:
  - type: http
    namespace: jira-api
    baseUri: https://gs-engineering.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: search
      path: /search
      inputParameters:
      - name: project_key
        in: query
      operations:
      - name: get-backlog
        method: GET
Open in Framework → View in Fleet → jira-trade-ops-backlog-status.yml

Retrieves all user assignments for a critical Okta application and posts an access review summary to the security team in Microsoft Teams for quarterly certification.

naftiko: '0.5'
info:
  label: Okta Application Access Quarterly Review
  description: Retrieves all user assignments for a critical Okta application and posts an access review summary to the security team in Microsoft Teams for quarterly certification.
  tags:
  - identity
  - security
  - okta
  - microsoft-teams
  - access-review
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: access-review
    port: 8080
    tools:
    - name: run-app-access-review
      description: Given an Okta application ID and name, list all assigned users and post a quarterly access review summary to the security Teams channel.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: The Okta application ID to review, e.g. 0oa1abc2defGHI3jk.
      - name: app_name
        in: body
        type: string
        description: Human-readable application name for the report, e.g. Trading Platform.
      steps:
      - name: list-app-users
        type: call
        call: okta.list-app-users
        with:
          app_id: '{{app_id}}'
      - name: post-review
        type: call
        call: msteams.post-review-summary
        with:
          channel: security-access-reviews
          text: 'Q1 access review for {{app_name}}: {{list-app-users.total}} users assigned. Review required by end of quarter.'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://goldmansachs.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: app-users
      path: /apps/{{app_id}}/users
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: list-app-users
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/security/channels/reviews/messages
      operations:
      - name: post-review-summary
        method: POST
Open in Framework → View in Fleet → okta-application-access-quarterly-review.yml

Retrieves active job postings and applicant pipeline statistics from LinkedIn and posts a weekly talent report to the HR team in Microsoft Teams.

naftiko: '0.5'
info:
  label: LinkedIn Talent Pipeline Digest
  description: Retrieves active job postings and applicant pipeline statistics from LinkedIn and posts a weekly talent report to the HR team in Microsoft Teams.
  tags:
  - hr
  - recruiting
  - linkedin
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: talent-reporting
    port: 8080
    tools:
    - name: digest-talent-pipeline
      description: Fetch active LinkedIn job postings and applicant counts for Goldman Sachs and post a weekly pipeline summary to the HR Teams channel.
      inputParameters:
      - name: organization_id
        in: body
        type: string
        description: The LinkedIn organization URN for Goldman Sachs.
      steps:
      - name: get-postings
        type: call
        call: linkedin.list-job-postings
        with:
          organization_id: '{{organization_id}}'
      - name: post-digest
        type: call
        call: msteams.post-talent-digest
        with:
          channel: hr-talent-acquisition
          text: 'Weekly talent pipeline: {{get-postings.total}} active postings, {{get-postings.applicant_count}} total applicants.'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: job-postings
      path: /jobPostings
      operations:
      - name: list-job-postings
        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/hr/channels/general/messages
      operations:
      - name: post-talent-digest
        method: POST
Open in Framework → View in Fleet → linkedin-talent-pipeline-digest.yml

Fetches pull request details from GitHub, runs static analysis via SonarQube, and posts compliance status to Confluence.

naftiko: '0.5'
info:
  label: GitHub PR Review and Compliance Gate
  description: Fetches pull request details from GitHub, runs static analysis via SonarQube, and posts compliance status to Confluence.
  tags:
  - cicd
  - github
  - sonarqube
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: pr-compliance
    port: 8080
    tools:
    - name: review-pr-compliance
      description: Review a pull request for code quality and compliance.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository name.
      - name: pr_number
        in: body
        type: string
        description: Pull request number.
      steps:
      - name: get-pr
        type: call
        call: github-api.get-pull
        with:
          repo: '{{repo}}'
          pr_number: '{{pr_number}}'
      - name: run-analysis
        type: call
        call: sonarqube-api.get-analysis
        with:
          project: '{{repo}}'
      - name: post-status
        type: call
        call: confluence-api.create-page
        with:
          space: ENGINEERING
          title: 'PR #{{pr_number}} Compliance: {{repo}}'
          body: 'Author: {{get-pr.author}}. Quality gate: {{run-analysis.quality_gate}}. Bugs: {{run-analysis.bugs}}.'
  consumes:
  - type: http
    namespace: github-api
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: pulls
      path: /repos/goldman-sachs/{{repo}}/pulls/{{pr_number}}
      inputParameters:
      - name: repo
        in: path
      - name: pr_number
        in: path
      operations:
      - name: get-pull
        method: GET
  - type: http
    namespace: sonarqube-api
    baseUri: https://sonarqube.goldmansachs.com/api
    authentication:
      type: bearer
      token: $secrets.sonarqube_token
    resources:
    - name: analyses
      path: /qualitygates/project_status
      operations:
      - name: get-analysis
        method: GET
  - type: http
    namespace: confluence-api
    baseUri: https://goldmansachs.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_password
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → github-pr-review-and-compliance-gate.yml

Pulls candidate applications from LinkedIn, matches them in Workday, and creates interview scheduling tasks in Microsoft Teams.

naftiko: '0.5'
info:
  label: LinkedIn Recruiting Pipeline Sync
  description: Pulls candidate applications from LinkedIn, matches them in Workday, and creates interview scheduling tasks in Microsoft Teams.
  tags:
  - recruiting
  - linkedin
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: recruiting-sync
    port: 8080
    tools:
    - name: sync-recruiting-pipeline
      description: Sync LinkedIn candidates into Workday and schedule interviews.
      inputParameters:
      - name: job_id
        in: body
        type: string
        description: LinkedIn job posting ID.
      steps:
      - name: get-applicants
        type: call
        call: linkedin-api.get-applications
        with:
          job_id: '{{job_id}}'
      - name: create-candidates
        type: call
        call: workday-api.create-candidate
        with:
          name: '{{get-applicants.top_candidate.name}}'
          email: '{{get-applicants.top_candidate.email}}'
      - name: schedule-interview
        type: call
        call: msteams-api.post-message
        with:
          team_id: recruiting-team
          channel_id: interviews
          message: 'New candidate from LinkedIn: {{get-applicants.top_candidate.name}} for {{job_id}}. Workday ID: {{create-candidates.id}}.'
  consumes:
  - type: http
    namespace: linkedin-api
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: applications
      path: /jobApplications
      operations:
      - name: get-applications
        method: GET
  - type: http
    namespace: workday-api
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: candidates
      path: /goldman-sachs/recruiting/candidates
      operations:
      - name: create-candidate
        method: POST
  - type: http
    namespace: msteams-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_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: post-message
        method: POST
Open in Framework → View in Fleet → linkedin-recruiting-pipeline-sync.yml

Retrieves the current status, priority, and assignment details of a ServiceNow incident for Goldman Sachs IT operations triage.

naftiko: '0.5'
info:
  label: ServiceNow Incident Status Lookup
  description: Retrieves the current status, priority, and assignment details of a ServiceNow incident for Goldman Sachs IT operations triage.
  tags:
  - itsm
  - servicenow
  - incident-management
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: incident-lookup
    port: 8080
    tools:
    - name: get-incident-status
      description: Given a ServiceNow incident number, returns the current state, priority, and assigned group. Use for IT support inquiries.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number (e.g., INC0012345).
      call: servicenow-incidents.get-incident
      with:
        number: '{{incident_number}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.result[0].state
      - name: priority
        type: string
        mapping: $.result[0].priority
  consumes:
  - type: http
    namespace: servicenow-incidents
    baseUri: https://goldmansachs.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/incident
      inputParameters:
      - name: number
        in: query
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → servicenow-incident-status-lookup.yml

Processes employee termination in Workday, revokes all Okta application access, and archives documents in Google Drive.

naftiko: '0.5'
info:
  label: Workday Termination Offboarding Chain
  description: Processes employee termination in Workday, revokes all Okta application access, and archives documents in Google Drive.
  tags:
  - hr
  - workday
  - okta
  - google-drive
capability:
  exposes:
  - type: mcp
    namespace: termination-offboarding
    port: 8080
    tools:
    - name: process-termination
      description: Orchestrate employee termination including access revocation and archival.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: Workday worker ID.
      - name: termination_date
        in: body
        type: string
        description: Termination date YYYY-MM-DD.
      steps:
      - name: get-employee
        type: call
        call: workday-api.get-worker
        with:
          worker_id: '{{worker_id}}'
      - name: revoke-access
        type: call
        call: okta-api.deactivate-user
        with:
          login: '{{get-employee.work_email}}'
      - name: archive-docs
        type: call
        call: gdrive-api.move-file
        with:
          file_id: '{{get-employee.drive_folder_id}}'
          destination: archived-employees/{{worker_id}}
  consumes:
  - type: http
    namespace: workday-api
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /goldman-sachs/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: okta-api
    baseUri: https://goldmansachs.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: users
      path: /users/{{login}}/lifecycle/deactivate
      inputParameters:
      - name: login
        in: path
      operations:
      - name: deactivate-user
        method: POST
  - type: http
    namespace: gdrive-api
    baseUri: https://www.googleapis.com/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_drive_token
    resources:
    - name: files
      path: /files/{{file_id}}
      inputParameters:
      - name: file_id
        in: path
      operations:
      - name: move-file
        method: PATCH
Open in Framework → View in Fleet → workday-termination-offboarding-chain.yml

Pulls current headcount by division and compensation band from Workday for finance and HR planning.

naftiko: '0.5'
info:
  label: Workday Headcount and Compensation Snapshot
  description: Pulls current headcount by division and compensation band from Workday for finance and HR planning.
  tags:
  - hr
  - finance
  - workday
  - reporting
  - headcount
capability:
  exposes:
  - type: mcp
    namespace: hr-reporting
    port: 8080
    tools:
    - name: get-headcount-snapshot
      description: Returns active employees grouped by division and cost center with employment type and compensation band from Workday. Use for workforce planning.
      call: workday.headcount-export
      outputParameters:
      - name: employees
        type: array
        mapping: $.data
        items:
        - name: employee_id
          type: string
          mapping: $.id
        - name: full_name
          type: string
          mapping: $.displayName
        - name: division
          type: string
          mapping: $.businessUnit
        - name: cost_center
          type: string
          mapping: $.costCenter
        - name: comp_band
          type: string
          mapping: $.compensationGrade
  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: /goldman-sachs/workers
      operations:
      - name: headcount-export
        method: GET
Open in Framework → View in Fleet → workday-headcount-and-compensation-snapshot.yml

When an employee changes role in Workday, updates their Okta group memberships to reflect the new job function.

naftiko: '0.5'
info:
  label: Workday Role Change and Okta Access Sync
  description: When an employee changes role in Workday, updates their Okta group memberships to reflect the new job function.
  tags:
  - hr
  - identity
  - workday
  - okta
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: hr-access
    port: 8080
    tools:
    - name: sync-role-change
      description: Given a Workday employee ID, new Okta group ID, and old group ID, reassign the employee's Okta group memberships to reflect their new role.
      inputParameters:
      - name: okta_user_id
        in: body
        type: string
        description: The Okta user ID to reassign groups for.
      - name: old_group_id
        in: body
        type: string
        description: The Okta group ID to remove the user from.
      - name: new_group_id
        in: body
        type: string
        description: The Okta group ID to add the user to.
      steps:
      - name: remove-old-group
        type: call
        call: okta.remove-user-from-group
        with:
          user_id: '{{okta_user_id}}'
          group_id: '{{old_group_id}}'
      - name: add-new-group
        type: call
        call: okta-assign.add-user-to-group
        with:
          user_id: '{{okta_user_id}}'
          group_id: '{{new_group_id}}'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://goldmansachs.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: group-members
      path: /groups/{{group_id}}/users/{{user_id}}
      inputParameters:
      - name: group_id
        in: path
      - name: user_id
        in: path
      operations:
      - name: remove-user-from-group
        method: DELETE
  - type: http
    namespace: okta-assign
    baseUri: https://goldmansachs.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: group-members
      path: /groups/{{group_id}}/users/{{user_id}}
      inputParameters:
      - name: group_id
        in: path
      - name: user_id
        in: path
      operations:
      - name: add-user-to-group
        method: PUT
Open in Framework → View in Fleet → workday-role-change-and-okta-access-sync.yml

Retrieves employee directory information from Workday by employee ID including department, manager, and contact details.

naftiko: '0.5'
info:
  label: Workday Employee Directory Lookup
  description: Retrieves employee directory information from Workday by employee ID including department, manager, and contact details.
  tags:
  - hr
  - directory
  - workday
capability:
  exposes:
  - type: mcp
    namespace: employee-directory
    port: 8080
    tools:
    - name: lookup-employee
      description: Given a Workday employee ID, return their profile information. Use when HR or managers need to look up employee details.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      call: workday-api.get-worker
      with:
        employee_id: '{{employee_id}}'
      outputParameters:
      - name: full_name
        type: string
        mapping: $.worker.full_name
      - name: department
        type: string
        mapping: $.worker.department
      - name: manager
        type: string
        mapping: $.worker.manager_name
      - name: email
        type: string
        mapping: $.worker.work_email
  consumes:
  - type: http
    namespace: workday-api
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /gs/workers/{{employee_id}}
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-worker
        method: GET
Open in Framework → View in Fleet → workday-employee-directory-lookup.yml

Retrieves a contact record from HubSpot by email for marketing and relationship management activities.

naftiko: '0.5'
info:
  label: HubSpot Contact Lookup
  description: Retrieves a contact record from HubSpot by email for marketing and relationship management activities.
  tags:
  - marketing
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: hubspot
    port: 8080
    tools:
    - name: get-contact-by-email
      description: Look up a HubSpot contact by email address.
      inputParameters:
      - name: email
        in: body
        type: string
        description: Contact email address.
      call: hubspot-api.search-contacts
      with:
        email: '{{email}}'
  consumes:
  - type: http
    namespace: hubspot-api
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /objects/contacts/search
      operations:
      - name: search-contacts
        method: POST
Open in Framework → View in Fleet → hubspot-contact-lookup.yml

Searches SharePoint Online document libraries for policy or compliance documents by keyword.

naftiko: '0.5'
info:
  label: SharePoint Document Library Search
  description: Searches SharePoint Online document libraries for policy or compliance documents by keyword.
  tags:
  - collaboration
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: sharepoint
    port: 8080
    tools:
    - name: search-documents
      description: Search for documents in SharePoint by keyword.
      inputParameters:
      - name: query
        in: body
        type: string
        description: Search keyword or phrase.
      call: sharepoint-api.search
      with:
        query: '{{query}}'
  consumes:
  - type: http
    namespace: sharepoint-api
    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
Open in Framework → View in Fleet → sharepoint-document-library-search.yml

Provisions Azure resources via Terraform, configures monitoring in Datadog, and logs the deployment in ServiceNow as a change request.

naftiko: '0.5'
info:
  label: Azure Infrastructure Provisioning Pipeline
  description: Provisions Azure resources via Terraform, configures monitoring in Datadog, and logs the deployment in ServiceNow as a change request.
  tags:
  - infrastructure
  - microsoft-azure
  - datadog
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: azure-provisioning
    port: 8080
    tools:
    - name: provision-azure-infra
      description: Provision cloud infrastructure with monitoring and change tracking.
      inputParameters:
      - name: environment
        in: body
        type: string
        description: Target environment (dev/staging/prod).
      - name: resource_type
        in: body
        type: string
        description: Azure resource type to provision.
      steps:
      - name: apply-terraform
        type: call
        call: terraform-api.create-run
        with:
          workspace: gs-{{environment}}
          message: Provision {{resource_type}} in {{environment}}
      - name: setup-monitoring
        type: call
        call: datadog-api.create-monitor
        with:
          name: '{{resource_type}}-{{environment}}'
          query: avg(last_5m):avg:azure.{{resource_type}}.health{env:{{environment}}} < 1
      - name: log-change
        type: call
        call: servicenow-api.create-change
        with:
          short_description: 'Azure provisioning: {{resource_type}} in {{environment}}'
          description: 'Terraform run: {{apply-terraform.id}}. Monitor: {{setup-monitoring.id}}.'
          category: infrastructure
  consumes:
  - type: http
    namespace: terraform-api
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: runs
      path: /workspaces/{{workspace}}/runs
      inputParameters:
      - name: workspace
        in: path
      operations:
      - name: create-run
        method: POST
  - type: http
    namespace: datadog-api
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor
      operations:
      - name: create-monitor
        method: POST
  - type: http
    namespace: servicenow-api
    baseUri: https://goldmansachs.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
Open in Framework → View in Fleet → azure-infrastructure-provisioning-pipeline.yml

Compiles a sprint planning digest from Jira for the platform engineering team and posts a prioritized summary to the engineering Teams channel.

naftiko: '0.5'
info:
  label: Jira Engineering Sprint Digest
  description: Compiles a sprint planning digest from Jira for the platform engineering team and posts a prioritized summary to the engineering Teams channel.
  tags:
  - devops
  - jira
  - microsoft-teams
  - sprint-planning
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: devops-reporting
    port: 8080
    tools:
    - name: digest-sprint-backlog
      description: Given a Jira project key and sprint name, retrieve all open sprint issues and post a digest to the engineering Teams channel.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The Jira project key, e.g. PLAT.
      - name: sprint_name
        in: body
        type: string
        description: The sprint name to filter, e.g. Sprint 42.
      steps:
      - name: get-sprint-issues
        type: call
        call: jira.search-issues
        with:
          jql: project={{project_key}} AND sprint='{{sprint_name}}' AND status!=Done
      - name: post-digest
        type: call
        call: msteams.post-sprint-digest
        with:
          channel: platform-engineering
          text: 'Sprint digest {{sprint_name}} ({{project_key}}): {{get-sprint-issues.total}} open issues.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://goldmansachs.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /search
      operations:
      - name: search-issues
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/engineering/channels/general/messages
      operations:
      - name: post-sprint-digest
        method: POST
Open in Framework → View in Fleet → jira-engineering-sprint-digest.yml

Extracts portfolio analytics from Bloomberg, calculates risk metrics in Snowflake, and publishes results to Power BI.

naftiko: '0.5'
info:
  label: Bloomberg Portfolio Analytics Pipeline
  description: Extracts portfolio analytics from Bloomberg, calculates risk metrics in Snowflake, and publishes results to Power BI.
  tags:
  - portfolio-management
  - bloomberg-enterprise-data
  - snowflake
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: portfolio-analytics
    port: 8080
    tools:
    - name: run-portfolio-analytics
      description: Generate portfolio analytics with risk metrics and visualizations.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: Bloomberg portfolio identifier.
      - name: as_of_date
        in: body
        type: string
        description: Valuation date YYYY-MM-DD.
      steps:
      - name: get-analytics
        type: call
        call: bloomberg-api.get-portfolio-analytics
        with:
          portfolio_id: '{{portfolio_id}}'
          as_of_date: '{{as_of_date}}'
      - name: calc-risk
        type: call
        call: snowflake-api.run-query
        with:
          query: CALL risk.calculate_var('{{portfolio_id}}', '{{as_of_date}}')
      - name: refresh-dashboard
        type: call
        call: powerbi-api.refresh-dataset
        with:
          dataset_id: portfolio-analytics
  consumes:
  - type: http
    namespace: bloomberg-api
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/datasets
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: portfolios
      path: /portfolios/{{portfolio_id}}/analytics
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: get-portfolio-analytics
        method: GET
  - type: http
    namespace: snowflake-api
    baseUri: https://goldmansachs.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-api
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → bloomberg-portfolio-analytics-pipeline.yml

Retrieves SLO compliance status from Datadog for all trading system services and posts a daily compliance digest to the technology operations team.

naftiko: '0.5'
info:
  label: Datadog Trading Infrastructure SLO Monitor
  description: Retrieves SLO compliance status from Datadog for all trading system services and posts a daily compliance digest to the technology operations team.
  tags:
  - observability
  - datadog
  - microsoft-teams
  - slo
  - trading-infrastructure
capability:
  exposes:
  - type: mcp
    namespace: slo-reporting
    port: 8080
    tools:
    - name: digest-trading-slo-compliance
      description: Retrieve all SLO statuses for trading infrastructure services from Datadog and post a daily compliance report to the technology operations Teams channel.
      inputParameters:
      - name: timeframe
        in: body
        type: string
        description: 'SLO evaluation window: 7d, 30d, or 90d.'
      steps:
      - name: get-slos
        type: call
        call: datadog.list-slos
        with:
          timeframe: '{{timeframe}}'
      - name: post-report
        type: call
        call: msteams.post-slo-report
        with:
          channel: tech-ops-slo
          text: 'Trading SLO Report ({{timeframe}}): {{get-slos.compliant}} compliant, {{get-slos.breached}} breached.'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: slos
      path: /slo
      operations:
      - name: list-slos
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/tech-ops/channels/slo/messages
      operations:
      - name: post-slo-report
        method: POST
Open in Framework → View in Fleet → datadog-trading-infrastructure-slo-monitor.yml

Fetches metadata and download links for a document stored in Google Drive used for internal collaboration.

naftiko: '0.5'
info:
  label: Google Drive Document Retrieval
  description: Fetches metadata and download links for a document stored in Google Drive used for internal collaboration.
  tags:
  - collaboration
  - google-drive
capability:
  exposes:
  - type: mcp
    namespace: google-drive
    port: 8080
    tools:
    - name: get-document
      description: Retrieve metadata for a Google Drive file by its ID.
      inputParameters:
      - name: file_id
        in: body
        type: string
        description: Google Drive file identifier.
      call: gdrive-api.get-file
      with:
        file_id: '{{file_id}}'
  consumes:
  - type: http
    namespace: gdrive-api
    baseUri: https://www.googleapis.com/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_drive_token
    resources:
    - name: files
      path: /files/{{file_id}}
      inputParameters:
      - name: file_id
        in: path
      operations:
      - name: get-file
        method: GET
Open in Framework → View in Fleet → google-drive-document-retrieval.yml

Assigns the appropriate Microsoft 365 license to a new hire via Microsoft Graph based on their job role and department.

naftiko: '0.5'
info:
  label: Microsoft 365 License Provisioning for New Hires
  description: Assigns the appropriate Microsoft 365 license to a new hire via Microsoft Graph based on their job role and department.
  tags:
  - hr
  - identity
  - microsoft-365
  - onboarding
  - license-management
capability:
  exposes:
  - type: mcp
    namespace: m365-provisioning
    port: 8080
    tools:
    - name: assign-m365-license
      description: Given a new hire user principal name and job role, assign the appropriate Microsoft 365 license SKU via Microsoft Graph API.
      inputParameters:
      - name: user_upn
        in: body
        type: string
        description: The new hire user principal name, e.g. john.doe@goldmansachs.com.
      - name: license_sku_id
        in: body
        type: string
        description: The Microsoft 365 license SKU ID to assign, e.g. E5 SKU GUID.
      call: msgraph.assign-license
      with:
        user_upn: '{{user_upn}}'
        license_sku_id: '{{license_sku_id}}'
      outputParameters:
      - name: user_id
        type: string
        mapping: $.id
      - name: display_name
        type: string
        mapping: $.displayName
  consumes:
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: user-licenses
      path: /users/{{user_upn}}/assignLicense
      inputParameters:
      - name: user_upn
        in: path
      operations:
      - name: assign-license
        method: POST
Open in Framework → View in Fleet → microsoft-365-license-provisioning-for-new-hires.yml

Monitors ECS service metrics in CloudWatch, adjusts desired count, and logs the scaling event in ServiceNow.

naftiko: '0.5'
info:
  label: Amazon ECS Service Scaling Pipeline
  description: Monitors ECS service metrics in CloudWatch, adjusts desired count, and logs the scaling event in ServiceNow.
  tags:
  - infrastructure
  - amazon-ecs
  - cloudwatch
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: ecs-scaling
    port: 8080
    tools:
    - name: scale-ecs-service
      description: Auto-scale an ECS service based on metrics and log the event.
      inputParameters:
      - name: cluster
        in: body
        type: string
        description: ECS cluster name.
      - name: service
        in: body
        type: string
        description: ECS service name.
      - name: desired_count
        in: body
        type: string
        description: Target task count.
      steps:
      - name: get-metrics
        type: call
        call: cloudwatch-api.get-metric-data
        with:
          metric: CPUUtilization
          dimensions: ClusterName={{cluster}},ServiceName={{service}}
      - name: scale-service
        type: call
        call: ecs-api.update-service
        with:
          cluster: '{{cluster}}'
          service: '{{service}}'
          desired_count: '{{desired_count}}'
      - name: log-event
        type: call
        call: servicenow-api.create-change
        with:
          short_description: 'ECS scaling: {{service}} to {{desired_count}}'
          description: 'Cluster: {{cluster}}. Current CPU: {{get-metrics.value}}%. New count: {{desired_count}}.'
          category: auto_scaling
  consumes:
  - type: http
    namespace: cloudwatch-api
    baseUri: https://monitoring.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_sig_v4
      placement: header
    resources:
    - name: metrics
      path: /?Action=GetMetricData
      operations:
      - name: get-metric-data
        method: POST
  - type: http
    namespace: ecs-api
    baseUri: https://ecs.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_sig_v4
      placement: header
    resources:
    - name: services
      path: /?Action=UpdateService
      operations:
      - name: update-service
        method: POST
  - type: http
    namespace: servicenow-api
    baseUri: https://goldmansachs.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
Open in Framework → View in Fleet → amazon-ecs-service-scaling-pipeline.yml

When a Salesforce opportunity moves to Closed-Won, creates a ServiceNow onboarding project task and notifies the relationship manager in Teams.

naftiko: '0.5'
info:
  label: Salesforce Client Onboarding Workflow
  description: When a Salesforce opportunity moves to Closed-Won, creates a ServiceNow onboarding project task and notifies the relationship manager in Teams.
  tags:
  - sales
  - crm
  - salesforce
  - servicenow
  - microsoft-teams
  - client-onboarding
capability:
  exposes:
  - type: mcp
    namespace: client-onboarding
    port: 8080
    tools:
    - name: start-client-onboarding
      description: Given a Salesforce opportunity ID at Closed-Won, retrieve the deal details, create a ServiceNow onboarding project, and notify the relationship manager in Teams.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce Opportunity record ID to onboard.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: create-onboarding-project
        type: call
        call: servicenow.create-project
        with:
          short_description: 'Client onboarding: {{get-opportunity.account_name}}'
          category: client_onboarding
          owner: '{{get-opportunity.owner_email}}'
      - name: notify-rm
        type: call
        call: msteams.notify-rm
        with:
          recipient: '{{get-opportunity.owner_email}}'
          text: 'Client onboarding started for {{get-opportunity.account_name}}. Project: {{create-onboarding-project.number}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://goldmansachs.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: servicenow
    baseUri: https://goldmansachs.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: projects
      path: /table/pm_project
      operations:
      - name: create-project
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient}}/sendMail
      inputParameters:
      - name: recipient
        in: path
      operations:
      - name: notify-rm
        method: POST
Open in Framework → View in Fleet → salesforce-client-onboarding-workflow.yml

Triggers a GitHub Actions release workflow, monitors build status in Datadog, and publishes release notes to Confluence.

naftiko: '0.5'
info:
  label: GitHub Actions Release Pipeline
  description: Triggers a GitHub Actions release workflow, monitors build status in Datadog, and publishes release notes to Confluence.
  tags:
  - cicd
  - github-actions
  - datadog
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: release-pipeline
    port: 8080
    tools:
    - name: execute-release
      description: Trigger, monitor, and document a software release.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository.
      - name: version
        in: body
        type: string
        description: Release version tag.
      steps:
      - name: trigger-release
        type: call
        call: github-api.dispatch-workflow
        with:
          repo: '{{repo}}'
          workflow: release.yml
          ref: v{{version}}
      - name: monitor-build
        type: call
        call: datadog-api.query-metrics
        with:
          query: ci.pipeline.duration{repo:{{repo}},version:{{version}}}
      - name: publish-notes
        type: call
        call: confluence-api.create-page
        with:
          space: RELEASES
          title: Release {{repo}} v{{version}}
          body: 'Version: {{version}}. Build time: {{monitor-build.avg}}ms. Status: complete.'
  consumes:
  - type: http
    namespace: github-api
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflows
      path: /repos/goldman-sachs/{{repo}}/actions/workflows/{{workflow}}/dispatches
      inputParameters:
      - name: repo
        in: path
      - name: workflow
        in: path
      operations:
      - name: dispatch-workflow
        method: POST
  - type: http
    namespace: datadog-api
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: metrics
      path: /query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: confluence-api
    baseUri: https://goldmansachs.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_password
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → github-actions-release-pipeline.yml

Detects network anomalies from Cisco devices, creates a PagerDuty alert, and opens a ServiceNow change request for remediation.

naftiko: '0.5'
info:
  label: Cisco Network Incident Response Chain
  description: Detects network anomalies from Cisco devices, creates a PagerDuty alert, and opens a ServiceNow change request for remediation.
  tags:
  - networking
  - cisco
  - pagerduty
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: network-incident
    port: 8080
    tools:
    - name: respond-to-network-incident
      description: Detect and respond to Cisco network incidents.
      inputParameters:
      - name: device_id
        in: body
        type: string
        description: Cisco device identifier.
      steps:
      - name: get-status
        type: call
        call: cisco-api.get-device-status
        with:
          device_id: '{{device_id}}'
      - name: alert-noc
        type: call
        call: pagerduty-api.create-event
        with:
          routing_key: $secrets.pagerduty_routing_key
          summary: 'Network incident: {{device_id}}. Status: {{get-status.health}}. Interface errors: {{get-status.error_count}}.'
      - name: open-change
        type: call
        call: servicenow-api.create-change
        with:
          short_description: 'Network remediation: {{device_id}}'
          description: 'Device: {{device_id}}. Health: {{get-status.health}}. PagerDuty: {{alert-noc.dedup_key}}.'
          category: network
  consumes:
  - type: http
    namespace: cisco-api
    baseUri: https://sandboxdnac.cisco.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-status
        method: GET
  - type: http
    namespace: pagerduty-api
    baseUri: https://events.pagerduty.com/v2
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: events
      path: /enqueue
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: servicenow-api
    baseUri: https://goldmansachs.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
Open in Framework → View in Fleet → cisco-network-incident-response-chain.yml

Audits Goldman Sachs GitHub repositories for required security settings including branch protection and secret scanning, filing Jira compliance tasks for violations.

naftiko: '0.5'
info:
  label: GitHub Repository Security Policy Audit
  description: Audits Goldman Sachs GitHub repositories for required security settings including branch protection and secret scanning, filing Jira compliance tasks for violations.
  tags:
  - security
  - devops
  - github
  - jira
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: repo-governance
    port: 8080
    tools:
    - name: enforce-repo-security-policy
      description: Given a GitHub repository and default branch, check branch protection rules; if non-compliant, create a Jira task for the security team.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository full name, e.g. goldman-sachs/platform.
      - name: default_branch
        in: body
        type: string
        description: The default branch to check, e.g. main.
      steps:
      - name: check-protection
        type: call
        call: github.get-branch-protection
        with:
          repo: '{{repo}}'
          branch: '{{default_branch}}'
      - name: create-compliance-task
        type: call
        call: jira.create-security-task
        with:
          project_key: SEC
          summary: 'Repo policy violation: {{repo}}'
          description: Branch {{default_branch}} protection missing required checks.
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: branch-protection
      path: /repos/{{repo}}/branches/{{branch}}/protection
      inputParameters:
      - name: repo
        in: path
      - name: branch
        in: path
      operations:
      - name: get-branch-protection
        method: GET
  - type: http
    namespace: jira
    baseUri: https://goldmansachs.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-security-task
        method: POST
Open in Framework → View in Fleet → github-repository-security-policy-audit.yml

Deploys a Cloud Function on GCP, sets up monitoring in Datadog, and logs the deployment in ServiceNow.

naftiko: '0.5'
info:
  label: Google Cloud Function Deployment Pipeline
  description: Deploys a Cloud Function on GCP, sets up monitoring in Datadog, and logs the deployment in ServiceNow.
  tags:
  - serverless
  - google-cloud-platform
  - datadog
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: gcf-deployment
    port: 8080
    tools:
    - name: deploy-cloud-function
      description: Deploy a Google Cloud Function with monitoring and change tracking.
      inputParameters:
      - name: function_name
        in: body
        type: string
        description: Cloud Function name.
      - name: region
        in: body
        type: string
        description: GCP region.
      steps:
      - name: deploy-function
        type: call
        call: gcp-api.create-function
        with:
          name: '{{function_name}}'
          region: '{{region}}'
      - name: setup-monitor
        type: call
        call: datadog-api.create-monitor
        with:
          name: GCF-{{function_name}}
          query: avg(last_5m):avg:gcp.cloudfunctions.function.execution_count{function_name:{{function_name}}} < 1
      - name: log-deployment
        type: call
        call: servicenow-api.create-change
        with:
          short_description: 'GCF deployment: {{function_name}}'
          description: 'Region: {{region}}. Monitor: {{setup-monitor.id}}.'
          category: serverless
  consumes:
  - type: http
    namespace: gcp-api
    baseUri: https://cloudfunctions.googleapis.com/v2
    authentication:
      type: bearer
      token: $secrets.gcp_token
    resources:
    - name: functions
      path: /projects/goldman-sachs/locations/{{region}}/functions
      inputParameters:
      - name: region
        in: path
      operations:
      - name: create-function
        method: POST
  - type: http
    namespace: datadog-api
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor
      operations:
      - name: create-monitor
        method: POST
  - type: http
    namespace: servicenow-api
    baseUri: https://goldmansachs.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
Open in Framework → View in Fleet → google-cloud-function-deployment-pipeline.yml

Retrieves the Azure AD group memberships for a specified user principal name.

naftiko: '0.5'
info:
  label: Azure AD User Group Membership Lookup
  description: Retrieves the Azure AD group memberships for a specified user principal name.
  tags:
  - security
  - identity
  - azure-ad
capability:
  exposes:
  - type: mcp
    namespace: group-membership
    port: 8080
    tools:
    - name: get-memberships
      description: Given a user principal name, return their Azure AD group memberships. Use when security teams need to audit user access.
      inputParameters:
      - name: user_upn
        in: body
        type: string
        description: The user principal name (email).
      call: azure-ad.get-user-groups
      with:
        user_upn: '{{user_upn}}'
      outputParameters:
      - name: group_count
        type: integer
        mapping: $.value.length
      - name: groups
        type: string
        mapping: $.value[*].displayName
  consumes:
  - type: http
    namespace: azure-ad
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.azure_ad_token
    resources:
    - name: user-groups
      path: /users/{{user_upn}}/memberOf
      inputParameters:
      - name: user_upn
        in: path
      operations:
      - name: get-user-groups
        method: GET
Open in Framework → View in Fleet → azure-ad-user-group-membership-lookup.yml

Validates a proposed trade against compliance rules in Snowflake, checks market conditions via Bloomberg, and logs the decision in Jira.

naftiko: '0.5'
info:
  label: Trade Execution Compliance Check
  description: Validates a proposed trade against compliance rules in Snowflake, checks market conditions via Bloomberg, and logs the decision in Jira.
  tags:
  - compliance
  - trading
  - snowflake
  - bloomberg-enterprise-data
  - jira
capability:
  exposes:
  - type: mcp
    namespace: trade-compliance
    port: 8080
    tools:
    - name: check-trade-compliance
      description: Validate trade compliance and log the outcome.
      inputParameters:
      - name: trade_id
        in: body
        type: string
        description: Internal trade identifier.
      - name: instrument
        in: body
        type: string
        description: Instrument ticker.
      steps:
      - name: compliance-rules
        type: call
        call: snowflake-api.run-query
        with:
          query: SELECT * FROM compliance.rules WHERE instrument = '{{instrument}}'
      - name: market-check
        type: call
        call: bloomberg-api.get-quote
        with:
          ticker: '{{instrument}}'
      - name: log-decision
        type: call
        call: jira-api.create-issue
        with:
          project: COMPLIANCE
          summary: Trade {{trade_id}} compliance review
          description: 'Instrument: {{instrument}}. Price: {{market-check.last_price}}. Rules matched: {{compliance-rules.count}}.'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://goldmansachs.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: bloomberg-api
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/datasets
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: quotes
      path: /quotes/{{ticker}}
      inputParameters:
      - name: ticker
        in: path
      operations:
      - name: get-quote
        method: GET
  - type: http
    namespace: jira-api
    baseUri: https://goldmansachs.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_password
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → trade-execution-compliance-check.yml

Scans expense reports from SAP Concur for anomalies, flags suspicious entries in Snowflake, and escalates to compliance via ServiceNow.

naftiko: '0.5'
info:
  label: SAP Concur Expense Fraud Detection
  description: Scans expense reports from SAP Concur for anomalies, flags suspicious entries in Snowflake, and escalates to compliance via ServiceNow.
  tags:
  - finance
  - sap-concur
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: expense-fraud
    port: 8080
    tools:
    - name: detect-expense-fraud
      description: Scan expense reports for fraudulent or suspicious patterns.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: SAP Concur expense report ID.
      steps:
      - name: get-expenses
        type: call
        call: concur-api.get-report
        with:
          report_id: '{{report_id}}'
      - name: check-anomalies
        type: call
        call: snowflake-api.run-query
        with:
          query: SELECT * FROM finance.expense_anomaly_model WHERE report_id = '{{report_id}}'
      - name: escalate
        type: call
        call: servicenow-api.create-incident
        with:
          short_description: 'Expense anomaly: report {{report_id}}'
          description: 'Total: {{get-expenses.total}}. Anomalies: {{check-anomalies.count}}. Risk score: {{check-anomalies.risk_score}}.'
          category: expense_compliance
  consumes:
  - type: http
    namespace: concur-api
    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: snowflake-api
    baseUri: https://goldmansachs.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: servicenow-api
    baseUri: https://goldmansachs.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → sap-concur-expense-fraud-detection.yml

Fetches current open alert violations from New Relic for a specified policy to surface active infrastructure issues.

naftiko: '0.5'
info:
  label: New Relic Alert Status Lookup
  description: Fetches current open alert violations from New Relic for a specified policy to surface active infrastructure issues.
  tags:
  - monitoring
  - new-relic
capability:
  exposes:
  - type: mcp
    namespace: new-relic
    port: 8080
    tools:
    - name: get-open-violations
      description: List currently open alert violations for a given policy ID.
      inputParameters:
      - name: policy_id
        in: body
        type: string
        description: New Relic alert policy ID.
      call: newrelic-api.list-violations
      with:
        policy_id: '{{policy_id}}'
  consumes:
  - type: http
    namespace: newrelic-api
    baseUri: https://api.newrelic.com/v2
    authentication:
      type: apikey
      key: Api-Key
      value: $secrets.newrelic_api_key
      placement: header
    resources:
    - name: violations
      path: /alerts_violations.json
      operations:
      - name: list-violations
        method: GET
Open in Framework → View in Fleet → new-relic-alert-status-lookup.yml

Monitors Power Automate flow runs for failures, creates incidents in ServiceNow, and notifies flow owners via Microsoft Teams.

naftiko: '0.5'
info:
  label: Power Automate Workflow Failure Handler
  description: Monitors Power Automate flow runs for failures, creates incidents in ServiceNow, and notifies flow owners via Microsoft Teams.
  tags:
  - automation
  - microsoft-power-automate
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: flow-failure
    port: 8080
    tools:
    - name: handle-flow-failure
      description: Detect Power Automate failures and create incident notifications.
      inputParameters:
      - name: flow_id
        in: body
        type: string
        description: Power Automate flow identifier.
      steps:
      - name: get-runs
        type: call
        call: powerautomate-api.get-flow-runs
        with:
          flow_id: '{{flow_id}}'
      - name: create-incident
        type: call
        call: servicenow-api.create-incident
        with:
          short_description: 'Power Automate failure: {{flow_id}}'
          description: 'Last run: {{get-runs.last_run.status}}. Error: {{get-runs.last_run.error}}.'
          category: automation
      - name: notify-owner
        type: call
        call: msteams-api.post-message
        with:
          team_id: automation-team
          channel_id: alerts
          message: 'Flow {{flow_id}} failed. Incident: {{create-incident.number}}.'
  consumes:
  - type: http
    namespace: powerautomate-api
    baseUri: https://management.azure.com/providers/Microsoft.ProcessSimple
    authentication:
      type: bearer
      token: $secrets.azure_management_token
    resources:
    - name: flows
      path: /environments/Default/flows/{{flow_id}}/runs
      inputParameters:
      - name: flow_id
        in: path
      operations:
      - name: get-flow-runs
        method: GET
  - type: http
    namespace: servicenow-api
    baseUri: https://goldmansachs.service-now.com/api/now
    authentication:
      type: 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-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_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: post-message
        method: POST
Open in Framework → View in Fleet → power-automate-workflow-failure-handler.yml

Retrieves vendor details from SAP Ariba, runs a security scan via Palo Alto Networks, and tracks findings in ServiceNow.

naftiko: '0.5'
info:
  label: Vendor Security Assessment Workflow
  description: Retrieves vendor details from SAP Ariba, runs a security scan via Palo Alto Networks, and tracks findings in ServiceNow.
  tags:
  - security
  - sap-ariba
  - palo-alto-networks
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: vendor-security
    port: 8080
    tools:
    - name: assess-vendor-security
      description: Orchestrate vendor security due diligence.
      inputParameters:
      - name: vendor_id
        in: body
        type: string
        description: SAP Ariba vendor ID.
      steps:
      - name: get-vendor
        type: call
        call: ariba-api.get-vendor
        with:
          vendor_id: '{{vendor_id}}'
      - name: scan-domain
        type: call
        call: paloalto-api.url-lookup
        with:
          url: '{{get-vendor.website}}'
      - name: create-finding
        type: call
        call: servicenow-api.create-incident
        with:
          short_description: 'Security assessment: {{get-vendor.name}}'
          description: 'Domain risk: {{scan-domain.risk_score}}. Category: {{scan-domain.category}}.'
          category: vendor_security
  consumes:
  - type: http
    namespace: ariba-api
    baseUri: https://openapi.ariba.com/api/sourcing-projects/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: vendors
      path: /vendors/{{vendor_id}}
      inputParameters:
      - name: vendor_id
        in: path
      operations:
      - name: get-vendor
        method: GET
  - type: http
    namespace: paloalto-api
    baseUri: https://urlfiltering.paloaltonetworks.com/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.paloalto_api_key
      placement: header
    resources:
    - name: urls
      path: /url-info
      operations:
      - name: url-lookup
        method: POST
  - type: http
    namespace: servicenow-api
    baseUri: https://goldmansachs.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → vendor-security-assessment-workflow.yml

On a GitHub Actions workflow failure on a protected branch, opens a Jira bug, creates a Datadog event marker, and notifies the platform engineering team in Teams.

naftiko: '0.5'
info:
  label: GitHub CI/CD Pipeline Failure Response
  description: On a GitHub Actions workflow failure on a protected branch, opens a Jira bug, creates a Datadog event marker, and notifies the platform engineering team in Teams.
  tags:
  - devops
  - cicd
  - github
  - jira
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: devops-ops
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a GitHub Actions run ID, repo, and branch, open a Jira bug, create a Datadog event, and post the failure summary to the engineering Teams channel.
      inputParameters:
      - name: run_id
        in: body
        type: string
        description: The GitHub Actions workflow run ID that failed.
      - name: repo
        in: body
        type: string
        description: The GitHub repository full name, e.g. goldman-sachs/platform.
      - name: branch
        in: body
        type: string
        description: The branch on which the failure occurred.
      - name: workflow_name
        in: body
        type: string
        description: The name of the failed GitHub Actions workflow.
      steps:
      - name: create-bug
        type: call
        call: jira.create-issue
        with:
          project_key: ENG
          issuetype: Bug
          summary: '[CI Failure] {{repo}} / {{branch}} — {{workflow_name}}'
          description: 'Run ID: {{run_id}}'
      - name: create-dd-event
        type: call
        call: datadog.create-event
        with:
          title: 'CI Failure: {{workflow_name}} on {{branch}}'
          text: 'Run {{run_id}} failed. Jira: {{create-bug.key}}'
          alert_type: error
      - name: notify-engineering
        type: call
        call: msteams.post-failure
        with:
          channel: platform-engineering
          text: 'Pipeline failure: {{repo}} | Branch: {{branch}} | Jira: {{create-bug.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://goldmansachs.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: datadog
    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.msgraph_token
    resources:
    - name: messages
      path: /teams/engineering/channels/general/messages
      operations:
      - name: post-failure
        method: POST
Open in Framework → View in Fleet → github-ci-cd-pipeline-failure-response.yml

Pulls client data from Salesforce, runs credit checks via Bloomberg, and creates a risk assessment ticket in ServiceNow.

naftiko: '0.5'
info:
  label: Client Risk Assessment Orchestrator
  description: Pulls client data from Salesforce, runs credit checks via Bloomberg, and creates a risk assessment ticket in ServiceNow.
  tags:
  - risk
  - salesforce
  - bloomberg-enterprise-data
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: client-risk
    port: 8080
    tools:
    - name: assess-client-risk
      description: Orchestrate a full client risk assessment across CRM, market data, and ticketing.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: Salesforce client account ID.
      steps:
      - name: get-client
        type: call
        call: salesforce-api.get-account
        with:
          account_id: '{{client_id}}'
      - name: credit-check
        type: call
        call: bloomberg-api.get-credit-data
        with:
          entity: '{{get-client.name}}'
      - name: create-assessment
        type: call
        call: servicenow-api.create-incident
        with:
          short_description: 'Risk assessment: {{get-client.name}}'
          description: 'Credit rating: {{credit-check.rating}}. Exposure: {{credit-check.exposure}}.'
          category: risk_management
  consumes:
  - type: http
    namespace: salesforce-api
    baseUri: https://goldmansachs.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: bloomberg-api
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/datasets
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: credit
      path: /credit/{{entity}}
      inputParameters:
      - name: entity
        in: path
      operations:
      - name: get-credit-data
        method: GET
  - type: http
    namespace: servicenow-api
    baseUri: https://goldmansachs.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → client-risk-assessment-orchestrator.yml

Monitors Snowflake pipeline task execution for risk data feeds, raises Datadog alerts on failures, and creates Jira incidents for the data engineering team.

naftiko: '0.5'
info:
  label: Snowflake Risk Data Pipeline Health Check
  description: Monitors Snowflake pipeline task execution for risk data feeds, raises Datadog alerts on failures, and creates Jira incidents for the data engineering team.
  tags:
  - data-analytics
  - snowflake
  - datadog
  - jira
  - risk-management
capability:
  exposes:
  - type: mcp
    namespace: data-ops
    port: 8080
    tools:
    - name: monitor-risk-pipeline
      description: Given a Snowflake task name for a risk data pipeline, check execution history, raise a Datadog alert on failure, and create a Jira incident for remediation.
      inputParameters:
      - name: task_name
        in: body
        type: string
        description: The Snowflake task name to check, e.g. RISK_VAR_DAILY.
      - name: database
        in: body
        type: string
        description: The Snowflake database containing the pipeline task.
      steps:
      - name: get-task-history
        type: call
        call: snowflake.get-task-history
        with:
          task_name: '{{task_name}}'
          database: '{{database}}'
      - name: raise-dd-alert
        type: call
        call: datadog.create-event
        with:
          title: 'Risk pipeline failure: {{task_name}}'
          text: 'Task {{task_name}} state: {{get-task-history.last_run_state}}'
          alert_type: error
      - name: open-jira-incident
        type: call
        call: jira.create-data-incident
        with:
          project_key: DATA
          summary: 'Risk pipeline failure: {{task_name}}'
          description: 'Database: {{database}}

            State: {{get-task-history.last_run_state}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://goldmansachs.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: task-history
      path: /databases/{{database}}/schemas/RISK/tasks/{{task_name}}/executeHistory
      inputParameters:
      - name: database
        in: path
      - name: task_name
        in: path
      operations:
      - name: get-task-history
        method: GET
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: jira
    baseUri: https://goldmansachs.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-data-incident
        method: POST
Open in Framework → View in Fleet → snowflake-risk-data-pipeline-health-check.yml

Initiates the annual performance review cycle in Workday and sends manager notifications via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Performance Review Cycle Launcher
  description: Initiates the annual performance review cycle in Workday and sends manager notifications via Microsoft Teams.
  tags:
  - hr
  - performance-management
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-performance
    port: 8080
    tools:
    - name: launch-review-cycle
      description: Given a review cycle name and due date, create performance review tasks in Workday and broadcast a manager notification to the people managers Teams channel.
      inputParameters:
      - name: cycle_name
        in: body
        type: string
        description: The performance review cycle name, e.g. 2026 Annual Review.
      - name: due_date
        in: body
        type: string
        description: Completion due date in YYYY-MM-DD format.
      steps:
      - name: create-review-cycle
        type: call
        call: workday.create-review-event
        with:
          cycle_name: '{{cycle_name}}'
          due_date: '{{due_date}}'
      - name: notify-managers
        type: call
        call: msteams.broadcast-review
        with:
          channel: people-managers
          text: 'Performance review cycle ''{{cycle_name}}'' is now open. Due: {{due_date}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: review-events
      path: /goldman-sachs/performanceReviews
      operations:
      - name: create-review-event
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/hr/channels/managers/messages
      operations:
      - name: broadcast-review
        method: POST
Open in Framework → View in Fleet → workday-performance-review-cycle-launcher.yml

Detects suspicious sign-ins from Azure AD, creates an incident in PagerDuty, and disables the compromised account in Okta.

naftiko: '0.5'
info:
  label: Microsoft 365 Security Incident Response
  description: Detects suspicious sign-ins from Azure AD, creates an incident in PagerDuty, and disables the compromised account in Okta.
  tags:
  - security
  - microsoft-azure
  - pagerduty
  - okta
capability:
  exposes:
  - type: mcp
    namespace: m365-security
    port: 8080
    tools:
    - name: respond-to-security-incident
      description: Detect, alert, and contain a Microsoft 365 security incident.
      inputParameters:
      - name: user_principal
        in: body
        type: string
        description: Azure AD user principal name.
      steps:
      - name: get-sign-ins
        type: call
        call: azuread-api.get-sign-ins
        with:
          user_principal: '{{user_principal}}'
      - name: alert-security
        type: call
        call: pagerduty-api.create-event
        with:
          routing_key: $secrets.pagerduty_routing_key
          summary: 'Suspicious sign-in: {{user_principal}}. Risk: {{get-sign-ins.risk_level}}. Location: {{get-sign-ins.location}}.'
      - name: disable-account
        type: call
        call: okta-api.suspend-user
        with:
          login: '{{user_principal}}'
  consumes:
  - type: http
    namespace: azuread-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: sign-ins
      path: /auditLogs/signIns
      operations:
      - name: get-sign-ins
        method: GET
  - type: http
    namespace: pagerduty-api
    baseUri: https://events.pagerduty.com/v2
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: events
      path: /enqueue
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: okta-api
    baseUri: https://goldmansachs.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: users
      path: /users/{{login}}/lifecycle/suspend
      inputParameters:
      - name: login
        in: path
      operations:
      - name: suspend-user
        method: POST
Open in Framework → View in Fleet → microsoft-365-security-incident-response.yml

Extracts financial data from Snowflake, generates a formatted report via Power BI, and files it in SharePoint for regulatory submission.

naftiko: '0.5'
info:
  label: Quarterly Regulatory Report Pipeline
  description: Extracts financial data from Snowflake, generates a formatted report via Power BI, and files it in SharePoint for regulatory submission.
  tags:
  - compliance
  - snowflake
  - power-bi
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: regulatory-reporting
    port: 8080
    tools:
    - name: generate-regulatory-report
      description: Extract, format, and file a quarterly regulatory report.
      inputParameters:
      - name: quarter
        in: body
        type: string
        description: Quarter identifier e.g. Q1-2026.
      - name: report_type
        in: body
        type: string
        description: Report type code.
      steps:
      - name: extract-data
        type: call
        call: snowflake-api.run-query
        with:
          query: SELECT * FROM regulatory.{{report_type}} WHERE quarter = '{{quarter}}'
      - name: refresh-dashboard
        type: call
        call: powerbi-api.refresh-dataset
        with:
          dataset_id: reg-{{report_type}}
      - name: store-report
        type: call
        call: sharepoint-api.create-file
        with:
          site_id: compliance
          path: Regulatory/{{quarter}}/{{report_type}}.pdf
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://goldmansachs.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-api
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: sharepoint-api
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: path
        in: path
      operations:
      - name: create-file
        method: PUT
Open in Framework → View in Fleet → quarterly-regulatory-report-pipeline.yml

Retrieves the latest GitHub Actions workflow run status for a specified repository and workflow.

naftiko: '0.5'
info:
  label: GitHub Actions Workflow Status Check
  description: Retrieves the latest GitHub Actions workflow run status for a specified repository and workflow.
  tags:
  - ci-cd
  - devops
  - github-actions
capability:
  exposes:
  - type: mcp
    namespace: workflow-status
    port: 8080
    tools:
    - name: check-workflow
      description: Given a repository and workflow ID, return the latest run status and conclusion. Use when engineers need to verify CI/CD pipeline health.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository in owner/repo format.
      - name: workflow_id
        in: body
        type: string
        description: The workflow file name or ID.
      call: github-api.get-workflow-runs
      with:
        repo: '{{repo}}'
        workflow_id: '{{workflow_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.workflow_runs[0].status
      - name: conclusion
        type: string
        mapping: $.workflow_runs[0].conclusion
      - name: run_number
        type: integer
        mapping: $.workflow_runs[0].run_number
  consumes:
  - type: http
    namespace: github-api
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflow-runs
      path: /repos/{{repo}}/actions/workflows/{{workflow_id}}/runs
      inputParameters:
      - name: repo
        in: path
      - name: workflow_id
        in: path
      operations:
      - name: get-workflow-runs
        method: GET
Open in Framework → View in Fleet → github-actions-workflow-status-check.yml

Triggers open enrollment in Workday, sends notifications via Microsoft Teams, and tracks completion in Jira.

naftiko: '0.5'
info:
  label: Workday Benefits Enrollment Orchestrator
  description: Triggers open enrollment in Workday, sends notifications via Microsoft Teams, and tracks completion in Jira.
  tags:
  - hr
  - workday
  - microsoft-teams
  - jira
capability:
  exposes:
  - type: mcp
    namespace: benefits-enrollment
    port: 8080
    tools:
    - name: run-benefits-enrollment
      description: Orchestrate the annual benefits enrollment process.
      inputParameters:
      - name: enrollment_period
        in: body
        type: string
        description: Enrollment period ID.
      - name: department
        in: body
        type: string
        description: Target department code.
      steps:
      - name: open-enrollment
        type: call
        call: workday-api.trigger-enrollment
        with:
          period: '{{enrollment_period}}'
          department: '{{department}}'
      - name: notify-employees
        type: call
        call: msteams-api.post-message
        with:
          team_id: hr-team
          channel_id: benefits
          message: 'Open enrollment has begun for {{department}}. Period: {{enrollment_period}}. Eligible: {{open-enrollment.eligible_count}} employees.'
      - name: track-progress
        type: call
        call: jira-api.create-issue
        with:
          project: HR
          summary: 'Benefits enrollment: {{department}} - {{enrollment_period}}'
          description: 'Eligible: {{open-enrollment.eligible_count}}. Deadline: {{open-enrollment.deadline}}.'
  consumes:
  - type: http
    namespace: workday-api
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: enrollment
      path: /goldman-sachs/benefits/enrollment
      operations:
      - name: trigger-enrollment
        method: POST
  - type: http
    namespace: msteams-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_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: post-message
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://goldmansachs.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_password
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → workday-benefits-enrollment-orchestrator.yml

Compiles a weekly Salesforce opportunity pipeline report by division and posts it to the investment banking Teams channel.

naftiko: '0.5'
info:
  label: Salesforce Client Opportunity Pipeline Report
  description: Compiles a weekly Salesforce opportunity pipeline report by division and posts it to the investment banking Teams channel.
  tags:
  - sales
  - crm
  - salesforce
  - microsoft-teams
  - reporting
  - investment-banking
capability:
  exposes:
  - type: mcp
    namespace: ib-reporting
    port: 8080
    tools:
    - name: digest-opportunity-pipeline
      description: Retrieve open Salesforce opportunities by division, compute pipeline values, and post a weekly digest to the investment banking Teams channel.
      inputParameters:
      - name: division
        in: body
        type: string
        description: The Goldman Sachs division to report on, e.g. Investment Banking, Global Markets.
      - name: fiscal_quarter
        in: body
        type: string
        description: The fiscal quarter to scope the report, e.g. Q1-2026.
      steps:
      - name: query-opps
        type: call
        call: salesforce.query-opportunities
        with:
          division: '{{division}}'
          fiscal_quarter: '{{fiscal_quarter}}'
      - name: post-digest
        type: call
        call: msteams.post-pipeline-digest
        with:
          channel: ib-pipeline
          text: 'Pipeline digest {{fiscal_quarter}} — {{division}}: {{query-opps.total}} open deals, ${{query-opps.pipeline_value}} total value.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://goldmansachs.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /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/ib/channels/pipeline/messages
      operations:
      - name: post-pipeline-digest
        method: POST
Open in Framework → View in Fleet → salesforce-client-opportunity-pipeline-report.yml

Uses Anthropic to summarize compliance and regulatory documents stored in Microsoft SharePoint and distributes the summary to the compliance team in Teams.

naftiko: '0.5'
info:
  label: AI-Assisted Regulatory Document Summary
  description: Uses Anthropic to summarize compliance and regulatory documents stored in Microsoft SharePoint and distributes the summary to the compliance team in Teams.
  tags:
  - regulatory
  - compliance
  - anthropic
  - microsoft-teams
  - ai
  - document-management
capability:
  exposes:
  - type: mcp
    namespace: compliance-ai
    port: 8080
    tools:
    - name: summarize-regulatory-document
      description: Given a SharePoint document URL, retrieve the document content, generate a structured executive summary using Anthropic, and post it to the compliance Teams channel.
      inputParameters:
      - name: document_url
        in: body
        type: string
        description: The SharePoint document URL to retrieve and summarize.
      - name: document_type
        in: body
        type: string
        description: The regulatory document type, e.g. SEC Filing, Compliance Policy, Risk Report.
      steps:
      - name: get-document
        type: call
        call: sharepoint.get-document-content
        with:
          document_url: '{{document_url}}'
      - name: generate-summary
        type: call
        call: anthropic.summarize-document
        with:
          model: claude-opus-4-5
          prompt: 'Summarize this {{document_type}} for the Goldman Sachs compliance team, highlighting key obligations and action items: {{get-document.content}}'
      - name: post-summary
        type: call
        call: msteams.post-compliance-summary
        with:
          channel: compliance-regulatory
          text: 'Regulatory document summary ({{document_type}}): {{generate-summary.summary}}'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /sites/root/drive/root:{{document_url}}:/content
      inputParameters:
      - name: document_url
        in: path
      operations:
      - name: get-document-content
        method: GET
  - type: http
    namespace: anthropic
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: messages
      path: /messages
      operations:
      - name: summarize-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: /teams/compliance/channels/regulatory/messages
      operations:
      - name: post-compliance-summary
        method: POST
Open in Framework → View in Fleet → ai-assisted-regulatory-document-summary.yml

Checks employee training completion in Pluralsight, identifies overdue staff via Workday, and sends reminders through Microsoft Teams.

naftiko: '0.5'
info:
  label: Compliance Training Enforcement Workflow
  description: Checks employee training completion in Pluralsight, identifies overdue staff via Workday, and sends reminders through Microsoft Teams.
  tags:
  - compliance
  - pluralsight
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: compliance-training
    port: 8080
    tools:
    - name: enforce-training-compliance
      description: Check training completion and notify overdue employees.
      inputParameters:
      - name: course_id
        in: body
        type: string
        description: Pluralsight course identifier.
      - name: department
        in: body
        type: string
        description: Workday department code.
      steps:
      - name: check-completions
        type: call
        call: pluralsight-api.get-completions
        with:
          course_id: '{{course_id}}'
      - name: get-staff
        type: call
        call: workday-api.list-workers
        with:
          department: '{{department}}'
      - name: send-reminders
        type: call
        call: msteams-api.post-message
        with:
          team_id: compliance-team
          channel_id: training-reminders
          message: 'Training reminder: {{check-completions.overdue_count}} employees in {{department}} have not completed {{course_id}}.'
  consumes:
  - type: http
    namespace: pluralsight-api
    baseUri: https://api.pluralsight.com/api/v1
    authentication:
      type: bearer
      token: $secrets.pluralsight_token
    resources:
    - name: completions
      path: /courses/{{course_id}}/completions
      inputParameters:
      - name: course_id
        in: path
      operations:
      - name: get-completions
        method: GET
  - type: http
    namespace: workday-api
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /goldman-sachs/workers
      operations:
      - name: list-workers
        method: GET
  - type: http
    namespace: msteams-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_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: post-message
        method: POST
Open in Framework → View in Fleet → compliance-training-enforcement-workflow.yml

Retrieves a SAP Concur travel request, validates it against Goldman Sachs travel policy using Anthropic, and routes it for approval in ServiceNow.

naftiko: '0.5'
info:
  label: SAP Concur Travel Request Processing
  description: Retrieves a SAP Concur travel request, validates it against Goldman Sachs travel policy using Anthropic, and routes it for approval in ServiceNow.
  tags:
  - finance
  - travel
  - sap-concur
  - anthropic
  - servicenow
  - approval
capability:
  exposes:
  - type: mcp
    namespace: travel-ops
    port: 8080
    tools:
    - name: process-travel-request
      description: Given a SAP Concur request ID, fetch details, analyze against travel policy with Anthropic, and create a ServiceNow approval task with compliance notes.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The SAP Concur travel request ID to process.
      steps:
      - name: get-request
        type: call
        call: concur.get-travel-request
        with:
          request_id: '{{request_id}}'
      - name: validate-policy
        type: call
        call: anthropic.validate-travel-policy
        with:
          model: claude-opus-4-5
          prompt: 'Review this Goldman Sachs travel request against company policy: {{get-request.details}}'
      - name: create-approval
        type: call
        call: servicenow.create-approval
        with:
          short_description: 'Travel approval: {{get-request.traveler_name}} to {{get-request.destination}}'
          policy_notes: '{{validate-policy.compliance_notes}}'
  consumes:
  - type: http
    namespace: concur
    baseUri: https://www.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: travel-requests
      path: /travelrequest/requests/{{request_id}}
      inputParameters:
      - name: request_id
        in: path
      operations:
      - name: get-travel-request
        method: GET
  - type: http
    namespace: anthropic
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: messages
      path: /messages
      operations:
      - name: validate-travel-policy
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://goldmansachs.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: approvals
      path: /table/sysapproval_approver
      operations:
      - name: create-approval
        method: POST
Open in Framework → View in Fleet → sap-concur-travel-request-processing.yml

Retrieves the delivery status and open rates for a Mailchimp email campaign used for investor communications.

naftiko: '0.5'
info:
  label: Mailchimp Campaign Status Check
  description: Retrieves the delivery status and open rates for a Mailchimp email campaign used for investor communications.
  tags:
  - marketing
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: mailchimp
    port: 8080
    tools:
    - name: get-campaign-status
      description: Fetch status and performance metrics for a Mailchimp campaign.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: Mailchimp campaign ID.
      call: mailchimp-api.get-campaign
      with:
        campaign_id: '{{campaign_id}}'
  consumes:
  - type: http
    namespace: mailchimp-api
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: bearer
      token: $secrets.mailchimp_api_key
    resources:
    - name: campaigns
      path: /campaigns/{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-campaign
        method: GET
Open in Framework → View in Fleet → mailchimp-campaign-status-check.yml

Retrieves submitted SAP Concur expense reports, uses Anthropic to flag policy violations, and creates ServiceNow audit tasks for out-of-policy items.

naftiko: '0.5'
info:
  label: SAP Concur Expense Policy Audit
  description: Retrieves submitted SAP Concur expense reports, uses Anthropic to flag policy violations, and creates ServiceNow audit tasks for out-of-policy items.
  tags:
  - finance
  - expense-management
  - sap-concur
  - anthropic
  - servicenow
  - audit
capability:
  exposes:
  - type: mcp
    namespace: expense-audit
    port: 8080
    tools:
    - name: audit-expense-reports
      description: Given a date range, retrieve SAP Concur expense reports, analyze them with Anthropic for policy violations, and open ServiceNow audit tasks for non-compliant items.
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: Start date for expense report query in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: End date for expense report query in YYYY-MM-DD format.
      steps:
      - name: get-reports
        type: call
        call: concur.list-expense-reports
        with:
          startDate: '{{start_date}}'
          endDate: '{{end_date}}'
      - name: flag-violations
        type: call
        call: anthropic.analyze-expenses
        with:
          model: claude-opus-4-5
          prompt: 'Review these expense reports for Goldman Sachs policy violations: {{get-reports.reports}}'
      - name: create-audit-task
        type: call
        call: servicenow.create-audit-task
        with:
          short_description: Expense audit {{start_date}} to {{end_date}}
          description: '{{flag-violations.violations_summary}}'
  consumes:
  - type: http
    namespace: concur
    baseUri: https://www.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: expense-reports
      path: /expense/reportdigests
      operations:
      - name: list-expense-reports
        method: GET
  - type: http
    namespace: anthropic
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: messages
      path: /messages
      operations:
      - name: analyze-expenses
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://goldmansachs.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/u_audit_task
      operations:
      - name: create-audit-task
        method: POST
Open in Framework → View in Fleet → sap-concur-expense-policy-audit.yml

Retrieves the current status and details of a trade order from Salesforce by order ID for Goldman Sachs front-office operations review.

naftiko: '0.5'
info:
  label: Salesforce Trade Order Status Lookup
  description: Retrieves the current status and details of a trade order from Salesforce by order ID for Goldman Sachs front-office operations review.
  tags:
  - trading
  - salesforce
  - order-management
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: trade-orders
    port: 8080
    tools:
    - name: get-trade-order-status
      description: Given a Salesforce trade order ID, returns the order status, asset class, notional amount, and counterparty. Use for trade desk inquiries.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The Salesforce trade order record ID.
      call: salesforce-trading.get-order
      with:
        orderId: '{{order_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.Status__c
      - name: notional_amount
        type: number
        mapping: $.Notional_Amount__c
  consumes:
  - type: http
    namespace: salesforce-trading
    baseUri: https://goldmansachs.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: trade-orders
      path: /sobjects/Trade_Order__c/{{orderId}}
      inputParameters:
      - name: orderId
        in: path
      operations:
      - name: get-order
        method: GET
Open in Framework → View in Fleet → salesforce-trade-order-status-lookup.yml

Pulls client account details from Salesforce, retrieves recent market data from Bloomberg, and prepares a briefing note in Confluence.

naftiko: '0.5'
info:
  label: Client Meeting Preparation Workflow
  description: Pulls client account details from Salesforce, retrieves recent market data from Bloomberg, and prepares a briefing note in Confluence.
  tags:
  - relationship-management
  - salesforce
  - bloomberg-enterprise-data
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: meeting-prep
    port: 8080
    tools:
    - name: prepare-client-briefing
      description: Generate a client briefing note for an upcoming meeting.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: Salesforce account ID.
      - name: meeting_date
        in: body
        type: string
        description: Meeting date YYYY-MM-DD.
      steps:
      - name: get-client
        type: call
        call: salesforce-api.get-account
        with:
          account_id: '{{client_id}}'
      - name: market-data
        type: call
        call: bloomberg-api.get-quote
        with:
          ticker: '{{get-client.primary_ticker}}'
      - name: create-note
        type: call
        call: confluence-api.create-page
        with:
          space: CLIENT
          title: 'Briefing: {{get-client.name}} - {{meeting_date}}'
          body: 'Client: {{get-client.name}}. AUM: {{get-client.aum}}. Market: {{market-data.last_price}} ({{market-data.change_pct}}%).'
  consumes:
  - type: http
    namespace: salesforce-api
    baseUri: https://goldmansachs.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: bloomberg-api
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/datasets
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: quotes
      path: /quotes/{{ticker}}
      inputParameters:
      - name: ticker
        in: path
      operations:
      - name: get-quote
        method: GET
  - type: http
    namespace: confluence-api
    baseUri: https://goldmansachs.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_password
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → client-meeting-preparation-workflow.yml

Converts a won Salesforce opportunity into a trade order, validates pricing via Bloomberg, and logs the trade in Snowflake.

naftiko: '0.5'
info:
  label: Salesforce Opportunity to Trade Pipeline
  description: Converts a won Salesforce opportunity into a trade order, validates pricing via Bloomberg, and logs the trade in Snowflake.
  tags:
  - trading
  - salesforce
  - bloomberg-enterprise-data
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: opp-to-trade
    port: 8080
    tools:
    - name: convert-opportunity-to-trade
      description: Convert a CRM opportunity into a validated trade order.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID.
      steps:
      - name: get-opp
        type: call
        call: salesforce-api.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: validate-price
        type: call
        call: bloomberg-api.get-quote
        with:
          ticker: '{{get-opp.instrument_ticker}}'
      - name: log-trade
        type: call
        call: snowflake-api.run-query
        with:
          query: INSERT INTO trades.orders (opp_id, instrument, price, quantity) VALUES ('{{opportunity_id}}', '{{get-opp.instrument_ticker}}', {{validate-price.last_price}}, {{get-opp.quantity}})
  consumes:
  - type: http
    namespace: salesforce-api
    baseUri: https://goldmansachs.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: bloomberg-api
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/datasets
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: quotes
      path: /quotes/{{ticker}}
      inputParameters:
      - name: ticker
        in: path
      operations:
      - name: get-quote
        method: GET
  - type: http
    namespace: snowflake-api
    baseUri: https://goldmansachs.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: queries
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → salesforce-opportunity-to-trade-pipeline.yml

Extracts quarterly pipeline data from Salesforce, analyzes trends in Snowflake, and generates executive dashboards in Power BI.

naftiko: '0.5'
info:
  label: Salesforce Quarterly Review Automation
  description: Extracts quarterly pipeline data from Salesforce, analyzes trends in Snowflake, and generates executive dashboards in Power BI.
  tags:
  - sales
  - salesforce
  - snowflake
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: quarterly-review
    port: 8080
    tools:
    - name: generate-quarterly-review
      description: Generate a quarterly sales review from CRM data.
      inputParameters:
      - name: quarter
        in: body
        type: string
        description: Quarter identifier e.g. Q1-2026.
      - name: region
        in: body
        type: string
        description: Sales region.
      steps:
      - name: get-pipeline
        type: call
        call: salesforce-api.get-opportunities
        with:
          quarter: '{{quarter}}'
          region: '{{region}}'
      - name: analyze-trends
        type: call
        call: snowflake-api.run-query
        with:
          query: SELECT * FROM sales.quarterly_trends WHERE quarter = '{{quarter}}' AND region = '{{region}}'
      - name: refresh-dashboard
        type: call
        call: powerbi-api.refresh-dataset
        with:
          dataset_id: quarterly-review-{{region}}
  consumes:
  - type: http
    namespace: salesforce-api
    baseUri: https://goldmansachs.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity
      operations:
      - name: get-opportunities
        method: GET
  - type: http
    namespace: snowflake-api
    baseUri: https://goldmansachs.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-api
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → salesforce-quarterly-review-automation.yml

Fetches portfolio positions from FactSet, compares against target allocation in Snowflake, and creates rebalance orders via Salesforce.

naftiko: '0.5'
info:
  label: Client Portfolio Rebalancing Workflow
  description: Fetches portfolio positions from FactSet, compares against target allocation in Snowflake, and creates rebalance orders via Salesforce.
  tags:
  - portfolio-management
  - factset
  - snowflake
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: portfolio-rebalance
    port: 8080
    tools:
    - name: rebalance-portfolio
      description: Orchestrate portfolio rebalancing from analysis to order creation.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: FactSet portfolio identifier.
      - name: client_id
        in: body
        type: string
        description: Salesforce client ID.
      steps:
      - name: get-positions
        type: call
        call: factset-api.get-holdings
        with:
          portfolio_id: '{{portfolio_id}}'
      - name: get-targets
        type: call
        call: snowflake-api.run-query
        with:
          query: SELECT * FROM wealth.target_allocations WHERE portfolio_id = '{{portfolio_id}}'
      - name: create-orders
        type: call
        call: salesforce-api.create-record
        with:
          object: Trade_Order__c
          data: 'portfolio: {{portfolio_id}}, client: {{client_id}}, positions: {{get-positions.count}}, drift: {{get-targets.max_drift}}'
  consumes:
  - type: http
    namespace: factset-api
    baseUri: https://api.factset.com/content/factset-portfolio/v1
    authentication:
      type: basic
      username: $secrets.factset_user
      password: $secrets.factset_password
    resources:
    - name: holdings
      path: /portfolios/{{portfolio_id}}/holdings
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: get-holdings
        method: GET
  - type: http
    namespace: snowflake-api
    baseUri: https://goldmansachs.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: salesforce-api
    baseUri: https://goldmansachs.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: records
      path: /sobjects/{{object}}
      inputParameters:
      - name: object
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → client-portfolio-rebalancing-workflow.yml

Checks the refresh status of a Tableau workbook to confirm that the latest financial data is available for analysts.

naftiko: '0.5'
info:
  label: Tableau Report Status Check
  description: Checks the refresh status of a Tableau workbook to confirm that the latest financial data is available for analysts.
  tags:
  - reporting
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: tableau
    port: 8080
    tools:
    - name: get-workbook-status
      description: Return the last refresh time and status for a given Tableau workbook.
      inputParameters:
      - name: workbook_id
        in: body
        type: string
        description: Tableau workbook identifier.
      call: tableau-api.get-workbook
      with:
        workbook_id: '{{workbook_id}}'
  consumes:
  - type: http
    namespace: tableau-api
    baseUri: https://tableau.goldmansachs.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/default/workbooks/{{workbook_id}}
      inputParameters:
      - name: workbook_id
        in: path
      operations:
      - name: get-workbook
        method: GET
Open in Framework → View in Fleet → tableau-report-status-check.yml

Identifies expiring vendor contracts in SAP, creates Salesforce renewal opportunities, and notifies procurement managers via Teams.

naftiko: '0.5'
info:
  label: Contract Renewal Reminder Orchestrator
  description: Identifies expiring vendor contracts in SAP, creates Salesforce renewal opportunities, and notifies procurement managers via Teams.
  tags:
  - procurement
  - contracts
  - sap
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: contract-ops
    port: 8080
    tools:
    - name: process-contract-renewals
      description: Given a days-to-expiry threshold, find expiring SAP contracts, create Salesforce opportunities, and notify procurement.
      inputParameters:
      - name: days_threshold
        in: body
        type: number
        description: Number of days until expiry to trigger renewal process.
      steps:
      - name: find-expiring
        type: call
        call: sap-erp.get-expiring-contracts
        with:
          days_ahead: '{{days_threshold}}'
      - name: create-opportunity
        type: call
        call: salesforce.create-opportunity
        with:
          Name: 'Contract renewal: {{find-expiring.vendor_name}}'
          StageName: Renewal
          CloseDate: '{{find-expiring.expiry_date}}'
      - name: notify-procurement
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.procurement_channel_id
          message: 'Contract renewal due: {{find-expiring.vendor_name}} expires {{find-expiring.expiry_date}}. Salesforce opportunity: {{create-opportunity.id}}'
  consumes:
  - type: http
    namespace: sap-erp
    baseUri: https://hsbc-s4.sap.com/sap/opu/odata/sap/API_CONTRACT
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: contracts
      path: /A_Contract
      operations:
      - name: get-expiring-contracts
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://hsbc.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity
      operations:
      - name: create-opportunity
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → contract-renewal-reminder-orchestrator.yml

Executes a Snowflake query to retrieve daily trade volume aggregates for a given HSBC trading desk and date range.

naftiko: '0.5'
info:
  label: Snowflake Trade Volume Query
  description: Executes a Snowflake query to retrieve daily trade volume aggregates for a given HSBC trading desk and date range.
  tags:
  - data
  - analytics
  - snowflake
  - trading
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: trading-analytics
    port: 8080
    tools:
    - name: get-trade-volume
      description: Given a trading desk code and date range, return the aggregated daily trade volume from Snowflake.
      inputParameters:
      - name: desk_code
        in: body
        type: string
        description: The HSBC trading desk code.
      - name: start_date
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: End date in YYYY-MM-DD format.
      call: snowflake.execute-statement
      with:
        statement: SELECT trade_date, SUM(volume) as total_volume FROM trading.daily_trades WHERE desk_code = '{{desk_code}}' AND trade_date BETWEEN '{{start_date}}' AND '{{end_date}}' GROUP BY trade_date ORDER BY trade_date
      outputParameters:
      - name: results
        type: array
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://hsbc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
Open in Framework → View in Fleet → snowflake-trade-volume-query.yml

Handles customer complaints by creating a Salesforce case, logging a ServiceNow incident, and sending an acknowledgment email via Microsoft Graph.

naftiko: '0.5'
info:
  label: Customer Complaint Resolution Workflow
  description: Handles customer complaints by creating a Salesforce case, logging a ServiceNow incident, and sending an acknowledgment email via Microsoft Graph.
  tags:
  - customer-service
  - salesforce
  - servicenow
  - microsoft-teams
  - banking
capability:
  exposes:
  - type: mcp
    namespace: complaints-ops
    port: 8080
    tools:
    - name: process-complaint
      description: Given customer details and complaint description, create a Salesforce case, log a ServiceNow incident, and send an acknowledgment email.
      inputParameters:
      - name: customer_email
        in: body
        type: string
        description: The customer email address.
      - name: complaint_subject
        in: body
        type: string
        description: Brief subject of the complaint.
      - name: complaint_detail
        in: body
        type: string
        description: Full complaint description.
      steps:
      - name: create-case
        type: call
        call: salesforce.create-case
        with:
          Subject: '{{complaint_subject}}'
          Description: '{{complaint_detail}}'
          SuppliedEmail: '{{customer_email}}'
          Origin: Digital
          Priority: High
      - name: log-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Customer complaint: {{complaint_subject}}'
          description: 'Case: {{create-case.id}}. {{complaint_detail}}'
          category: customer_complaint
      - name: send-ack
        type: call
        call: msgraph.send-mail
        with:
          recipient: '{{customer_email}}'
          subject: 'HSBC: Your complaint has been received - {{create-case.CaseNumber}}'
          body: Dear Customer, your complaint regarding '{{complaint_subject}}' has been logged as case {{create-case.CaseNumber}}. We will respond within 48 hours.
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://hsbc.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://hsbc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/$secrets.service_email/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → customer-complaint-resolution-workflow.yml

Lists HSBC Okta users without MFA enrolled and opens a ServiceNow compliance task for the information security team.

naftiko: '0.5'
info:
  label: Okta MFA Policy Compliance Audit
  description: Lists HSBC Okta users without MFA enrolled and opens a ServiceNow compliance task for the information security team.
  tags:
  - security
  - identity
  - okta
  - servicenow
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: identity-compliance
    port: 8080
    tools:
    - name: audit-mfa-compliance
      description: Retrieve a list of active HSBC Okta users without MFA enrolled and create a ServiceNow security compliance task for remediation by the information security team.
      steps:
      - name: get-non-mfa-users
        type: call
        call: okta-audit.list-users-without-mfa
        with:
          filter: status eq ACTIVE
      - name: create-compliance-task
        type: call
        call: servicenow-audit.create-incident
        with:
          short_description: 'MFA Compliance: {{get-non-mfa-users.count}} HSBC users without MFA'
          description: 'Users without MFA: {{get-non-mfa-users.count}}. Immediate review required per HSBC information security policy.'
          category: security_compliance
          priority: '1'
  consumes:
  - type: http
    namespace: okta-audit
    baseUri: https://hsbc.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_token
      placement: header
    resources:
    - name: users
      path: /users
      inputParameters:
      - name: filter
        in: query
      operations:
      - name: list-users-without-mfa
        method: GET
  - type: http
    namespace: servicenow-audit
    baseUri: https://hsbc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → okta-mfa-policy-compliance-audit.yml

Retrieves open job requisitions from Workday Recruiting across HSBC global offices and publishes a weekly status digest to the HR Confluence page.

naftiko: '0.5'
info:
  label: Workday Recruiting Pipeline Digest
  description: Retrieves open job requisitions from Workday Recruiting across HSBC global offices and publishes a weekly status digest to the HR Confluence page.
  tags:
  - hr
  - recruiting
  - workday
  - confluence
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: talent-ops
    port: 8080
    tools:
    - name: publish-recruiting-digest
      description: Retrieve all open HSBC job requisitions from Workday Recruiting, count openings by department and region, and publish a weekly summary to the HR Confluence space.
      inputParameters:
      - name: confluence_page_id
        in: body
        type: string
        description: The Confluence page ID where the recruiting digest should be published.
      steps:
      - name: get-open-reqs
        type: call
        call: workday-recruit.list-job-requisitions
        with:
          status: Open
      - name: publish-page
        type: call
        call: confluence-hr.update-page
        with:
          page_id: '{{confluence_page_id}}'
          content: 'Open Requisitions: {{get-open-reqs.total_count}}. By Department: {{get-open-reqs.by_department}}'
  consumes:
  - type: http
    namespace: workday-recruit
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: job-requisitions
      path: /hsbc/jobRequisitions
      inputParameters:
      - name: status
        in: query
      operations:
      - name: list-job-requisitions
        method: GET
  - type: http
    namespace: confluence-hr
    baseUri: https://hsbc.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: pages
      path: /content/{{page_id}}
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: update-page
        method: PUT
Open in Framework → View in Fleet → workday-recruiting-pipeline-digest.yml

Queries Azure Cost Management for HSBC resource groups exceeding budget thresholds and posts a weekly FinOps cost digest to the cloud governance Teams channel.

naftiko: '0.5'
info:
  label: Azure Cost Anomaly Reporting
  description: Queries Azure Cost Management for HSBC resource groups exceeding budget thresholds and posts a weekly FinOps cost digest to the cloud governance Teams channel.
  tags:
  - cloud
  - finops
  - azure
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: finops-reporting
    port: 8080
    tools:
    - name: publish-azure-cost-report
      description: Query Azure Cost Management for HSBC resource groups exceeding budget thresholds and post a weekly FinOps cost digest to the cloud governance channel in Microsoft Teams.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: The Azure subscription ID to query costs for.
      - name: billing_period
        in: body
        type: string
        description: The billing period in YYYYMM format, e.g. 202603.
      steps:
      - name: get-cost-data
        type: call
        call: azure-cost.get-usage-details
        with:
          subscription_id: '{{subscription_id}}'
          billing_period: '{{billing_period}}'
      - name: post-report
        type: call
        call: msteams-finops.post-channel-message
        with:
          channel_id: $secrets.finops_channel_id
          message: 'HSBC Azure cost report for {{billing_period}}: Total {{get-cost-data.total_cost}} {{get-cost-data.currency}}. Top group: {{get-cost-data.top_group}}.'
  consumes:
  - type: http
    namespace: azure-cost
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: usage-details
      path: /subscriptions/{{subscription_id}}/providers/Microsoft.Consumption/usageDetails
      inputParameters:
      - name: subscription_id
        in: path
      - name: billing_period
        in: query
      operations:
      - name: get-usage-details
        method: GET
  - type: http
    namespace: msteams-finops
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → azure-cost-anomaly-reporting.yml

Validates cross-border payments by screening beneficiaries, checking country restrictions, and logging compliance results in ServiceNow.

naftiko: '0.5'
info:
  label: Cross-Border Payment Compliance Check
  description: Validates cross-border payments by screening beneficiaries, checking country restrictions, and logging compliance results in ServiceNow.
  tags:
  - payments
  - compliance
  - cross-border
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: payment-compliance
    port: 8080
    tools:
    - name: check-cross-border-payment
      description: Given payment details, screen the beneficiary, validate against country restrictions, and log compliance results.
      inputParameters:
      - name: beneficiary_name
        in: body
        type: string
        description: The payment beneficiary name.
      - name: beneficiary_country
        in: body
        type: string
        description: The beneficiary country code.
      - name: payment_amount
        in: body
        type: number
        description: The payment amount.
      - name: currency
        in: body
        type: string
        description: The payment currency code.
      steps:
      - name: screen-beneficiary
        type: call
        call: sanctions-api.screen
        with:
          name: '{{beneficiary_name}}'
          country: '{{beneficiary_country}}'
      - name: check-country
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT restriction_type, max_amount FROM compliance.country_restrictions WHERE country_code = '{{beneficiary_country}}' AND currency = '{{currency}}'
      - name: log-result
        type: call
        call: servicenow.create-case
        with:
          short_description: 'Cross-border payment check: {{beneficiary_name}} ({{beneficiary_country}})'
          description: 'Amount: {{payment_amount}} {{currency}}. Screening: {{screen-beneficiary.status}}. Country restrictions: {{check-country.restriction_type}}'
          category: payment_compliance
  consumes:
  - type: http
    namespace: sanctions-api
    baseUri: https://sanctions-api.hsbc.com/v1
    authentication:
      type: bearer
      token: $secrets.sanctions_token
    resources:
    - name: screening
      path: /screen
      operations:
      - name: screen
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://hsbc.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: servicenow
    baseUri: https://hsbc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cases
      path: /table/sn_customerservice_case
      operations:
      - name: create-case
        method: POST
Open in Framework → View in Fleet → cross-border-payment-compliance-check.yml

When a P1 incident is raised in ServiceNow for HSBC banking systems, pages the on-call engineer via PagerDuty and posts a war-room message to Microsoft Teams.

naftiko: '0.5'
info:
  label: ServiceNow P1 Incident Response Chain
  description: When a P1 incident is raised in ServiceNow for HSBC banking systems, pages the on-call engineer via PagerDuty and posts a war-room message to Microsoft Teams.
  tags:
  - itsm
  - incident-response
  - servicenow
  - pagerduty
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: itsm-ops
    port: 8080
    tools:
    - name: handle-p1-incident
      description: Given a ServiceNow P1 incident number for an HSBC banking system outage, page the on-call engineer via PagerDuty and post a war-room message to the IT ops Teams channel.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number, e.g. INC0012345.
      steps:
      - name: get-incident
        type: call
        call: servicenow-read.get-incident
        with:
          number: '{{incident_number}}'
      - name: page-oncall
        type: call
        call: pagerduty.create-incident
        with:
          title: 'P1: {{get-incident.short_description}}'
          service_id: $secrets.pagerduty_service_id
          details: 'SNOW: {{incident_number}}'
      - name: post-warroom
        type: call
        call: msteams-war.post-channel-message
        with:
          channel_id: $secrets.warroom_channel_id
          message: 'P1 INCIDENT: {{get-incident.short_description}} | PagerDuty: {{page-oncall.incident_id}}'
  consumes:
  - type: http
    namespace: servicenow-read
    baseUri: https://hsbc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      inputParameters:
      - name: number
        in: query
      operations:
      - name: get-incident
        method: GET
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams-war
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → servicenow-p1-incident-response-chain.yml

Handles database performance alerts from Datadog by creating a PagerDuty incident, logging a Jira ticket, and posting diagnostics to Confluence.

naftiko: '0.5'
info:
  label: Database Performance Degradation Handler
  description: Handles database performance alerts from Datadog by creating a PagerDuty incident, logging a Jira ticket, and posting diagnostics to Confluence.
  tags:
  - database
  - monitoring
  - datadog
  - pagerduty
  - jira
capability:
  exposes:
  - type: mcp
    namespace: db-ops
    port: 8080
    tools:
    - name: handle-db-degradation
      description: Given a Datadog alert for database performance, create a PagerDuty incident and Jira ticket for the DBA team.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The Datadog alert ID.
      - name: database_name
        in: body
        type: string
        description: The affected database name.
      steps:
      - name: get-alert
        type: call
        call: datadog.get-monitor
        with:
          monitor_id: '{{alert_id}}'
      - name: create-incident
        type: call
        call: pagerduty.create-incident
        with:
          title: 'DB performance degradation: {{database_name}}'
          service_id: $secrets.dba_service_id
          urgency: high
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: DBA
          summary: 'Performance degradation: {{database_name}}'
          description: 'Datadog alert: {{alert_id}}. {{get-alert.message}}. PagerDuty: {{create-incident.id}}'
          issuetype: Bug
          priority: High
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor/{{monitor_id}}
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: get-monitor
        method: GET
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: jira
    baseUri: https://hsbc.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → database-performance-degradation-handler.yml

Runs due diligence on correspondent banking relationships by pulling entity data from Salesforce, running screening checks, and logging in ServiceNow.

naftiko: '0.5'
info:
  label: Correspondent Banking Due Diligence
  description: Runs due diligence on correspondent banking relationships by pulling entity data from Salesforce, running screening checks, and logging in ServiceNow.
  tags:
  - compliance
  - correspondent-banking
  - salesforce
  - servicenow
  - due-diligence
capability:
  exposes:
  - type: mcp
    namespace: cb-diligence
    port: 8080
    tools:
    - name: run-due-diligence
      description: Given a correspondent bank account ID, pull entity data, run screening, and log results.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID for the correspondent bank.
      steps:
      - name: get-entity
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{account_id}}'
      - name: screen-entity
        type: call
        call: sanctions-api.screen
        with:
          name: '{{get-entity.Name}}'
          country: '{{get-entity.BillingCountry}}'
      - name: log-diligence
        type: call
        call: servicenow.create-case
        with:
          short_description: 'CB due diligence: {{get-entity.Name}}'
          description: 'Screening result: {{screen-entity.status}}. Risk score: {{screen-entity.risk_score}}. Country: {{get-entity.BillingCountry}}'
          category: correspondent_banking
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://hsbc.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: sanctions-api
    baseUri: https://sanctions-api.hsbc.com/v1
    authentication:
      type: bearer
      token: $secrets.sanctions_token
    resources:
    - name: screening
      path: /screen
      operations:
      - name: screen
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://hsbc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cases
      path: /table/sn_customerservice_case
      operations:
      - name: create-case
        method: POST
Open in Framework → View in Fleet → correspondent-banking-due-diligence.yml

Orchestrates know-your-customer verification by pulling customer data from Salesforce, running identity checks, and logging results to ServiceNow for HSBC compliance.

naftiko: '0.5'
info:
  label: KYC Customer Verification Workflow
  description: Orchestrates know-your-customer verification by pulling customer data from Salesforce, running identity checks, and logging results to ServiceNow for HSBC compliance.
  tags:
  - compliance
  - kyc
  - salesforce
  - servicenow
  - banking
capability:
  exposes:
  - type: mcp
    namespace: kyc-ops
    port: 8080
    tools:
    - name: run-kyc-verification
      description: Given a Salesforce customer account ID, pull customer details, run KYC checks, and create a compliance case in ServiceNow.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID for the customer.
      steps:
      - name: get-customer
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{account_id}}'
      - name: run-check
        type: call
        call: kyc-service.verify-identity
        with:
          customer_name: '{{get-customer.Name}}'
          country: '{{get-customer.BillingCountry}}'
          registration_number: '{{get-customer.CompanyRegistration__c}}'
      - name: log-result
        type: call
        call: servicenow.create-case
        with:
          short_description: 'KYC verification: {{get-customer.Name}}'
          category: compliance_kyc
          description: 'KYC result: {{run-check.status}} - Risk score: {{run-check.risk_score}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://hsbc.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: kyc-service
    baseUri: https://kyc-api.hsbc.com/v1
    authentication:
      type: bearer
      token: $secrets.kyc_token
    resources:
    - name: verifications
      path: /verify
      operations:
      - name: verify-identity
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://hsbc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cases
      path: /table/sn_customerservice_case
      operations:
      - name: create-case
        method: POST
Open in Framework → View in Fleet → kyc-customer-verification-workflow.yml

Detects suspicious corporate card transactions from Snowflake, creates a Salesforce case, and alerts the fraud team via PagerDuty.

naftiko: '0.5'
info:
  label: Corporate Card Fraud Detection Workflow
  description: Detects suspicious corporate card transactions from Snowflake, creates a Salesforce case, and alerts the fraud team via PagerDuty.
  tags:
  - fraud
  - compliance
  - snowflake
  - salesforce
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: fraud-ops
    port: 8080
    tools:
    - name: detect-card-fraud
      description: Given a transaction batch ID, query Snowflake for anomalous transactions, create a Salesforce fraud case, and alert the fraud team.
      inputParameters:
      - name: batch_id
        in: body
        type: string
        description: The transaction batch ID to screen.
      steps:
      - name: query-anomalies
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM fraud.card_anomalies WHERE batch_id = '{{batch_id}}' AND risk_score > 80
      - name: create-case
        type: call
        call: salesforce.create-case
        with:
          Subject: Suspected card fraud - batch {{batch_id}}
          Description: '{{query-anomalies.row_count}} suspicious transactions detected.'
          Priority: Critical
      - name: alert-fraud-team
        type: call
        call: pagerduty.create-incident
        with:
          title: 'Card fraud alert: {{query-anomalies.row_count}} anomalies in batch {{batch_id}}'
          service_id: $secrets.fraud_service_id
          urgency: high
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://hsbc.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: salesforce
    baseUri: https://hsbc.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: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → corporate-card-fraud-detection-workflow.yml

Checks portfolio drift from Snowflake analytics, generates a rebalance recommendation, and notifies the wealth management advisor via Salesforce and Teams.

naftiko: '0.5'
info:
  label: Wealth Management Portfolio Rebalance Alert
  description: Checks portfolio drift from Snowflake analytics, generates a rebalance recommendation, and notifies the wealth management advisor via Salesforce and Teams.
  tags:
  - wealth-management
  - portfolio
  - snowflake
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: wealth-ops
    port: 8080
    tools:
    - name: check-portfolio-rebalance
      description: Given a portfolio ID, check drift from target allocation in Snowflake and notify the advisor if rebalancing is needed.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The wealth management portfolio ID.
      steps:
      - name: check-drift
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT asset_class, current_pct, target_pct, ABS(current_pct - target_pct) as drift FROM wealth.portfolio_allocation WHERE portfolio_id = '{{portfolio_id}}' AND ABS(current_pct - target_pct) > 5
      - name: update-salesforce
        type: call
        call: salesforce.create-task
        with:
          Subject: 'Portfolio rebalance review: {{portfolio_id}}'
          Description: 'Drift detected: {{check-drift.results}}'
          Priority: High
      - name: notify-advisor
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.wealth_channel_id
          message: 'Portfolio {{portfolio_id}} has drifted beyond threshold. Salesforce task created: {{update-salesforce.id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://hsbc.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: salesforce
    baseUri: https://hsbc.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: tasks
      path: /sobjects/Task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → wealth-management-portfolio-rebalance-alert.yml

Submits HSBC regulatory filings and compliance documents to the Anthropic API for AI-powered summarization and stores the result in SharePoint for compliance team review.

naftiko: '0.5'
info:
  label: Anthropic Regulatory Document Summarization
  description: Submits HSBC regulatory filings and compliance documents to the Anthropic API for AI-powered summarization and stores the result in SharePoint for compliance team review.
  tags:
  - ai
  - compliance
  - document-management
  - anthropic
  - sharepoint
  - banking
capability:
  exposes:
  - type: mcp
    namespace: ai-compliance
    port: 8080
    tools:
    - name: summarize-regulatory-document
      description: Given a SharePoint URL of an HSBC regulatory filing or compliance document, retrieve the content, send to Anthropic API for concise summarization, and save the summary to SharePoint for compliance team review.
      inputParameters:
      - name: document_url
        in: body
        type: string
        description: The SharePoint URL of the regulatory document to summarize.
      - name: site_id
        in: body
        type: string
        description: The SharePoint site ID where the summary should be stored.
      steps:
      - name: get-document
        type: call
        call: sharepoint-doc.get-file-content
        with:
          document_url: '{{document_url}}'
      - name: generate-summary
        type: call
        call: anthropic.create-message
        with:
          model: claude-opus-4-5
          prompt: 'Summarize the following HSBC regulatory document, highlighting key obligations, deadlines, and required actions: {{get-document.content}}'
      - name: save-summary
        type: call
        call: sharepoint-save.create-page
        with:
          site_id: '{{site_id}}'
          title: 'AI Compliance Summary: {{get-document.filename}}'
          content: '{{generate-summary.completion}}'
  consumes:
  - type: http
    namespace: sharepoint-doc
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /sites/{{site_id}}/drive/root:/{{document_url}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: document_url
        in: path
      operations:
      - name: get-file-content
        method: GET
  - type: http
    namespace: anthropic
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: messages
      path: /messages
      operations:
      - name: create-message
        method: POST
  - type: http
    namespace: sharepoint-save
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: pages
      path: /sites/{{site_id}}/pages
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → anthropic-regulatory-document-summarization.yml

Retrieves submitted SAP Concur expense reports for HSBC employees, validates against T&E policy, and flags non-compliant reports in ServiceNow.

naftiko: '0.5'
info:
  label: SAP Concur Expense Report Audit
  description: Retrieves submitted SAP Concur expense reports for HSBC employees, validates against T&E policy, and flags non-compliant reports in ServiceNow.
  tags:
  - finance
  - expense-management
  - sap-concur
  - servicenow
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: finance-compliance
    port: 8080
    tools:
    - name: audit-expense-report
      description: Given a SAP Concur expense report ID, retrieve the line items, validate against HSBC travel and expense policy, and open a ServiceNow compliance task if violations are detected.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The SAP Concur expense report ID.
      steps:
      - name: get-report
        type: call
        call: concur.get-expense-report
        with:
          report_id: '{{report_id}}'
      - name: flag-violation
        type: call
        call: servicenow-fin.create-incident
        with:
          short_description: 'Expense policy violation: Report {{report_id}}'
          description: Concur report {{report_id}} by {{get-report.employee_name}} contains items requiring review per HSBC T&E policy.
          category: finance_compliance
  consumes:
  - type: http
    namespace: concur
    baseUri: https://www.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: expense-reports
      path: /expense/reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-expense-report
        method: GET
  - type: http
    namespace: servicenow-fin
    baseUri: https://hsbc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → sap-concur-expense-report-audit.yml

Creates and tracks internal audit findings by logging to ServiceNow, creating Jira remediation tasks, and publishing a summary to Confluence.

naftiko: '0.5'
info:
  label: Internal Audit Finding Tracker
  description: Creates and tracks internal audit findings by logging to ServiceNow, creating Jira remediation tasks, and publishing a summary to Confluence.
  tags:
  - audit
  - compliance
  - servicenow
  - jira
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: audit-ops
    port: 8080
    tools:
    - name: log-audit-finding
      description: Given audit finding details, create a ServiceNow audit record, a Jira remediation task, and publish to Confluence.
      inputParameters:
      - name: finding_title
        in: body
        type: string
        description: Title of the audit finding.
      - name: finding_detail
        in: body
        type: string
        description: Detailed description of the finding.
      - name: severity
        in: body
        type: string
        description: Severity level (critical, high, medium, low).
      steps:
      - name: create-audit-record
        type: call
        call: servicenow.create-audit-finding
        with:
          short_description: '{{finding_title}}'
          description: '{{finding_detail}}'
          severity: '{{severity}}'
      - name: create-remediation
        type: call
        call: jira.create-issue
        with:
          project: AUDIT
          summary: 'Remediation: {{finding_title}}'
          description: 'ServiceNow: {{create-audit-record.number}}. {{finding_detail}}'
          issuetype: Task
          priority: '{{severity}}'
      - name: publish-summary
        type: call
        call: confluence.create-page
        with:
          space_key: AUDIT
          title: 'Audit Finding: {{finding_title}}'
          body: 'Severity: {{severity}}. ServiceNow: {{create-audit-record.number}}. Jira: {{create-remediation.key}}. Details: {{finding_detail}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://hsbc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: audit-findings
      path: /table/sn_audit_finding
      operations:
      - name: create-audit-finding
        method: POST
  - type: http
    namespace: jira
    baseUri: https://hsbc.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://hsbc.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → internal-audit-finding-tracker.yml

Enriches new Salesforce corporate banking leads with firmographic data from ZoomInfo and updates the lead record with company financials and industry classification.

naftiko: '0.5'
info:
  label: Salesforce Corporate Banking Lead Enrichment
  description: Enriches new Salesforce corporate banking leads with firmographic data from ZoomInfo and updates the lead record with company financials and industry classification.
  tags:
  - sales
  - crm
  - salesforce
  - zoominfo
  - lead-enrichment
  - banking
capability:
  exposes:
  - type: mcp
    namespace: sales-intelligence
    port: 8080
    tools:
    - name: enrich-corporate-lead
      description: Given a Salesforce lead ID for a corporate banking prospect, look up firmographic data in ZoomInfo and update the lead record with company size, revenue, and industry for relationship manager prioritization.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: The Salesforce lead record ID (18-char SFDC ID).
      steps:
      - name: get-lead
        type: call
        call: salesforce-lead.get-lead
        with:
          lead_id: '{{lead_id}}'
      - name: enrich-company
        type: call
        call: zoominfo.search-company
        with:
          company_name: '{{get-lead.company}}'
          website: '{{get-lead.website}}'
      - name: update-lead
        type: call
        call: salesforce-lead-update.update-lead
        with:
          lead_id: '{{lead_id}}'
          employee_count: '{{enrich-company.employee_count}}'
          annual_revenue: '{{enrich-company.annual_revenue}}'
          industry: '{{enrich-company.industry}}'
  consumes:
  - type: http
    namespace: salesforce-lead
    baseUri: https://hsbc.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: get-lead
        method: GET
  - type: http
    namespace: zoominfo
    baseUri: https://api.zoominfo.com/search
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: companies
      path: /company
      operations:
      - name: search-company
        method: POST
  - type: http
    namespace: salesforce-lead-update
    baseUri: https://hsbc.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: update-lead
        method: PATCH
Open in Framework → View in Fleet → salesforce-corporate-banking-lead-enrichment.yml

Monitors SSL certificate expiry dates from ServiceNow CMDB, creates Jira renewal tasks, and alerts the infrastructure team via Teams.

naftiko: '0.5'
info:
  label: SSL Certificate Expiry Monitor
  description: Monitors SSL certificate expiry dates from ServiceNow CMDB, creates Jira renewal tasks, and alerts the infrastructure team via Teams.
  tags:
  - security
  - certificates
  - servicenow
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cert-ops
    port: 8080
    tools:
    - name: check-certificate-expiry
      description: Query ServiceNow for certificates expiring within a given number of days, create Jira tasks, and notify the team.
      inputParameters:
      - name: days_threshold
        in: body
        type: number
        description: Number of days until expiry to trigger alerts.
      steps:
      - name: find-expiring
        type: call
        call: servicenow.get-expiring-certs
        with:
          days: '{{days_threshold}}'
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: INFRA
          summary: 'SSL cert renewal: {{find-expiring.cert_name}}'
          description: 'Certificate: {{find-expiring.cert_name}}. Domain: {{find-expiring.domain}}. Expires: {{find-expiring.expiry_date}}'
          issuetype: Task
          priority: High
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.infra_channel_id
          message: 'SSL cert expiring: {{find-expiring.cert_name}} ({{find-expiring.domain}}) on {{find-expiring.expiry_date}}. Jira: {{create-task.key}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://hsbc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: certificates
      path: /table/cmdb_ci_certificate
      operations:
      - name: get-expiring-certs
        method: GET
  - type: http
    namespace: jira
    baseUri: https://hsbc.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → ssl-certificate-expiry-monitor.yml

Logs operational risk events by creating a ServiceNow incident, recording in Snowflake risk database, and notifying the risk team via Teams.

naftiko: '0.5'
info:
  label: Operational Risk Event Logger
  description: Logs operational risk events by creating a ServiceNow incident, recording in Snowflake risk database, and notifying the risk team via Teams.
  tags:
  - risk
  - operational-risk
  - servicenow
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: oprisk-ops
    port: 8080
    tools:
    - name: log-oprisk-event
      description: Given operational risk event details, create a ServiceNow incident, log to Snowflake, and notify the risk team.
      inputParameters:
      - name: event_title
        in: body
        type: string
        description: Title of the operational risk event.
      - name: event_category
        in: body
        type: string
        description: Risk category (execution, fraud, systems, legal).
      - name: estimated_loss
        in: body
        type: number
        description: Estimated financial loss.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'OpRisk: {{event_title}}'
          description: 'Category: {{event_category}}. Estimated loss: {{estimated_loss}}'
          category: operational_risk
          priority: High
      - name: log-to-snowflake
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO risk.op_risk_events (title, category, estimated_loss, logged_date) VALUES ('{{event_title}}', '{{event_category}}', {{estimated_loss}}, CURRENT_DATE)
      - name: notify-risk
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.risk_channel_id
          message: 'OpRisk event logged: {{event_title}}. Category: {{event_category}}. Loss: {{estimated_loss}}. Incident: {{create-incident.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://hsbc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://hsbc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → operational-risk-event-logger.yml

Generates a weekly deal pipeline digest by querying Salesforce opportunities, aggregating in Snowflake, and distributing via Teams to senior bankers.

naftiko: '0.5'
info:
  label: Investment Banking Deal Pipeline Digest
  description: Generates a weekly deal pipeline digest by querying Salesforce opportunities, aggregating in Snowflake, and distributing via Teams to senior bankers.
  tags:
  - investment-banking
  - deals
  - salesforce
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ib-pipeline
    port: 8080
    tools:
    - name: generate-deal-digest
      description: Pull active deal pipeline from Salesforce, aggregate metrics in Snowflake, and send digest to IB leadership.
      inputParameters:
      - name: division
        in: body
        type: string
        description: Investment banking division (M&A, DCM, ECM).
      steps:
      - name: get-deals
        type: call
        call: salesforce.query-opportunities
        with:
          query: SELECT Id, Name, Amount, StageName FROM Opportunity WHERE Division__c = '{{division}}' AND IsClosed = false
      - name: aggregate-metrics
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT COUNT(*) as deal_count, SUM(amount) as total_pipeline FROM ib.deal_pipeline WHERE division = '{{division}}' AND status = 'active'
      - name: send-digest
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.ib_channel_id
          message: '{{division}} Deal Pipeline: {{aggregate-metrics.deal_count}} active deals, total pipeline: {{aggregate-metrics.total_pipeline}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://hsbc.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query
      operations:
      - name: query-opportunities
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://hsbc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → investment-banking-deal-pipeline-digest.yml

Detects budget variances by comparing SAP actuals against planned budgets, creating Jira action items, and alerting finance managers via Teams.

naftiko: '0.5'
info:
  label: Cost Center Budget Variance Alert
  description: Detects budget variances by comparing SAP actuals against planned budgets, creating Jira action items, and alerting finance managers via Teams.
  tags:
  - finance
  - budgeting
  - sap
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: budget-ops
    port: 8080
    tools:
    - name: check-budget-variance
      description: Given a cost center and fiscal period, compare SAP actuals to budget and alert if variance exceeds threshold.
      inputParameters:
      - name: cost_center
        in: body
        type: string
        description: The SAP cost center code.
      - name: fiscal_period
        in: body
        type: string
        description: The fiscal period, e.g. '2026-03'.
      steps:
      - name: get-actuals
        type: call
        call: sap-erp.get-cost-center-actuals
        with:
          cost_center: '{{cost_center}}'
          period: '{{fiscal_period}}'
      - name: create-action
        type: call
        call: jira.create-issue
        with:
          project: FIN
          summary: 'Budget variance: {{cost_center}} ({{fiscal_period}})'
          description: 'Actual: {{get-actuals.actual_amount}}. Budget: {{get-actuals.budget_amount}}. Variance: {{get-actuals.variance_pct}}%'
          issuetype: Task
          priority: High
      - name: notify-finance
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.finance_channel_id
          message: 'Budget variance alert: {{cost_center}} ({{fiscal_period}}). Variance: {{get-actuals.variance_pct}}%. Jira: {{create-action.key}}'
  consumes:
  - type: http
    namespace: sap-erp
    baseUri: https://hsbc-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_BUDGET
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: cost-centers
      path: /A_CostCenterBudget
      operations:
      - name: get-cost-center-actuals
        method: GET
  - type: http
    namespace: jira
    baseUri: https://hsbc.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → cost-center-budget-variance-alert.yml

On a GitHub Actions workflow failure on a protected branch, creates a Jira bug and alerts the engineering Teams channel.

naftiko: '0.5'
info:
  label: GitHub CI/CD Pipeline Failure Handler
  description: On a GitHub Actions workflow failure on a protected branch, creates a Jira bug and alerts the engineering Teams channel.
  tags:
  - devops
  - cicd
  - github
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: devops
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a GitHub Actions pipeline failure with repo, workflow, branch, and run URL, open a Jira engineering bug and post an alert to the HSBC engineering Teams channel.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: The GitHub repository full name, e.g. hsbc/payments-api.
      - name: workflow_name
        in: body
        type: string
        description: The name of the failed GitHub Actions workflow.
      - name: branch
        in: body
        type: string
        description: The branch on which the pipeline failed.
      - name: run_url
        in: body
        type: string
        description: The URL to the failed GitHub Actions run.
      - name: commit_sha
        in: body
        type: string
        description: The commit SHA that triggered the pipeline.
      steps:
      - name: create-jira-bug
        type: call
        call: jira.create-issue
        with:
          project_key: ENG
          issuetype: Bug
          summary: '[CI Failure] {{repo_name}} / {{branch}} — {{workflow_name}}'
          description: 'Repo: {{repo_name}}

            Branch: {{branch}}

            Commit: {{commit_sha}}

            Run: {{run_url}}'
      - name: notify-engineering
        type: call
        call: msteams-eng.post-channel-message
        with:
          channel_id: $secrets.engineering_channel_id
          message: 'Pipeline failure in {{repo_name}} on {{branch}} | Jira: {{create-jira-bug.key}} | {{run_url}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://hsbc.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams-eng
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → github-ci-cd-pipeline-failure-handler.yml

Orchestrates quarterly earnings data collection from SAP, loads to Snowflake, refreshes Power BI dashboards, and notifies the finance team.

naftiko: '0.5'
info:
  label: Quarterly Earnings Data Pipeline
  description: Orchestrates quarterly earnings data collection from SAP, loads to Snowflake, refreshes Power BI dashboards, and notifies the finance team.
  tags:
  - finance
  - reporting
  - sap
  - snowflake
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: earnings-pipeline
    port: 8080
    tools:
    - name: run-earnings-pipeline
      description: Given a fiscal quarter and year, extract SAP financial data, load to Snowflake, refresh Power BI, and notify finance.
      inputParameters:
      - name: fiscal_quarter
        in: body
        type: string
        description: The fiscal quarter, e.g. 'Q1'.
      - name: fiscal_year
        in: body
        type: string
        description: The fiscal year, e.g. '2026'.
      steps:
      - name: extract-sap-data
        type: call
        call: sap-erp.get-financial-data
        with:
          quarter: '{{fiscal_quarter}}'
          year: '{{fiscal_year}}'
      - name: load-snowflake
        type: call
        call: snowflake.execute-statement
        with:
          statement: CALL finance.load_quarterly_earnings('{{fiscal_quarter}}', '{{fiscal_year}}')
      - name: refresh-powerbi
        type: call
        call: powerbi.trigger-refresh
        with:
          group_id: $secrets.finance_workspace_id
          dataset_id: $secrets.earnings_dataset_id
      - name: notify-finance
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.finance_channel_id
          message: '{{fiscal_quarter}} {{fiscal_year}} earnings data pipeline complete. Power BI dashboard refreshed.'
  consumes:
  - type: http
    namespace: sap-erp
    baseUri: https://hsbc-s4.sap.com/sap/opu/odata/sap/API_FINANCIAL_STATEMENT
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: financial-data
      path: /A_FinancialStatement
      operations:
      - name: get-financial-data
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://hsbc.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: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: refreshes
      path: /groups/{{group_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: group_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → quarterly-earnings-data-pipeline.yml

Triggers a Power BI dataset refresh for the HSBC financial reporting dashboard and notifies the finance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Power BI Finance Dashboard Refresh
  description: Triggers a Power BI dataset refresh for the HSBC financial reporting dashboard and notifies the finance team via Microsoft Teams.
  tags:
  - finance
  - reporting
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finance-reporting
    port: 8080
    tools:
    - name: refresh-finance-dashboard
      description: Trigger a Power BI dataset refresh for the HSBC financial reporting dashboard and notify the finance Teams channel that data is current.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID for the HSBC finance dashboard.
      - name: period
        in: body
        type: string
        description: The fiscal period being refreshed, e.g. 2026-Q1.
      steps:
      - name: trigger-refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: '{{dataset_id}}'
      - name: notify-finance
        type: call
        call: msteams-finance.post-channel-message
        with:
          channel_id: $secrets.finance_channel_id
          message: HSBC finance dashboard refreshed for {{period}}. Dataset {{dataset_id}} is now current.
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refreshes
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: msteams-finance
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → power-bi-finance-dashboard-refresh.yml

Validates SWIFT payment messages by checking message format, screening counterparties, and logging results in ServiceNow for HSBC payments.

naftiko: '0.5'
info:
  label: SWIFT Message Validation Workflow
  description: Validates SWIFT payment messages by checking message format, screening counterparties, and logging results in ServiceNow for HSBC payments.
  tags:
  - payments
  - swift
  - compliance
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: swift-ops
    port: 8080
    tools:
    - name: validate-swift-message
      description: Given a SWIFT message reference, validate the message format, screen the counterparty, and log validation results.
      inputParameters:
      - name: message_ref
        in: body
        type: string
        description: The SWIFT message reference.
      steps:
      - name: get-message
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM payments.swift_messages WHERE reference = '{{message_ref}}'
      - name: screen-counterparty
        type: call
        call: sanctions-api.screen
        with:
          name: '{{get-message.counterparty_name}}'
          bic: '{{get-message.counterparty_bic}}'
      - name: log-validation
        type: call
        call: servicenow.create-case
        with:
          short_description: 'SWIFT validation: {{message_ref}}'
          description: 'Message type: {{get-message.message_type}}. Counterparty: {{get-message.counterparty_name}}. Screening: {{screen-counterparty.status}}'
          category: payment_validation
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://hsbc.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: sanctions-api
    baseUri: https://sanctions-api.hsbc.com/v1
    authentication:
      type: bearer
      token: $secrets.sanctions_token
    resources:
    - name: screening
      path: /screen
      operations:
      - name: screen
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://hsbc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cases
      path: /table/sn_customerservice_case
      operations:
      - name: create-case
        method: POST
Open in Framework → View in Fleet → swift-message-validation-workflow.yml

Creates a ServiceNow change request for a planned HSBC banking system update and notifies IT stakeholders via Microsoft Teams.

naftiko: '0.5'
info:
  label: ServiceNow IT Change Request for Banking Systems
  description: Creates a ServiceNow change request for a planned HSBC banking system update and notifies IT stakeholders via Microsoft Teams.
  tags:
  - itsm
  - change-management
  - servicenow
  - microsoft-teams
  - banking
capability:
  exposes:
  - type: mcp
    namespace: change-management
    port: 8080
    tools:
    - name: submit-change-request
      description: Given a system name, change description, and implementation window, create a ServiceNow normal change request for the HSBC banking system, assign to the CAB group, and notify stakeholders in Teams.
      inputParameters:
      - name: system_name
        in: body
        type: string
        description: The name of the HSBC banking system or service being changed.
      - name: change_description
        in: body
        type: string
        description: A detailed description of the planned change.
      - name: planned_start
        in: body
        type: string
        description: Planned start datetime in ISO 8601 format.
      - name: planned_end
        in: body
        type: string
        description: Planned end datetime in ISO 8601 format.
      steps:
      - name: create-change
        type: call
        call: servicenow-chg.create-change-request
        with:
          short_description: 'Change: {{system_name}}'
          description: '{{change_description}}'
          start_date: '{{planned_start}}'
          end_date: '{{planned_end}}'
          type: normal
          assignment_group: CAB
      - name: notify-stakeholders
        type: call
        call: msteams-chg.post-channel-message
        with:
          channel_id: $secrets.itops_channel_id
          message: 'Change request submitted for {{system_name}}. SNOW: {{create-change.number}}. Planned: {{planned_start}} to {{planned_end}}.'
  consumes:
  - type: http
    namespace: servicenow-chg
    baseUri: https://hsbc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-requests
      path: /table/change_request
      operations:
      - name: create-change-request
        method: POST
  - type: http
    namespace: msteams-chg
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → servicenow-it-change-request-for-banking-systems.yml

When a Salesforce opportunity for a corporate banking client is updated, logs the activity against the client account and notifies the relationship manager via Teams.

naftiko: '0.5'
info:
  label: Salesforce Client Relationship Opportunity Sync
  description: When a Salesforce opportunity for a corporate banking client is updated, logs the activity against the client account and notifies the relationship manager via Teams.
  tags:
  - sales
  - crm
  - salesforce
  - microsoft-teams
  - banking
capability:
  exposes:
  - type: mcp
    namespace: crm-banking
    port: 8080
    tools:
    - name: sync-opportunity-update
      description: Given a Salesforce opportunity ID, retrieve the latest update, log a completed activity against the client account, and notify the assigned relationship manager via Microsoft Teams.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID (18-char SFDC ID) that was updated.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce-opp.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: log-activity
        type: call
        call: salesforce-activity.create-task
        with:
          what_id: '{{opportunity_id}}'
          subject: 'Opportunity update: {{get-opportunity.name}}'
          status: Completed
          owner_id: '{{get-opportunity.owner_id}}'
      - name: notify-rm
        type: call
        call: msteams-rm.send-message
        with:
          recipient: '{{get-opportunity.owner_email}}'
          message: Opportunity {{get-opportunity.name}} updated to stage {{get-opportunity.stage_name}}. Activity logged.
  consumes:
  - type: http
    namespace: salesforce-opp
    baseUri: https://hsbc.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
  - type: http
    namespace: salesforce-activity
    baseUri: https://hsbc.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-rm
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient}}/sendMail
      inputParameters:
      - name: recipient
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-client-relationship-opportunity-sync.yml

Creates a Zoom meeting for an HSBC corporate client executive briefing and sends calendar invites via Microsoft Graph to all attendees.

naftiko: '0.5'
info:
  label: Zoom Executive Briefing Scheduler
  description: Creates a Zoom meeting for an HSBC corporate client executive briefing and sends calendar invites via Microsoft Graph to all attendees.
  tags:
  - sales
  - communication
  - zoom
  - salesforce
  - microsoft-365
  - banking
capability:
  exposes:
  - type: mcp
    namespace: client-engagement
    port: 8080
    tools:
    - name: schedule-client-briefing
      description: Given a Salesforce account ID and meeting time, create a Zoom meeting for an HSBC client executive briefing and send calendar invites to all account contacts via Microsoft Graph.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID for the HSBC corporate client.
      - name: meeting_time
        in: body
        type: string
        description: The meeting start time in ISO 8601 format.
      - name: duration_minutes
        in: body
        type: integer
        description: Meeting duration in minutes.
      steps:
      - name: get-account
        type: call
        call: salesforce-acct.get-account
        with:
          account_id: '{{account_id}}'
      - name: create-meeting
        type: call
        call: zoom.create-meeting
        with:
          topic: HSBC Executive Briefing — {{get-account.name}}
          start_time: '{{meeting_time}}'
          duration: '{{duration_minutes}}'
      - name: send-invite
        type: call
        call: msgraph-cal.create-event
        with:
          subject: HSBC Executive Briefing — {{get-account.name}}
          start: '{{meeting_time}}'
          join_url: '{{create-meeting.join_url}}'
  consumes:
  - type: http
    namespace: salesforce-acct
    baseUri: https://hsbc.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_token
    resources:
    - name: meetings
      path: /users/me/meetings
      operations:
      - name: create-meeting
        method: POST
  - type: http
    namespace: msgraph-cal
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: events
      path: /me/events
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → zoom-executive-briefing-scheduler.yml

Syncs application dependency data between ServiceNow CMDB and Datadog service map, creating Jira tickets for unmapped dependencies.

naftiko: '0.5'
info:
  label: Application Dependency Mapping Sync
  description: Syncs application dependency data between ServiceNow CMDB and Datadog service map, creating Jira tickets for unmapped dependencies.
  tags:
  - itsm
  - operations
  - servicenow
  - datadog
  - jira
capability:
  exposes:
  - type: mcp
    namespace: cmdb-ops
    port: 8080
    tools:
    - name: sync-dependency-map
      description: Given a ServiceNow application CI, compare dependencies with Datadog service map and create tickets for discrepancies.
      inputParameters:
      - name: app_ci_id
        in: body
        type: string
        description: The ServiceNow application CI sys_id.
      steps:
      - name: get-cmdb-deps
        type: call
        call: servicenow.get-dependencies
        with:
          ci_id: '{{app_ci_id}}'
      - name: get-datadog-deps
        type: call
        call: datadog.get-service-dependencies
        with:
          service: '{{get-cmdb-deps.service_name}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: CMDB
          summary: 'Dependency map discrepancy: {{get-cmdb-deps.service_name}}'
          description: 'CMDB deps: {{get-cmdb-deps.count}}. Datadog deps: {{get-datadog-deps.count}}. Review and reconcile.'
          issuetype: Task
          priority: Medium
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://hsbc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: dependencies
      path: /table/cmdb_rel_ci
      operations:
      - name: get-dependencies
        method: GET
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: service-map
      path: /services/{{service}}/dependencies
      inputParameters:
      - name: service
        in: path
      operations:
      - name: get-service-dependencies
        method: GET
  - type: http
    namespace: jira
    baseUri: https://hsbc.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → application-dependency-mapping-sync.yml

Retrieves a pending HSBC employee time-off request from Workday, checks team coverage, and approves or escalates to manager.

naftiko: '0.5'
info:
  label: Workday Time-Off Request Processing
  description: Retrieves a pending HSBC employee time-off request from Workday, checks team coverage, and approves or escalates to manager.
  tags:
  - hr
  - absence-management
  - workday
  - approval
capability:
  exposes:
  - type: mcp
    namespace: absence-management
    port: 8080
    tools:
    - name: process-time-off-request
      description: Given a Workday time-off request ID, retrieve request details, check team coverage schedule, and auto-approve if coverage is adequate or flag for manager review.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The Workday absence request ID.
      steps:
      - name: get-request
        type: call
        call: workday-absence.get-absence-request
        with:
          request_id: '{{request_id}}'
      - name: check-coverage
        type: call
        call: workday-team.get-team-schedule
        with:
          cost_center: '{{get-request.cost_center}}'
          start_date: '{{get-request.start_date}}'
          end_date: '{{get-request.end_date}}'
      - name: approve-request
        type: call
        call: workday-absence-approve.approve-absence
        with:
          request_id: '{{request_id}}'
          decision: approved
  consumes:
  - type: http
    namespace: workday-absence
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: absence-requests
      path: /hsbc/absenceRequests/{{request_id}}
      inputParameters:
      - name: request_id
        in: path
      operations:
      - name: get-absence-request
        method: GET
  - type: http
    namespace: workday-team
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: team-schedule
      path: /hsbc/teamSchedule
      inputParameters:
      - name: cost_center
        in: query
      - name: start_date
        in: query
      - name: end_date
        in: query
      operations:
      - name: get-team-schedule
        method: GET
  - type: http
    namespace: workday-absence-approve
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: absence-approvals
      path: /hsbc/absenceRequests/{{request_id}}/approve
      inputParameters:
      - name: request_id
        in: path
      operations:
      - name: approve-absence
        method: POST
Open in Framework → View in Fleet → workday-time-off-request-processing.yml

Orchestrates vendor payment approval by validating the invoice in SAP, matching against the purchase order, and creating a ServiceNow approval request.

naftiko: '0.5'
info:
  label: Vendor Payment Approval Orchestrator
  description: Orchestrates vendor payment approval by validating the invoice in SAP, matching against the purchase order, and creating a ServiceNow approval request.
  tags:
  - finance
  - procurement
  - sap
  - servicenow
  - accounts-payable
capability:
  exposes:
  - type: mcp
    namespace: ap-ops
    port: 8080
    tools:
    - name: process-vendor-payment
      description: Given an SAP invoice number and PO number, validate the invoice, match to PO, and create a ServiceNow approval request.
      inputParameters:
      - name: invoice_number
        in: body
        type: string
        description: The SAP invoice document number.
      - name: po_number
        in: body
        type: string
        description: The matching SAP purchase order number.
      steps:
      - name: get-invoice
        type: call
        call: sap-erp.get-invoice
        with:
          invoice_number: '{{invoice_number}}'
      - name: get-po
        type: call
        call: sap-erp.get-po
        with:
          po_number: '{{po_number}}'
      - name: create-approval
        type: call
        call: servicenow.create-request
        with:
          short_description: 'Payment approval: Invoice {{invoice_number}} ({{get-invoice.vendor_name}})'
          description: 'Invoice amount: {{get-invoice.amount}} {{get-invoice.currency}}. PO amount: {{get-po.total_amount}}. Variance: {{get-invoice.variance_pct}}%'
          category: finance_approval
          assigned_to: AP_Approvers
  consumes:
  - type: http
    namespace: sap-erp
    baseUri: https://hsbc-s4.sap.com/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: invoices
      path: /A_SupplierInvoice('{{invoice_number}}')
      inputParameters:
      - name: invoice_number
        in: path
      operations:
      - name: get-invoice
        method: GET
    - 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://hsbc.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
Open in Framework → View in Fleet → vendor-payment-approval-orchestrator.yml

Runs a credit risk assessment by pulling exposure data from Snowflake, scoring with the risk model API, and updating the Salesforce account with the risk rating.

naftiko: '0.5'
info:
  label: Credit Risk Assessment Pipeline
  description: Runs a credit risk assessment by pulling exposure data from Snowflake, scoring with the risk model API, and updating the Salesforce account with the risk rating.
  tags:
  - risk
  - credit
  - snowflake
  - salesforce
  - banking
capability:
  exposes:
  - type: mcp
    namespace: risk-ops
    port: 8080
    tools:
    - name: assess-credit-risk
      description: Given a customer account ID, pull credit exposure from Snowflake, run risk scoring, and update the Salesforce account.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID.
      steps:
      - name: get-exposure
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT total_exposure, collateral_value, default_probability FROM risk.credit_exposure WHERE account_id = '{{account_id}}'
      - name: score-risk
        type: call
        call: risk-model.score
        with:
          exposure: '{{get-exposure.total_exposure}}'
          collateral: '{{get-exposure.collateral_value}}'
          pd: '{{get-exposure.default_probability}}'
      - name: update-account
        type: call
        call: salesforce.update-account
        with:
          account_id: '{{account_id}}'
          Risk_Rating__c: '{{score-risk.rating}}'
          Risk_Score__c: '{{score-risk.score}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://hsbc.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: risk-model
    baseUri: https://risk-api.hsbc.com/v1
    authentication:
      type: bearer
      token: $secrets.risk_model_token
    resources:
    - name: scoring
      path: /score
      operations:
      - name: score
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://hsbc.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: update-account
        method: PATCH
Open in Framework → View in Fleet → credit-risk-assessment-pipeline.yml

Monitors Azure resource utilization via Datadog, triggers Terraform scaling, and notifies the SRE team via PagerDuty.

naftiko: '0.5'
info:
  label: Cloud Infrastructure Scaling Orchestrator
  description: Monitors Azure resource utilization via Datadog, triggers Terraform scaling, and notifies the SRE team via PagerDuty.
  tags:
  - cloud
  - infrastructure
  - datadog
  - terraform
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: infra-scaling
    port: 8080
    tools:
    - name: scale-infrastructure
      description: Given a Datadog alert for high utilization, trigger Terraform workspace run for scaling and notify SRE via PagerDuty.
      inputParameters:
      - name: datadog_alert_id
        in: body
        type: string
        description: The Datadog alert ID indicating high utilization.
      - name: workspace_name
        in: body
        type: string
        description: The Terraform Cloud workspace for scaling.
      steps:
      - name: get-alert
        type: call
        call: datadog.get-alert
        with:
          alert_id: '{{datadog_alert_id}}'
      - name: trigger-scaling
        type: call
        call: terraform.create-run
        with:
          workspace_name: '{{workspace_name}}'
          message: Auto-scaling triggered by Datadog alert {{datadog_alert_id}}
      - name: notify-sre
        type: call
        call: pagerduty.create-incident
        with:
          title: 'Auto-scaling triggered: {{get-alert.title}}'
          service_id: $secrets.sre_service_id
          urgency: low
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: alerts
      path: /alerts/{{alert_id}}
      inputParameters:
      - name: alert_id
        in: path
      operations:
      - name: get-alert
        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: create-run
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → cloud-infrastructure-scaling-orchestrator.yml

Detects SLA breaches in ServiceNow, escalates via PagerDuty, and posts a summary to the operations Teams channel.

naftiko: '0.5'
info:
  label: SLA Breach Escalation Workflow
  description: Detects SLA breaches in ServiceNow, escalates via PagerDuty, and posts a summary to the operations Teams channel.
  tags:
  - itsm
  - sla
  - servicenow
  - pagerduty
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sla-ops
    port: 8080
    tools:
    - name: escalate-sla-breach
      description: Given a ServiceNow incident number that has breached SLA, escalate via PagerDuty and notify the ops team.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number.
      steps:
      - name: get-incident
        type: call
        call: servicenow.get-incident
        with:
          number: '{{incident_number}}'
      - name: escalate
        type: call
        call: pagerduty.create-incident
        with:
          title: 'SLA breach: {{incident_number}} - {{get-incident.short_description}}'
          service_id: $secrets.ops_service_id
          urgency: high
      - name: notify-ops
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.ops_channel_id
          message: 'SLA breach escalation: {{incident_number}}. Priority: {{get-incident.priority}}. PagerDuty: {{escalate.id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://hsbc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: get-incident
        method: GET
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → sla-breach-escalation-workflow.yml

Fetches LinkedIn Campaign Manager metrics for HSBC employer brand campaigns and publishes a weekly digest to SharePoint.

naftiko: '0.5'
info:
  label: LinkedIn Employer Brand Campaign Performance Digest
  description: Fetches LinkedIn Campaign Manager metrics for HSBC employer brand campaigns and publishes a weekly digest to SharePoint.
  tags:
  - marketing
  - social
  - linkedin
  - sharepoint
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: talent-brand
    port: 8080
    tools:
    - name: digest-linkedin-campaign
      description: Given a LinkedIn campaign ID and date range, retrieve impressions, clicks, and applications for HSBC employer brand campaigns, then publish a digest to the HSBC Careers SharePoint page.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The LinkedIn Campaign Manager campaign ID.
      - name: start_date
        in: body
        type: string
        description: Report start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: Report end date in YYYY-MM-DD format.
      steps:
      - name: get-campaign-stats
        type: call
        call: linkedin.get-campaign-analytics
        with:
          campaign_id: '{{campaign_id}}'
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: publish-digest
        type: call
        call: sharepoint.create-page
        with:
          site_id: $secrets.talent_brand_site_id
          title: LinkedIn Campaign Report {{campaign_id}} {{start_date}} to {{end_date}}
          content: 'Impressions: {{get-campaign-stats.impressions}} | Clicks: {{get-campaign-stats.clicks}} | Applications: {{get-campaign-stats.applications}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: campaign-analytics
      path: /adAnalyticsV2
      inputParameters:
      - name: campaign_id
        in: query
      - name: start_date
        in: query
      - name: end_date
        in: query
      operations:
      - name: get-campaign-analytics
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: pages
      path: /sites/{{site_id}}/pages
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → linkedin-employer-brand-campaign-performance-digest.yml

Detects Value-at-Risk limit breaches from Snowflake risk data, alerts the risk committee via PagerDuty, and logs a Jira risk event.

naftiko: '0.5'
info:
  label: Market Risk VaR Breach Escalation
  description: Detects Value-at-Risk limit breaches from Snowflake risk data, alerts the risk committee via PagerDuty, and logs a Jira risk event.
  tags:
  - risk
  - market-risk
  - snowflake
  - pagerduty
  - jira
capability:
  exposes:
  - type: mcp
    namespace: market-risk
    port: 8080
    tools:
    - name: escalate-var-breach
      description: Given a trading desk, check VaR limits in Snowflake and escalate if breached.
      inputParameters:
      - name: desk_code
        in: body
        type: string
        description: The trading desk code.
      steps:
      - name: check-var
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT desk_code, current_var, var_limit, (current_var / var_limit * 100) as utilization_pct FROM risk.var_limits WHERE desk_code = '{{desk_code}}'
      - name: alert-risk
        type: call
        call: pagerduty.create-incident
        with:
          title: 'VaR breach: desk {{desk_code}} at {{check-var.utilization_pct}}% utilization'
          service_id: $secrets.risk_service_id
          urgency: high
      - name: log-event
        type: call
        call: jira.create-issue
        with:
          project: RISK
          summary: 'VaR limit breach: {{desk_code}}'
          description: 'Current VaR: {{check-var.current_var}}. Limit: {{check-var.var_limit}}. Utilization: {{check-var.utilization_pct}}%'
          issuetype: Bug
          priority: Critical
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://hsbc.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: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: jira
    baseUri: https://hsbc.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → market-risk-var-breach-escalation.yml

When an employee termination is processed in Workday, deactivates the Okta account, revokes Salesforce license, and closes open ServiceNow tickets.

naftiko: '0.5'
info:
  label: Okta User Deprovisioning on Termination
  description: When an employee termination is processed in Workday, deactivates the Okta account, revokes Salesforce license, and closes open ServiceNow tickets.
  tags:
  - hr
  - security
  - offboarding
  - workday
  - okta
  - salesforce
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: deprovision-terminated-employee
      description: Given a Workday employee ID for a terminated HSBC employee, deactivate their Okta account, revoke Salesforce license, and close open ServiceNow tickets assigned to them.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday worker ID of the terminated employee.
      steps:
      - name: get-employee
        type: call
        call: workday-term.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: deactivate-okta
        type: call
        call: okta.deactivate-user
        with:
          user_id: '{{get-employee.okta_user_id}}'
      - name: revoke-salesforce
        type: call
        call: salesforce-depro.update-user
        with:
          user_id: '{{get-employee.salesforce_user_id}}'
          is_active: 'false'
      - name: close-tickets
        type: call
        call: servicenow-term.close-user-tickets
        with:
          assigned_to: '{{get-employee.servicenow_user_id}}'
  consumes:
  - type: http
    namespace: workday-term
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /hsbc/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: okta
    baseUri: https://hsbc.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_token
      placement: header
    resources:
    - name: users
      path: /users/{{user_id}}/lifecycle/deactivate
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: deactivate-user
        method: POST
  - type: http
    namespace: salesforce-depro
    baseUri: https://hsbc.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: users
      path: /sobjects/User/{{user_id}}
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: update-user
        method: PATCH
  - type: http
    namespace: servicenow-term
    baseUri: https://hsbc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      inputParameters:
      - name: assigned_to
        in: query
      operations:
      - name: close-user-tickets
        method: PATCH
Open in Framework → View in Fleet → okta-user-deprovisioning-on-termination.yml

Reconciles interbank payments by comparing SAP payment records with Snowflake settlement data and creating ServiceNow exceptions for mismatches.

naftiko: '0.5'
info:
  label: Interbank Payment Reconciliation Workflow
  description: Reconciles interbank payments by comparing SAP payment records with Snowflake settlement data and creating ServiceNow exceptions for mismatches.
  tags:
  - payments
  - reconciliation
  - sap
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: payment-recon
    port: 8080
    tools:
    - name: reconcile-payments
      description: Given a settlement date, compare SAP payments with Snowflake settlement records and log exceptions.
      inputParameters:
      - name: settlement_date
        in: body
        type: string
        description: The settlement date in YYYY-MM-DD format.
      steps:
      - name: get-sap-payments
        type: call
        call: sap-erp.get-payments
        with:
          date: '{{settlement_date}}'
      - name: get-settlement-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM payments.settlements WHERE settlement_date = '{{settlement_date}}'
      - name: log-exceptions
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Payment reconciliation exceptions: {{settlement_date}}'
          description: 'SAP records: {{get-sap-payments.count}}. Settlement records: {{get-settlement-data.row_count}}. Review required.'
          category: payment_reconciliation
          assigned_to: Payment_Operations
  consumes:
  - type: http
    namespace: sap-erp
    baseUri: https://hsbc-s4.sap.com/sap/opu/odata/sap/API_PAYMENT_RUN
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: payments
      path: /A_PaymentRun
      operations:
      - name: get-payments
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://hsbc.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: servicenow
    baseUri: https://hsbc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → interbank-payment-reconciliation-workflow.yml

Monitors foreign exchange rates from Bloomberg, checks against configured thresholds in Snowflake, and sends alerts to the treasury team via Teams.

naftiko: '0.5'
info:
  label: FX Rate Alert and Notification
  description: Monitors foreign exchange rates from Bloomberg, checks against configured thresholds in Snowflake, and sends alerts to the treasury team via Teams.
  tags:
  - trading
  - treasury
  - bloomberg
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: fx-ops
    port: 8080
    tools:
    - name: check-fx-rate-alert
      description: Given a currency pair, fetch the current FX rate from Bloomberg, compare against Snowflake thresholds, and alert treasury via Teams if breached.
      inputParameters:
      - name: currency_pair
        in: body
        type: string
        description: The currency pair, e.g. 'EUR/USD'.
      steps:
      - name: get-rate
        type: call
        call: bloomberg.get-fx-rate
        with:
          pair: '{{currency_pair}}'
      - name: get-threshold
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT upper_limit, lower_limit FROM treasury.fx_thresholds WHERE pair = '{{currency_pair}}'
      - name: notify-treasury
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.treasury_channel_id
          message: 'FX Alert: {{currency_pair}} at {{get-rate.mid_rate}}. Thresholds: {{get-threshold.lower_limit}} - {{get-threshold.upper_limit}}'
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/datasets
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: fx-rates
      path: /fx/{{pair}}
      inputParameters:
      - name: pair
        in: path
      operations:
      - name: get-fx-rate
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://hsbc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → fx-rate-alert-and-notification.yml

Runs data quality validation queries on HSBC's Snowflake risk analytics datasets and alerts the data engineering team via Microsoft Teams if quality thresholds are breached.

naftiko: '0.5'
info:
  label: Snowflake Risk Data Quality Check
  description: Runs data quality validation queries on HSBC's Snowflake risk analytics datasets and alerts the data engineering team via Microsoft Teams if quality thresholds are breached.
  tags:
  - data
  - analytics
  - snowflake
  - microsoft-teams
  - risk
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: data-risk-ops
    port: 8080
    tools:
    - name: run-risk-data-quality-check
      description: Execute a named Snowflake data quality stored procedure on HSBC risk datasets and send a Teams alert to the data engineering channel if the quality score falls below threshold.
      inputParameters:
      - name: check_name
        in: body
        type: string
        description: The Snowflake stored procedure name for the risk data quality check.
      - name: quality_threshold
        in: body
        type: number
        description: Minimum acceptable quality score (0–100).
      steps:
      - name: run-check
        type: call
        call: snowflake.execute-statement
        with:
          statement: CALL risk_data_quality.{{check_name}}()
      - name: send-alert
        type: call
        call: msteams-data.post-channel-message
        with:
          channel_id: $secrets.data_eng_channel_id
          message: 'Risk data quality check {{check_name}} complete. Score: {{run-check.quality_score}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://hsbc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams-data
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → snowflake-risk-data-quality-check.yml

Generates a daily P&L report for HSBC global markets by querying Snowflake trading data, creating a Power BI snapshot, and distributing via Teams.

naftiko: '0.5'
info:
  label: Global Markets Daily P&L Report
  description: Generates a daily P&L report for HSBC global markets by querying Snowflake trading data, creating a Power BI snapshot, and distributing via Teams.
  tags:
  - trading
  - finance
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: markets-reporting
    port: 8080
    tools:
    - name: generate-daily-pnl
      description: Given a trading date, aggregate P&L from Snowflake, refresh Power BI, and send the report to the trading desk heads.
      inputParameters:
      - name: trading_date
        in: body
        type: string
        description: The trading date in YYYY-MM-DD format.
      steps:
      - name: aggregate-pnl
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT desk, SUM(realized_pnl) as total_pnl, SUM(unrealized_pnl) as mark_to_market FROM trading.daily_pnl WHERE trade_date = '{{trading_date}}' GROUP BY desk
      - name: refresh-dashboard
        type: call
        call: powerbi.trigger-refresh
        with:
          group_id: $secrets.trading_workspace_id
          dataset_id: $secrets.pnl_dataset_id
      - name: send-report
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.trading_channel_id
          message: 'Daily P&L report for {{trading_date}} is ready. Desks reported: {{aggregate-pnl.row_count}}. Dashboard refreshed.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://hsbc.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: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: refreshes
      path: /groups/{{group_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: group_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → global-markets-daily-p-l-report.yml

Orchestrates security incident response by querying Splunk logs, creating a PagerDuty incident, and logging a Jira security issue for HSBC cybersecurity.

naftiko: '0.5'
info:
  label: Security Incident Response Orchestrator
  description: Orchestrates security incident response by querying Splunk logs, creating a PagerDuty incident, and logging a Jira security issue for HSBC cybersecurity.
  tags:
  - security
  - incident-response
  - splunk
  - pagerduty
  - jira
capability:
  exposes:
  - type: mcp
    namespace: security-ops
    port: 8080
    tools:
    - name: respond-to-security-incident
      description: Given a Splunk alert ID, pull event details, create a PagerDuty incident, and log a Jira security ticket.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The Splunk alert ID.
      steps:
      - name: get-alert-details
        type: call
        call: splunk.get-alert
        with:
          alert_id: '{{alert_id}}'
      - name: create-pd-incident
        type: call
        call: pagerduty.create-incident
        with:
          title: 'Security alert: {{get-alert-details.title}}'
          service_id: $secrets.security_service_id
          urgency: high
      - name: create-jira-ticket
        type: call
        call: jira.create-issue
        with:
          project: SEC
          summary: 'Security incident: {{get-alert-details.title}}'
          description: 'Splunk alert: {{alert_id}}. Details: {{get-alert-details.description}}. PagerDuty: {{create-pd-incident.id}}'
          issuetype: Bug
          priority: Critical
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://hsbc-splunk.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: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: jira
    baseUri: https://hsbc.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → security-incident-response-orchestrator.yml

Generates an account health scorecard for HSBC corporate banking clients by aggregating open opportunities, service requests, and relationship activity from Salesforce, then refreshes a Power BI dashboard.

naftiko: '0.5'
info:
  label: Salesforce Client Account Health Scorecard
  description: Generates an account health scorecard for HSBC corporate banking clients by aggregating open opportunities, service requests, and relationship activity from Salesforce, then refreshes a Power BI dashboard.
  tags:
  - sales
  - customer-success
  - salesforce
  - power-bi
  - reporting
  - banking
capability:
  exposes:
  - type: mcp
    namespace: account-health
    port: 8080
    tools:
    - name: publish-client-scorecard
      description: Given a Salesforce account ID for an HSBC corporate banking client, retrieve open pipeline, service requests, and last relationship activity, then trigger a Power BI dataset refresh for the client health dashboard.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID (18-char) for the HSBC corporate banking client.
      steps:
      - name: get-account-data
        type: call
        call: salesforce-health.get-account
        with:
          account_id: '{{account_id}}'
      - name: get-open-cases
        type: call
        call: salesforce-cases.query-cases
        with:
          account_id: '{{account_id}}'
          status: Open
      - name: refresh-dashboard
        type: call
        call: powerbi-health.refresh-dataset
        with:
          dataset_id: $secrets.client_health_dataset_id
  consumes:
  - type: http
    namespace: salesforce-health
    baseUri: https://hsbc.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: salesforce-cases
    baseUri: https://hsbc.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /query
      inputParameters:
      - name: account_id
        in: query
      - name: status
        in: query
      operations:
      - name: query-cases
        method: GET
  - type: http
    namespace: powerbi-health
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refreshes
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → salesforce-client-account-health-scorecard.yml

Retrieves real-time foreign exchange rates from Refinitiv Eikon for a given currency pair, returning bid, ask, mid-rate, and timestamp.

naftiko: '0.5'
info:
  label: Refinitiv Eikon FX Rate Lookup
  description: Retrieves real-time foreign exchange rates from Refinitiv Eikon for a given currency pair, returning bid, ask, mid-rate, and timestamp.
  tags:
  - fx
  - trading
  - refinitiv
  - market-data
capability:
  exposes:
  - type: mcp
    namespace: fx-rates
    port: 8080
    tools:
    - name: get-fx-rate
      description: Look up the current FX rate for a currency pair from Refinitiv Eikon.
      inputParameters:
      - name: currency_pair
        in: body
        type: string
        description: Currency pair in ISO format, e.g. GBPUSD.
      call: refinitiv.get-pricing
      with:
        ric: '{{currency_pair}}=X'
      outputParameters:
      - name: bid
        type: number
        mapping: $.data[0].fields.BID
      - name: ask
        type: number
        mapping: $.data[0].fields.ASK
      - name: mid_rate
        type: number
        mapping: $.data[0].fields.MID_PRICE
      - name: timestamp
        type: string
        mapping: $.data[0].fields.TIMESTAMP
  consumes:
  - type: http
    namespace: refinitiv
    baseUri: https://api.refinitiv.com/data/pricing/v1
    authentication:
      type: bearer
      token: $secrets.refinitiv_token
    resources:
    - name: pricing
      path: /views/summaries/{{ric}}
      inputParameters:
      - name: ric
        in: path
      operations:
      - name: get-pricing
        method: GET
Open in Framework → View in Fleet → refinitiv-eikon-fx-rate-lookup.yml

Audits Palo Alto Networks firewall security policies for HSBC network segments and flags unrestricted outbound rules in ServiceNow.

naftiko: '0.5'
info:
  label: Palo Alto Firewall Security Policy Audit
  description: Audits Palo Alto Networks firewall security policies for HSBC network segments and flags unrestricted outbound rules in ServiceNow.
  tags:
  - security
  - network
  - palo-alto
  - servicenow
  - compliance
  - banking
capability:
  exposes:
  - type: mcp
    namespace: network-security
    port: 8080
    tools:
    - name: audit-firewall-policies
      description: Query Palo Alto Networks Panorama for all security policies on the specified HSBC device group, identify policies with destination 'any' and action 'allow', and open a ServiceNow security task for each non-compliant rule.
      inputParameters:
      - name: device_group
        in: body
        type: string
        description: The Palo Alto Panorama device group name for the HSBC network segment to audit.
      steps:
      - name: get-policies
        type: call
        call: paloalto.list-security-policies
        with:
          device_group: '{{device_group}}'
      - name: create-audit-task
        type: call
        call: servicenow-net.create-incident
        with:
          short_description: 'Firewall audit: {{get-policies.unrestricted_count}} unrestricted rules in {{device_group}}'
          description: 'Device group: {{device_group}}

            Policies with unrestricted outbound: {{get-policies.unrestricted_count}}'
          category: network_security
          priority: '1'
  consumes:
  - type: http
    namespace: paloalto
    baseUri: https://hsbc-panorama.hsbc.com/restapi/v10.1
    authentication:
      type: apikey
      key: X-PAN-KEY
      value: $secrets.paloalto_api_key
      placement: header
    resources:
    - name: security-policies
      path: /Objects/SecurityRules
      inputParameters:
      - name: device_group
        in: query
      operations:
      - name: list-security-policies
        method: GET
  - type: http
    namespace: servicenow-net
    baseUri: https://hsbc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → palo-alto-firewall-security-policy-audit.yml

Syncs talent acquisition pipeline data from Workday Recruiting to Salesforce and generates a weekly hiring digest for HR leaders via Teams.

naftiko: '0.5'
info:
  label: Talent Acquisition Pipeline Sync
  description: Syncs talent acquisition pipeline data from Workday Recruiting to Salesforce and generates a weekly hiring digest for HR leaders via Teams.
  tags:
  - hr
  - recruiting
  - workday
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: recruiting-ops
    port: 8080
    tools:
    - name: sync-recruiting-pipeline
      description: Pull open requisitions from Workday Recruiting, sync candidate counts to Salesforce, and send a digest to HR leadership.
      inputParameters:
      - name: department
        in: body
        type: string
        description: Department to filter recruiting pipeline.
      steps:
      - name: get-requisitions
        type: call
        call: workday.get-requisitions
        with:
          department: '{{department}}'
      - name: update-salesforce
        type: call
        call: salesforce.update-recruiting-dashboard
        with:
          department: '{{department}}'
          open_reqs: '{{get-requisitions.count}}'
          total_candidates: '{{get-requisitions.total_candidates}}'
      - name: send-digest
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.hr_leadership_channel_id
          message: 'Recruiting pipeline for {{department}}: {{get-requisitions.count}} open reqs, {{get-requisitions.total_candidates}} candidates in pipeline.'
  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: /hsbc/recruiting/requisitions
      operations:
      - name: get-requisitions
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://hsbc.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: recruiting
      path: /sobjects/Recruiting_Dashboard__c
      operations:
      - name: update-recruiting-dashboard
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → talent-acquisition-pipeline-sync.yml

Processes GDPR subject access requests by searching Snowflake for customer data, generating a report, and creating a ServiceNow tracking case.

naftiko: '0.5'
info:
  label: Data Privacy Subject Access Request
  description: Processes GDPR subject access requests by searching Snowflake for customer data, generating a report, and creating a ServiceNow tracking case.
  tags:
  - compliance
  - privacy
  - gdpr
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: privacy-ops
    port: 8080
    tools:
    - name: process-sar
      description: Given a customer email, search all data stores for personal data, generate a report, and track in ServiceNow.
      inputParameters:
      - name: customer_email
        in: body
        type: string
        description: The customer email address for the SAR.
      steps:
      - name: search-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: CALL privacy.subject_access_search('{{customer_email}}')
      - name: create-case
        type: call
        call: servicenow.create-case
        with:
          short_description: 'SAR: {{customer_email}}'
          description: 'Records found: {{search-data.record_count}}. Data categories: {{search-data.categories}}'
          category: data_privacy
      - name: notify-dpo
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.privacy_channel_id
          message: 'SAR processed for {{customer_email}}. {{search-data.record_count}} records found. Case: {{create-case.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://hsbc.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: servicenow
    baseUri: https://hsbc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cases
      path: /table/sn_customerservice_case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → data-privacy-subject-access-request.yml

When an employee's role changes in Workday, updates their Salesforce profile, adjusts Okta group memberships, and notifies the manager via Teams.

naftiko: '0.5'
info:
  label: Workday Role Change Propagation
  description: When an employee's role changes in Workday, updates their Salesforce profile, adjusts Okta group memberships, and notifies the manager via Teams.
  tags:
  - hr
  - identity
  - workday
  - okta
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-role-change
    port: 8080
    tools:
    - name: propagate-role-change
      description: Given a Workday employee ID and new role, update the employee's Salesforce profile, adjust Okta group memberships for the new access level, and notify their manager via Microsoft Teams.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday worker ID of the HSBC employee whose role changed.
      - name: new_role
        in: body
        type: string
        description: The new job role or title as defined in Workday.
      steps:
      - name: get-employee
        type: call
        call: workday-role.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: update-salesforce-profile
        type: call
        call: salesforce-role.update-user
        with:
          user_id: '{{get-employee.salesforce_user_id}}'
          title: '{{new_role}}'
      - name: update-okta-groups
        type: call
        call: okta-role.update-user-groups
        with:
          user_id: '{{get-employee.okta_user_id}}'
          role: '{{new_role}}'
      - name: notify-manager
        type: call
        call: msteams-role.send-message
        with:
          recipient: '{{get-employee.manager_email}}'
          message: '{{get-employee.full_name}} has been updated to {{new_role}} in Salesforce and Okta.'
  consumes:
  - type: http
    namespace: workday-role
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /hsbc/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: salesforce-role
    baseUri: https://hsbc.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: users
      path: /sobjects/User/{{user_id}}
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: update-user
        method: PATCH
  - type: http
    namespace: okta-role
    baseUri: https://hsbc.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_token
      placement: header
    resources:
    - name: user-groups
      path: /users/{{user_id}}/groups
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: update-user-groups
        method: PUT
  - type: http
    namespace: msteams-role
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient}}/sendMail
      inputParameters:
      - name: recipient
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-role-change-propagation.yml

Generates pre-meeting client briefs by pulling Salesforce account data, Bloomberg market context, and summarizing via AI for HSBC relationship managers.

naftiko: '0.5'
info:
  label: Relationship Manager Client Brief Generator
  description: Generates pre-meeting client briefs by pulling Salesforce account data, Bloomberg market context, and summarizing via AI for HSBC relationship managers.
  tags:
  - banking
  - crm
  - salesforce
  - bloomberg
  - anthropic
capability:
  exposes:
  - type: mcp
    namespace: rm-ops
    port: 8080
    tools:
    - name: generate-client-brief
      description: Given a Salesforce account ID, pull client data, market context, and generate an AI-powered meeting brief.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID.
      steps:
      - name: get-client
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{account_id}}'
      - name: get-market-data
        type: call
        call: bloomberg.get-company-data
        with:
          company: '{{get-client.Name}}'
      - name: generate-brief
        type: call
        call: anthropic.create-message
        with:
          model: claude-sonnet-4-20250514
          message: 'Generate a concise client meeting brief for {{get-client.Name}}. Revenue: {{get-client.AnnualRevenue}}. Industry: {{get-client.Industry}}. Market data: {{get-market-data.summary}}. Recent interactions: {{get-client.Last_Activity__c}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://hsbc.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: bloomberg
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/datasets
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: companies
      path: /company/{{company}}
      inputParameters:
      - name: company
        in: path
      operations:
      - name: get-company-data
        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
Open in Framework → View in Fleet → relationship-manager-client-brief-generator.yml

Orchestrates mortgage document verification by extracting document data via AI, validating against Salesforce application records, and updating the case status.

naftiko: '0.5'
info:
  label: Mortgage Document Verification Workflow
  description: Orchestrates mortgage document verification by extracting document data via AI, validating against Salesforce application records, and updating the case status.
  tags:
  - banking
  - mortgage
  - anthropic
  - salesforce
  - document-processing
capability:
  exposes:
  - type: mcp
    namespace: mortgage-ops
    port: 8080
    tools:
    - name: verify-mortgage-documents
      description: Given a Salesforce case ID with uploaded mortgage documents, extract key fields via AI, validate against application data, and update the case.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: The Salesforce case ID for the mortgage application.
      steps:
      - name: get-case
        type: call
        call: salesforce.get-case
        with:
          case_id: '{{case_id}}'
      - name: extract-documents
        type: call
        call: anthropic.create-message
        with:
          model: claude-sonnet-4-20250514
          message: 'Extract key mortgage fields (income, property value, loan amount) from the following document: {{get-case.Document_Text__c}}'
      - name: update-case
        type: call
        call: salesforce.update-case
        with:
          case_id: '{{case_id}}'
          Status: Documents Verified
          Verification_Notes__c: 'AI extraction complete: {{extract-documents.content}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://hsbc.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
      - name: update-case
        method: PATCH
  - 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
Open in Framework → View in Fleet → mortgage-document-verification-workflow.yml

Generates a regulatory report by querying Snowflake for compliance data, summarizing with Anthropic AI, and posting to Confluence for HSBC regulatory teams.

naftiko: '0.5'
info:
  label: Regulatory Report Generation Workflow
  description: Generates a regulatory report by querying Snowflake for compliance data, summarizing with Anthropic AI, and posting to Confluence for HSBC regulatory teams.
  tags:
  - compliance
  - regulatory
  - snowflake
  - anthropic
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: regulatory-ops
    port: 8080
    tools:
    - name: generate-regulatory-report
      description: Given a report type and date range, query compliance data from Snowflake, generate an AI summary, and publish to Confluence.
      inputParameters:
      - name: report_type
        in: body
        type: string
        description: The regulatory report type (e.g., 'Basel III', 'MiFID II').
      - name: period_end
        in: body
        type: string
        description: Report period end date in YYYY-MM-DD format.
      steps:
      - name: query-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: CALL compliance.generate_{{report_type}}_data('{{period_end}}')
      - name: summarize
        type: call
        call: anthropic.create-message
        with:
          model: claude-sonnet-4-20250514
          message: 'Summarize the following regulatory data for a {{report_type}} compliance report: {{query-data.results}}'
      - name: publish-report
        type: call
        call: confluence.create-page
        with:
          space_key: COMPLIANCE
          title: '{{report_type}} Report - {{period_end}}'
          body: '{{summarize.content}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://hsbc.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: 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: confluence
    baseUri: https://hsbc.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → regulatory-report-generation-workflow.yml

Handles API gateway rate limit breaches by pulling Datadog metrics, creating a Jira investigation ticket, and notifying the platform team via Teams.

naftiko: '0.5'
info:
  label: API Gateway Rate Limit Breach Handler
  description: Handles API gateway rate limit breaches by pulling Datadog metrics, creating a Jira investigation ticket, and notifying the platform team via Teams.
  tags:
  - api-management
  - monitoring
  - datadog
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: api-ops
    port: 8080
    tools:
    - name: handle-rate-limit-breach
      description: Given a Datadog monitor ID for rate limit breaches, pull metrics, create a Jira ticket, and notify the platform team.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: The Datadog monitor ID.
      steps:
      - name: get-monitor
        type: call
        call: datadog.get-monitor
        with:
          monitor_id: '{{monitor_id}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: PLATFORM
          summary: 'API rate limit breach: {{get-monitor.name}}'
          description: 'Monitor: {{monitor_id}}. Status: {{get-monitor.overall_state}}. Message: {{get-monitor.message}}'
          issuetype: Task
          priority: High
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.platform_channel_id
          message: 'API rate limit breach detected: {{get-monitor.name}}. Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor/{{monitor_id}}
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: get-monitor
        method: GET
  - type: http
    namespace: jira
    baseUri: https://hsbc.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → api-gateway-rate-limit-breach-handler.yml

Orchestrates DR failover testing by triggering Terraform DR workspace, verifying health via Datadog, and reporting results in Confluence.

naftiko: '0.5'
info:
  label: Disaster Recovery Failover Test
  description: Orchestrates DR failover testing by triggering Terraform DR workspace, verifying health via Datadog, and reporting results in Confluence.
  tags:
  - disaster-recovery
  - infrastructure
  - terraform
  - datadog
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: dr-ops
    port: 8080
    tools:
    - name: run-dr-failover-test
      description: Trigger a DR failover test via Terraform, verify health checks in Datadog, and publish results to Confluence.
      inputParameters:
      - name: dr_workspace
        in: body
        type: string
        description: The Terraform workspace for DR failover.
      - name: service_name
        in: body
        type: string
        description: The service to test failover for.
      steps:
      - name: trigger-failover
        type: call
        call: terraform.create-run
        with:
          workspace_name: '{{dr_workspace}}'
          message: DR failover test for {{service_name}}
      - name: check-health
        type: call
        call: datadog.get-service-summary
        with:
          service: '{{service_name}}'
      - name: publish-results
        type: call
        call: confluence.create-page
        with:
          space_key: DR
          title: 'DR Test: {{service_name}} - {{dr_workspace}}'
          body: 'Failover status: {{trigger-failover.status}}. Health check: {{check-health.status}}. Error rate: {{check-health.error_rate}}'
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: runs
      path: /runs
      operations:
      - name: create-run
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: services
      path: /services/{{service}}
      inputParameters:
      - name: service
        in: path
      operations:
      - name: get-service-summary
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://hsbc.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → disaster-recovery-failover-test.yml

Orchestrates employee offboarding by deactivating Okta access, closing ServiceNow tickets, and notifying HR via Teams when an HSBC employee departs.

naftiko: '0.5'
info:
  label: Employee Offboarding Access Revocation
  description: Orchestrates employee offboarding by deactivating Okta access, closing ServiceNow tickets, and notifying HR via Teams when an HSBC employee departs.
  tags:
  - hr
  - offboarding
  - okta
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: process-offboarding
      description: Given a Workday worker ID, deactivate the employee in Okta, create an offboarding ServiceNow ticket, and notify HR via Teams.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: The Workday worker ID of the departing employee.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{worker_id}}'
      - name: deactivate-okta
        type: call
        call: okta.deactivate-user
        with:
          user_login: '{{get-employee.work_email}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Offboarding: {{get-employee.full_name}}'
          category: hr_offboarding
          assigned_to: IT_Offboarding
      - name: notify-hr
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.hr_channel_id
          message: 'Offboarding initiated for {{get-employee.full_name}}. Okta deactivated. ServiceNow ticket: {{create-ticket.number}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /hsbc/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: okta
    baseUri: https://hsbc.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_token
      placement: header
    resources:
    - name: users
      path: /users/{{user_login}}/lifecycle/deactivate
      inputParameters:
      - name: user_login
        in: path
      operations:
      - name: deactivate-user
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://hsbc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → employee-offboarding-access-revocation.yml

Screens high-value transactions for anti-money laundering compliance by querying Snowflake transaction data, running AML checks, and alerting the compliance team via Teams.

naftiko: '0.5'
info:
  label: AML Transaction Screening Orchestrator
  description: Screens high-value transactions for anti-money laundering compliance by querying Snowflake transaction data, running AML checks, and alerting the compliance team via Teams.
  tags:
  - compliance
  - aml
  - snowflake
  - microsoft-teams
  - banking
capability:
  exposes:
  - type: mcp
    namespace: aml-screening
    port: 8080
    tools:
    - name: screen-transaction
      description: Given a transaction reference, pull transaction details from Snowflake, run AML screening, and alert compliance via Teams if flagged.
      inputParameters:
      - name: transaction_ref
        in: body
        type: string
        description: The transaction reference number.
      steps:
      - name: get-transaction
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM banking.transactions WHERE ref = '{{transaction_ref}}'
      - name: screen-aml
        type: call
        call: aml-service.screen
        with:
          amount: '{{get-transaction.amount}}'
          counterparty: '{{get-transaction.counterparty}}'
          country: '{{get-transaction.country}}'
      - name: notify-compliance
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.compliance_channel_id
          message: 'AML screening for {{transaction_ref}}: {{screen-aml.result}} (score: {{screen-aml.risk_score}})'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://hsbc.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: aml-service
    baseUri: https://aml-api.hsbc.com/v1
    authentication:
      type: bearer
      token: $secrets.aml_token
    resources:
    - name: screening
      path: /screen
      operations:
      - name: screen
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → aml-transaction-screening-orchestrator.yml

Checks mandatory training completion in Workday Learning, creates ServiceNow follow-up tasks for non-compliant employees, and reports to HR via Teams.

naftiko: '0.5'
info:
  label: Employee Training Compliance Tracker
  description: Checks mandatory training completion in Workday Learning, creates ServiceNow follow-up tasks for non-compliant employees, and reports to HR via Teams.
  tags:
  - hr
  - training
  - compliance
  - workday
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: training-ops
    port: 8080
    tools:
    - name: check-training-compliance
      description: Given a training program ID, check completion status in Workday, create tasks for overdue employees, and report to HR.
      inputParameters:
      - name: program_id
        in: body
        type: string
        description: The Workday training program ID.
      steps:
      - name: get-completion
        type: call
        call: workday.get-training-status
        with:
          program_id: '{{program_id}}'
      - name: create-followup
        type: call
        call: servicenow.create-request
        with:
          short_description: 'Training compliance follow-up: {{program_id}}'
          description: 'Overdue: {{get-completion.overdue_count}} employees. Program: {{get-completion.program_name}}'
          category: hr_training
          assigned_to: HR_Learning
      - name: notify-hr
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.hr_channel_id
          message: 'Training compliance: {{get-completion.program_name}}. Completed: {{get-completion.completed_count}}. Overdue: {{get-completion.overdue_count}}. Task: {{create-followup.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: training
      path: /hsbc/learning/programs/{{program_id}}/status
      inputParameters:
      - name: program_id
        in: path
      operations:
      - name: get-training-status
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://hsbc.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: post-channel-message
        method: POST
Open in Framework → View in Fleet → employee-training-compliance-tracker.yml

Processes firewall rule change requests by creating a ServiceNow change ticket, validating against Palo Alto policy, and notifying the network security team.

naftiko: '0.5'
info:
  label: Network Firewall Rule Change Workflow
  description: Processes firewall rule change requests by creating a ServiceNow change ticket, validating against Palo Alto policy, and notifying the network security team.
  tags:
  - security
  - network
  - servicenow
  - palo-alto
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: network-security
    port: 8080
    tools:
    - name: request-firewall-change
      description: Given firewall rule details, create a ServiceNow change request and validate against existing Palo Alto policy.
      inputParameters:
      - name: source_ip
        in: body
        type: string
        description: Source IP or subnet.
      - name: destination_ip
        in: body
        type: string
        description: Destination IP or subnet.
      - name: port
        in: body
        type: string
        description: Port number.
      - name: action
        in: body
        type: string
        description: Allow or deny.
      steps:
      - name: check-existing
        type: call
        call: paloalto.get-rules
        with:
          source: '{{source_ip}}'
          destination: '{{destination_ip}}'
      - name: create-change
        type: call
        call: servicenow.create-change
        with:
          short_description: 'Firewall rule change: {{source_ip}} -> {{destination_ip}}:{{port}} ({{action}})'
          description: 'Existing rules: {{check-existing.count}}. Requested: {{action}} from {{source_ip}} to {{destination_ip}} on port {{port}}'
          category: network_security
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.network_security_channel_id
          message: 'Firewall change request: {{source_ip}} -> {{destination_ip}}:{{port}}. Change: {{create-change.number}}'
  consumes:
  - type: http
    namespace: paloalto
    baseUri: https://panorama.hsbc.com/restapi/v10.2
    authentication:
      type: apikey
      key: X-PAN-KEY
      value: $secrets.paloalto_api_key
      placement: header
    resources:
    - name: rules
      path: /Policies/SecurityRules
      operations:
      - name: get-rules
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://hsbc.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: post-channel-message
        method: POST
Open in Framework → View in Fleet → network-firewall-rule-change-workflow.yml

Checks Informatica IICS pipeline run status for HSBC financial data pipelines and alerts the data engineering team via Teams if any pipelines have failed.

naftiko: '0.5'
info:
  label: Informatica Data Pipeline Monitoring
  description: Checks Informatica IICS pipeline run status for HSBC financial data pipelines and alerts the data engineering team via Teams if any pipelines have failed.
  tags:
  - data
  - monitoring
  - informatica
  - microsoft-teams
  - banking
capability:
  exposes:
  - type: mcp
    namespace: data-pipeline-ops
    port: 8080
    tools:
    - name: monitor-informatica-pipelines
      description: List recent Informatica IICS pipeline runs for HSBC financial data workflows, identify failures in the last hour, and send an alert to the data engineering Teams channel.
      inputParameters:
      - name: org_id
        in: body
        type: string
        description: The Informatica IICS organization ID for the HSBC environment.
      steps:
      - name: get-failed-runs
        type: call
        call: informatica.list-activity-log
        with:
          org_id: '{{org_id}}'
          status: FAILED
      - name: send-alert
        type: call
        call: msteams-informatica.post-channel-message
        with:
          channel_id: $secrets.data_eng_channel_id
          message: 'HSBC Informatica alert: {{get-failed-runs.count}} pipelines failed. First failure: {{get-failed-runs.first_pipeline_name}}'
  consumes:
  - type: http
    namespace: informatica
    baseUri: https://usw3.dm-us.informaticacloud.com/saas/public/core/v3
    authentication:
      type: bearer
      token: $secrets.informatica_token
    resources:
    - name: activity-log
      path: /activityLog
      inputParameters:
      - name: status
        in: query
      operations:
      - name: list-activity-log
        method: GET
  - type: http
    namespace: msteams-informatica
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → informatica-data-pipeline-monitoring.yml

Creates a new Terraform Cloud workspace for an HSBC technology team, applies the standard compliance variable set, and notifies via Teams.

naftiko: '0.5'
info:
  label: Terraform Cloud Infrastructure Workspace Provisioner
  description: Creates a new Terraform Cloud workspace for an HSBC technology team, applies the standard compliance variable set, and notifies via Teams.
  tags:
  - cloud
  - infrastructure
  - terraform
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: infra-provisioning
    port: 8080
    tools:
    - name: provision-terraform-workspace
      description: Given a team name and environment, create a Terraform Cloud workspace for an HSBC technology team, apply the standard compliance variable set, and notify the team channel in Microsoft Teams.
      inputParameters:
      - name: team_name
        in: body
        type: string
        description: The technology team name, used as the workspace prefix.
      - name: environment
        in: body
        type: string
        description: 'The target environment: dev, staging, or prod.'
      - name: teams_channel_id
        in: body
        type: string
        description: The Microsoft Teams channel ID to notify upon completion.
      steps:
      - name: create-workspace
        type: call
        call: terraform.create-workspace
        with:
          name: '{{team_name}}-{{environment}}'
          organization: hsbc
      - name: assign-varset
        type: call
        call: terraform-varset.assign-variable-set
        with:
          workspace_id: '{{create-workspace.workspace_id}}'
          varset_id: $secrets.terraform_compliance_varset_id
      - name: notify-team
        type: call
        call: msteams-infra.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          message: 'Workspace {{team_name}}-{{environment}} created in Terraform Cloud. ID: {{create-workspace.workspace_id}}'
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: workspaces
      path: /organizations/hsbc/workspaces
      operations:
      - name: create-workspace
        method: POST
  - type: http
    namespace: terraform-varset
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: variable-set-workspaces
      path: /varsets/{{varset_id}}/relationships/workspaces
      inputParameters:
      - name: varset_id
        in: path
      operations:
      - name: assign-variable-set
        method: POST
  - type: http
    namespace: msteams-infra
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → terraform-cloud-infrastructure-workspace-provisioner.yml

Aggregates daily cash positions from Snowflake across HSBC entities, generates a Power BI refresh, and sends the treasury summary to the CFO via Teams.

naftiko: '0.5'
info:
  label: Treasury Cash Position Reporting
  description: Aggregates daily cash positions from Snowflake across HSBC entities, generates a Power BI refresh, and sends the treasury summary to the CFO via Teams.
  tags:
  - treasury
  - finance
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: treasury-reporting
    port: 8080
    tools:
    - name: generate-cash-position-report
      description: Given a reporting date, aggregate cash positions from Snowflake, trigger Power BI refresh, and notify the treasury team.
      inputParameters:
      - name: report_date
        in: body
        type: string
        description: The reporting date in YYYY-MM-DD format.
      steps:
      - name: get-positions
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT entity, currency, SUM(balance) as total_balance FROM treasury.cash_positions WHERE position_date = '{{report_date}}' GROUP BY entity, currency
      - name: refresh-dashboard
        type: call
        call: powerbi.trigger-refresh
        with:
          group_id: $secrets.treasury_workspace_id
          dataset_id: $secrets.cash_position_dataset_id
      - name: notify-treasury
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.treasury_channel_id
          message: 'Daily cash position report for {{report_date}} is ready. Power BI dashboard refreshed. Total entities reported: {{get-positions.row_count}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://hsbc.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: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: refreshes
      path: /groups/{{group_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: group_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → treasury-cash-position-reporting.yml

Orchestrates corporate client onboarding document collection by creating a Salesforce opportunity, sending DocuSign envelopes, and tracking in ServiceNow.

naftiko: '0.5'
info:
  label: Client Onboarding Document Collection
  description: Orchestrates corporate client onboarding document collection by creating a Salesforce opportunity, sending DocuSign envelopes, and tracking in ServiceNow.
  tags:
  - banking
  - onboarding
  - salesforce
  - docusign
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: client-onboarding
    port: 8080
    tools:
    - name: initiate-document-collection
      description: Given a Salesforce opportunity ID, send DocuSign envelopes for required documents and create a ServiceNow tracking ticket.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: send-envelope
        type: call
        call: docusign.create-envelope
        with:
          recipient_email: '{{get-opportunity.Contact_Email__c}}'
          recipient_name: '{{get-opportunity.Contact_Name__c}}'
          template_id: $secrets.onboarding_template_id
      - name: create-tracker
        type: call
        call: servicenow.create-request
        with:
          short_description: 'Client onboarding docs: {{get-opportunity.Name}}'
          description: 'DocuSign envelope: {{send-envelope.envelopeId}}. Opportunity: {{opportunity_id}}'
          category: client_onboarding
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://hsbc.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: 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://hsbc.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
Open in Framework → View in Fleet → client-onboarding-document-collection.yml

Performs quarterly privileged access reviews by pulling Okta admin users, cross-referencing with Workday active employees, and creating ServiceNow review tasks.

naftiko: '0.5'
info:
  label: Privileged Access Review Orchestrator
  description: Performs quarterly privileged access reviews by pulling Okta admin users, cross-referencing with Workday active employees, and creating ServiceNow review tasks.
  tags:
  - security
  - access-review
  - okta
  - workday
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: access-review
    port: 8080
    tools:
    - name: run-privileged-access-review
      description: Pull all Okta admin users, verify against Workday active employees, and create ServiceNow tasks for any discrepancies.
      inputParameters:
      - name: review_period
        in: body
        type: string
        description: The review period label, e.g. 'Q1-2026'.
      steps:
      - name: get-admin-users
        type: call
        call: okta.list-admin-users
        with:
          filter: status eq "ACTIVE"
      - name: verify-employment
        type: call
        call: workday.get-active-workers
        with:
          as_of_date: '2026-03-27'
      - name: create-review-task
        type: call
        call: servicenow.create-request
        with:
          short_description: 'Privileged access review: {{review_period}}'
          description: 'Admin users: {{get-admin-users.count}}. Active employees: {{verify-employment.count}}. Review discrepancies.'
          category: security_review
          assigned_to: Security_Governance
  consumes:
  - type: http
    namespace: okta
    baseUri: https://hsbc.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_token
      placement: header
    resources:
    - name: users
      path: /users
      operations:
      - name: list-admin-users
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /hsbc/workers
      operations:
      - name: get-active-workers
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://hsbc.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
Open in Framework → View in Fleet → privileged-access-review-orchestrator.yml

Processes letter of credit applications by creating a Salesforce case, validating documents via AI, and notifying trade finance operations via Teams.

naftiko: '0.5'
info:
  label: Trade Finance Letter of Credit Processor
  description: Processes letter of credit applications by creating a Salesforce case, validating documents via AI, and notifying trade finance operations via Teams.
  tags:
  - trade-finance
  - banking
  - salesforce
  - anthropic
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: trade-finance
    port: 8080
    tools:
    - name: process-letter-of-credit
      description: Given a trade finance application, validate LC documents, create a Salesforce case, and notify operations.
      inputParameters:
      - name: applicant_name
        in: body
        type: string
        description: The applicant company name.
      - name: lc_amount
        in: body
        type: string
        description: The letter of credit amount and currency.
      - name: document_text
        in: body
        type: string
        description: The extracted text from LC documents.
      steps:
      - name: validate-docs
        type: call
        call: anthropic.create-message
        with:
          model: claude-sonnet-4-20250514
          message: 'Validate the following letter of credit document for completeness and compliance: {{document_text}}'
      - name: create-case
        type: call
        call: salesforce.create-case
        with:
          Subject: 'LC Application: {{applicant_name}} - {{lc_amount}}'
          Description: 'Validation: {{validate-docs.content}}'
          Priority: High
      - name: notify-ops
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.trade_finance_channel_id
          message: 'LC application: {{applicant_name}} for {{lc_amount}}. Case: {{create-case.CaseNumber}}. Validation: {{validate-docs.content}}'
  consumes:
  - type: http
    namespace: anthropic
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: messages
      path: /messages
      operations:
      - name: create-message
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://hsbc.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → trade-finance-letter-of-credit-processor.yml

Orchestrates feature flag rollouts for HSBC digital banking by updating the feature management API, monitoring via Datadog, and notifying the product team.

naftiko: '0.5'
info:
  label: Digital Banking Feature Flag Rollout
  description: Orchestrates feature flag rollouts for HSBC digital banking by updating the feature management API, monitoring via Datadog, and notifying the product team.
  tags:
  - digital-banking
  - devops
  - feature-flags
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: feature-ops
    port: 8080
    tools:
    - name: rollout-feature-flag
      description: Given a feature flag name and rollout percentage, update the flag, monitor error rates, and notify the product team.
      inputParameters:
      - name: flag_name
        in: body
        type: string
        description: The feature flag name.
      - name: rollout_pct
        in: body
        type: number
        description: Rollout percentage (0-100).
      steps:
      - name: update-flag
        type: call
        call: feature-api.update-flag
        with:
          flag: '{{flag_name}}'
          percentage: '{{rollout_pct}}'
      - name: check-errors
        type: call
        call: datadog.get-service-summary
        with:
          service: digital-banking-app
      - name: notify-product
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.product_channel_id
          message: 'Feature flag {{flag_name}} rolled out to {{rollout_pct}}%. Error rate: {{check-errors.error_rate}}%'
  consumes:
  - type: http
    namespace: feature-api
    baseUri: https://feature-flags.hsbc.com/api/v1
    authentication:
      type: bearer
      token: $secrets.feature_flag_token
    resources:
    - name: flags
      path: /flags/{{flag}}
      inputParameters:
      - name: flag
        in: path
      operations:
      - name: update-flag
        method: PATCH
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: services
      path: /services/{{service}}
      inputParameters:
      - name: service
        in: path
      operations:
      - name: get-service-summary
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → digital-banking-feature-flag-rollout.yml

Orchestrates loan application intake by creating a Salesforce opportunity, running credit scoring, and notifying the lending team via Teams.

naftiko: '0.5'
info:
  label: Loan Application Processing Orchestrator
  description: Orchestrates loan application intake by creating a Salesforce opportunity, running credit scoring, and notifying the lending team via Teams.
  tags:
  - banking
  - lending
  - salesforce
  - microsoft-teams
  - credit
capability:
  exposes:
  - type: mcp
    namespace: lending-ops
    port: 8080
    tools:
    - name: process-loan-application
      description: Given applicant details and loan amount, create a Salesforce opportunity, run credit scoring, and notify the lending team.
      inputParameters:
      - name: applicant_name
        in: body
        type: string
        description: The applicant full name.
      - name: loan_amount
        in: body
        type: number
        description: Requested loan amount.
      - name: loan_type
        in: body
        type: string
        description: Type of loan (mortgage, personal, business).
      steps:
      - name: create-opportunity
        type: call
        call: salesforce.create-opportunity
        with:
          Name: Loan Application - {{applicant_name}}
          Amount: '{{loan_amount}}'
          StageName: Application Received
          Type: '{{loan_type}}'
      - name: run-credit-check
        type: call
        call: credit-service.score
        with:
          applicant_name: '{{applicant_name}}'
          loan_amount: '{{loan_amount}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.lending_channel_id
          message: 'New loan application: {{applicant_name}} for {{loan_amount}}. Credit score: {{run-credit-check.score}}. Opportunity: {{create-opportunity.id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://hsbc.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: credit-service
    baseUri: https://credit-api.hsbc.com/v1
    authentication:
      type: bearer
      token: $secrets.credit_token
    resources:
    - name: scoring
      path: /score
      operations:
      - name: score
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → loan-application-processing-orchestrator.yml

Retrieves current trade positions from the Murex trading platform for a given portfolio, returning notional amounts, mark-to-market values, and counterparty exposure.

naftiko: '0.5'
info:
  label: Murex Trade Position Lookup
  description: Retrieves current trade positions from the Murex trading platform for a given portfolio, returning notional amounts, mark-to-market values, and counterparty exposure.
  tags:
  - trading
  - murex
  - risk
  - positions
capability:
  exposes:
  - type: mcp
    namespace: murex-positions
    port: 8080
    tools:
    - name: get-trade-positions
      description: Look up current trade positions for a portfolio in Murex.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: Murex portfolio identifier.
      - name: as_of_date
        in: body
        type: string
        description: Position date in YYYY-MM-DD format.
      call: murex.get-positions
      with:
        portfolio_id: '{{portfolio_id}}'
        as_of_date: '{{as_of_date}}'
      outputParameters:
      - name: positions
        type: array
        mapping: $.data.positions
      - name: total_notional
        type: number
        mapping: $.data.totalNotional
      - name: total_mtm
        type: number
        mapping: $.data.totalMtM
  consumes:
  - type: http
    namespace: murex
    baseUri: https://murex.hsbc.com/api/v1
    authentication:
      type: bearer
      token: $secrets.murex_api_token
    resources:
    - name: positions
      path: /portfolios/{{portfolio_id}}/positions?asOfDate={{as_of_date}}
      inputParameters:
      - name: portfolio_id
        in: path
      - name: as_of_date
        in: query
      operations:
      - name: get-positions
        method: GET
Open in Framework → View in Fleet → murex-trade-position-lookup.yml

Processes customer account closures by updating Salesforce, initiating SAP final settlement, and sending confirmation email via Microsoft Graph.

naftiko: '0.5'
info:
  label: Customer Account Closure Workflow
  description: Processes customer account closures by updating Salesforce, initiating SAP final settlement, and sending confirmation email via Microsoft Graph.
  tags:
  - banking
  - account-management
  - salesforce
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: account-ops
    port: 8080
    tools:
    - name: close-customer-account
      description: Given a Salesforce account ID and closure reason, update CRM, trigger SAP final settlement, and send confirmation.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID.
      - name: closure_reason
        in: body
        type: string
        description: Reason for account closure.
      steps:
      - name: get-account
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{account_id}}'
      - name: update-salesforce
        type: call
        call: salesforce.update-account
        with:
          account_id: '{{account_id}}'
          Status__c: Closed
          Closure_Reason__c: '{{closure_reason}}'
      - name: send-confirmation
        type: call
        call: msgraph.send-mail
        with:
          recipient: '{{get-account.Contact_Email__c}}'
          subject: 'HSBC: Account Closure Confirmation'
          body: 'Dear {{get-account.Name}}, your account has been closed per your request. Reason: {{closure_reason}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://hsbc.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: update-account
        method: PATCH
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/$secrets.service_email/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → customer-account-closure-workflow.yml

Runs liquidity stress test scenarios from Snowflake, generates a report via Confluence, and alerts treasury leadership via Teams.

naftiko: '0.5'
info:
  label: Liquidity Stress Test Runner
  description: Runs liquidity stress test scenarios from Snowflake, generates a report via Confluence, and alerts treasury leadership via Teams.
  tags:
  - treasury
  - risk
  - liquidity
  - snowflake
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: liquidity-ops
    port: 8080
    tools:
    - name: run-liquidity-stress-test
      description: Given a stress scenario name, execute the scenario in Snowflake, publish results to Confluence, and notify treasury.
      inputParameters:
      - name: scenario_name
        in: body
        type: string
        description: The stress test scenario name.
      steps:
      - name: run-scenario
        type: call
        call: snowflake.execute-statement
        with:
          statement: CALL risk.run_liquidity_stress('{{scenario_name}}')
      - name: publish-results
        type: call
        call: confluence.create-page
        with:
          space_key: TREASURY
          title: 'Liquidity Stress Test: {{scenario_name}}'
          body: 'Scenario: {{scenario_name}}. LCR: {{run-scenario.lcr}}%. NSFR: {{run-scenario.nsfr}}%. Survival days: {{run-scenario.survival_days}}'
      - name: notify-treasury
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.treasury_channel_id
          message: 'Liquidity stress test complete: {{scenario_name}}. LCR: {{run-scenario.lcr}}%. Results published to Confluence.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://hsbc.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://hsbc.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → liquidity-stress-test-runner.yml

Fetches sprint velocity metrics from Jira for an HSBC technology team and publishes a digest to Confluence and a Teams channel.

naftiko: '0.5'
info:
  label: Jira Sprint Velocity Report to Confluence
  description: Fetches sprint velocity metrics from Jira for an HSBC technology team and publishes a digest to Confluence and a Teams channel.
  tags:
  - devops
  - reporting
  - jira
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: agile-reporting
    port: 8080
    tools:
    - name: publish-sprint-velocity-report
      description: Given a Jira board ID and sprint ID, retrieve completed story points, update the HSBC team Confluence velocity page, and post a summary to the Microsoft Teams engineering channel.
      inputParameters:
      - name: board_id
        in: body
        type: string
        description: The Jira board ID for the HSBC technology team.
      - name: sprint_id
        in: body
        type: string
        description: The Jira sprint ID to report on.
      steps:
      - name: get-sprint-report
        type: call
        call: jira-agile.get-sprint-report
        with:
          board_id: '{{board_id}}'
          sprint_id: '{{sprint_id}}'
      - name: update-confluence
        type: call
        call: confluence.update-page
        with:
          page_id: $secrets.velocity_confluence_page_id
          content: 'Sprint {{sprint_id}} Velocity: {{get-sprint-report.completed_points}} points.'
      - name: notify-team
        type: call
        call: msteams-agile.post-channel-message
        with:
          channel_id: $secrets.engineering_channel_id
          message: 'Sprint {{sprint_id}} complete. Velocity: {{get-sprint-report.completed_points}} pts.'
  consumes:
  - type: http
    namespace: jira-agile
    baseUri: https://hsbc.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: sprint-reports
      path: /board/{{board_id}}/sprint/{{sprint_id}}/report
      inputParameters:
      - name: board_id
        in: path
      - name: sprint_id
        in: path
      operations:
      - name: get-sprint-report
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://hsbc.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: pages
      path: /content/{{page_id}}
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: update-page
        method: PUT
  - type: http
    namespace: msteams-agile
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → jira-sprint-velocity-report-to-confluence.yml

When Datadog detects a latency spike or error rate anomaly on an HSBC banking API, creates a ServiceNow incident and notifies the platform engineering team.

naftiko: '0.5'
info:
  label: Datadog Banking API Observability Alert
  description: When Datadog detects a latency spike or error rate anomaly on an HSBC banking API, creates a ServiceNow incident and notifies the platform engineering team.
  tags:
  - observability
  - monitoring
  - datadog
  - servicenow
  - microsoft-teams
  - banking
capability:
  exposes:
  - type: mcp
    namespace: api-ops
    port: 8080
    tools:
    - name: handle-api-anomaly
      description: Given a Datadog monitor ID that fired on an HSBC banking API, retrieve alert details, open a ServiceNow incident, and notify the platform engineering channel in Microsoft Teams.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: The Datadog monitor ID that triggered the anomaly alert.
      steps:
      - name: get-monitor
        type: call
        call: datadog.get-monitor
        with:
          monitor_id: '{{monitor_id}}'
      - name: create-incident
        type: call
        call: servicenow-api.create-incident
        with:
          short_description: 'API anomaly detected: {{get-monitor.name}}'
          description: 'Monitor: {{get-monitor.name}}

            Status: {{get-monitor.overall_state}}

            API: {{get-monitor.tags}}'
          category: banking_api
      - name: notify-platform
        type: call
        call: msteams-platform.post-channel-message
        with:
          channel_id: $secrets.platform_channel_id
          message: 'API anomaly: {{get-monitor.name}} | SNOW: {{create-incident.number}} | State: {{get-monitor.overall_state}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor/{{monitor_id}}
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: get-monitor
        method: GET
  - type: http
    namespace: servicenow-api
    baseUri: https://hsbc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams-platform
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → datadog-banking-api-observability-alert.yml

Retrieves credit ratings from Moody's for counterparty risk assessment.

naftiko: '0.5'
info:
  label: Moody's Credit Rating Lookup
  description: Retrieves credit ratings from Moody's for counterparty risk assessment.
  tags:
  - risk
  - compliance
  - moodys
capability:
  exposes:
  - type: mcp
    namespace: credit-ratings
    port: 8080
    tools:
    - name: get-credit-rating
      description: Look up a counterparty credit rating from Moody's.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Moody's entity ID.
      call: moodys.get-rating
      with:
        entity_id: '{{entity_id}}'
      outputParameters:
      - name: rating
        type: string
        mapping: $.rating
      - name: outlook
        type: string
        mapping: $.outlook
  consumes:
  - type: http
    namespace: moodys
    baseUri: https://api.moodys.com/v1
    authentication:
      type: bearer
      token: $secrets.moodys_token
    resources:
    - name: ratings
      path: /entities/{{entity_id}}/ratings
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-rating
        method: GET
Open in Framework → View in Fleet → moody-s-credit-rating-lookup.yml

Processes a SEPA batch payment file by validating the file format, screening all payments against sanctions, executing the batch in Temenos, and sending settlement confirmation via the corporate portal.

naftiko: '0.5'
info:
  label: SEPA Batch Payment Processing Pipeline
  description: Processes a SEPA batch payment file by validating the file format, screening all payments against sanctions, executing the batch in Temenos, and sending settlement confirmation via the corporate portal.
  tags:
  - payments
  - sepa
  - temenos-transact
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: sepa-batch
    port: 8080
    tools:
    - name: process-batch
      description: Process a SEPA batch payment file.
      inputParameters:
      - name: batch_id
        in: body
        type: string
        description: The batch file identifier.
      - name: corporate_id
        in: body
        type: string
        description: The corporate client ID.
      steps:
      - name: validate-file
        type: call
        call: payment-hub.validate-batch
        with:
          batch_id: '{{batch_id}}'
      - name: screen-sanctions
        type: call
        call: compliance.screen-batch
        with:
          batch_id: '{{batch_id}}'
          payment_count: '{{validate-file.payment_count}}'
      - name: execute-batch
        type: call
        call: temenos.execute-batch-payment
        with:
          batch_id: '{{batch_id}}'
          corporate_id: '{{corporate_id}}'
      - name: confirm-settlement
        type: call
        call: corporate-portal.send-confirmation
        with:
          corporate_id: '{{corporate_id}}'
          batch_id: '{{batch_id}}'
          total_amount: '{{execute-batch.total_amount}}'
          payment_count: '{{validate-file.payment_count}}'
  consumes:
  - type: http
    namespace: payment-hub
    baseUri: https://payment-hub.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.payment_hub_token
    resources:
    - name: batches
      path: /batches/validate
      operations:
      - name: validate-batch
        method: POST
  - type: http
    namespace: compliance
    baseUri: https://compliance-screening.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.compliance_token
    resources:
    - name: batch-screening
      path: /sanctions/screen-batch
      operations:
      - name: screen-batch
        method: POST
  - type: http
    namespace: temenos
    baseUri: https://core-banking.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.temenos_token
    resources:
    - name: batch-payments
      path: /payments/batch/execute
      operations:
      - name: execute-batch-payment
        method: POST
  - type: http
    namespace: corporate-portal
    baseUri: https://corporate.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.corporate_portal_token
    resources:
    - name: confirmations
      path: /confirmations/send
      operations:
      - name: send-confirmation
        method: POST
Open in Framework → View in Fleet → sepa-batch-payment-processing-pipeline.yml

Creates a job posting on LinkedIn from Workday requisition data and notifies recruiters.

naftiko: '0.5'
info:
  label: LinkedIn Job Posting Publisher
  description: Creates a job posting on LinkedIn from Workday requisition data and notifies recruiters.
  tags:
  - hr
  - recruiting
  - linkedin
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: job-posting
    port: 8080
    tools:
    - name: publish-job
      description: Publish a Workday requisition to LinkedIn.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: Workday requisition ID.
      steps:
      - name: get-req
        type: call
        call: workday.get-requisition
        with:
          requisition_id: '{{requisition_id}}'
      - name: post-job
        type: call
        call: linkedin.create-job
        with:
          title: '{{get-req.job_title}}'
          description: '{{get-req.job_description}}'
          location: '{{get-req.location}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: recruiting
          text: 'Job posted: {{get-req.job_title}} in {{get-req.location}}. LinkedIn: {{post-job.job_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: requisitions
      path: /recruiting/v1/jobRequisitions/{{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_token
    resources:
    - name: jobs
      path: /simpleJobPostings
      operations:
      - name: create-job
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → linkedin-job-posting-publisher.yml

Retrieves billing account details from SAP BRIM for ING fee management, returning account status, outstanding charges, billing cycle, and payment method.

naftiko: '0.5'
info:
  label: SAP BRIM Billing Account Lookup
  description: Retrieves billing account details from SAP BRIM for ING fee management, returning account status, outstanding charges, billing cycle, and payment method.
  tags:
  - billing
  - sap-brim
  - banking
capability:
  exposes:
  - type: mcp
    namespace: billing-management
    port: 8080
    tools:
    - name: get-billing-account
      description: Look up a billing account in SAP BRIM.
      inputParameters:
      - name: billing_account_id
        in: body
        type: string
        description: The SAP BRIM billing account ID.
      call: sapbrim.get-account
      with:
        billing_account_id: '{{billing_account_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.billingAccount.status
      - name: outstanding_charges
        type: string
        mapping: $.billingAccount.outstandingAmount
      - name: billing_cycle
        type: string
        mapping: $.billingAccount.billingCycle
  consumes:
  - type: http
    namespace: sapbrim
    baseUri: https://ing-brim.sap.com/api/v1
    authentication:
      type: basic
      username: $secrets.sap_brim_user
      password: $secrets.sap_brim_password
    resources:
    - name: accounts
      path: /billing-accounts/{{billing_account_id}}
      inputParameters:
      - name: billing_account_id
        in: path
      operations:
      - name: get-account
        method: GET
Open in Framework → View in Fleet → sap-brim-billing-account-lookup.yml

Retrieves GitHub Copilot usage analytics for ING engineering teams, returning active users, suggestion acceptance rate, and lines of code generated.

naftiko: '0.5'
info:
  label: GitHub Copilot Usage Analytics
  description: Retrieves GitHub Copilot usage analytics for ING engineering teams, returning active users, suggestion acceptance rate, and lines of code generated.
  tags:
  - development
  - github-copilot
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: copilot-analytics
    port: 8080
    tools:
    - name: get-copilot-usage
      description: Retrieve GitHub Copilot usage analytics.
      inputParameters:
      - name: org_name
        in: body
        type: string
        description: The GitHub organization name.
      call: github.get-copilot-usage
      with:
        org_name: '{{org_name}}'
      outputParameters:
      - name: active_users
        type: number
        mapping: $.totalActiveUsers
      - name: acceptance_rate
        type: string
        mapping: $.acceptanceRate
      - name: lines_generated
        type: number
        mapping: $.totalLinesGenerated
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: copilot
      path: /orgs/{{org_name}}/copilot/usage
      inputParameters:
      - name: org_name
        in: path
      operations:
      - name: get-copilot-usage
        method: GET
Open in Framework → View in Fleet → github-copilot-usage-analytics.yml

Creates a meeting on an ING employee's Outlook calendar.

naftiko: '0.5'
info:
  label: Microsoft Outlook Meeting Scheduler
  description: Creates a meeting on an ING employee's Outlook calendar.
  tags:
  - communications
  - scheduling
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: meeting-scheduler
    port: 8080
    tools:
    - name: schedule-meeting
      description: Create a meeting on Outlook calendar.
      inputParameters:
      - name: organizer_upn
        in: body
        type: string
        description: Organizer UPN.
      - name: subject
        in: body
        type: string
        description: Subject.
      - name: start_time
        in: body
        type: string
        description: Start time ISO 8601.
      - name: end_time
        in: body
        type: string
        description: End time ISO 8601.
      call: outlook.create-event
      with:
        organizer_upn: '{{organizer_upn}}'
        subject: '{{subject}}'
        start_time: '{{start_time}}'
        end_time: '{{end_time}}'
      outputParameters:
      - name: meeting_link
        type: string
        mapping: $.onlineMeeting.joinUrl
  consumes:
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: events
      path: /users/{{organizer_upn}}/events
      inputParameters:
      - name: organizer_upn
        in: path
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → microsoft-outlook-meeting-scheduler.yml

Retrieves a compliance or policy document from SharePoint.

naftiko: '0.5'
info:
  label: SharePoint Policy Document Retriever
  description: Retrieves a compliance or policy document from SharePoint.
  tags:
  - compliance
  - documents
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: policy-docs
    port: 8080
    tools:
    - name: get-policy-doc
      description: Retrieve a policy document from SharePoint.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: SharePoint site ID.
      - name: file_path
        in: body
        type: string
        description: File path.
      call: sharepoint.get-file
      with:
        site_id: '{{site_id}}'
        file_path: '{{file_path}}'
      outputParameters:
      - name: download_url
        type: string
        mapping: $.@microsoft.graph.downloadUrl
      - name: file_name
        type: string
        mapping: $.name
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{file_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: get-file
        method: GET
Open in Framework → View in Fleet → sharepoint-policy-document-retriever.yml

Retrieves transaction data from Mastercard's network for ING-issued cards.

naftiko: '0.5'
info:
  label: Mastercard Transaction Data Retriever
  description: Retrieves transaction data from Mastercard's network for ING-issued cards.
  tags:
  - payments
  - banking
  - mastercard
capability:
  exposes:
  - type: mcp
    namespace: card-transactions
    port: 8080
    tools:
    - name: get-card-transactions
      description: Retrieve recent transactions for an ING Mastercard.
      inputParameters:
      - name: card_id
        in: body
        type: string
        description: Card identifier.
      - name: date_range
        in: body
        type: string
        description: Date range.
      call: mastercard.get-transactions
      with:
        card_id: '{{card_id}}'
        date_range: '{{date_range}}'
      outputParameters:
      - name: transactions
        type: string
        mapping: $.transactions
      - name: total_count
        type: string
        mapping: $.totalCount
  consumes:
  - type: http
    namespace: mastercard
    baseUri: https://api.mastercard.com/atms/v1
    authentication:
      type: bearer
      token: $secrets.mastercard_token
    resources:
    - name: transactions
      path: /cards/{{card_id}}/transactions
      inputParameters:
      - name: card_id
        in: path
      - name: date_range
        in: query
      operations:
      - name: get-transactions
        method: GET
Open in Framework → View in Fleet → mastercard-transaction-data-retriever.yml

Retrieves a payment intent status from Stripe for ING's digital retail products.

naftiko: '0.5'
info:
  label: Stripe Payment Gateway Status
  description: Retrieves a payment intent status from Stripe for ING's digital retail products.
  tags:
  - payments
  - e-commerce
  - stripe
capability:
  exposes:
  - type: mcp
    namespace: payment-gateway
    port: 8080
    tools:
    - name: get-payment-status
      description: Look up a Stripe payment intent status.
      inputParameters:
      - name: payment_intent_id
        in: body
        type: string
        description: Stripe payment intent ID.
      call: stripe.get-payment-intent
      with:
        payment_intent_id: '{{payment_intent_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: amount
        type: string
        mapping: $.amount
      - name: currency
        type: string
        mapping: $.currency
  consumes:
  - type: http
    namespace: stripe
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: payment-intents
      path: /payment_intents/{{payment_intent_id}}
      inputParameters:
      - name: payment_intent_id
        in: path
      operations:
      - name: get-payment-intent
        method: GET
Open in Framework → View in Fleet → stripe-payment-gateway-status.yml

Retrieves regulatory compliance dashboard data from Power BI, returning capital adequacy ratio, liquidity coverage ratio, and leverage ratio for ING Group reporting.

naftiko: '0.5'
info:
  label: Power BI Regulatory Dashboard
  description: Retrieves regulatory compliance dashboard data from Power BI, returning capital adequacy ratio, liquidity coverage ratio, and leverage ratio for ING Group reporting.
  tags:
  - compliance
  - analytics
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: regulatory-dashboard
    port: 8080
    tools:
    - name: get-regulatory-metrics
      description: Retrieve regulatory compliance metrics from Power BI.
      inputParameters:
      - name: report_date
        in: body
        type: string
        description: The reporting date.
      call: powerbi.query-regulatory
      with:
        report_date: '{{report_date}}'
      outputParameters:
      - name: car
        type: string
        mapping: $.value[0].CapitalAdequacyRatio
      - name: lcr
        type: string
        mapping: $.value[0].LiquidityCoverageRatio
      - name: leverage_ratio
        type: string
        mapping: $.value[0].LeverageRatio
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/executeQueries
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: query-regulatory
        method: POST
Open in Framework → View in Fleet → power-bi-regulatory-dashboard.yml

Triggers a GitHub Actions deployment workflow for ING banking applications.

naftiko: '0.5'
info:
  label: GitHub Actions Deployment Trigger
  description: Triggers a GitHub Actions deployment workflow for ING banking applications.
  tags:
  - it-operations
  - cicd
  - github-actions
capability:
  exposes:
  - type: mcp
    namespace: deployments
    port: 8080
    tools:
    - name: trigger-deployment
      description: Trigger a GitHub Actions deployment.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository.
      - name: workflow_id
        in: body
        type: string
        description: Workflow ID.
      - name: ref
        in: body
        type: string
        description: Git ref.
      call: github.trigger-workflow
      with:
        repo: '{{repo}}'
        workflow_id: '{{workflow_id}}'
        ref: '{{ref}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflows
      path: /repos/{{repo}}/actions/workflows/{{workflow_id}}/dispatches
      inputParameters:
      - name: repo
        in: path
      - name: workflow_id
        in: path
      operations:
      - name: trigger-workflow
        method: POST
Open in Framework → View in Fleet → github-actions-deployment-trigger.yml

Retrieves bond pricing data from Bloomberg Enterprise Data for ING fixed income trading, returning clean price, dirty price, yield to maturity, and spread.

naftiko: '0.5'
info:
  label: Bloomberg Terminal Bond Pricing
  description: Retrieves bond pricing data from Bloomberg Enterprise Data for ING fixed income trading, returning clean price, dirty price, yield to maturity, and spread.
  tags:
  - trading
  - fixed-income
  - bloomberg-enterprise-data
capability:
  exposes:
  - type: mcp
    namespace: bond-pricing
    port: 8080
    tools:
    - name: get-bond-price
      description: Retrieve bond pricing from Bloomberg.
      inputParameters:
      - name: isin
        in: body
        type: string
        description: The bond ISIN.
      call: bloomberg.get-pricing
      with:
        isin: '{{isin}}'
      outputParameters:
      - name: clean_price
        type: string
        mapping: $.data[0].cleanPrice
      - name: dirty_price
        type: string
        mapping: $.data[0].dirtyPrice
      - name: ytm
        type: string
        mapping: $.data[0].yieldToMaturity
      - name: spread
        type: string
        mapping: $.data[0].zSpread
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: pricing
      path: /securities/{{isin}}/pricing
      inputParameters:
      - name: isin
        in: path
      operations:
      - name: get-pricing
        method: GET
Open in Framework → View in Fleet → bloomberg-terminal-bond-pricing.yml

Orchestrates new customer account opening by running KYC verification, creating the account in Temenos, provisioning digital banking access, and sending welcome notification via WhatsApp.

naftiko: '0.5'
info:
  label: Customer Account Opening Orchestrator
  description: Orchestrates new customer account opening by running KYC verification, creating the account in Temenos, provisioning digital banking access, and sending welcome notification via WhatsApp.
  tags:
  - banking
  - onboarding
  - temenos-transact
  - whatsapp
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: account-opening
    port: 8080
    tools:
    - name: open-account
      description: Orchestrate new customer account opening.
      inputParameters:
      - name: customer_name
        in: body
        type: string
        description: The customer full name.
      - name: id_number
        in: body
        type: string
        description: The national ID number.
      - name: phone
        in: body
        type: string
        description: Customer phone number.
      steps:
      - name: verify-kyc
        type: call
        call: compliance.kyc-check
        with:
          name: '{{customer_name}}'
          id_number: '{{id_number}}'
      - name: create-account
        type: call
        call: temenos.create-account
        with:
          customer_name: '{{customer_name}}'
          kyc_reference: '{{verify-kyc.kyc_reference}}'
      - name: provision-digital
        type: call
        call: digital-banking.provision-access
        with:
          account_id: '{{create-account.account_id}}'
          phone: '{{phone}}'
      - name: send-welcome
        type: call
        call: whatsapp.send-message
        with:
          phone: '{{phone}}'
          template: welcome_new_customer
          parameters: '{{customer_name}},{{create-account.account_id}},{{create-account.iban}}'
  consumes:
  - type: http
    namespace: compliance
    baseUri: https://compliance-screening.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.compliance_token
    resources:
    - name: kyc
      path: /kyc/verify
      operations:
      - name: kyc-check
        method: POST
  - type: http
    namespace: temenos
    baseUri: https://core-banking.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.temenos_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
  - type: http
    namespace: digital-banking
    baseUri: https://digital-banking.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.digital_banking_token
    resources:
    - name: provisioning
      path: /access/provision
      operations:
      - name: provision-access
        method: POST
  - type: http
    namespace: whatsapp
    baseUri: https://graph.facebook.com/v17.0
    authentication:
      type: bearer
      token: $secrets.whatsapp_token
    resources:
    - name: messages
      path: /{{phone_number_id}}/messages
      inputParameters:
      - name: phone_number_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → customer-account-opening-orchestrator.yml

Retrieves mobile banking application performance from Dynatrace, returning crash rate, session duration, API response time, and user satisfaction score.

naftiko: '0.5'
info:
  label: Dynatrace Banking App Performance
  description: Retrieves mobile banking application performance from Dynatrace, returning crash rate, session duration, API response time, and user satisfaction score.
  tags:
  - monitoring
  - dynatrace
  - mobile-banking
capability:
  exposes:
  - type: mcp
    namespace: mobile-app-performance
    port: 8080
    tools:
    - name: get-app-performance
      description: Retrieve mobile banking app performance from Dynatrace.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: The Dynatrace mobile app ID.
      call: dynatrace.get-app-metrics
      with:
        app_id: '{{app_id}}'
      outputParameters:
      - name: crash_rate
        type: string
        mapping: $.result[0].data[0].values.crashRate
      - name: avg_session_duration
        type: string
        mapping: $.result[0].data[0].values.sessionDuration
      - name: api_response_time
        type: string
        mapping: $.result[0].data[0].values.apiResponseTime
  consumes:
  - type: http
    namespace: dynatrace
    baseUri: https://ing.live.dynatrace.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: metrics
      path: /metrics/query?entitySelector=type(MOBILE_APPLICATION),entityId({{app_id}})
      inputParameters:
      - name: app_id
        in: query
      operations:
      - name: get-app-metrics
        method: GET
Open in Framework → View in Fleet → dynatrace-banking-app-performance.yml

Retrieves a customer's 360 view from Salesforce, including account summary, recent interactions, and open cases.

naftiko: '0.5'
info:
  label: Salesforce Customer 360 Lookup
  description: Retrieves a customer's 360 view from Salesforce, including account summary, recent interactions, and open cases.
  tags:
  - banking
  - customer-service
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: customer-360
    port: 8080
    tools:
    - name: get-customer-view
      description: Retrieve customer 360 view from Salesforce.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: Customer ID.
      call: salesforce.get-contact
      with:
        customer_id: '{{customer_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.Name
      - name: segment
        type: string
        mapping: $.Customer_Segment__c
      - name: relationship_manager
        type: string
        mapping: $.Relationship_Manager__c
      - name: open_cases
        type: string
        mapping: $.Cases.totalSize
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://ing.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /sobjects/Contact/{{customer_id}}
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: get-contact
        method: GET
Open in Framework → View in Fleet → salesforce-customer-360-lookup.yml

Triggers a credit risk model run in Azure Databricks for ING lending, returning model output, probability of default, and risk category.

naftiko: '0.5'
info:
  label: Azure Databricks Credit Model Runner
  description: Triggers a credit risk model run in Azure Databricks for ING lending, returning model output, probability of default, and risk category.
  tags:
  - machine-learning
  - azure-databricks
  - risk
capability:
  exposes:
  - type: mcp
    namespace: credit-models
    port: 8080
    tools:
    - name: run-credit-model
      description: Trigger a credit risk model run in Azure Databricks.
      inputParameters:
      - name: model_name
        in: body
        type: string
        description: The ML model name.
      - name: customer_segment
        in: body
        type: string
        description: The customer segment.
      call: databricks.run-job
      with:
        model_name: '{{model_name}}'
        customer_segment: '{{customer_segment}}'
      outputParameters:
      - name: run_id
        type: string
        mapping: $.run_id
      - name: pd_output
        type: string
        mapping: $.output.pd
      - name: risk_category
        type: string
        mapping: $.output.risk_category
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://adb-ing.azuredatabricks.net/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
Open in Framework → View in Fleet → azure-databricks-credit-model-runner.yml

Checks Google Pay token status for an ING card.

naftiko: '0.5'
info:
  label: Google Pay Integration Status
  description: Checks Google Pay token status for an ING card.
  tags:
  - payments
  - mobile-banking
  - google-pay
capability:
  exposes:
  - type: mcp
    namespace: gpay-status
    port: 8080
    tools:
    - name: get-gpay-status
      description: Check Google Pay status for a card.
      inputParameters:
      - name: card_id
        in: body
        type: string
        description: Card identifier.
      call: google-pay.get-token-status
      with:
        card_id: '{{card_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.tokenStatus
      - name: active_tokens
        type: string
        mapping: $.activeTokenCount
  consumes:
  - type: http
    namespace: google-pay
    baseUri: https://mobile-payments.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.google_pay_token
    resources:
    - name: tokens
      path: /cards/{{card_id}}/google-pay
      inputParameters:
      - name: card_id
        in: path
      operations:
      - name: get-token-status
        method: GET
Open in Framework → View in Fleet → google-pay-integration-status.yml

Orchestrates biometric enrollment for ING mobile banking customers, coordinating fingerprint and facial recognition setup with device binding and security validation.

naftiko: '0.5'
info:
  label: Mobile Banking Biometric Enrollment Orchestrator
  description: Orchestrates biometric enrollment for ING mobile banking customers, coordinating fingerprint and facial recognition setup with device binding and security validation.
  tags:
  - mobile-banking
  - biometric-security
  - authentication
capability:
  exposes:
  - type: mcp
    namespace: biometric-enrollment
    port: 8080
    tools:
    - name: enroll-biometric
      description: Enroll a customer biometric authentication method for mobile banking.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The ING customer identifier.
      - name: device_id
        in: body
        type: string
        description: The registered mobile device identifier.
      - name: biometric_type
        in: body
        type: string
        description: Biometric type such as fingerprint or face-recognition.
      call: identity-api.enroll-biometric
      with:
        customer: '{{customer_id}}'
        device: '{{device_id}}'
        type: '{{biometric_type}}'
      outputParameters:
      - name: enrollment_id
        type: string
        mapping: $.enrollment.id
      - name: status
        type: string
        mapping: $.enrollment.status
      - name: device_bound
        type: boolean
        mapping: $.enrollment.deviceBound
  consumes:
  - type: http
    namespace: identity-api
    baseUri: https://api.ing.com/identity/v1
    authentication:
      type: bearer
      token: $secrets.ing_identity_api_token
    resources:
    - name: biometrics
      path: /customers/{{customer}}/biometrics
      inputParameters:
      - name: customer
        in: path
      operations:
      - name: enroll-biometric
        method: POST
Open in Framework → View in Fleet → mobile-banking-biometric-enrollment-orchestrator.yml

Sends an announcement to an ING department's Teams channel.

naftiko: '0.5'
info:
  label: Microsoft Teams Departmental Announcement
  description: Sends an announcement to an ING department's Teams channel.
  tags:
  - communications
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: dept-comms
    port: 8080
    tools:
    - name: send-announcement
      description: Post an announcement to a department Teams channel.
      inputParameters:
      - name: department
        in: body
        type: string
        description: Department name.
      - name: message
        in: body
        type: string
        description: Message text.
      call: msteams.post-message
      with:
        channel_id: announcements_{{department}}
        text: '{{message}}'
  consumes:
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → microsoft-teams-departmental-announcement.yml

Processes a credit card application by running credit scoring, verifying income via the payroll system, creating the card account in Temenos, and notifying the customer via WhatsApp.

naftiko: '0.5'
info:
  label: Credit Card Application Orchestrator
  description: Processes a credit card application by running credit scoring, verifying income via the payroll system, creating the card account in Temenos, and notifying the customer via WhatsApp.
  tags:
  - banking
  - credit
  - temenos-transact
  - whatsapp
capability:
  exposes:
  - type: mcp
    namespace: credit-card-applications
    port: 8080
    tools:
    - name: process-application
      description: Process a credit card application.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The customer ID.
      - name: requested_limit
        in: body
        type: string
        description: Requested credit limit.
      steps:
      - name: run-credit-score
        type: call
        call: credit-engine.score-customer
        with:
          customer_id: '{{customer_id}}'
      - name: verify-income
        type: call
        call: income-verification.check
        with:
          customer_id: '{{customer_id}}'
      - name: create-card-account
        type: call
        call: temenos.create-card-account
        with:
          customer_id: '{{customer_id}}'
          credit_limit: '{{requested_limit}}'
          credit_score: '{{run-credit-score.score}}'
      - name: notify-customer
        type: call
        call: whatsapp.send-message
        with:
          phone: '{{run-credit-score.customer_phone}}'
          template: card_approved
          parameters: '{{create-card-account.card_number_masked}},{{create-card-account.credit_limit}}'
  consumes:
  - type: http
    namespace: credit-engine
    baseUri: https://credit-scoring.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.credit_engine_token
    resources:
    - name: scoring
      path: /score
      operations:
      - name: score-customer
        method: POST
  - type: http
    namespace: income-verification
    baseUri: https://income-verify.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.income_verify_token
    resources:
    - name: verification
      path: /verify
      operations:
      - name: check
        method: POST
  - type: http
    namespace: temenos
    baseUri: https://core-banking.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.temenos_token
    resources:
    - name: card-accounts
      path: /cards/accounts
      operations:
      - name: create-card-account
        method: POST
  - type: http
    namespace: whatsapp
    baseUri: https://graph.facebook.com/v17.0
    authentication:
      type: bearer
      token: $secrets.whatsapp_token
    resources:
    - name: messages
      path: /{{phone_number_id}}/messages
      inputParameters:
      - name: phone_number_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → credit-card-application-orchestrator.yml

Retrieves user identity details from Microsoft Entra ID for ING access management, returning user principal name, group memberships, and last sign-in date.

naftiko: '0.5'
info:
  label: Microsoft Entra Identity Lookup
  description: Retrieves user identity details from Microsoft Entra ID for ING access management, returning user principal name, group memberships, and last sign-in date.
  tags:
  - security
  - identity
  - microsoft-entra
capability:
  exposes:
  - type: mcp
    namespace: identity-management
    port: 8080
    tools:
    - name: get-user-identity
      description: Look up a user identity in Microsoft Entra ID.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: The Entra user principal name or ID.
      call: entra.get-user
      with:
        user_id: '{{user_id}}'
      outputParameters:
      - name: display_name
        type: string
        mapping: $.displayName
      - name: upn
        type: string
        mapping: $.userPrincipalName
      - name: groups
        type: string
        mapping: $.memberOf
      - name: last_sign_in
        type: string
        mapping: $.signInActivity.lastSignInDateTime
  consumes:
  - type: http
    namespace: entra
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.entra_token
    resources:
    - name: users
      path: /users/{{user_id}}
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: get-user
        method: GET
Open in Framework → View in Fleet → microsoft-entra-identity-lookup.yml

Investigates a suspicious activity alert by retrieving transaction history from Temenos, running enhanced due diligence via the compliance platform, creating a case in Salesforce, and notifying the compliance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: AML Suspicious Activity Investigation Pipeline
  description: Investigates a suspicious activity alert by retrieving transaction history from Temenos, running enhanced due diligence via the compliance platform, creating a case in Salesforce, and notifying the compliance team via Microsoft Teams.
  tags:
  - compliance
  - aml
  - temenos-transact
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: aml-investigation
    port: 8080
    tools:
    - name: investigate-alert
      description: Investigate an AML suspicious activity alert.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The AML alert ID.
      - name: customer_id
        in: body
        type: string
        description: The customer ID.
      steps:
      - name: get-transactions
        type: call
        call: temenos.get-transaction-history
        with:
          customer_id: '{{customer_id}}'
          days: '90'
      - name: run-edd
        type: call
        call: compliance.enhanced-due-diligence
        with:
          customer_id: '{{customer_id}}'
          alert_id: '{{alert_id}}'
      - name: create-case
        type: call
        call: salesforce.create-case
        with:
          subject: 'AML Investigation: Alert {{alert_id}} - Customer {{customer_id}}'
          description: 'Transaction count (90d): {{get-transactions.count}}. EDD risk score: {{run-edd.risk_score}}. EDD findings: {{run-edd.findings}}.'
          type: AML_Investigation
          priority: High
      - name: notify-compliance
        type: call
        call: teams.send-message
        with:
          channel: AML_Investigations
          message: 'New AML case created: {{create-case.case_number}}. Alert: {{alert_id}}. Customer: {{customer_id}}. EDD Risk: {{run-edd.risk_score}}.'
  consumes:
  - type: http
    namespace: temenos
    baseUri: https://core-banking.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.temenos_token
    resources:
    - name: transactions
      path: /customers/{{customer_id}}/transactions
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: get-transaction-history
        method: GET
  - type: http
    namespace: compliance
    baseUri: https://compliance-screening.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.compliance_token
    resources:
    - name: edd
      path: /edd/assess
      operations:
      - name: enhanced-due-diligence
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://ing.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: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_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: send-message
        method: POST
Open in Framework → View in Fleet → aml-suspicious-activity-investigation-pipeline.yml

When a fraud alert is triggered, retrieves card transaction details, blocks the card via the banking platform, creates a case in ServiceNow, and notifies the customer via WhatsApp.

naftiko: '0.5'
info:
  label: Fraud Detection Alert Processor
  description: When a fraud alert is triggered, retrieves card transaction details, blocks the card via the banking platform, creates a case in ServiceNow, and notifies the customer via WhatsApp.
  tags:
  - risk
  - banking
  - compliance
  - servicenow
  - whatsapp
capability:
  exposes:
  - type: mcp
    namespace: fraud-detection
    port: 8080
    tools:
    - name: process-fraud-alert
      description: Handle a fraud detection alert across card blocking, case creation, and notification.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: Fraud alert ID.
      - name: card_number_masked
        in: body
        type: string
        description: Masked card number.
      steps:
      - name: get-alert
        type: call
        call: fraud-system.get-alert
        with:
          alert_id: '{{alert_id}}'
      - name: block-card
        type: call
        call: temenos.block-card
        with:
          card_id: '{{get-alert.card_id}}'
          reason: fraud_suspected
      - name: create-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Fraud alert: Card {{card_number_masked}} - {{get-alert.alert_type}}'
          priority: '1'
          category: fraud_investigation
      - name: notify-customer
        type: call
        call: whatsapp.send-message
        with:
          phone: '{{get-alert.customer_phone}}'
          template: fraud_alert
          parameters: '{{card_number_masked}},{{get-alert.transaction_amount}}'
  consumes:
  - type: http
    namespace: fraud-system
    baseUri: https://fraud-detection.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.fraud_system_token
    resources:
    - name: alerts
      path: /alerts/{{alert_id}}
      inputParameters:
      - name: alert_id
        in: path
      operations:
      - name: get-alert
        method: GET
  - type: http
    namespace: temenos
    baseUri: https://core-banking.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.temenos_token
    resources:
    - name: cards
      path: /cards/{{card_id}}/block
      inputParameters:
      - name: card_id
        in: path
      operations:
      - name: block-card
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://ing.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: whatsapp
    baseUri: https://graph.facebook.com/v17.0
    authentication:
      type: bearer
      token: $secrets.whatsapp_token
    resources:
    - name: messages
      path: /{{phone_number_id}}/messages
      inputParameters:
      - name: phone_number_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → fraud-detection-alert-processor.yml

Processes corporate loan renewal by pulling current facility data from Temenos, running updated credit analysis, generating renewal terms, and creating the approval workflow in ServiceNow.

naftiko: '0.5'
info:
  label: Corporate Lending Renewal Pipeline
  description: Processes corporate loan renewal by pulling current facility data from Temenos, running updated credit analysis, generating renewal terms, and creating the approval workflow in ServiceNow.
  tags:
  - lending
  - corporate-banking
  - temenos-transact
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: corporate-lending
    port: 8080
    tools:
    - name: process-renewal
      description: Process a corporate lending facility renewal.
      inputParameters:
      - name: facility_id
        in: body
        type: string
        description: The lending facility ID.
      - name: corporate_id
        in: body
        type: string
        description: The corporate client ID.
      steps:
      - name: get-facility
        type: call
        call: temenos.get-facility
        with:
          facility_id: '{{facility_id}}'
      - name: run-credit-analysis
        type: call
        call: credit-engine.analyze-corporate
        with:
          corporate_id: '{{corporate_id}}'
          current_exposure: '{{get-facility.outstanding_amount}}'
      - name: generate-terms
        type: call
        call: pricing-engine.calculate-corporate-rate
        with:
          facility_id: '{{facility_id}}'
          credit_grade: '{{run-credit-analysis.credit_grade}}'
      - name: create-approval
        type: call
        call: servicenow.create-request
        with:
          short_description: 'Lending renewal: Facility {{facility_id}} - {{get-facility.client_name}}'
          description: 'Current amount: {{get-facility.outstanding_amount}}. Credit grade: {{run-credit-analysis.credit_grade}}. Proposed rate: {{generate-terms.offered_rate}}.'
          assignment_group: Credit_Committee
          priority: '2'
  consumes:
  - type: http
    namespace: temenos
    baseUri: https://core-banking.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.temenos_token
    resources:
    - name: facilities
      path: /facilities/{{facility_id}}
      inputParameters:
      - name: facility_id
        in: path
      operations:
      - name: get-facility
        method: GET
  - type: http
    namespace: credit-engine
    baseUri: https://credit-scoring.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.credit_engine_token
    resources:
    - name: corporate-analysis
      path: /analyze/corporate
      operations:
      - name: analyze-corporate
        method: POST
  - type: http
    namespace: pricing-engine
    baseUri: https://pricing.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.pricing_engine_token
    resources:
    - name: corporate-rates
      path: /corporate/calculate
      operations:
      - name: calculate-corporate-rate
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://ing.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
Open in Framework → View in Fleet → corporate-lending-renewal-pipeline.yml

Retrieves interbank reference rates (EURIBOR, EONIA, SOFR) from the market data service, returning rate value, tenor, fixing date, and source.

naftiko: '0.5'
info:
  label: Interbank Reference Rate Lookup
  description: Retrieves interbank reference rates (EURIBOR, EONIA, SOFR) from the market data service, returning rate value, tenor, fixing date, and source.
  tags:
  - treasury
  - market-data
  - rates
capability:
  exposes:
  - type: mcp
    namespace: reference-rates
    port: 8080
    tools:
    - name: get-reference-rate
      description: Look up an interbank reference rate.
      inputParameters:
      - name: rate_type
        in: body
        type: string
        description: The rate type (EURIBOR, SOFR, EONIA).
      - name: tenor
        in: body
        type: string
        description: The tenor (1M, 3M, 6M, 12M).
      call: market-data.get-rate
      with:
        rate_type: '{{rate_type}}'
        tenor: '{{tenor}}'
      outputParameters:
      - name: rate_value
        type: string
        mapping: $.data.rate
      - name: fixing_date
        type: string
        mapping: $.data.fixingDate
      - name: source
        type: string
        mapping: $.data.source
  consumes:
  - type: http
    namespace: market-data
    baseUri: https://market-data.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.market_data_token
    resources:
    - name: rates
      path: /reference-rates?type={{rate_type}}&tenor={{tenor}}
      inputParameters:
      - name: rate_type
        in: query
      - name: tenor
        in: query
      operations:
      - name: get-rate
        method: GET
Open in Framework → View in Fleet → interbank-reference-rate-lookup.yml

Retrieves a prospect lead from HubSpot for ING corporate banking outreach.

naftiko: '0.5'
info:
  label: HubSpot Lead Enrichment
  description: Retrieves a prospect lead from HubSpot for ING corporate banking outreach.
  tags:
  - sales
  - marketing
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: lead-management
    port: 8080
    tools:
    - name: get-lead
      description: Retrieve a HubSpot lead.
      inputParameters:
      - name: contact_id
        in: body
        type: string
        description: HubSpot contact ID.
      call: hubspot.get-contact
      with:
        contact_id: '{{contact_id}}'
      outputParameters:
      - name: company
        type: string
        mapping: $.properties.company
      - name: email
        type: string
        mapping: $.properties.email
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /crm/v3/objects/contacts/{{contact_id}}
      inputParameters:
      - name: contact_id
        in: path
      operations:
      - name: get-contact
        method: GET
Open in Framework → View in Fleet → hubspot-lead-enrichment.yml

Reviews and recalculates credit limits for ING wholesale banking clients based on updated financial statements, market conditions, and counterparty risk assessments.

naftiko: '0.5'
info:
  label: Wholesale Client Credit Limit Reviewer
  description: Reviews and recalculates credit limits for ING wholesale banking clients based on updated financial statements, market conditions, and counterparty risk assessments.
  tags:
  - wholesale-banking
  - credit-risk
  - client-management
capability:
  exposes:
  - type: mcp
    namespace: credit-limit-review
    port: 8080
    tools:
    - name: review-credit-limit
      description: Review and recalculate credit limit for a wholesale client.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The wholesale banking client identifier.
      - name: review_type
        in: body
        type: string
        description: Review type such as annual, triggered, or ad-hoc.
      call: credit-api.review-limit
      with:
        client: '{{client_id}}'
        type: '{{review_type}}'
      outputParameters:
      - name: current_limit
        type: number
        mapping: $.review.currentLimit
      - name: proposed_limit
        type: number
        mapping: $.review.proposedLimit
      - name: risk_rating
        type: string
        mapping: $.review.riskRating
  consumes:
  - type: http
    namespace: credit-api
    baseUri: https://api.ing.com/wholesale/v1
    authentication:
      type: bearer
      token: $secrets.ing_wholesale_credit_token
    resources:
    - name: credit-limits
      path: /clients/{{client}}/credit-limits/review
      inputParameters:
      - name: client
        in: path
      operations:
      - name: review-limit
        method: POST
Open in Framework → View in Fleet → wholesale-client-credit-limit-reviewer.yml

Retrieves SEPA direct debit mandate details for a customer account, returning mandate reference, creditor, status, and maximum amount.

naftiko: '0.5'
info:
  label: SEPA Direct Debit Mandate Lookup
  description: Retrieves SEPA direct debit mandate details for a customer account, returning mandate reference, creditor, status, and maximum amount.
  tags:
  - payments
  - banking
  - temenos-transact
capability:
  exposes:
  - type: mcp
    namespace: direct-debits
    port: 8080
    tools:
    - name: get-mandate
      description: Look up SEPA direct debit mandate details.
      inputParameters:
      - name: mandate_ref
        in: body
        type: string
        description: The SEPA mandate reference.
      call: temenos.get-mandate
      with:
        mandate_ref: '{{mandate_ref}}'
      outputParameters:
      - name: creditor_name
        type: string
        mapping: $.body.creditorName
      - name: status
        type: string
        mapping: $.body.mandateStatus
      - name: max_amount
        type: string
        mapping: $.body.maximumAmount
  consumes:
  - type: http
    namespace: temenos
    baseUri: https://core-banking.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.temenos_token
    resources:
    - name: mandates
      path: /payments/directDebits/mandates/{{mandate_ref}}
      inputParameters:
      - name: mandate_ref
        in: path
      operations:
      - name: get-mandate
        method: GET
Open in Framework → View in Fleet → sepa-direct-debit-mandate-lookup.yml

Screens investment portfolios for ESG compliance by querying positions from Murex, running ESG scoring via the sustainability platform, generating the report in Google Sheets, and notifying stakeholders via Microsoft Teams.

naftiko: '0.5'
info:
  label: ESG Screening and Reporting Pipeline
  description: Screens investment portfolios for ESG compliance by querying positions from Murex, running ESG scoring via the sustainability platform, generating the report in Google Sheets, and notifying stakeholders via Microsoft Teams.
  tags:
  - sustainability
  - esg
  - murex
  - google-sheets
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: esg-screening
    port: 8080
    tools:
    - name: screen-portfolio-esg
      description: Screen a portfolio for ESG compliance and generate report.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The portfolio ID.
      - name: reporting_date
        in: body
        type: string
        description: The reporting date.
      steps:
      - name: get-positions
        type: call
        call: murex.get-portfolio-positions
        with:
          portfolio_id: '{{portfolio_id}}'
      - name: run-esg-scoring
        type: call
        call: sustainability-platform.score-portfolio
        with:
          portfolio_id: '{{portfolio_id}}'
          position_count: '{{get-positions.position_count}}'
      - name: generate-report
        type: call
        call: gsheets.append-data
        with:
          spreadsheet_id: ESG_Reports
          data: '{{portfolio_id}},{{reporting_date}},{{run-esg-scoring.overall_score}},{{run-esg-scoring.exclusion_count}}'
      - name: notify-stakeholders
        type: call
        call: teams.send-message
        with:
          channel: ESG_Compliance
          message: 'ESG screening complete for portfolio {{portfolio_id}}. Score: {{run-esg-scoring.overall_score}}. Exclusions: {{run-esg-scoring.exclusion_count}}.'
  consumes:
  - type: http
    namespace: murex
    baseUri: https://murex.ing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.murex_token
    resources:
    - name: portfolios
      path: /portfolios/{{portfolio_id}}/positions
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: get-portfolio-positions
        method: GET
  - type: http
    namespace: sustainability-platform
    baseUri: https://sustainability.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sustainability_token
    resources:
    - name: scoring
      path: /esg/score
      operations:
      - name: score-portfolio
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_api_token
    resources:
    - name: values
      path: /spreadsheets/{{spreadsheet_id}}/values/Sheet1:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-data
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_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: send-message
        method: POST
Open in Framework → View in Fleet → esg-screening-and-reporting-pipeline.yml

Checks the provisioning status of an ING card on Apple Pay.

naftiko: '0.5'
info:
  label: Apple Pay Provisioning Status
  description: Checks the provisioning status of an ING card on Apple Pay.
  tags:
  - payments
  - mobile-banking
  - apple-pay
capability:
  exposes:
  - type: mcp
    namespace: mobile-payments
    port: 8080
    tools:
    - name: get-apple-pay-status
      description: Check Apple Pay provisioning status for a card.
      inputParameters:
      - name: card_id
        in: body
        type: string
        description: Card identifier.
      call: apple-pay.get-provisioning
      with:
        card_id: '{{card_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.provisioningStatus
      - name: device_count
        type: string
        mapping: $.activeDevices
  consumes:
  - type: http
    namespace: apple-pay
    baseUri: https://mobile-payments.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.apple_pay_token
    resources:
    - name: provisioning
      path: /cards/{{card_id}}/apple-pay
      inputParameters:
      - name: card_id
        in: path
      operations:
      - name: get-provisioning
        method: GET
Open in Framework → View in Fleet → apple-pay-provisioning-status.yml

Retrieves employee compensation review data from Workday, returning current salary, proposed adjustment, merit rating, and review status.

naftiko: '0.5'
info:
  label: Workday Compensation Review Lookup
  description: Retrieves employee compensation review data from Workday, returning current salary, proposed adjustment, merit rating, and review status.
  tags:
  - hr
  - workday
  - compensation
capability:
  exposes:
  - type: mcp
    namespace: compensation-reviews
    port: 8080
    tools:
    - name: get-comp-review
      description: Look up a compensation review in Workday.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      call: workday.get-compensation
      with:
        employee_id: '{{employee_id}}'
      outputParameters:
      - name: current_salary
        type: string
        mapping: $.Worker.Compensation_Data.CurrentSalary
      - name: proposed_adjustment
        type: string
        mapping: $.Worker.Compensation_Data.ProposedAdjustment
      - name: merit_rating
        type: string
        mapping: $.Worker.Compensation_Data.MeritRating
      - name: review_status
        type: string
        mapping: $.Worker.Compensation_Data.ReviewStatus
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd3-impl-services1.workday.com/ccx/api/v1/ing
    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
Open in Framework → View in Fleet → workday-compensation-review-lookup.yml

Retrieves an ING employee's schedule from Workday.

naftiko: '0.5'
info:
  label: Workday Employee Schedule Retriever
  description: Retrieves an ING employee's schedule from Workday.
  tags:
  - hr
  - scheduling
  - workday
capability:
  exposes:
  - type: mcp
    namespace: employee-scheduling
    port: 8080
    tools:
    - name: get-schedule
      description: Retrieve employee schedule from Workday.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: Workday worker ID.
      call: workday.get-schedule
      with:
        worker_id: '{{worker_id}}'
      outputParameters:
      - name: shifts
        type: string
        mapping: $.scheduleEntries
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: schedules
      path: /workers/{{worker_id}}/schedule
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-schedule
        method: GET
Open in Framework → View in Fleet → workday-employee-schedule-retriever.yml

Tracks a SWIFT GPI payment by UETR, returning payment status, last update timestamp, and beneficiary confirmation from the SWIFT network.

naftiko: '0.5'
info:
  label: SWIFT GPI Payment Tracker
  description: Tracks a SWIFT GPI payment by UETR, returning payment status, last update timestamp, and beneficiary confirmation from the SWIFT network.
  tags:
  - payments
  - swift
  - banking
capability:
  exposes:
  - type: mcp
    namespace: swift-gpi
    port: 8080
    tools:
    - name: track-payment
      description: Track a SWIFT GPI payment by UETR.
      inputParameters:
      - name: uetr
        in: body
        type: string
        description: The Unique End-to-End Transaction Reference.
      call: swift.get-payment-status
      with:
        uetr: '{{uetr}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.transaction_status
      - name: last_update
        type: string
        mapping: $.last_update_time
      - name: beneficiary_confirmed
        type: string
        mapping: $.confirmed_amount
  consumes:
  - type: http
    namespace: swift
    baseUri: https://api.swift.com/swift-gpi/v4
    authentication:
      type: bearer
      token: $secrets.swift_gpi_token
    resources:
    - name: payments
      path: /payments/{{uetr}}
      inputParameters:
      - name: uetr
        in: path
      operations:
      - name: get-payment-status
        method: GET
Open in Framework → View in Fleet → swift-gpi-payment-tracker.yml

Retrieves loan account balance details from Temenos Transact, returning outstanding principal, accrued interest, next payment date, and payment amount.

naftiko: '0.5'
info:
  label: Temenos Loan Balance Lookup
  description: Retrieves loan account balance details from Temenos Transact, returning outstanding principal, accrued interest, next payment date, and payment amount.
  tags:
  - banking
  - lending
  - temenos-transact
capability:
  exposes:
  - type: mcp
    namespace: loan-accounts
    port: 8080
    tools:
    - name: get-loan-balance
      description: Look up a loan account balance in Temenos Transact.
      inputParameters:
      - name: loan_id
        in: body
        type: string
        description: The Temenos loan account ID.
      call: temenos.get-loan
      with:
        loan_id: '{{loan_id}}'
      outputParameters:
      - name: outstanding_principal
        type: string
        mapping: $.body.outstandingPrincipal
      - name: accrued_interest
        type: string
        mapping: $.body.accruedInterest
      - name: next_payment_date
        type: string
        mapping: $.body.nextPaymentDate
      - name: payment_amount
        type: string
        mapping: $.body.paymentAmount
  consumes:
  - type: http
    namespace: temenos
    baseUri: https://core-banking.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.temenos_token
    resources:
    - name: loans
      path: /loans/{{loan_id}}
      inputParameters:
      - name: loan_id
        in: path
      operations:
      - name: get-loan
        method: GET
Open in Framework → View in Fleet → temenos-loan-balance-lookup.yml

Orchestrates mortgage renewal by retrieving the existing mortgage from Temenos, calculating new rates via the pricing engine, generating the renewal offer, and sending it via WhatsApp.

naftiko: '0.5'
info:
  label: Mortgage Renewal Orchestrator
  description: Orchestrates mortgage renewal by retrieving the existing mortgage from Temenos, calculating new rates via the pricing engine, generating the renewal offer, and sending it via WhatsApp.
  tags:
  - lending
  - mortgage
  - temenos-transact
  - whatsapp
capability:
  exposes:
  - type: mcp
    namespace: mortgage-renewal
    port: 8080
    tools:
    - name: process-renewal
      description: Process a mortgage renewal for an ING customer.
      inputParameters:
      - name: mortgage_id
        in: body
        type: string
        description: The mortgage account ID.
      - name: customer_id
        in: body
        type: string
        description: The customer ID.
      steps:
      - name: get-mortgage
        type: call
        call: temenos.get-mortgage
        with:
          mortgage_id: '{{mortgage_id}}'
      - name: calculate-rate
        type: call
        call: pricing-engine.calculate-rate
        with:
          loan_amount: '{{get-mortgage.outstanding_balance}}'
          ltv: '{{get-mortgage.current_ltv}}'
          term_remaining: '{{get-mortgage.remaining_term}}'
      - name: generate-offer
        type: call
        call: temenos.create-renewal-offer
        with:
          mortgage_id: '{{mortgage_id}}'
          new_rate: '{{calculate-rate.offered_rate}}'
          term: '{{calculate-rate.recommended_term}}'
      - name: notify-customer
        type: call
        call: whatsapp.send-message
        with:
          phone: '{{get-mortgage.customer_phone}}'
          template: mortgage_renewal_offer
          parameters: '{{calculate-rate.offered_rate}},{{generate-offer.monthly_payment}},{{generate-offer.offer_expiry}}'
  consumes:
  - type: http
    namespace: temenos
    baseUri: https://core-banking.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.temenos_token
    resources:
    - name: mortgages
      path: /mortgages/{{mortgage_id}}
      inputParameters:
      - name: mortgage_id
        in: path
      operations:
      - name: get-mortgage
        method: GET
    - name: renewal-offers
      path: /mortgages/{{mortgage_id}}/renewal
      inputParameters:
      - name: mortgage_id
        in: path
      operations:
      - name: create-renewal-offer
        method: POST
  - type: http
    namespace: pricing-engine
    baseUri: https://pricing.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.pricing_engine_token
    resources:
    - name: rates
      path: /mortgage/calculate
      operations:
      - name: calculate-rate
        method: POST
  - type: http
    namespace: whatsapp
    baseUri: https://graph.facebook.com/v17.0
    authentication:
      type: bearer
      token: $secrets.whatsapp_token
    resources:
    - name: messages
      path: /{{phone_number_id}}/messages
      inputParameters:
      - name: phone_number_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → mortgage-renewal-orchestrator.yml

Creates a knowledge base article in Confluence for ING procedures.

naftiko: '0.5'
info:
  label: Confluence Knowledge Base Article Creator
  description: Creates a knowledge base article in Confluence for ING procedures.
  tags:
  - knowledge-management
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: knowledge-base
    port: 8080
    tools:
    - name: create-article
      description: Create a Confluence knowledge base article.
      inputParameters:
      - name: space_key
        in: body
        type: string
        description: Confluence space key.
      - name: title
        in: body
        type: string
        description: Title.
      - name: body
        in: body
        type: string
        description: Body in HTML.
      call: confluence.create-page
      with:
        space_key: '{{space_key}}'
        title: '{{title}}'
        body: '{{body}}'
      outputParameters:
      - name: page_url
        type: string
        mapping: $._links.webui
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://ing.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → confluence-knowledge-base-article-creator.yml

Retrieves the status of a loan application from the lending platform, returning approval status, requested amount, interest rate, and decision date.

naftiko: '0.5'
info:
  label: Loan Application Status Lookup
  description: Retrieves the status of a loan application from the lending platform, returning approval status, requested amount, interest rate, and decision date.
  tags:
  - lending
  - banking
  - temenos-transact
capability:
  exposes:
  - type: mcp
    namespace: lending
    port: 8080
    tools:
    - name: get-loan-status
      description: Look up a loan application status by application ID.
      inputParameters:
      - name: application_id
        in: body
        type: string
        description: The loan application ID.
      call: temenos.get-loan-application
      with:
        application_id: '{{application_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.body.applicationStatus
      - name: requested_amount
        type: string
        mapping: $.body.requestedAmount
      - name: interest_rate
        type: string
        mapping: $.body.interestRate
      - name: decision_date
        type: string
        mapping: $.body.decisionDate
  consumes:
  - type: http
    namespace: temenos
    baseUri: https://core-banking.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.temenos_token
    resources:
    - name: loan-applications
      path: /lending/applications/{{application_id}}
      inputParameters:
      - name: application_id
        in: path
      operations:
      - name: get-loan-application
        method: GET
Open in Framework → View in Fleet → loan-application-status-lookup.yml

When a Concur expense is submitted, retrieves details and notifies approver via Teams.

naftiko: '0.5'
info:
  label: Concur Expense Report Notifier
  description: When a Concur expense is submitted, retrieves details and notifies approver via Teams.
  tags:
  - finance
  - expenses
  - sap-concur
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: expense-approval
    port: 8080
    tools:
    - name: notify-expense
      description: Fetch Concur expense and notify approver.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: Concur report ID.
      steps:
      - name: get-report
        type: call
        call: concur.get-expense-report
        with:
          report_id: '{{report_id}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-report.approver_email}}'
          text: 'Expense pending: {{get-report.employee_name}} - EUR {{get-report.total_amount}}. Review: {{get-report.approval_url}}'
  consumes:
  - type: http
    namespace: concur
    baseUri: https://eu.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → concur-expense-report-notifier.yml

Retrieves current sprint status from Jira for ING engineering teams, returning sprint name, story points completed, remaining work, and burndown velocity.

naftiko: '0.5'
info:
  label: Jira Project Sprint Status
  description: Retrieves current sprint status from Jira for ING engineering teams, returning sprint name, story points completed, remaining work, and burndown velocity.
  tags:
  - development
  - jira
capability:
  exposes:
  - type: mcp
    namespace: sprint-tracking
    port: 8080
    tools:
    - name: get-sprint-status
      description: Look up current sprint status in Jira.
      inputParameters:
      - name: board_id
        in: body
        type: string
        description: The Jira board ID.
      call: jira.get-sprint
      with:
        board_id: '{{board_id}}'
      outputParameters:
      - name: sprint_name
        type: string
        mapping: $.values[0].name
      - name: completed_points
        type: number
        mapping: $.values[0].completedPoints
      - name: remaining_points
        type: number
        mapping: $.values[0].remainingPoints
  consumes:
  - type: http
    namespace: jira
    baseUri: https://ing.atlassian.net/rest/agile/1.0
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: sprints
      path: /board/{{board_id}}/sprint?state=active
      inputParameters:
      - name: board_id
        in: path
      operations:
      - name: get-sprint
        method: GET
Open in Framework → View in Fleet → jira-project-sprint-status.yml

Queries Snowflake for customer risk analytics, returning risk score, exposure amount, probability of default, and loss given default for a customer segment.

naftiko: '0.5'
info:
  label: Snowflake Customer Risk Analytics
  description: Queries Snowflake for customer risk analytics, returning risk score, exposure amount, probability of default, and loss given default for a customer segment.
  tags:
  - risk
  - analytics
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: customer-risk
    port: 8080
    tools:
    - name: get-risk-analytics
      description: Query customer risk analytics from Snowflake.
      inputParameters:
      - name: customer_segment
        in: body
        type: string
        description: The customer risk segment.
      call: snowflake.query-risk
      with:
        customer_segment: '{{customer_segment}}'
      outputParameters:
      - name: avg_risk_score
        type: string
        mapping: $.data[0].avg_risk_score
      - name: total_exposure
        type: string
        mapping: $.data[0].total_exposure
      - name: avg_pd
        type: string
        mapping: $.data[0].avg_probability_of_default
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://ing.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: query-risk
        method: POST
Open in Framework → View in Fleet → snowflake-customer-risk-analytics.yml

Retrieves latest build status from Azure DevOps for ING applications.

naftiko: '0.5'
info:
  label: Azure DevOps Build Status Checker
  description: Retrieves latest build status from Azure DevOps for ING applications.
  tags:
  - it-operations
  - cicd
  - azure-devops
capability:
  exposes:
  - type: mcp
    namespace: build-status
    port: 8080
    tools:
    - name: get-build-status
      description: Check latest Azure DevOps build status.
      inputParameters:
      - name: project
        in: body
        type: string
        description: Azure DevOps project.
      - name: pipeline_id
        in: body
        type: string
        description: Pipeline ID.
      call: azdevops.get-build
      with:
        project: '{{project}}'
        pipeline_id: '{{pipeline_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.value[0].result
  consumes:
  - type: http
    namespace: azdevops
    baseUri: https://dev.azure.com/ing
    authentication:
      type: basic
      username: ''
      password: $secrets.azdevops_pat
    resources:
    - name: builds
      path: /{{project}}/_apis/build/builds
      inputParameters:
      - name: project
        in: path
      - name: definitions
        in: query
        value: '{{pipeline_id}}'
      - name: $top
        in: query
        value: '1'
      - name: api-version
        in: query
        value: '7.0'
      operations:
      - name: get-build
        method: GET
Open in Framework → View in Fleet → azure-devops-build-status-checker.yml

Queries Elasticsearch for audit log entries across ING systems, returning event count, top actions, user activity summary, and time range coverage.

naftiko: '0.5'
info:
  label: Elasticsearch Audit Log Query
  description: Queries Elasticsearch for audit log entries across ING systems, returning event count, top actions, user activity summary, and time range coverage.
  tags:
  - security
  - audit
  - elasticsearch
capability:
  exposes:
  - type: mcp
    namespace: audit-logs
    port: 8080
    tools:
    - name: query-audit-logs
      description: Query audit log entries from Elasticsearch.
      inputParameters:
      - name: index
        in: body
        type: string
        description: The Elasticsearch audit log index.
      - name: time_range
        in: body
        type: string
        description: The time range (e.g. 24h, 7d).
      call: elasticsearch.search
      with:
        index: '{{index}}'
        time_range: '{{time_range}}'
      outputParameters:
      - name: total_events
        type: number
        mapping: $.hits.total.value
      - name: top_actions
        type: string
        mapping: $.aggregations.actions.buckets
      - name: unique_users
        type: number
        mapping: $.aggregations.users.value
  consumes:
  - type: http
    namespace: elasticsearch
    baseUri: https://elasticsearch.ing.com
    authentication:
      type: basic
      username: $secrets.es_user
      password: $secrets.es_password
    resources:
    - name: search
      path: /{{index}}/_search
      inputParameters:
      - name: index
        in: path
      operations:
      - name: search
        method: POST
Open in Framework → View in Fleet → elasticsearch-audit-log-query.yml

Calculates instant loan pre-approval amounts for ING retail customers based on income verification, credit scoring, and existing debt obligations.

naftiko: '0.5'
info:
  label: Instant Loan Pre-Approval Calculator
  description: Calculates instant loan pre-approval amounts for ING retail customers based on income verification, credit scoring, and existing debt obligations.
  tags:
  - lending
  - credit-scoring
  - retail-banking
capability:
  exposes:
  - type: mcp
    namespace: loan-preapproval
    port: 8080
    tools:
    - name: calculate-preapproval
      description: Calculate instant loan pre-approval for a customer.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The ING customer identifier.
      - name: loan_type
        in: body
        type: string
        description: Loan type such as personal, auto, or home-improvement.
      - name: requested_amount
        in: body
        type: number
        description: Requested loan amount in EUR.
      call: lending-api.calculate-preapproval
      with:
        customer: '{{customer_id}}'
        type: '{{loan_type}}'
        amount: '{{requested_amount}}'
      outputParameters:
      - name: approved_amount
        type: number
        mapping: $.preapproval.approvedAmount
      - name: interest_rate
        type: number
        mapping: $.preapproval.interestRate
      - name: monthly_payment
        type: number
        mapping: $.preapproval.monthlyPayment
  consumes:
  - type: http
    namespace: lending-api
    baseUri: https://api.ing.com/lending/v1
    authentication:
      type: bearer
      token: $secrets.ing_lending_api_token
    resources:
    - name: preapprovals
      path: /preapprovals
      operations:
      - name: calculate-preapproval
        method: POST
Open in Framework → View in Fleet → instant-loan-pre-approval-calculator.yml

Checks the status of iDEAL payment transactions processed through ING, providing real-time settlement confirmation and reconciliation data for merchants.

naftiko: '0.5'
info:
  label: iDEAL Payment Gateway Status Checker
  description: Checks the status of iDEAL payment transactions processed through ING, providing real-time settlement confirmation and reconciliation data for merchants.
  tags:
  - payments
  - ideal
  - merchant-services
capability:
  exposes:
  - type: mcp
    namespace: ideal-payments
    port: 8080
    tools:
    - name: check-ideal-payment-status
      description: Check the status of an iDEAL payment transaction.
      inputParameters:
      - name: transaction_id
        in: body
        type: string
        description: The iDEAL transaction identifier.
      - name: merchant_id
        in: body
        type: string
        description: The ING merchant account identifier.
      call: payments-api.get-ideal-status
      with:
        transaction: '{{transaction_id}}'
        merchant: '{{merchant_id}}'
      outputParameters:
      - name: payment_status
        type: string
        mapping: $.payment.status
      - name: amount
        type: number
        mapping: $.payment.amount
      - name: settlement_date
        type: string
        mapping: $.payment.settlementDate
  consumes:
  - type: http
    namespace: payments-api
    baseUri: https://api.ing.com/payments/v1
    authentication:
      type: bearer
      token: $secrets.ing_payments_api_token
    resources:
    - name: ideal-transactions
      path: /ideal/transactions/{{transaction}}
      inputParameters:
      - name: transaction
        in: path
      operations:
      - name: get-ideal-status
        method: GET
Open in Framework → View in Fleet → ideal-payment-gateway-status-checker.yml

Retrieves market data from FactSet for ING investment analysis, returning current price, daily change, volume, and 52-week range for a given security.

naftiko: '0.5'
info:
  label: FactSet Market Data Retriever
  description: Retrieves market data from FactSet for ING investment analysis, returning current price, daily change, volume, and 52-week range for a given security.
  tags:
  - market-data
  - factset
  - trading
capability:
  exposes:
  - type: mcp
    namespace: market-data
    port: 8080
    tools:
    - name: get-market-data
      description: Retrieve market data from FactSet for a security.
      inputParameters:
      - name: ticker
        in: body
        type: string
        description: The security ticker symbol.
      call: factset.get-quote
      with:
        ticker: '{{ticker}}'
      outputParameters:
      - name: price
        type: string
        mapping: $.data[0].price
      - name: daily_change
        type: string
        mapping: $.data[0].change
      - name: volume
        type: number
        mapping: $.data[0].volume
      - name: range_52w
        type: string
        mapping: $.data[0].range52Week
  consumes:
  - type: http
    namespace: factset
    baseUri: https://api.factset.com/content/factset-prices/v1
    authentication:
      type: basic
      username: $secrets.factset_user
      password: $secrets.factset_password
    resources:
    - name: quotes
      path: /prices?ids={{ticker}}
      inputParameters:
      - name: ticker
        in: query
      operations:
      - name: get-quote
        method: GET
Open in Framework → View in Fleet → factset-market-data-retriever.yml

Processes an instant payment by validating the sender account in Temenos, running fraud detection, executing the payment, and sending a push notification to the customer via the mobile banking API.

naftiko: '0.5'
info:
  label: Instant Payment with Fraud Screening Orchestrator
  description: Processes an instant payment by validating the sender account in Temenos, running fraud detection, executing the payment, and sending a push notification to the customer via the mobile banking API.
  tags:
  - payments
  - fraud-detection
  - temenos-transact
  - banking
capability:
  exposes:
  - type: mcp
    namespace: instant-payments
    port: 8080
    tools:
    - name: process-instant-payment
      description: Process an instant payment with fraud screening.
      inputParameters:
      - name: sender_account
        in: body
        type: string
        description: Sender account number.
      - name: recipient_iban
        in: body
        type: string
        description: Recipient IBAN.
      - name: amount
        in: body
        type: string
        description: Payment amount.
      steps:
      - name: validate-account
        type: call
        call: temenos.get-account
        with:
          account_id: '{{sender_account}}'
      - name: screen-fraud
        type: call
        call: fraud-engine.screen-payment
        with:
          sender: '{{sender_account}}'
          recipient: '{{recipient_iban}}'
          amount: '{{amount}}'
      - name: execute-payment
        type: call
        call: temenos.create-instant-payment
        with:
          debit_account: '{{sender_account}}'
          credit_iban: '{{recipient_iban}}'
          amount: '{{amount}}'
      - name: notify-customer
        type: call
        call: mobile-api.send-push
        with:
          account_id: '{{sender_account}}'
          message: 'Payment of {{amount}} EUR to {{recipient_iban}} completed. Ref: {{execute-payment.reference}}.'
  consumes:
  - type: http
    namespace: temenos
    baseUri: https://core-banking.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.temenos_token
    resources:
    - name: accounts
      path: /accounts/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
    - name: instant-payments
      path: /payments/instant
      operations:
      - name: create-instant-payment
        method: POST
  - type: http
    namespace: fraud-engine
    baseUri: https://fraud-detection.ing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.fraud_engine_token
    resources:
    - name: screening
      path: /screen
      operations:
      - name: screen-payment
        method: POST
  - type: http
    namespace: mobile-api
    baseUri: https://mobile-banking.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.mobile_api_token
    resources:
    - name: notifications
      path: /push/send
      operations:
      - name: send-push
        method: POST
Open in Framework → View in Fleet → instant-payment-with-fraud-screening-orchestrator.yml

Queries Oracle Enterprise Manager for database performance metrics, returning active sessions, wait events, tablespace utilization, and SQL execution statistics.

naftiko: '0.5'
info:
  label: Oracle Database Performance Monitor
  description: Queries Oracle Enterprise Manager for database performance metrics, returning active sessions, wait events, tablespace utilization, and SQL execution statistics.
  tags:
  - infrastructure
  - oracle-enterprise-manager
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: db-performance
    port: 8080
    tools:
    - name: get-db-metrics
      description: Retrieve Oracle database performance metrics.
      inputParameters:
      - name: database_id
        in: body
        type: string
        description: The Oracle database identifier.
      call: oem.get-metrics
      with:
        database_id: '{{database_id}}'
      outputParameters:
      - name: active_sessions
        type: number
        mapping: $.metrics.activeSessions
      - name: top_wait_event
        type: string
        mapping: $.metrics.topWaitEvent
      - name: tablespace_pct
        type: string
        mapping: $.metrics.tablespaceUtilization
  consumes:
  - type: http
    namespace: oem
    baseUri: https://oem.ing.com/em/websvcs/restful/emws/db/v1
    authentication:
      type: basic
      username: $secrets.oem_user
      password: $secrets.oem_password
    resources:
    - name: databases
      path: /databases/{{database_id}}/metrics
      inputParameters:
      - name: database_id
        in: path
      operations:
      - name: get-metrics
        method: GET
Open in Framework → View in Fleet → oracle-database-performance-monitor.yml

Retrieves usage analytics from Adobe Analytics for ING's digital banking platform.

naftiko: '0.5'
info:
  label: Adobe Analytics Digital Banking Reporter
  description: Retrieves usage analytics from Adobe Analytics for ING's digital banking platform.
  tags:
  - analytics
  - digital-banking
  - adobe-analytics
capability:
  exposes:
  - type: mcp
    namespace: digital-analytics
    port: 8080
    tools:
    - name: get-banking-analytics
      description: Retrieve digital banking analytics from Adobe Analytics.
      inputParameters:
      - name: report_suite_id
        in: body
        type: string
        description: Adobe Analytics report suite ID.
      - name: date_range
        in: body
        type: string
        description: Date range.
      call: adobe-analytics.get-report
      with:
        rsid: '{{report_suite_id}}'
        date_range: '{{date_range}}'
      outputParameters:
      - name: active_users
        type: string
        mapping: $.report.data.rows[0].value
      - name: login_count
        type: string
        mapping: $.report.data.rows[1].value
  consumes:
  - type: http
    namespace: adobe-analytics
    baseUri: https://analytics.adobe.io/api
    authentication:
      type: bearer
      token: $secrets.adobe_analytics_token
    resources:
    - name: reports
      path: /{{rsid}}/reports
      inputParameters:
      - name: rsid
        in: path
      operations:
      - name: get-report
        method: POST
Open in Framework → View in Fleet → adobe-analytics-digital-banking-reporter.yml

Creates a general ledger journal entry in SAP for financial accounting.

naftiko: '0.5'
info:
  label: SAP General Ledger Entry Creator
  description: Creates a general ledger journal entry in SAP for financial accounting.
  tags:
  - finance
  - accounting
  - sap
capability:
  exposes:
  - type: mcp
    namespace: finance-gl
    port: 8080
    tools:
    - name: create-journal-entry
      description: Create a GL journal entry in SAP.
      inputParameters:
      - name: company_code
        in: body
        type: string
        description: SAP company code.
      - name: posting_date
        in: body
        type: string
        description: Posting date YYYY-MM-DD.
      - name: line_items
        in: body
        type: string
        description: JSON array of line items.
      call: sap.create-journal
      with:
        company_code: '{{company_code}}'
        posting_date: '{{posting_date}}'
        line_items: '{{line_items}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://ing-s4.sap.com/sap/opu/odata/sap/API_JOURNALENTRYITEMBASIC_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: journal-entries
      path: /A_JournalEntryHeader
      operations:
      - name: create-journal
        method: POST
Open in Framework → View in Fleet → sap-general-ledger-entry-creator.yml

Tracks savings goal progress for ING retail customers, calculating projected completion dates and suggesting automatic transfer adjustments to meet targets.

naftiko: '0.5'
info:
  label: Savings Goal Progress Tracker
  description: Tracks savings goal progress for ING retail customers, calculating projected completion dates and suggesting automatic transfer adjustments to meet targets.
  tags:
  - retail-banking
  - savings
  - personal-finance
capability:
  exposes:
  - type: mcp
    namespace: savings-goals
    port: 8080
    tools:
    - name: get-savings-goal-progress
      description: Retrieve savings goal progress and projected completion date.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The ING customer identifier.
      - name: goal_id
        in: body
        type: string
        description: The savings goal identifier.
      call: savings-api.get-goal-progress
      with:
        customer: '{{customer_id}}'
        goal: '{{goal_id}}'
      outputParameters:
      - name: current_balance
        type: number
        mapping: $.goal.currentBalance
      - name: target_amount
        type: number
        mapping: $.goal.targetAmount
      - name: projected_completion_date
        type: string
        mapping: $.goal.projectedCompletionDate
  consumes:
  - type: http
    namespace: savings-api
    baseUri: https://api.ing.com/retail/v1
    authentication:
      type: bearer
      token: $secrets.ing_retail_api_token
    resources:
    - name: goals
      path: /customers/{{customer}}/savings-goals/{{goal}}
      inputParameters:
      - name: customer
        in: path
      - name: goal
        in: path
      operations:
      - name: get-goal-progress
        method: GET
Open in Framework → View in Fleet → savings-goal-progress-tracker.yml

Checks the status of a MuleSoft API integration for ING's middleware layer.

naftiko: '0.5'
info:
  label: MuleSoft API Integration Status
  description: Checks the status of a MuleSoft API integration for ING's middleware layer.
  tags:
  - it-operations
  - integrations
  - mulesoft
capability:
  exposes:
  - type: mcp
    namespace: integration-status
    port: 8080
    tools:
    - name: get-api-status
      description: Check MuleSoft API integration status.
      inputParameters:
      - name: api_id
        in: body
        type: string
        description: MuleSoft API ID.
      call: mulesoft.get-api-status
      with:
        api_id: '{{api_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: uptime
        type: string
        mapping: $.uptime
  consumes:
  - type: http
    namespace: mulesoft
    baseUri: https://anypoint.mulesoft.com/apimanager/api/v1
    authentication:
      type: bearer
      token: $secrets.mulesoft_token
    resources:
    - name: apis
      path: /organizations/{{org_id}}/environments/{{env_id}}/apis/{{api_id}}
      inputParameters:
      - name: api_id
        in: path
      operations:
      - name: get-api-status
        method: GET
Open in Framework → View in Fleet → mulesoft-api-integration-status.yml

When a suspicious transaction alert fires, retrieves transaction details, creates a compliance case in ServiceNow, and notifies the AML team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Transaction Monitoring Alert Handler
  description: When a suspicious transaction alert fires, retrieves transaction details, creates a compliance case in ServiceNow, and notifies the AML team via Microsoft Teams.
  tags:
  - compliance
  - anti-money-laundering
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: transaction-monitoring
    port: 8080
    tools:
    - name: handle-alert
      description: Process a transaction monitoring alert across ServiceNow and Teams.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The transaction monitoring alert ID.
      steps:
      - name: get-alert
        type: call
        call: txn-monitoring.get-alert
        with:
          alert_id: '{{alert_id}}'
      - name: create-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'AML Alert: {{get-alert.customer_name}} - {{get-alert.alert_type}}'
          priority: '1'
          category: aml_compliance
          description: 'Transaction: {{get-alert.transaction_id}}. Amount: {{get-alert.amount}} {{get-alert.currency}}. Score: {{get-alert.risk_score}}'
      - name: notify-aml
        type: call
        call: msteams.send-message
        with:
          channel_id: aml_investigations
          text: 'AML Alert {{alert_id}}: {{get-alert.customer_name}} - {{get-alert.alert_type}}. Amount: {{get-alert.amount}} {{get-alert.currency}}. Case: {{create-case.number}}'
  consumes:
  - type: http
    namespace: txn-monitoring
    baseUri: https://txn-monitoring.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.txn_monitoring_token
    resources:
    - name: alerts
      path: /alerts/{{alert_id}}
      inputParameters:
      - name: alert_id
        in: path
      operations:
      - name: get-alert
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://ing.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → transaction-monitoring-alert-handler.yml

Pulls financial data from SAP and generates a regulatory compliance report, storing it in SharePoint and notifying the compliance team.

naftiko: '0.5'
info:
  label: Regulatory Report Generator
  description: Pulls financial data from SAP and generates a regulatory compliance report, storing it in SharePoint and notifying the compliance team.
  tags:
  - compliance
  - reporting
  - sap
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: regulatory-reporting
    port: 8080
    tools:
    - name: generate-report
      description: Generate a regulatory report from SAP data and store in SharePoint.
      inputParameters:
      - name: report_type
        in: body
        type: string
        description: Report type (e.g., COREP, FINREP, LCR).
      - name: reporting_period
        in: body
        type: string
        description: Reporting period YYYY-QN.
      steps:
      - name: get-financial-data
        type: call
        call: sap.get-financial-report
        with:
          report_type: '{{report_type}}'
          period: '{{reporting_period}}'
      - name: store-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: regulatory_reports
          folder_path: '{{report_type}}/{{reporting_period}}'
          content: '{{get-financial-data.report_data}}'
      - name: notify-compliance
        type: call
        call: msteams.send-message
        with:
          channel_id: regulatory_compliance
          text: '{{report_type}} report for {{reporting_period}} generated and stored. URL: {{store-report.download_url}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://ing-s4.sap.com/sap/opu/odata/sap/API_FINANCIAL_REPORTING_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: reports
      path: /A_FinancialReport
      inputParameters:
      - name: $filter
        in: query
        value: ReportType eq '{{report_type}}' and Period eq '{{period}}'
      operations:
      - name: get-financial-report
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: uploads
      path: /{{site_id}}/drive/root:/{{folder_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → regulatory-report-generator.yml

Retrieves a derivatives trading position from Murex by trade ID, returning notional amount, mark-to-market value, counterparty, and maturity date.

naftiko: '0.5'
info:
  label: Murex Derivatives Position Lookup
  description: Retrieves a derivatives trading position from Murex by trade ID, returning notional amount, mark-to-market value, counterparty, and maturity date.
  tags:
  - trading
  - derivatives
  - murex
capability:
  exposes:
  - type: mcp
    namespace: derivatives-positions
    port: 8080
    tools:
    - name: get-position
      description: Look up a derivatives position in Murex.
      inputParameters:
      - name: trade_id
        in: body
        type: string
        description: The Murex trade ID.
      call: murex.get-trade
      with:
        trade_id: '{{trade_id}}'
      outputParameters:
      - name: notional
        type: string
        mapping: $.trade.notionalAmount
      - name: mtm_value
        type: string
        mapping: $.trade.markToMarket
      - name: counterparty
        type: string
        mapping: $.trade.counterpartyName
      - name: maturity
        type: string
        mapping: $.trade.maturityDate
  consumes:
  - type: http
    namespace: murex
    baseUri: https://murex.ing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.murex_token
    resources:
    - name: trades
      path: /trades/{{trade_id}}
      inputParameters:
      - name: trade_id
        in: path
      operations:
      - name: get-trade
        method: GET
Open in Framework → View in Fleet → murex-derivatives-position-lookup.yml

Assigns a Pluralsight learning path to an ING employee and notifies via Teams.

naftiko: '0.5'
info:
  label: Pluralsight Training Assigner
  description: Assigns a Pluralsight learning path to an ING employee and notifies via Teams.
  tags:
  - hr
  - training
  - pluralsight
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: training
    port: 8080
    tools:
    - name: assign-training
      description: Assign training and notify.
      inputParameters:
      - name: employee_email
        in: body
        type: string
        description: Employee email.
      - name: channel_id
        in: body
        type: string
        description: Pluralsight channel ID.
      steps:
      - name: assign
        type: call
        call: pluralsight.assign-channel
        with:
          email: '{{employee_email}}'
          channel_id: '{{channel_id}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{employee_email}}'
          text: 'New training assigned: {{assign.channel_url}}'
  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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → pluralsight-training-assigner.yml

Retrieves a customer's account balance and details from the core banking system, returning current balance, available balance, account type, and currency.

naftiko: '0.5'
info:
  label: Customer Account Balance Lookup
  description: Retrieves a customer's account balance and details from the core banking system, returning current balance, available balance, account type, and currency.
  tags:
  - banking
  - accounts
  - temenos-transact
capability:
  exposes:
  - type: mcp
    namespace: account-banking
    port: 8080
    tools:
    - name: get-account-balance
      description: Look up a customer account balance by account number.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The ING account number.
      call: temenos.get-account
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: current_balance
        type: string
        mapping: $.body.currentBalance
      - name: available_balance
        type: string
        mapping: $.body.availableBalance
      - name: currency
        type: string
        mapping: $.body.currency
      - name: account_type
        type: string
        mapping: $.body.accountType
  consumes:
  - type: http
    namespace: temenos
    baseUri: https://core-banking.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.temenos_token
    resources:
    - name: accounts
      path: /accounts/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
Open in Framework → View in Fleet → customer-account-balance-lookup.yml

Retrieves current FX rates from the treasury system, returning bid, ask, and mid rates for a currency pair.

naftiko: '0.5'
info:
  label: Foreign Exchange Rate Lookup
  description: Retrieves current FX rates from the treasury system, returning bid, ask, and mid rates for a currency pair.
  tags:
  - banking
  - treasury
  - foreign-exchange
capability:
  exposes:
  - type: mcp
    namespace: fx-rates
    port: 8080
    tools:
    - name: get-fx-rate
      description: Look up FX rate for a currency pair.
      inputParameters:
      - name: base_currency
        in: body
        type: string
        description: Base currency code.
      - name: quote_currency
        in: body
        type: string
        description: Quote currency code.
      call: treasury.get-rate
      with:
        base: '{{base_currency}}'
        quote: '{{quote_currency}}'
      outputParameters:
      - name: bid
        type: string
        mapping: $.bid
      - name: ask
        type: string
        mapping: $.ask
      - name: mid
        type: string
        mapping: $.mid
  consumes:
  - type: http
    namespace: treasury
    baseUri: https://treasury.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.treasury_token
    resources:
    - name: fx-rates
      path: /rates/{{base}}/{{quote}}
      inputParameters:
      - name: base
        in: path
      - name: quote
        in: path
      operations:
      - name: get-rate
        method: GET
Open in Framework → View in Fleet → foreign-exchange-rate-lookup.yml

Generates a regulatory Excel report with data from SAP financial systems.

naftiko: '0.5'
info:
  label: Microsoft Excel Regulatory Report Builder
  description: Generates a regulatory Excel report with data from SAP financial systems.
  tags:
  - compliance
  - reporting
  - microsoft-excel
  - sap
capability:
  exposes:
  - type: mcp
    namespace: reg-reporting
    port: 8080
    tools:
    - name: build-report
      description: Build a regulatory Excel report from SAP data.
      inputParameters:
      - name: report_type
        in: body
        type: string
        description: Report type.
      - name: period
        in: body
        type: string
        description: Reporting period.
      steps:
      - name: get-data
        type: call
        call: sap.get-financial-data
        with:
          report_type: '{{report_type}}'
          period: '{{period}}'
      - name: update-workbook
        type: call
        call: excel.update-range
        with:
          workbook_id: reg_{{report_type}}
          sheet_name: Data
          range: A2:Z100
          values: '{{get-data.results}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://ing-s4.sap.com/sap/opu/odata/sap/API_FINANCIAL_REPORTING_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: reports
      path: /A_FinancialReport
      operations:
      - name: get-financial-data
        method: GET
  - type: http
    namespace: excel
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: workbooks
      path: /me/drive/items/{{workbook_id}}/workbook/worksheets/{{sheet_name}}/range(address='{{range}}')
      inputParameters:
      - name: workbook_id
        in: path
      - name: sheet_name
        in: path
      - name: range
        in: path
      operations:
      - name: update-range
        method: PATCH
Open in Framework → View in Fleet → microsoft-excel-regulatory-report-builder.yml

Screens cross-border payment transactions against international sanctions lists including EU, OFAC, and UN, flagging potential matches for compliance review.

naftiko: '0.5'
info:
  label: Cross-Border Payment Sanctions Screener
  description: Screens cross-border payment transactions against international sanctions lists including EU, OFAC, and UN, flagging potential matches for compliance review.
  tags:
  - compliance
  - sanctions-screening
  - cross-border-payments
capability:
  exposes:
  - type: mcp
    namespace: sanctions-screening
    port: 8080
    tools:
    - name: screen-payment-sanctions
      description: Screen a cross-border payment against sanctions lists.
      inputParameters:
      - name: payment_id
        in: body
        type: string
        description: The payment transaction identifier.
      - name: beneficiary_name
        in: body
        type: string
        description: Name of the payment beneficiary.
      - name: destination_country
        in: body
        type: string
        description: ISO country code of the destination.
      call: compliance-api.screen-sanctions
      with:
        payment: '{{payment_id}}'
        beneficiary: '{{beneficiary_name}}'
        country: '{{destination_country}}'
      outputParameters:
      - name: screening_result
        type: string
        mapping: $.screening.result
      - name: matches_found
        type: integer
        mapping: $.screening.matchesFound
      - name: risk_level
        type: string
        mapping: $.screening.riskLevel
  consumes:
  - type: http
    namespace: compliance-api
    baseUri: https://api.ing.com/compliance/v1
    authentication:
      type: bearer
      token: $secrets.ing_compliance_api_token
    resources:
    - name: sanctions-checks
      path: /sanctions-screening
      operations:
      - name: screen-sanctions
        method: POST
Open in Framework → View in Fleet → cross-border-payment-sanctions-screener.yml

Uploads an audit or compliance document to Box and returns a shared link.

naftiko: '0.5'
info:
  label: Box Audit Document Uploader
  description: Uploads an audit or compliance document to Box and returns a shared link.
  tags:
  - compliance
  - documents
  - box
capability:
  exposes:
  - type: mcp
    namespace: audit-docs
    port: 8080
    tools:
    - name: upload-audit-doc
      description: Upload an audit document to Box.
      inputParameters:
      - name: folder_id
        in: body
        type: string
        description: Box folder ID.
      - name: file_name
        in: body
        type: string
        description: File name.
      - name: file_content
        in: body
        type: string
        description: Base64-encoded content.
      call: box.upload-file
      with:
        folder_id: '{{folder_id}}'
        file_name: '{{file_name}}'
        content: '{{file_content}}'
      outputParameters:
      - name: shared_link
        type: string
        mapping: $.entries[0].shared_link.url
  consumes:
  - type: http
    namespace: box
    baseUri: https://upload.box.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files/content
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → box-audit-document-uploader.yml

Retrieves fixed deposit account details from Temenos Transact, returning principal amount, interest rate, maturity date, and accrued interest.

naftiko: '0.5'
info:
  label: Temenos Fixed Deposit Lookup
  description: Retrieves fixed deposit account details from Temenos Transact, returning principal amount, interest rate, maturity date, and accrued interest.
  tags:
  - banking
  - deposits
  - temenos-transact
capability:
  exposes:
  - type: mcp
    namespace: fixed-deposits
    port: 8080
    tools:
    - name: get-deposit
      description: Look up a fixed deposit in Temenos Transact.
      inputParameters:
      - name: deposit_id
        in: body
        type: string
        description: The fixed deposit account ID.
      call: temenos.get-deposit
      with:
        deposit_id: '{{deposit_id}}'
      outputParameters:
      - name: principal
        type: string
        mapping: $.body.principalAmount
      - name: interest_rate
        type: string
        mapping: $.body.interestRate
      - name: maturity_date
        type: string
        mapping: $.body.maturityDate
      - name: accrued_interest
        type: string
        mapping: $.body.accruedInterest
  consumes:
  - type: http
    namespace: temenos
    baseUri: https://core-banking.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.temenos_token
    resources:
    - name: deposits
      path: /deposits/{{deposit_id}}
      inputParameters:
      - name: deposit_id
        in: path
      operations:
      - name: get-deposit
        method: GET
Open in Framework → View in Fleet → temenos-fixed-deposit-lookup.yml

Queries Cloudflare for WAF events targeting ING web properties.

naftiko: '0.5'
info:
  label: Cloudflare WAF Event Monitor
  description: Queries Cloudflare for WAF events targeting ING web properties.
  tags:
  - security
  - it-operations
  - cloudflare
capability:
  exposes:
  - type: mcp
    namespace: waf-monitoring
    port: 8080
    tools:
    - name: get-waf-events
      description: Retrieve Cloudflare WAF events.
      inputParameters:
      - name: zone_id
        in: body
        type: string
        description: Cloudflare zone ID.
      call: cloudflare.get-events
      with:
        zone_id: '{{zone_id}}'
      outputParameters:
      - name: events
        type: string
        mapping: $.result
      - name: total_blocked
        type: string
        mapping: $.result_info.total_count
  consumes:
  - type: http
    namespace: cloudflare
    baseUri: https://api.cloudflare.com/client/v4
    authentication:
      type: bearer
      token: $secrets.cloudflare_token
    resources:
    - name: events
      path: /zones/{{zone_id}}/security/events
      inputParameters:
      - name: zone_id
        in: path
      operations:
      - name: get-events
        method: GET
Open in Framework → View in Fleet → cloudflare-waf-event-monitor.yml

Retrieves trade details from the Murex trading platform, returning trade type, notional, counterparty, and maturity date.

naftiko: '0.5'
info:
  label: Murex Trade Booking Lookup
  description: Retrieves trade details from the Murex trading platform, returning trade type, notional, counterparty, and maturity date.
  tags:
  - banking
  - trading
  - murex
capability:
  exposes:
  - type: mcp
    namespace: trade-management
    port: 8080
    tools:
    - name: get-trade
      description: Look up a trade in Murex by trade ID.
      inputParameters:
      - name: trade_id
        in: body
        type: string
        description: Murex trade ID.
      call: murex.get-trade
      with:
        trade_id: '{{trade_id}}'
      outputParameters:
      - name: trade_type
        type: string
        mapping: $.tradeType
      - name: notional
        type: string
        mapping: $.notionalAmount
      - name: counterparty
        type: string
        mapping: $.counterpartyName
      - name: maturity_date
        type: string
        mapping: $.maturityDate
  consumes:
  - type: http
    namespace: murex
    baseUri: https://murex.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.murex_token
    resources:
    - name: trades
      path: /trades/{{trade_id}}
      inputParameters:
      - name: trade_id
        in: path
      operations:
      - name: get-trade
        method: GET
Open in Framework → View in Fleet → murex-trade-booking-lookup.yml

Runs a risk analytics query in Snowflake, returning portfolio-level risk metrics.

naftiko: '0.5'
info:
  label: Snowflake Risk Analytics Query
  description: Runs a risk analytics query in Snowflake, returning portfolio-level risk metrics.
  tags:
  - risk
  - analytics
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: risk-analytics
    port: 8080
    tools:
    - name: query-risk-data
      description: Run a risk analytics query in Snowflake.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: Portfolio identifier.
      call: snowflake.execute-query
      with:
        statement: SELECT total_exposure, var_95, expected_loss, risk_weighted_assets FROM PORTFOLIO_RISK WHERE portfolio_id = '{{portfolio_id}}'
      outputParameters:
      - name: total_exposure
        type: string
        mapping: $.data[0][0]
      - name: var_95
        type: string
        mapping: $.data[0][1]
      - name: expected_loss
        type: string
        mapping: $.data[0][2]
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://ing.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → snowflake-risk-analytics-query.yml

Triggers a Power Automate flow for custom ING automations.

naftiko: '0.5'
info:
  label: Microsoft Power Automate Flow Trigger
  description: Triggers a Power Automate flow for custom ING automations.
  tags:
  - automation
  - microsoft-power-automate
capability:
  exposes:
  - type: mcp
    namespace: flow-trigger
    port: 8080
    tools:
    - name: trigger-flow
      description: Trigger a Power Automate flow.
      inputParameters:
      - name: flow_id
        in: body
        type: string
        description: Flow ID.
      - name: payload
        in: body
        type: string
        description: JSON payload.
      call: power-automate.invoke-flow
      with:
        flow_id: '{{flow_id}}'
        payload: '{{payload}}'
  consumes:
  - 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: invoke-flow
        method: POST
Open in Framework → View in Fleet → microsoft-power-automate-flow-trigger.yml

Searches for documents in ING's shared Google Drive.

naftiko: '0.5'
info:
  label: Google Drive Document Finder
  description: Searches for documents in ING's shared Google Drive.
  tags:
  - documents
  - google-drive
capability:
  exposes:
  - type: mcp
    namespace: gdrive-search
    port: 8080
    tools:
    - name: search-docs
      description: Search for documents in Google Drive.
      inputParameters:
      - name: search_query
        in: body
        type: string
        description: Search query.
      call: gdrive.search-files
      with:
        query: '{{search_query}}'
      outputParameters:
      - name: files
        type: string
        mapping: $.files
  consumes:
  - type: http
    namespace: gdrive
    baseUri: https://www.googleapis.com/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_drive_token
    resources:
    - name: files
      path: /files
      inputParameters:
      - name: q
        in: query
        value: name contains '{{query}}'
      operations:
      - name: search-files
        method: GET
Open in Framework → View in Fleet → google-drive-document-finder.yml

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

naftiko: '0.5'
info:
  label: ServiceNow IT Incident Status Lookup
  description: Retrieves a ServiceNow incident by number, returning state, assigned group, and priority.
  tags:
  - it-operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: incident-status
    port: 8080
    tools:
    - name: get-incident
      description: Look up a ServiceNow incident by number.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: Incident number.
      call: servicenow.get-incident
      with:
        incident_number: '{{incident_number}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.result.state
      - name: assigned_to
        type: string
        mapping: $.result.assigned_to.display_value
      - name: priority
        type: string
        mapping: $.result.priority
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://ing.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      inputParameters:
      - name: sysparm_query
        in: query
        value: number={{incident_number}}
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → servicenow-it-incident-status-lookup.yml

Retrieves application performance from New Relic for ING's online banking platform.

naftiko: '0.5'
info:
  label: New Relic Banking Platform Monitor
  description: Retrieves application performance from New Relic for ING's online banking platform.
  tags:
  - it-operations
  - monitoring
  - new-relic
capability:
  exposes:
  - type: mcp
    namespace: app-performance
    port: 8080
    tools:
    - name: get-app-metrics
      description: Get app performance from New Relic.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: New Relic app ID.
      call: newrelic.get-app
      with:
        app_id: '{{app_id}}'
      outputParameters:
      - name: response_time
        type: string
        mapping: $.application.application_summary.response_time
      - name: error_rate
        type: string
        mapping: $.application.application_summary.error_rate
  consumes:
  - type: http
    namespace: newrelic
    baseUri: https://api.newrelic.com/v2
    authentication:
      type: apiKey
      name: Api-Key
      in: header
      value: $secrets.newrelic_api_key
    resources:
    - name: applications
      path: /applications/{{app_id}}.json
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: get-app
        method: GET
Open in Framework → View in Fleet → new-relic-banking-platform-monitor.yml

When a new customer account is opened, runs KYC verification checks, updates the customer profile in the CRM, and logs the verification outcome in ServiceNow.

naftiko: '0.5'
info:
  label: KYC Customer Verification Orchestrator
  description: When a new customer account is opened, runs KYC verification checks, updates the customer profile in the CRM, and logs the verification outcome in ServiceNow.
  tags:
  - compliance
  - banking
  - know-your-customer
  - salesforce
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: kyc-verification
    port: 8080
    tools:
    - name: run-kyc-check
      description: Orchestrate KYC verification for a new customer.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The customer ID.
      - name: full_name
        in: body
        type: string
        description: Customer full name.
      - name: date_of_birth
        in: body
        type: string
        description: Date of birth YYYY-MM-DD.
      - name: nationality
        in: body
        type: string
        description: Customer nationality.
      steps:
      - name: verify-identity
        type: call
        call: kyc.verify-customer
        with:
          name: '{{full_name}}'
          dob: '{{date_of_birth}}'
          nationality: '{{nationality}}'
      - name: update-crm
        type: call
        call: salesforce.update-contact
        with:
          customer_id: '{{customer_id}}'
          kyc_status: '{{verify-identity.result}}'
          kyc_date: '{{verify-identity.verification_date}}'
      - name: log-outcome
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'KYC verification: {{full_name}} - {{verify-identity.result}}'
          category: kyc_compliance
          description: 'Customer: {{customer_id}}. Result: {{verify-identity.result}}. Risk score: {{verify-identity.risk_score}}'
  consumes:
  - type: http
    namespace: kyc
    baseUri: https://kyc-platform.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kyc_token
    resources:
    - name: verifications
      path: /verify
      operations:
      - name: verify-customer
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://ing.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /sobjects/Contact/{{customer_id}}
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: update-contact
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://ing.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → kyc-customer-verification-orchestrator.yml

Queries Datadog for infrastructure health metrics of ING's banking platform.

naftiko: '0.5'
info:
  label: Datadog Platform Health Monitor
  description: Queries Datadog for infrastructure health metrics of ING's banking platform.
  tags:
  - it-operations
  - monitoring
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: infra-monitoring
    port: 8080
    tools:
    - name: get-platform-health
      description: Retrieve infrastructure health from Datadog.
      inputParameters:
      - name: service
        in: body
        type: string
        description: Service name.
      call: datadog.query-metrics
      with:
        query: avg:system.cpu.user{service:{{service}}}
      outputParameters:
      - name: cpu_utilization
        type: string
        mapping: $.series[0].pointlist[-1][1]
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /query
      inputParameters:
      - name: query
        in: query
      operations:
      - name: query-metrics
        method: GET
Open in Framework → View in Fleet → datadog-platform-health-monitor.yml

Logs environmental, social, and governance metrics to a Google Sheet for ING's sustainability reporting.

naftiko: '0.5'
info:
  label: Google Sheets ESG Metrics Logger
  description: Logs environmental, social, and governance metrics to a Google Sheet for ING's sustainability reporting.
  tags:
  - sustainability
  - compliance
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: esg-tracking
    port: 8080
    tools:
    - name: log-esg-metrics
      description: Log ESG metrics to Google Sheets.
      inputParameters:
      - name: quarter
        in: body
        type: string
        description: Quarter (YYYY-QN).
      - name: co2_emissions
        in: body
        type: string
        description: CO2 emissions in tonnes.
      - name: green_financing
        in: body
        type: string
        description: Green financing volume in EUR.
      call: gsheets.append-row
      with:
        spreadsheet_id: esg_reporting
        range: Metrics!A:C
        values: '{{quarter}},{{co2_emissions}},{{green_financing}}'
  consumes:
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values/{{range}}:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: append-row
        method: POST
Open in Framework → View in Fleet → google-sheets-esg-metrics-logger.yml

Manages PSD2 open banking consent flows for third-party account access, handling consent creation, status tracking, and revocation across ING retail accounts.

naftiko: '0.5'
info:
  label: PSD2 Account Access Consent Manager
  description: Manages PSD2 open banking consent flows for third-party account access, handling consent creation, status tracking, and revocation across ING retail accounts.
  tags:
  - open-banking
  - psd2
  - consent-management
capability:
  exposes:
  - type: mcp
    namespace: psd2-consent
    port: 8080
    tools:
    - name: manage-account-consent
      description: Create or revoke a PSD2 account access consent.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The ING customer identifier.
      - name: tpp_id
        in: body
        type: string
        description: The third-party provider identifier.
      - name: action
        in: body
        type: string
        description: Action to perform such as create or revoke.
      call: open-banking-api.manage-consent
      with:
        customer: '{{customer_id}}'
        tpp: '{{tpp_id}}'
        action: '{{action}}'
      outputParameters:
      - name: consent_id
        type: string
        mapping: $.consent.consentId
      - name: status
        type: string
        mapping: $.consent.status
      - name: valid_until
        type: string
        mapping: $.consent.validUntil
  consumes:
  - type: http
    namespace: open-banking-api
    baseUri: https://api.ing.com/open-banking/v1
    authentication:
      type: bearer
      token: $secrets.ing_open_banking_token
    resources:
    - name: consents
      path: /consents
      operations:
      - name: manage-consent
        method: POST
Open in Framework → View in Fleet → psd2-account-access-consent-manager.yml

Syncs Workday time entries to ADP for payroll processing and confirms via Teams.

naftiko: '0.5'
info:
  label: ADP Payroll Sync
  description: Syncs Workday time entries to ADP for payroll processing and confirms via Teams.
  tags:
  - hr
  - payroll
  - workday
  - adp
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: payroll-sync
    port: 8080
    tools:
    - name: sync-payroll
      description: Sync time entries to ADP payroll.
      inputParameters:
      - name: pay_period
        in: body
        type: string
        description: Pay period.
      steps:
      - name: get-entries
        type: call
        call: workday.get-time-entries
        with:
          pay_period: '{{pay_period}}'
      - name: submit
        type: call
        call: adp.submit-payroll
        with:
          entries: '{{get-entries.entries}}'
      - name: confirm
        type: call
        call: msteams.send-message
        with:
          channel_id: hr_payroll
          text: 'Payroll sync for {{pay_period}}: {{submit.employee_count}} processed.'
  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/entries
      operations:
      - name: get-time-entries
        method: GET
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: payroll
      path: /payroll/payroll-processing
      operations:
      - name: submit-payroll
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → adp-payroll-sync.yml

Processes a payment transfer by validating the sender account, running compliance screening via the sanctions system, executing the payment in the core banking platform, and sending confirmation via WhatsApp.

naftiko: '0.5'
info:
  label: Payment Transfer Orchestrator
  description: Processes a payment transfer by validating the sender account, running compliance screening via the sanctions system, executing the payment in the core banking platform, and sending confirmation via WhatsApp.
  tags:
  - payments
  - banking
  - compliance
  - temenos-transact
  - whatsapp
capability:
  exposes:
  - type: mcp
    namespace: payment-transfers
    port: 8080
    tools:
    - name: process-transfer
      description: Orchestrate a payment transfer with compliance checks and notification.
      inputParameters:
      - name: sender_account
        in: body
        type: string
        description: Sender account number.
      - name: recipient_account
        in: body
        type: string
        description: Recipient account number.
      - name: amount
        in: body
        type: string
        description: Transfer amount.
      - name: currency
        in: body
        type: string
        description: Currency code (EUR, USD).
      steps:
      - name: validate-sender
        type: call
        call: temenos.get-account
        with:
          account_id: '{{sender_account}}'
      - name: screen-sanctions
        type: call
        call: compliance.screen-payment
        with:
          sender: '{{sender_account}}'
          recipient: '{{recipient_account}}'
          amount: '{{amount}}'
          currency: '{{currency}}'
      - name: execute-payment
        type: call
        call: temenos.create-payment
        with:
          debit_account: '{{sender_account}}'
          credit_account: '{{recipient_account}}'
          amount: '{{amount}}'
          currency: '{{currency}}'
      - name: send-confirmation
        type: call
        call: whatsapp.send-message
        with:
          phone: '{{validate-sender.phone_number}}'
          template: payment_confirmed
          parameters: '{{amount}} {{currency}},{{recipient_account}},{{execute-payment.reference}}'
  consumes:
  - type: http
    namespace: temenos
    baseUri: https://core-banking.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.temenos_token
    resources:
    - name: accounts
      path: /accounts/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
    - name: payments
      path: /payments/transfer
      operations:
      - name: create-payment
        method: POST
  - type: http
    namespace: compliance
    baseUri: https://compliance-screening.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.compliance_token
    resources:
    - name: screening
      path: /sanctions/screen
      operations:
      - name: screen-payment
        method: POST
  - type: http
    namespace: whatsapp
    baseUri: https://graph.facebook.com/v17.0
    authentication:
      type: bearer
      token: $secrets.whatsapp_token
    resources:
    - name: messages
      path: /{{phone_number_id}}/messages
      inputParameters:
      - name: phone_number_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → payment-transfer-orchestrator.yml

Queries Google BigQuery for ING data analytics, returning query results, rows processed, and bytes billed for business intelligence reporting.

naftiko: '0.5'
info:
  label: Google Cloud BigQuery Analytics
  description: Queries Google BigQuery for ING data analytics, returning query results, rows processed, and bytes billed for business intelligence reporting.
  tags:
  - analytics
  - google-cloud-platform
  - data
capability:
  exposes:
  - type: mcp
    namespace: bigquery-analytics
    port: 8080
    tools:
    - name: run-query
      description: Execute a BigQuery analytics query.
      inputParameters:
      - name: query
        in: body
        type: string
        description: The SQL query to execute.
      call: bigquery.execute-query
      with:
        query: '{{query}}'
      outputParameters:
      - name: total_rows
        type: number
        mapping: $.totalRows
      - name: bytes_billed
        type: string
        mapping: $.totalBytesProcessed
      - name: results
        type: string
        mapping: $.rows
  consumes:
  - type: http
    namespace: bigquery
    baseUri: https://bigquery.googleapis.com/bigquery/v2
    authentication:
      type: bearer
      token: $secrets.gcp_token
    resources:
    - name: queries
      path: /projects/{{project_id}}/queries
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → google-cloud-bigquery-analytics.yml

Retrieves a secret value from Azure Key Vault for secure configuration management.

naftiko: '0.5'
info:
  label: Azure Key Vault Secret Retriever
  description: Retrieves a secret value from Azure Key Vault for secure configuration management.
  tags:
  - security
  - it-operations
  - azure-key-vault
capability:
  exposes:
  - type: mcp
    namespace: secret-management
    port: 8080
    tools:
    - name: get-secret
      description: Retrieve a secret from Azure Key Vault.
      inputParameters:
      - name: vault_name
        in: body
        type: string
        description: Key Vault name.
      - name: secret_name
        in: body
        type: string
        description: Secret name.
      call: keyvault.get-secret
      with:
        vault_name: '{{vault_name}}'
        secret_name: '{{secret_name}}'
      outputParameters:
      - name: value
        type: string
        mapping: $.value
      - name: created
        type: string
        mapping: $.attributes.created
  consumes:
  - type: http
    namespace: keyvault
    baseUri: https://{{vault_name}}.vault.azure.net
    authentication:
      type: bearer
      token: $secrets.azure_keyvault_token
    resources:
    - name: secrets
      path: /secrets/{{secret_name}}
      inputParameters:
      - name: secret_name
        in: path
      - name: api-version
        in: query
        value: '7.4'
      operations:
      - name: get-secret
        method: GET
Open in Framework → View in Fleet → azure-key-vault-secret-retriever.yml

Tracks ING's green and sustainability bond portfolio performance, monitoring ESG compliance metrics and carbon offset reporting for institutional investors.

naftiko: '0.5'
info:
  label: Sustainability Bond Portfolio Tracker
  description: Tracks ING's green and sustainability bond portfolio performance, monitoring ESG compliance metrics and carbon offset reporting for institutional investors.
  tags:
  - sustainable-finance
  - bonds
  - esg-reporting
capability:
  exposes:
  - type: mcp
    namespace: sustainability-bonds
    port: 8080
    tools:
    - name: get-bond-portfolio-metrics
      description: Retrieve sustainability bond portfolio metrics and ESG scores.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The bond portfolio identifier.
      - name: reporting_period
        in: body
        type: string
        description: Reporting period in YYYY-QN format.
      call: sustainable-finance-api.get-portfolio-metrics
      with:
        portfolio: '{{portfolio_id}}'
        period: '{{reporting_period}}'
      outputParameters:
      - name: total_green_assets
        type: number
        mapping: $.portfolio.totalGreenAssets
      - name: carbon_offset_tonnes
        type: number
        mapping: $.portfolio.carbonOffsetTonnes
      - name: esg_compliance_score
        type: number
        mapping: $.portfolio.esgComplianceScore
  consumes:
  - type: http
    namespace: sustainable-finance-api
    baseUri: https://api.ing.com/sustainable-finance/v1
    authentication:
      type: bearer
      token: $secrets.ing_sustainable_finance_token
    resources:
    - name: portfolios
      path: /bond-portfolios/{{portfolio}}/metrics
      inputParameters:
      - name: portfolio
        in: path
      operations:
      - name: get-portfolio-metrics
        method: GET
Open in Framework → View in Fleet → sustainability-bond-portfolio-tracker.yml

Retrieves a payroll summary for an ING employee from Workday.

naftiko: '0.5'
info:
  label: Workday Payroll Summary Retriever
  description: Retrieves a payroll summary for an ING employee from Workday.
  tags:
  - hr
  - payroll
  - workday
capability:
  exposes:
  - type: mcp
    namespace: payroll
    port: 8080
    tools:
    - name: get-payroll
      description: Retrieve the latest payroll summary.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: Workday worker ID.
      call: workday.get-payslip
      with:
        worker_id: '{{worker_id}}'
      outputParameters:
      - name: gross_pay
        type: string
        mapping: $.payslip.grossPay
      - name: net_pay
        type: string
        mapping: $.payslip.netPay
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: payslips
      path: /workers/{{worker_id}}/paySlips
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-payslip
        method: GET
Open in Framework → View in Fleet → workday-payroll-summary-retriever.yml

Retrieves OpenShift cluster health for ING microservices platform, returning node readiness count, pod status summary, and cluster version.

naftiko: '0.5'
info:
  label: Red Hat OpenShift Cluster Status
  description: Retrieves OpenShift cluster health for ING microservices platform, returning node readiness count, pod status summary, and cluster version.
  tags:
  - infrastructure
  - openshift
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: openshift-health
    port: 8080
    tools:
    - name: get-cluster-status
      description: Retrieve OpenShift cluster health status.
      inputParameters:
      - name: cluster_name
        in: body
        type: string
        description: The OpenShift cluster name.
      call: openshift.get-cluster
      with:
        cluster_name: '{{cluster_name}}'
      outputParameters:
      - name: ready_nodes
        type: number
        mapping: $.status.readyNodes
      - name: pod_summary
        type: string
        mapping: $.status.podSummary
      - name: version
        type: string
        mapping: $.status.version
  consumes:
  - type: http
    namespace: openshift
    baseUri: https://api.openshift.ing.com:6443
    authentication:
      type: bearer
      token: $secrets.openshift_token
    resources:
    - name: clusters
      path: /apis/config.openshift.io/v1/clusterversions
      operations:
      - name: get-cluster
        method: GET
Open in Framework → View in Fleet → red-hat-openshift-cluster-status.yml

Manages daily liquidity by retrieving cash positions from Kondor, checking regulatory limits, executing money market transactions, and reporting to treasury management via Microsoft Teams.

naftiko: '0.5'
info:
  label: Treasury Liquidity Management Orchestrator
  description: Manages daily liquidity by retrieving cash positions from Kondor, checking regulatory limits, executing money market transactions, and reporting to treasury management via Microsoft Teams.
  tags:
  - treasury
  - liquidity
  - kondor
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: liquidity-management
    port: 8080
    tools:
    - name: manage-liquidity
      description: Execute daily liquidity management operations.
      inputParameters:
      - name: currency
        in: body
        type: string
        description: The currency code (EUR, USD, GBP).
      - name: business_date
        in: body
        type: string
        description: The business date.
      steps:
      - name: get-cash-position
        type: call
        call: kondor.get-position
        with:
          currency: '{{currency}}'
          date: '{{business_date}}'
      - name: check-limits
        type: call
        call: risk-system.check-liquidity-limits
        with:
          currency: '{{currency}}'
          position: '{{get-cash-position.net_position}}'
      - name: execute-placement
        type: call
        call: kondor.create-money-market-deal
        with:
          currency: '{{currency}}'
          amount: '{{check-limits.recommended_action_amount}}'
          direction: '{{check-limits.recommended_direction}}'
      - name: notify-treasury
        type: call
        call: teams.send-message
        with:
          channel: Treasury_Operations
          message: 'Liquidity update for {{currency}} on {{business_date}}: Position {{get-cash-position.net_position}}. Action: {{check-limits.recommended_direction}} {{check-limits.recommended_action_amount}}. Deal ref: {{execute-placement.deal_id}}.'
  consumes:
  - type: http
    namespace: kondor
    baseUri: https://kondor.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kondor_token
    resources:
    - name: positions
      path: /positions/cash
      operations:
      - name: get-position
        method: GET
    - name: deals
      path: /deals/money-market
      operations:
      - name: create-money-market-deal
        method: POST
  - type: http
    namespace: risk-system
    baseUri: https://risk-management.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.risk_system_token
    resources:
    - name: limits
      path: /liquidity/check
      operations:
      - name: check-liquidity-limits
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_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: send-message
        method: POST
Open in Framework → View in Fleet → treasury-liquidity-management-orchestrator.yml

Retrieves standing order details from Temenos Transact, returning beneficiary name, amount, frequency, and next execution date for an ING customer account.

naftiko: '0.5'
info:
  label: Temenos Standing Order Lookup
  description: Retrieves standing order details from Temenos Transact, returning beneficiary name, amount, frequency, and next execution date for an ING customer account.
  tags:
  - banking
  - payments
  - temenos-transact
capability:
  exposes:
  - type: mcp
    namespace: standing-orders
    port: 8080
    tools:
    - name: get-standing-order
      description: Look up a standing order in Temenos Transact.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The standing order ID.
      call: temenos.get-standing-order
      with:
        order_id: '{{order_id}}'
      outputParameters:
      - name: beneficiary
        type: string
        mapping: $.body.beneficiaryName
      - name: amount
        type: string
        mapping: $.body.amount
      - name: frequency
        type: string
        mapping: $.body.frequency
      - name: next_execution
        type: string
        mapping: $.body.nextExecutionDate
  consumes:
  - type: http
    namespace: temenos
    baseUri: https://core-banking.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.temenos_token
    resources:
    - name: standing-orders
      path: /standing-orders/{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-standing-order
        method: GET
Open in Framework → View in Fleet → temenos-standing-order-lookup.yml

Checks API gateway health in MuleSoft Anypoint Platform, returning API status, response time, error rate, and active policy count.

naftiko: '0.5'
info:
  label: MuleSoft API Gateway Health Check
  description: Checks API gateway health in MuleSoft Anypoint Platform, returning API status, response time, error rate, and active policy count.
  tags:
  - integration
  - mulesoft
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: api-gateway
    port: 8080
    tools:
    - name: check-api-health
      description: Check MuleSoft API gateway health.
      inputParameters:
      - name: api_id
        in: body
        type: string
        description: The MuleSoft API ID.
      call: mulesoft.get-api-status
      with:
        api_id: '{{api_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: avg_response_time
        type: string
        mapping: $.metrics.avgResponseTime
      - name: error_rate
        type: string
        mapping: $.metrics.errorRate
  consumes:
  - type: http
    namespace: mulesoft
    baseUri: https://anypoint.mulesoft.com/apimanager/api/v1
    authentication:
      type: bearer
      token: $secrets.mulesoft_token
    resources:
    - name: apis
      path: /organizations/{{org_id}}/environments/{{env_id}}/apis/{{api_id}}
      inputParameters:
      - name: api_id
        in: path
      operations:
      - name: get-api-status
        method: GET
Open in Framework → View in Fleet → mulesoft-api-gateway-health-check.yml

Compares ING mortgage rate offerings against market rates for Dutch residential properties, factoring in NHG guarantees, fixed-rate periods, and customer loyalty discounts.

naftiko: '0.5'
info:
  label: Dutch Mortgage Rate Comparison Tool
  description: Compares ING mortgage rate offerings against market rates for Dutch residential properties, factoring in NHG guarantees, fixed-rate periods, and customer loyalty discounts.
  tags:
  - mortgages
  - retail-banking
  - rate-comparison
capability:
  exposes:
  - type: mcp
    namespace: mortgage-rates
    port: 8080
    tools:
    - name: compare-mortgage-rates
      description: Compare current ING mortgage rates with market averages.
      inputParameters:
      - name: property_value
        in: body
        type: number
        description: Property value in EUR.
      - name: loan_amount
        in: body
        type: number
        description: Requested mortgage amount in EUR.
      - name: fixed_rate_period
        in: body
        type: integer
        description: Fixed rate period in years such as 5, 10, 20, or 30.
      - name: nhg_eligible
        in: body
        type: boolean
        description: Whether the mortgage qualifies for NHG guarantee.
      call: mortgage-api.compare-rates
      with:
        property_value: '{{property_value}}'
        loan: '{{loan_amount}}'
        period: '{{fixed_rate_period}}'
        nhg: '{{nhg_eligible}}'
      outputParameters:
      - name: ing_rate
        type: number
        mapping: $.comparison.ingRate
      - name: market_average
        type: number
        mapping: $.comparison.marketAverage
      - name: monthly_payment
        type: number
        mapping: $.comparison.monthlyPayment
  consumes:
  - type: http
    namespace: mortgage-api
    baseUri: https://api.ing.com/mortgages/v1
    authentication:
      type: bearer
      token: $secrets.ing_mortgage_api_token
    resources:
    - name: rate-comparisons
      path: /rate-comparisons
      operations:
      - name: compare-rates
        method: POST
Open in Framework → View in Fleet → dutch-mortgage-rate-comparison-tool.yml

Retrieves treasury position details from the Kondor system for fixed income and derivatives portfolios.

naftiko: '0.5'
info:
  label: Kondor Treasury Position Lookup
  description: Retrieves treasury position details from the Kondor system for fixed income and derivatives portfolios.
  tags:
  - banking
  - treasury
  - kondor
capability:
  exposes:
  - type: mcp
    namespace: treasury-positions
    port: 8080
    tools:
    - name: get-position
      description: Look up a treasury position in Kondor.
      inputParameters:
      - name: position_id
        in: body
        type: string
        description: Kondor position ID.
      call: kondor.get-position
      with:
        position_id: '{{position_id}}'
      outputParameters:
      - name: instrument
        type: string
        mapping: $.instrumentName
      - name: notional
        type: string
        mapping: $.notionalAmount
      - name: market_value
        type: string
        mapping: $.marketValue
  consumes:
  - type: http
    namespace: kondor
    baseUri: https://kondor.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kondor_token
    resources:
    - name: positions
      path: /positions/{{position_id}}
      inputParameters:
      - name: position_id
        in: path
      operations:
      - name: get-position
        method: GET
Open in Framework → View in Fleet → kondor-treasury-position-lookup.yml

Orchestrates portfolio rebalancing for ING wealth clients by analyzing current allocations in Murex, generating trade orders, executing via the trading platform, and reporting results to the relationship manager via Salesforce.

naftiko: '0.5'
info:
  label: Investment Portfolio Rebalancing Orchestrator
  description: Orchestrates portfolio rebalancing for ING wealth clients by analyzing current allocations in Murex, generating trade orders, executing via the trading platform, and reporting results to the relationship manager via Salesforce.
  tags:
  - wealth-management
  - trading
  - murex
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: portfolio-rebalancing
    port: 8080
    tools:
    - name: rebalance-portfolio
      description: Orchestrate portfolio rebalancing for a wealth client.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The portfolio ID.
      - name: target_model
        in: body
        type: string
        description: The target allocation model.
      steps:
      - name: analyze-allocation
        type: call
        call: murex.get-portfolio-positions
        with:
          portfolio_id: '{{portfolio_id}}'
      - name: generate-orders
        type: call
        call: rebalancing-engine.calculate-trades
        with:
          portfolio_id: '{{portfolio_id}}'
          target_model: '{{target_model}}'
          current_positions: '{{analyze-allocation.positions}}'
      - name: execute-trades
        type: call
        call: trading-platform.execute-orders
        with:
          order_list: '{{generate-orders.trade_list}}'
      - name: update-rm
        type: call
        call: salesforce.create-activity
        with:
          subject: Portfolio {{portfolio_id}} rebalanced to {{target_model}}
          description: 'Trades executed: {{execute-trades.trade_count}}. Net turnover: {{execute-trades.net_turnover}}.'
  consumes:
  - type: http
    namespace: murex
    baseUri: https://murex.ing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.murex_token
    resources:
    - name: portfolios
      path: /portfolios/{{portfolio_id}}/positions
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: get-portfolio-positions
        method: GET
  - type: http
    namespace: rebalancing-engine
    baseUri: https://rebalancing.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.rebalancing_token
    resources:
    - name: calculations
      path: /calculate
      operations:
      - name: calculate-trades
        method: POST
  - type: http
    namespace: trading-platform
    baseUri: https://trading.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.trading_token
    resources:
    - name: orders
      path: /orders/execute
      operations:
      - name: execute-orders
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://ing.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: activities
      path: /sobjects/Task
      operations:
      - name: create-activity
        method: POST
Open in Framework → View in Fleet → investment-portfolio-rebalancing-orchestrator.yml

Retrieves the credit risk score for a customer from the internal risk engine, returning risk rating, probability of default, and exposure at default.

naftiko: '0.5'
info:
  label: Credit Risk Score Retriever
  description: Retrieves the credit risk score for a customer from the internal risk engine, returning risk rating, probability of default, and exposure at default.
  tags:
  - risk
  - lending
  - banking
capability:
  exposes:
  - type: mcp
    namespace: credit-risk
    port: 8080
    tools:
    - name: get-credit-risk
      description: Retrieve credit risk score for a customer.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The customer ID.
      call: risk-engine.get-score
      with:
        customer_id: '{{customer_id}}'
      outputParameters:
      - name: risk_rating
        type: string
        mapping: $.riskRating
      - name: probability_of_default
        type: string
        mapping: $.probabilityOfDefault
      - name: exposure_at_default
        type: string
        mapping: $.exposureAtDefault
      - name: last_assessed
        type: string
        mapping: $.lastAssessmentDate
  consumes:
  - type: http
    namespace: risk-engine
    baseUri: https://risk-engine.ing.com/api/v1
    authentication:
      type: bearer
      token: $secrets.risk_engine_token
    resources:
    - name: scores
      path: /credit/scores/{{customer_id}}
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: get-score
        method: GET
Open in Framework → View in Fleet → credit-risk-score-retriever.yml

Retrieves bond trade execution details from Tradeweb, returning execution price, yield, settlement date, and counterparty for ING fixed income trading.

naftiko: '0.5'
info:
  label: Tradeweb Bond Execution Lookup
  description: Retrieves bond trade execution details from Tradeweb, returning execution price, yield, settlement date, and counterparty for ING fixed income trading.
  tags:
  - trading
  - fixed-income
  - tradeweb
capability:
  exposes:
  - type: mcp
    namespace: bond-execution
    port: 8080
    tools:
    - name: get-execution
      description: Look up a bond trade execution on Tradeweb.
      inputParameters:
      - name: trade_id
        in: body
        type: string
        description: The Tradeweb trade ID.
      call: tradeweb.get-trade
      with:
        trade_id: '{{trade_id}}'
      outputParameters:
      - name: price
        type: string
        mapping: $.trade.executionPrice
      - name: yield
        type: string
        mapping: $.trade.yield
      - name: settlement_date
        type: string
        mapping: $.trade.settlementDate
      - name: counterparty
        type: string
        mapping: $.trade.counterparty
  consumes:
  - type: http
    namespace: tradeweb
    baseUri: https://api.tradeweb.com/v1
    authentication:
      type: bearer
      token: $secrets.tradeweb_token
    resources:
    - name: trades
      path: /trades/{{trade_id}}
      inputParameters:
      - name: trade_id
        in: path
      operations:
      - name: get-trade
        method: GET
Open in Framework → View in Fleet → tradeweb-bond-execution-lookup.yml

Retrieves project plan status from Microsoft Planner for ING business initiatives, returning task count, completion percentage, and overdue task count.

naftiko: '0.5'
info:
  label: Microsoft Planner Project Tracker
  description: Retrieves project plan status from Microsoft Planner for ING business initiatives, returning task count, completion percentage, and overdue task count.
  tags:
  - project-management
  - microsoft-planner
capability:
  exposes:
  - type: mcp
    namespace: project-tracking
    port: 8080
    tools:
    - name: get-plan-status
      description: Retrieve project plan status from Microsoft Planner.
      inputParameters:
      - name: plan_id
        in: body
        type: string
        description: The Microsoft Planner plan ID.
      call: planner.get-plan
      with:
        plan_id: '{{plan_id}}'
      outputParameters:
      - name: task_count
        type: number
        mapping: $.tasks.length
      - name: completion_pct
        type: string
        mapping: $.percentComplete
      - name: overdue_count
        type: number
        mapping: $.overdueTasks
  consumes:
  - type: http
    namespace: planner
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.microsoft_graph_token
    resources:
    - name: plans
      path: /planner/plans/{{plan_id}}/tasks
      inputParameters:
      - name: plan_id
        in: path
      operations:
      - name: get-plan
        method: GET
Open in Framework → View in Fleet → microsoft-planner-project-tracker.yml

Retrieves real-time cash position data from the treasury management system, returning available balance, projected balance, and currency exposure by entity.

naftiko: '0.5'
info:
  label: Treasury Cash Position Lookup
  description: Retrieves real-time cash position data from the treasury management system, returning available balance, projected balance, and currency exposure by entity.
  tags:
  - treasury
  - cash-management
capability:
  exposes:
  - type: mcp
    namespace: treasury-cash
    port: 8080
    tools:
    - name: get-cash-position
      description: Look up real-time cash position.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The legal entity ID.
      - name: currency
        in: body
        type: string
        description: The currency code.
      call: treasury.get-position
      with:
        entity_id: '{{entity_id}}'
        currency: '{{currency}}'
      outputParameters:
      - name: available_balance
        type: string
        mapping: $.position.availableBalance
      - name: projected_balance
        type: string
        mapping: $.position.projectedBalance
      - name: currency_exposure
        type: string
        mapping: $.position.currencyExposure
  consumes:
  - type: http
    namespace: treasury
    baseUri: https://treasury.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.treasury_token
    resources:
    - name: positions
      path: /cash/positions?entity={{entity_id}}&currency={{currency}}
      inputParameters:
      - name: entity_id
        in: query
      - name: currency
        in: query
      operations:
      - name: get-position
        method: GET
Open in Framework → View in Fleet → treasury-cash-position-lookup.yml

Orchestrates block trade allocation by splitting the fill across client accounts, booking individual allocations in the OMS, confirming with the custodian, and sending allocation details to clients.

naftiko: '0.5'
info:
  label: Trade Allocation and Booking Orchestrator
  description: Orchestrates block trade allocation by splitting the fill across client accounts, booking individual allocations in the OMS, confirming with the custodian, and sending allocation details to clients.
  tags:
  - trading
  - allocation
  - oms
capability:
  exposes:
  - type: mcp
    namespace: trade-allocation
    port: 8080
    tools:
    - name: allocate-block-trade
      description: Allocate a block trade across client accounts.
      inputParameters:
      - name: block_trade_id
        in: body
        type: string
        description: The block trade ID.
      - name: allocation_scheme
        in: body
        type: string
        description: The allocation scheme (pro-rata, manual).
      steps:
      - name: calculate-allocations
        type: call
        call: allocation-engine.calculate
        with:
          block_trade_id: '{{block_trade_id}}'
          scheme: '{{allocation_scheme}}'
      - name: book-allocations
        type: call
        call: oms.book-allocations
        with:
          block_trade_id: '{{block_trade_id}}'
          allocations: '{{calculate-allocations.allocation_list}}'
      - name: confirm-custody
        type: call
        call: custody.confirm-allocations
        with:
          allocation_count: '{{book-allocations.allocation_count}}'
      - name: notify-clients
        type: call
        call: messaging.send-allocation-notices
        with:
          block_trade_id: '{{block_trade_id}}'
          allocation_count: '{{book-allocations.allocation_count}}'
  consumes:
  - type: http
    namespace: allocation-engine
    baseUri: https://allocation.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.allocation_token
    resources:
    - name: calculations
      path: /calculate
      operations:
      - name: calculate
        method: POST
  - type: http
    namespace: oms
    baseUri: https://oms.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.oms_token
    resources:
    - name: allocations
      path: /allocations
      operations:
      - name: book-allocations
        method: POST
  - type: http
    namespace: custody
    baseUri: https://custody.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.custody_token
    resources:
    - name: confirmations
      path: /allocations/confirm
      operations:
      - name: confirm-allocations
        method: POST
  - type: http
    namespace: messaging
    baseUri: https://client-messaging.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.messaging_token
    resources:
    - name: notices
      path: /allocation-notices
      operations:
      - name: send-allocation-notices
        method: POST
Open in Framework → View in Fleet → trade-allocation-and-booking-orchestrator.yml

Validates a payment message migration from MT to ISO 20022 format by parsing the legacy MT message, converting via the translation engine, comparing fields, and logging the validation result.

naftiko: '0.5'
info:
  label: ISO 20022 Payment Migration Validator
  description: Validates a payment message migration from MT to ISO 20022 format by parsing the legacy MT message, converting via the translation engine, comparing fields, and logging the validation result.
  tags:
  - payments
  - swift
  - iso20022
  - technology
capability:
  exposes:
  - type: mcp
    namespace: iso20022-migration
    port: 8080
    tools:
    - name: validate-migration
      description: Parse MT message, translate to ISO 20022, compare fields, and log validation.
      inputParameters:
      - name: mt_message_ref
        in: body
        type: string
        description: Reference ID of the legacy MT message.
      - name: message_type
        in: body
        type: string
        description: MT message type (e.g., MT103, MT202).
      steps:
      - name: get-mt-message
        type: call
        call: swift-messaging.get-message
        with:
          message_ref: '{{mt_message_ref}}'
      - name: translate
        type: call
        call: iso20022-engine.translate
        with:
          mt_content: '{{get-mt-message.content}}'
          message_type: '{{message_type}}'
      - name: compare-fields
        type: call
        call: iso20022-engine.compare
        with:
          mt_parsed: '{{get-mt-message.parsedFields}}'
          mx_parsed: '{{translate.parsedFields}}'
      - name: log-result
        type: call
        call: migration-tracker.log
        with:
          mt_message_ref: '{{mt_message_ref}}'
          message_type: '{{message_type}}'
          match_pct: '{{compare-fields.matchPercentage}}'
          mismatched_fields: '{{compare-fields.mismatchedFields}}'
          status: '{{compare-fields.validationStatus}}'
  consumes:
  - type: http
    namespace: swift-messaging
    baseUri: https://swift-messaging.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.swift_messaging_token
    resources:
    - name: messages
      path: /messages/{{message_ref}}
      inputParameters:
      - name: message_ref
        in: path
      operations:
      - name: get-message
        method: GET
  - type: http
    namespace: iso20022-engine
    baseUri: https://iso20022-engine.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.iso20022_engine_token
    resources:
    - name: translations
      path: /translate
      operations:
      - name: translate
        method: POST
    - name: comparisons
      path: /compare
      operations:
      - name: compare
        method: POST
  - type: http
    namespace: migration-tracker
    baseUri: https://migration-tracker.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.migration_tracker_token
    resources:
    - name: logs
      path: /logs
      operations:
      - name: log
        method: POST
Open in Framework → View in Fleet → iso-20022-payment-migration-validator.yml

Processes an auto loan application by pulling credit data, running automated decisioning, generating loan documents, and notifying the dealer via the partner portal.

naftiko: '0.5'
info:
  label: Auto Loan Origination Pipeline
  description: Processes an auto loan application by pulling credit data, running automated decisioning, generating loan documents, and notifying the dealer via the partner portal.
  tags:
  - lending
  - consumer-banking
  - auto
capability:
  exposes:
  - type: mcp
    namespace: auto-lending
    port: 8080
    tools:
    - name: originate-auto-loan
      description: Process an auto loan application.
      inputParameters:
      - name: application_id
        in: body
        type: string
        description: The loan application ID.
      - name: dealer_id
        in: body
        type: string
        description: The dealer partner ID.
      steps:
      - name: pull-credit
        type: call
        call: credit-bureau.pull-report
        with:
          application_id: '{{application_id}}'
      - name: run-decision
        type: call
        call: underwriting-engine.auto-decide
        with:
          application_id: '{{application_id}}'
          credit_score: '{{pull-credit.fico_score}}'
      - name: generate-docs
        type: call
        call: loan-platform.generate-documents
        with:
          application_id: '{{application_id}}'
          decision: '{{run-decision.decision}}'
          rate: '{{run-decision.offered_rate}}'
      - name: notify-dealer
        type: call
        call: dealer-portal.send-notification
        with:
          dealer_id: '{{dealer_id}}'
          application_id: '{{application_id}}'
          decision: '{{run-decision.decision}}'
  consumes:
  - type: http
    namespace: credit-bureau
    baseUri: https://credit-services.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.credit_bureau_token
    resources:
    - name: reports
      path: /reports/pull
      operations:
      - name: pull-report
        method: POST
  - type: http
    namespace: underwriting-engine
    baseUri: https://underwriting.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.underwriting_token
    resources:
    - name: auto
      path: /auto/decide
      operations:
      - name: auto-decide
        method: POST
  - type: http
    namespace: loan-platform
    baseUri: https://loan-platform.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.loan_platform_token
    resources:
    - name: documents
      path: /documents/generate
      operations:
      - name: generate-documents
        method: POST
  - type: http
    namespace: dealer-portal
    baseUri: https://dealer-portal.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.dealer_portal_token
    resources:
    - name: notifications
      path: /notifications
      operations:
      - name: send-notification
        method: POST
Open in Framework → View in Fleet → auto-loan-origination-pipeline.yml

Retrieves commercial real estate loan details from the lending platform, returning outstanding balance, LTV ratio, debt service coverage ratio, and maturity date.

naftiko: '0.5'
info:
  label: Commercial Real Estate Loan Status
  description: Retrieves commercial real estate loan details from the lending platform, returning outstanding balance, LTV ratio, debt service coverage ratio, and maturity date.
  tags:
  - lending
  - commercial-banking
  - real-estate
capability:
  exposes:
  - type: mcp
    namespace: cre-lending
    port: 8080
    tools:
    - name: get-cre-loan
      description: Look up a commercial real estate loan.
      inputParameters:
      - name: loan_id
        in: body
        type: string
        description: The CRE loan ID.
      call: lending.get-cre-loan
      with:
        loan_id: '{{loan_id}}'
      outputParameters:
      - name: outstanding_balance
        type: string
        mapping: $.loan.outstandingBalance
      - name: ltv_ratio
        type: string
        mapping: $.loan.ltvRatio
      - name: dscr
        type: string
        mapping: $.loan.debtServiceCoverageRatio
      - name: maturity_date
        type: string
        mapping: $.loan.maturityDate
  consumes:
  - type: http
    namespace: lending
    baseUri: https://lending-platform.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lending_token
    resources:
    - name: cre-loans
      path: /cre/loans/{{loan_id}}
      inputParameters:
      - name: loan_id
        in: path
      operations:
      - name: get-cre-loan
        method: GET
Open in Framework → View in Fleet → commercial-real-estate-loan-status.yml

Fetches the current FX spot rate for a currency pair from the JPMorgan FX pricing engine. Returns mid, bid, and ask rates. Used by treasury, trading, and operations for currency conversion and pricing.

naftiko: '0.5'
info:
  label: FX Spot Rate Retrieval
  description: Fetches the current FX spot rate for a currency pair from the JPMorgan FX pricing engine. Returns mid, bid, and ask rates. Used by treasury, trading, and operations for currency conversion and pricing.
  tags:
  - trading
  - fx
  - treasury
capability:
  exposes:
  - type: mcp
    namespace: fx-pricing
    port: 8080
    tools:
    - name: get-fx-spot
      description: Retrieve FX spot rate for a currency pair. Returns mid, bid, and ask rates with timestamp.
      inputParameters:
      - name: currency_pair
        in: body
        type: string
        description: The currency pair in ISO format (e.g., EURUSD).
      call: fx-engine.get-spot
      with:
        currency_pair: '{{currency_pair}}'
      outputParameters:
      - name: mid_rate
        type: number
        mapping: $.rate.mid
      - name: bid_rate
        type: number
        mapping: $.rate.bid
      - name: ask_rate
        type: number
        mapping: $.rate.ask
      - name: timestamp
        type: string
        mapping: $.rate.timestamp
  consumes:
  - type: http
    namespace: fx-engine
    baseUri: https://fx-pricing.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.fx_engine_token
    resources:
    - name: spot-rates
      path: /spot/{{currency_pair}}
      inputParameters:
      - name: currency_pair
        in: path
      operations:
      - name: get-spot
        method: GET
Open in Framework → View in Fleet → fx-spot-rate-retrieval.yml

Orchestrates regulatory trade reporting by extracting trades from the OMS, formatting for EMIR/Dodd-Frank, submitting to the trade repository, and logging confirmation in the compliance system.

naftiko: '0.5'
info:
  label: Compliance Trade Reporting Pipeline
  description: Orchestrates regulatory trade reporting by extracting trades from the OMS, formatting for EMIR/Dodd-Frank, submitting to the trade repository, and logging confirmation in the compliance system.
  tags:
  - compliance
  - regulatory
  - trading
capability:
  exposes:
  - type: mcp
    namespace: trade-reporting
    port: 8080
    tools:
    - name: report-trades
      description: Submit trades to regulatory trade repository.
      inputParameters:
      - name: business_date
        in: body
        type: string
        description: The business date.
      - name: asset_class
        in: body
        type: string
        description: The asset class (rates, credit, equity, fx).
      steps:
      - name: extract-trades
        type: call
        call: oms.get-reportable-trades
        with:
          date: '{{business_date}}'
          asset_class: '{{asset_class}}'
      - name: format-reports
        type: call
        call: reporting-engine.format-regulatory
        with:
          trade_count: '{{extract-trades.trade_count}}'
          regime: EMIR
      - name: submit-to-tr
        type: call
        call: trade-repository.submit
        with:
          report_batch_id: '{{format-reports.batch_id}}'
      - name: log-confirmation
        type: call
        call: compliance-system.log-submission
        with:
          business_date: '{{business_date}}'
          trade_count: '{{extract-trades.trade_count}}'
          tr_confirmation: '{{submit-to-tr.confirmation_id}}'
  consumes:
  - type: http
    namespace: oms
    baseUri: https://oms.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.oms_token
    resources:
    - name: trades
      path: /trades/reportable
      operations:
      - name: get-reportable-trades
        method: GET
  - type: http
    namespace: reporting-engine
    baseUri: https://regulatory-reporting.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.reporting_token
    resources:
    - name: formatting
      path: /format
      operations:
      - name: format-regulatory
        method: POST
  - type: http
    namespace: trade-repository
    baseUri: https://trade-repository.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.tr_token
    resources:
    - name: submissions
      path: /submit
      operations:
      - name: submit
        method: POST
  - type: http
    namespace: compliance-system
    baseUri: https://compliance.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.compliance_token
    resources:
    - name: logs
      path: /submissions/log
      operations:
      - name: log-submission
        method: POST
Open in Framework → View in Fleet → compliance-trade-reporting-pipeline.yml

Reconciles nostro account balances by fetching the internal ledger balance, retrieving the correspondent bank statement via SWIFT, identifying breaks, and creating ServiceNow tasks for unmatched items.

naftiko: '0.5'
info:
  label: Interbank Nostro Reconciliation
  description: Reconciles nostro account balances by fetching the internal ledger balance, retrieving the correspondent bank statement via SWIFT, identifying breaks, and creating ServiceNow tasks for unmatched items.
  tags:
  - treasury
  - reconciliation
  - nostro
  - swift
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: nostro-recon
    port: 8080
    tools:
    - name: reconcile-nostro
      description: Compare internal ledger to correspondent statement and escalate breaks.
      inputParameters:
      - name: nostro_account_id
        in: body
        type: string
        description: The nostro account identifier.
      - name: correspondent_bic
        in: body
        type: string
        description: SWIFT BIC of the correspondent bank.
      - name: value_date
        in: body
        type: string
        description: Value date in YYYY-MM-DD format.
      steps:
      - name: get-ledger-balance
        type: call
        call: core-banking.get-balance
        with:
          account_id: '{{nostro_account_id}}'
          value_date: '{{value_date}}'
      - name: get-statement
        type: call
        call: swift-messaging.get-mt950
        with:
          correspondent_bic: '{{correspondent_bic}}'
          account_id: '{{nostro_account_id}}'
          value_date: '{{value_date}}'
      - name: identify-breaks
        type: call
        call: recon-engine.match
        with:
          ledger_balance: '{{get-ledger-balance.balance}}'
          statement_balance: '{{get-statement.closingBalance}}'
          ledger_entries: '{{get-ledger-balance.entries}}'
          statement_entries: '{{get-statement.entries}}'
      - name: create-break-tasks
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Nostro recon breaks: {{nostro_account_id}} at {{correspondent_bic}} for {{value_date}}'
          description: '{{identify-breaks.breakCount}} unmatched items. Ledger balance: {{get-ledger-balance.balance}}. Statement balance: {{get-statement.closingBalance}}. Net difference: {{identify-breaks.netDifference}}.'
          assigned_group: Nostro_Recon
          category: reconciliation
  consumes:
  - type: http
    namespace: core-banking
    baseUri: https://core-banking.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: balances
      path: /accounts/{{account_id}}/balance
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-balance
        method: GET
  - type: http
    namespace: swift-messaging
    baseUri: https://swift-messaging.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.swift_messaging_token
    resources:
    - name: statements
      path: /statements/mt950
      operations:
      - name: get-mt950
        method: GET
  - type: http
    namespace: recon-engine
    baseUri: https://recon-engine.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.recon_engine_token
    resources:
    - name: matching
      path: /match
      operations:
      - name: match
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://jpmorgan.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → interbank-nostro-reconciliation.yml

Retrieves blockchain transaction details from JPMorgan's Onyx platform, returning transaction hash, settlement status, and counterparty for JPM Coin payments.

naftiko: '0.5'
info:
  label: Onyx Blockchain Transaction Lookup
  description: Retrieves blockchain transaction details from JPMorgan's Onyx platform, returning transaction hash, settlement status, and counterparty for JPM Coin payments.
  tags:
  - blockchain
  - payments
  - onyx
capability:
  exposes:
  - type: mcp
    namespace: blockchain-payments
    port: 8080
    tools:
    - name: get-blockchain-tx
      description: Look up an Onyx blockchain transaction.
      inputParameters:
      - name: tx_hash
        in: body
        type: string
        description: The blockchain transaction hash.
      call: onyx.get-transaction
      with:
        tx_hash: '{{tx_hash}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.transaction.status
      - name: amount
        type: string
        mapping: $.transaction.amount
      - name: counterparty
        type: string
        mapping: $.transaction.counterparty
      - name: settled_at
        type: string
        mapping: $.transaction.settledAt
  consumes:
  - type: http
    namespace: onyx
    baseUri: https://onyx.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.onyx_token
    resources:
    - name: transactions
      path: /transactions/{{tx_hash}}
      inputParameters:
      - name: tx_hash
        in: path
      operations:
      - name: get-transaction
        method: GET
Open in Framework → View in Fleet → onyx-blockchain-transaction-lookup.yml

Distributes equity research reports by generating the report from the research platform, performing compliance review, publishing to the client portal, and notifying entitled clients via messaging.

naftiko: '0.5'
info:
  label: Equity Research Report Distribution Pipeline
  description: Distributes equity research reports by generating the report from the research platform, performing compliance review, publishing to the client portal, and notifying entitled clients via messaging.
  tags:
  - research
  - equities
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: research-distribution
    port: 8080
    tools:
    - name: distribute-report
      description: Distribute an equity research report.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The research report ID.
      - name: ticker
        in: body
        type: string
        description: The covered security ticker.
      steps:
      - name: get-report
        type: call
        call: research-platform.get-report
        with:
          report_id: '{{report_id}}'
      - name: compliance-review
        type: call
        call: compliance-system.review-research
        with:
          report_id: '{{report_id}}'
          ticker: '{{ticker}}'
          rating: '{{get-report.rating}}'
      - name: publish-portal
        type: call
        call: client-portal.publish-research
        with:
          report_id: '{{report_id}}'
          clearance_id: '{{compliance-review.clearance_id}}'
      - name: notify-clients
        type: call
        call: messaging.send-research-alert
        with:
          ticker: '{{ticker}}'
          report_title: '{{get-report.title}}'
          rating: '{{get-report.rating}}'
  consumes:
  - type: http
    namespace: research-platform
    baseUri: https://research.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.research_token
    resources:
    - name: reports
      path: /reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-report
        method: GET
  - type: http
    namespace: compliance-system
    baseUri: https://compliance.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.compliance_token
    resources:
    - name: research-review
      path: /research/review
      operations:
      - name: review-research
        method: POST
  - type: http
    namespace: client-portal
    baseUri: https://client-portal.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.portal_token
    resources:
    - name: research
      path: /research/publish
      operations:
      - name: publish-research
        method: POST
  - type: http
    namespace: messaging
    baseUri: https://client-messaging.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.messaging_token
    resources:
    - name: alerts
      path: /research-alerts
      operations:
      - name: send-research-alert
        method: POST
Open in Framework → View in Fleet → equity-research-report-distribution-pipeline.yml

Looks up an ACH payment transaction by trace number from the JPMorgan payments hub. Returns status, settlement date, originator, and amount. Used by operations teams to research payment inquiries.

naftiko: '0.5'
info:
  label: ACH Payment Retrieval
  description: Looks up an ACH payment transaction by trace number from the JPMorgan payments hub. Returns status, settlement date, originator, and amount. Used by operations teams to research payment inquiries.
  tags:
  - payments
  - ach
  - operations
capability:
  exposes:
  - type: mcp
    namespace: payments-ach
    port: 8080
    tools:
    - name: get-ach-payment
      description: Look up an ACH payment by trace number. Returns payment status, settlement date, originator name, and amount.
      inputParameters:
      - name: trace_number
        in: body
        type: string
        description: The ACH trace number (15-digit).
      call: payments-hub.get-ach
      with:
        trace_number: '{{trace_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.payment.status
      - name: settlement_date
        type: string
        mapping: $.payment.settlementDate
      - name: originator
        type: string
        mapping: $.payment.originatorName
      - name: amount
        type: number
        mapping: $.payment.amount
  consumes:
  - type: http
    namespace: payments-hub
    baseUri: https://payments-hub.jpmorgan.com/api/v3
    authentication:
      type: bearer
      token: $secrets.payments_hub_token
    resources:
    - name: ach-payments
      path: /ach/{{trace_number}}
      inputParameters:
      - name: trace_number
        in: path
      operations:
      - name: get-ach
        method: GET
Open in Framework → View in Fleet → ach-payment-retrieval.yml

Provisions API access for a new client application by creating the API key in the gateway, configuring rate limits and scopes, registering the client in the developer portal, and notifying the integration team via Microsoft Teams.

naftiko: '0.5'
info:
  label: API Gateway Rate Limit and Access Provisioning
  description: Provisions API access for a new client application by creating the API key in the gateway, configuring rate limits and scopes, registering the client in the developer portal, and notifying the integration team via Microsoft Teams.
  tags:
  - technology
  - api-management
  - onboarding
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: api-provisioning
    port: 8080
    tools:
    - name: provision-api-access
      description: Create API key, configure limits and scopes, register in portal, and notify integration team.
      inputParameters:
      - name: client_app_name
        in: body
        type: string
        description: Name of the client application.
      - name: api_products
        in: body
        type: string
        description: Comma-separated list of API product IDs to grant access to.
      - name: rate_limit
        in: body
        type: number
        description: Requests per second limit.
      - name: integration_team_email
        in: body
        type: string
        description: Email of the integration support team.
      steps:
      - name: create-api-key
        type: call
        call: api-gateway.create-key
        with:
          app_name: '{{client_app_name}}'
          products: '{{api_products}}'
      - name: configure-limits
        type: call
        call: api-gateway.set-rate-limit
        with:
          api_key_id: '{{create-api-key.keyId}}'
          rate_limit: '{{rate_limit}}'
      - name: register-portal
        type: call
        call: dev-portal.register-app
        with:
          app_name: '{{client_app_name}}'
          api_key_id: '{{create-api-key.keyId}}'
          products: '{{api_products}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{integration_team_email}}'
          text: 'API access provisioned: {{client_app_name}}. Key ID: {{create-api-key.keyId}}. Products: {{api_products}}. Rate limit: {{rate_limit}} rps. Portal: {{register-portal.portalUrl}}.'
  consumes:
  - type: http
    namespace: api-gateway
    baseUri: https://api-gateway.jpmorgan.com/admin/v2
    authentication:
      type: bearer
      token: $secrets.api_gateway_token
    resources:
    - name: keys
      path: /keys
      operations:
      - name: create-key
        method: POST
    - name: rate-limits
      path: /keys/{{api_key_id}}/rate-limits
      inputParameters:
      - name: api_key_id
        in: path
      operations:
      - name: set-rate-limit
        method: PUT
  - type: http
    namespace: dev-portal
    baseUri: https://developer.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dev_portal_token
    resources:
    - name: apps
      path: /apps
      operations:
      - name: register-app
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → api-gateway-rate-limit-and-access-provisioning.yml

Retrieves private equity fund performance metrics, returning IRR, TVPI, DPI, and committed capital for JPMorgan asset management PE funds.

naftiko: '0.5'
info:
  label: Private Equity Fund Performance
  description: Retrieves private equity fund performance metrics, returning IRR, TVPI, DPI, and committed capital for JPMorgan asset management PE funds.
  tags:
  - asset-management
  - private-equity
capability:
  exposes:
  - type: mcp
    namespace: pe-performance
    port: 8080
    tools:
    - name: get-pe-performance
      description: Retrieve private equity fund performance.
      inputParameters:
      - name: fund_id
        in: body
        type: string
        description: The PE fund ID.
      call: am-platform.get-pe-metrics
      with:
        fund_id: '{{fund_id}}'
      outputParameters:
      - name: irr
        type: string
        mapping: $.performance.irr
      - name: tvpi
        type: string
        mapping: $.performance.tvpi
      - name: dpi
        type: string
        mapping: $.performance.dpi
      - name: committed_capital
        type: string
        mapping: $.performance.committedCapital
  consumes:
  - type: http
    namespace: am-platform
    baseUri: https://asset-management.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.am_token
    resources:
    - name: pe-funds
      path: /pe-funds/{{fund_id}}/performance
      inputParameters:
      - name: fund_id
        in: path
      operations:
      - name: get-pe-metrics
        method: GET
Open in Framework → View in Fleet → private-equity-fund-performance.yml

Retrieves fraud alert details for a consumer credit card transaction, returning alert score, transaction details, merchant, and recommended action.

naftiko: '0.5'
info:
  label: Consumer Credit Card Fraud Alert
  description: Retrieves fraud alert details for a consumer credit card transaction, returning alert score, transaction details, merchant, and recommended action.
  tags:
  - fraud-detection
  - consumer-banking
  - credit-cards
capability:
  exposes:
  - type: mcp
    namespace: card-fraud
    port: 8080
    tools:
    - name: get-fraud-alert
      description: Look up a credit card fraud alert.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The fraud alert ID.
      call: fraud-engine.get-alert
      with:
        alert_id: '{{alert_id}}'
      outputParameters:
      - name: risk_score
        type: number
        mapping: $.alert.riskScore
      - name: transaction_amount
        type: string
        mapping: $.alert.transactionAmount
      - name: merchant
        type: string
        mapping: $.alert.merchantName
      - name: recommended_action
        type: string
        mapping: $.alert.recommendedAction
  consumes:
  - type: http
    namespace: fraud-engine
    baseUri: https://fraud-detection.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.fraud_engine_token
    resources:
    - name: alerts
      path: /alerts/{{alert_id}}
      inputParameters:
      - name: alert_id
        in: path
      operations:
      - name: get-alert
        method: GET
Open in Framework → View in Fleet → consumer-credit-card-fraud-alert.yml

Orchestrates supply chain financing by verifying invoice data, approving early payment, executing the discounted payment to the supplier, and updating the buyer's payable schedule.

naftiko: '0.5'
info:
  label: Trade Finance Supply Chain Orchestrator
  description: Orchestrates supply chain financing by verifying invoice data, approving early payment, executing the discounted payment to the supplier, and updating the buyer's payable schedule.
  tags:
  - trade-finance
  - supply-chain
  - commercial-banking
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-finance
    port: 8080
    tools:
    - name: process-scf
      description: Process a supply chain finance transaction.
      inputParameters:
      - name: invoice_id
        in: body
        type: string
        description: The invoice ID.
      - name: buyer_id
        in: body
        type: string
        description: The buyer client ID.
      - name: supplier_id
        in: body
        type: string
        description: The supplier ID.
      steps:
      - name: verify-invoice
        type: call
        call: trade-finance.verify-invoice
        with:
          invoice_id: '{{invoice_id}}'
          buyer_id: '{{buyer_id}}'
      - name: approve-early-payment
        type: call
        call: trade-finance.approve-payment
        with:
          invoice_id: '{{invoice_id}}'
          discount_rate: '{{verify-invoice.discount_rate}}'
      - name: execute-payment
        type: call
        call: payment-hub.execute-scf-payment
        with:
          supplier_id: '{{supplier_id}}'
          amount: '{{approve-early-payment.discounted_amount}}'
      - name: update-schedule
        type: call
        call: trade-finance.update-buyer-schedule
        with:
          buyer_id: '{{buyer_id}}'
          invoice_id: '{{invoice_id}}'
          new_due_date: '{{approve-early-payment.extended_due_date}}'
  consumes:
  - type: http
    namespace: trade-finance
    baseUri: https://trade-finance.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.trade_finance_token
    resources:
    - name: invoices
      path: /invoices/verify
      operations:
      - name: verify-invoice
        method: POST
    - name: approvals
      path: /payments/approve
      operations:
      - name: approve-payment
        method: POST
    - name: schedules
      path: /buyer-schedules/update
      operations:
      - name: update-buyer-schedule
        method: POST
  - type: http
    namespace: payment-hub
    baseUri: https://payment-hub.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.payment_hub_token
    resources:
    - name: scf-payments
      path: /scf/execute
      operations:
      - name: execute-scf-payment
        method: POST
Open in Framework → View in Fleet → trade-finance-supply-chain-orchestrator.yml

Enrolls a corporate client into the commercial card program by creating the card account in the card platform, setting spend controls, provisioning to the expense management system, and notifying the client via email.

naftiko: '0.5'
info:
  label: Commercial Card Program Enrollment
  description: Enrolls a corporate client into the commercial card program by creating the card account in the card platform, setting spend controls, provisioning to the expense management system, and notifying the client via email.
  tags:
  - commercial-banking
  - cards
  - payments
  - expense-management
capability:
  exposes:
  - type: mcp
    namespace: card-enrollment
    port: 8080
    tools:
    - name: enroll-card-program
      description: Create card account, set controls, link to expense system, and notify client.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The corporate client identifier.
      - name: program_type
        in: body
        type: string
        description: Card program type (e.g., PURCHASING, TRAVEL, FLEET).
      - name: monthly_limit
        in: body
        type: number
        description: Monthly aggregate spend limit.
      - name: client_contact_email
        in: body
        type: string
        description: Email of the client program administrator.
      steps:
      - name: create-card-account
        type: call
        call: card-platform.create-account
        with:
          client_id: '{{client_id}}'
          program_type: '{{program_type}}'
      - name: set-controls
        type: call
        call: card-platform.set-controls
        with:
          card_account_id: '{{create-card-account.cardAccountId}}'
          monthly_limit: '{{monthly_limit}}'
          program_type: '{{program_type}}'
      - name: link-expense-system
        type: call
        call: concur.create-card-feed
        with:
          card_account_id: '{{create-card-account.cardAccountId}}'
          client_id: '{{client_id}}'
      - name: notify-client
        type: call
        call: email-service.send
        with:
          to: '{{client_contact_email}}'
          subject: 'Commercial Card Program Enrolled: {{program_type}}'
          body: 'Your {{program_type}} card program has been activated. Account: {{create-card-account.cardAccountId}}. Monthly limit: ${{monthly_limit}}. Expense feed connected. Program ID: {{link-expense-system.feedId}}.'
  consumes:
  - type: http
    namespace: card-platform
    baseUri: https://card-platform.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.card_platform_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
    - name: controls
      path: /accounts/{{card_account_id}}/controls
      inputParameters:
      - name: card_account_id
        in: path
      operations:
      - name: set-controls
        method: POST
  - type: http
    namespace: concur
    baseUri: https://www.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: card-feeds
      path: /expense/cardfeeds
      operations:
      - name: create-card-feed
        method: POST
  - type: http
    namespace: email-service
    baseUri: https://email-service.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.email_service_token
    resources:
    - name: emails
      path: /send
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → commercial-card-program-enrollment.yml

Aggregates risk-weighted assets from the risk engine, calculates capital ratios, generates the regulatory report, submits to the filing platform, and notifies the regulatory affairs team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Regulatory Capital Calculation and Filing
  description: Aggregates risk-weighted assets from the risk engine, calculates capital ratios, generates the regulatory report, submits to the filing platform, and notifies the regulatory affairs team via Microsoft Teams.
  tags:
  - risk
  - regulatory
  - capital
  - compliance
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: reg-capital
    port: 8080
    tools:
    - name: calculate-and-file
      description: Aggregate RWA, calculate capital ratios, generate and submit the regulatory filing, and notify the team.
      inputParameters:
      - name: reporting_date
        in: body
        type: string
        description: Reporting date in YYYY-MM-DD format.
      - name: report_type
        in: body
        type: string
        description: Report type (e.g., FR_Y9C, CCAR).
      - name: team_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID for notification.
      steps:
      - name: get-rwa
        type: call
        call: risk-engine.get-rwa
        with:
          reporting_date: '{{reporting_date}}'
      - name: calc-ratios
        type: call
        call: capital-engine.calculate-ratios
        with:
          rwa_total: '{{get-rwa.totalRWA}}'
          reporting_date: '{{reporting_date}}'
      - name: submit-filing
        type: call
        call: reg-platform.submit-filing
        with:
          report_type: '{{report_type}}'
          reporting_date: '{{reporting_date}}'
          cet1_ratio: '{{calc-ratios.cet1Ratio}}'
          tier1_ratio: '{{calc-ratios.tier1Ratio}}'
          total_capital_ratio: '{{calc-ratios.totalCapitalRatio}}'
      - name: notify-team
        type: call
        call: msteams.post-channel
        with:
          channel_id: '{{team_channel_id}}'
          text: 'Regulatory filing submitted: {{report_type}} for {{reporting_date}}. CET1: {{calc-ratios.cet1Ratio}}%. Tier1: {{calc-ratios.tier1Ratio}}%. Filing ID: {{submit-filing.filingId}}.'
  consumes:
  - type: http
    namespace: risk-engine
    baseUri: https://risk-engine.jpmorgan.com/api/v3
    authentication:
      type: bearer
      token: $secrets.risk_engine_token
    resources:
    - name: rwa
      path: /rwa/{{reporting_date}}
      inputParameters:
      - name: reporting_date
        in: path
      operations:
      - name: get-rwa
        method: GET
  - type: http
    namespace: capital-engine
    baseUri: https://capital-engine.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.capital_engine_token
    resources:
    - name: ratios
      path: /ratios
      operations:
      - name: calculate-ratios
        method: POST
  - type: http
    namespace: reg-platform
    baseUri: https://reg-reporting.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.reg_platform_token
    resources:
    - name: filings
      path: /filings
      operations:
      - name: submit-filing
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel
        method: POST
Open in Framework → View in Fleet → regulatory-capital-calculation-and-filing.yml

Retrieves the current positions for a managed portfolio from the portfolio management system. Returns holdings, market values, and weights. Used by portfolio managers and wealth advisors.

naftiko: '0.5'
info:
  label: Portfolio Position Lookup
  description: Retrieves the current positions for a managed portfolio from the portfolio management system. Returns holdings, market values, and weights. Used by portfolio managers and wealth advisors.
  tags:
  - wealth-management
  - portfolio
  - positions
capability:
  exposes:
  - type: mcp
    namespace: portfolio-mgmt
    port: 8080
    tools:
    - name: get-positions
      description: Fetch current holdings for a portfolio by portfolio ID. Returns list of positions with instrument, quantity, market value, and weight.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The internal portfolio identifier.
      call: portfolio-svc.get-positions
      with:
        portfolio_id: '{{portfolio_id}}'
      outputParameters:
      - name: total_market_value
        type: number
        mapping: $.portfolio.totalMarketValue
      - name: currency
        type: string
        mapping: $.portfolio.currency
      - name: positions_count
        type: number
        mapping: $.portfolio.positionsCount
  consumes:
  - type: http
    namespace: portfolio-svc
    baseUri: https://portfolio-api.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.portfolio_api_token
    resources:
    - name: positions
      path: /portfolios/{{portfolio_id}}/positions
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: get-positions
        method: GET
Open in Framework → View in Fleet → portfolio-position-lookup.yml

Before initiating a SWIFT cross-border payment, screens the beneficiary against sanctions lists, converts currency via FX pricing, and submits the payment. Alerts compliance if screening returns a match.

naftiko: '0.5'
info:
  label: Cross-Border Payment with Sanctions Screening
  description: Before initiating a SWIFT cross-border payment, screens the beneficiary against sanctions lists, converts currency via FX pricing, and submits the payment. Alerts compliance if screening returns a match.
  tags:
  - payments
  - swift
  - compliance
  - sanctions
  - fx
capability:
  exposes:
  - type: mcp
    namespace: cross-border-payments
    port: 8080
    tools:
    - name: initiate-screened-payment
      description: Screen the beneficiary, obtain FX rate, and initiate a SWIFT cross-border payment. Halts and alerts compliance on sanctions match.
      inputParameters:
      - name: beneficiary_name
        in: body
        type: string
        description: Full name of the beneficiary.
      - name: beneficiary_bic
        in: body
        type: string
        description: SWIFT BIC of the beneficiary bank.
      - name: beneficiary_account
        in: body
        type: string
        description: Beneficiary account number or IBAN.
      - name: amount
        in: body
        type: number
        description: Payment amount in source currency.
      - name: source_currency
        in: body
        type: string
        description: ISO currency code of the source.
      - name: target_currency
        in: body
        type: string
        description: ISO currency code of the beneficiary.
      - name: country_code
        in: body
        type: string
        description: Country code of the beneficiary.
      steps:
      - name: screen-beneficiary
        type: call
        call: sanctions-svc.screen
        with:
          party_name: '{{beneficiary_name}}'
          country_code: '{{country_code}}'
      - name: get-fx-rate
        type: call
        call: fx-engine.get-spot
        with:
          currency_pair: '{{source_currency}}{{target_currency}}'
      - name: submit-payment
        type: call
        call: swift-payments.initiate
        with:
          beneficiary_name: '{{beneficiary_name}}'
          beneficiary_bic: '{{beneficiary_bic}}'
          beneficiary_account: '{{beneficiary_account}}'
          amount: '{{amount}}'
          source_currency: '{{source_currency}}'
          target_currency: '{{target_currency}}'
          fx_rate: '{{get-fx-rate.mid}}'
  consumes:
  - type: http
    namespace: sanctions-svc
    baseUri: https://sanctions-screening.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.sanctions_svc_token
    resources:
    - name: screenings
      path: /screen
      operations:
      - name: screen
        method: POST
  - type: http
    namespace: fx-engine
    baseUri: https://fx-pricing.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.fx_engine_token
    resources:
    - name: spot-rates
      path: /spot/{{currency_pair}}
      inputParameters:
      - name: currency_pair
        in: path
      operations:
      - name: get-spot
        method: GET
  - type: http
    namespace: swift-payments
    baseUri: https://payments-hub.jpmorgan.com/api/v3
    authentication:
      type: bearer
      token: $secrets.payments_hub_token
    resources:
    - name: swift
      path: /swift/payments
      operations:
      - name: initiate
        method: POST
Open in Framework → View in Fleet → cross-border-payment-with-sanctions-screening.yml

Orchestrates model validation governance by retrieving model performance metrics, running validation tests, generating the validation report, and submitting for model risk committee approval.

naftiko: '0.5'
info:
  label: Model Validation Governance Pipeline
  description: Orchestrates model validation governance by retrieving model performance metrics, running validation tests, generating the validation report, and submitting for model risk committee approval.
  tags:
  - model-risk
  - governance
  - machine-learning
capability:
  exposes:
  - type: mcp
    namespace: model-governance
    port: 8080
    tools:
    - name: validate-model
      description: Execute model validation governance workflow.
      inputParameters:
      - name: model_id
        in: body
        type: string
        description: The model ID.
      - name: validation_type
        in: body
        type: string
        description: Validation type (initial, annual, trigger).
      steps:
      - name: get-performance
        type: call
        call: model-platform.get-metrics
        with:
          model_id: '{{model_id}}'
      - name: run-validation
        type: call
        call: model-platform.run-tests
        with:
          model_id: '{{model_id}}'
          validation_type: '{{validation_type}}'
      - name: generate-report
        type: call
        call: model-platform.create-validation-report
        with:
          model_id: '{{model_id}}'
          test_results: '{{run-validation.results_id}}'
          performance_metrics: '{{get-performance.metrics_id}}'
      - name: submit-approval
        type: call
        call: governance-system.submit-for-approval
        with:
          model_id: '{{model_id}}'
          report_id: '{{generate-report.report_id}}'
          committee: Model_Risk_Committee
  consumes:
  - type: http
    namespace: model-platform
    baseUri: https://model-risk.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.model_platform_token
    resources:
    - name: metrics
      path: /models/{{model_id}}/metrics
      inputParameters:
      - name: model_id
        in: path
      operations:
      - name: get-metrics
        method: GET
    - name: tests
      path: /models/{{model_id}}/validate
      inputParameters:
      - name: model_id
        in: path
      operations:
      - name: run-tests
        method: POST
    - name: reports
      path: /reports/create
      operations:
      - name: create-validation-report
        method: POST
  - type: http
    namespace: governance-system
    baseUri: https://governance.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.governance_token
    resources:
    - name: approvals
      path: /approvals/submit
      operations:
      - name: submit-for-approval
        method: POST
Open in Framework → View in Fleet → model-validation-governance-pipeline.yml

On a critical technology incident, creates a P1 incident in ServiceNow, activates the business continuity plan in the BCM system, sends mass notifications to the crisis team via Microsoft Teams, and pages the on-call SRE via PagerDuty.

naftiko: '0.5'
info:
  label: Incident Response and Business Continuity Activation
  description: On a critical technology incident, creates a P1 incident in ServiceNow, activates the business continuity plan in the BCM system, sends mass notifications to the crisis team via Microsoft Teams, and pages the on-call SRE via PagerDuty.
  tags:
  - technology
  - incident-response
  - servicenow
  - microsoft-teams
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: incident-response
    port: 8080
    tools:
    - name: activate-incident-response
      description: Create P1 incident, activate BCP, mass notify crisis team, and page on-call SRE.
      inputParameters:
      - name: incident_summary
        in: body
        type: string
        description: Brief summary of the incident.
      - name: affected_service
        in: body
        type: string
        description: Name of the affected service.
      - name: severity
        in: body
        type: string
        description: Severity level (P1, P2).
      - name: crisis_team_channel
        in: body
        type: string
        description: Microsoft Teams channel ID for the crisis team.
      - name: pagerduty_service_id
        in: body
        type: string
        description: PagerDuty service ID for the affected system.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: '{{severity}}: {{incident_summary}}'
          category: technology_incident
          assigned_group: Global_Technology
          description: 'Affected service: {{affected_service}}. Severity: {{severity}}. Reported at current timestamp.'
          urgency: '1'
      - name: activate-bcp
        type: call
        call: bcm-system.activate
        with:
          service: '{{affected_service}}'
          severity: '{{severity}}'
          incident_ref: '{{create-incident.number}}'
      - name: notify-crisis-team
        type: call
        call: msteams.post-channel
        with:
          channel_id: '{{crisis_team_channel}}'
          text: 'INCIDENT ALERT {{severity}}: {{incident_summary}}. Service: {{affected_service}}. SNOW: {{create-incident.number}}. BCP: {{activate-bcp.planRef}}. War room assembling.'
      - name: page-oncall
        type: call
        call: pagerduty.create-incident
        with:
          service_id: '{{pagerduty_service_id}}'
          title: '{{severity}} — {{incident_summary}}'
          urgency: high
          details: 'ServiceNow: {{create-incident.number}}. BCP activated: {{activate-bcp.planRef}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://jpmorgan.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: bcm-system
    baseUri: https://bcm-system.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.bcm_system_token
    resources:
    - name: activations
      path: /activations
      operations:
      - name: activate
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel
        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
Open in Framework → View in Fleet → incident-response-and-business-continuity-activation.yml

Orchestrates repo trade booking by validating collateral, booking the trade in the OMS, initiating settlement via the custody system, and confirming with the counterparty via messaging.

naftiko: '0.5'
info:
  label: Repo Trade Booking and Settlement Orchestrator
  description: Orchestrates repo trade booking by validating collateral, booking the trade in the OMS, initiating settlement via the custody system, and confirming with the counterparty via messaging.
  tags:
  - trading
  - fixed-income
  - repo
  - settlement
capability:
  exposes:
  - type: mcp
    namespace: repo-trading
    port: 8080
    tools:
    - name: book-repo-trade
      description: Book and settle a repo trade.
      inputParameters:
      - name: security_id
        in: body
        type: string
        description: The collateral security ISIN.
      - name: notional
        in: body
        type: string
        description: The repo notional amount.
      - name: counterparty_id
        in: body
        type: string
        description: The counterparty ID.
      - name: repo_rate
        in: body
        type: string
        description: The repo rate.
      steps:
      - name: validate-collateral
        type: call
        call: collateral-mgmt.validate
        with:
          security_id: '{{security_id}}'
          notional: '{{notional}}'
      - name: book-trade
        type: call
        call: oms.book-repo
        with:
          security_id: '{{security_id}}'
          notional: '{{notional}}'
          counterparty_id: '{{counterparty_id}}'
          rate: '{{repo_rate}}'
          haircut: '{{validate-collateral.haircut}}'
      - name: initiate-settlement
        type: call
        call: custody.settle-repo
        with:
          trade_ref: '{{book-trade.tradeRef}}'
          security_id: '{{security_id}}'
      - name: confirm-counterparty
        type: call
        call: messaging.send-confirmation
        with:
          counterparty_id: '{{counterparty_id}}'
          message: 'Repo booked: {{book-trade.tradeRef}}. Collateral: {{security_id}}. Notional: {{notional}}. Rate: {{repo_rate}}. Settlement: {{initiate-settlement.settlement_date}}.'
  consumes:
  - type: http
    namespace: collateral-mgmt
    baseUri: https://collateral.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.collateral_token
    resources:
    - name: validation
      path: /validate
      operations:
      - name: validate
        method: POST
  - type: http
    namespace: oms
    baseUri: https://oms.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.oms_token
    resources:
    - name: repos
      path: /repos
      operations:
      - name: book-repo
        method: POST
  - type: http
    namespace: custody
    baseUri: https://custody.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.custody_token
    resources:
    - name: settlement
      path: /settle
      operations:
      - name: settle-repo
        method: POST
  - type: http
    namespace: messaging
    baseUri: https://client-messaging.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.messaging_token
    resources:
    - name: confirmations
      path: /confirmations
      operations:
      - name: send-confirmation
        method: POST
Open in Framework → View in Fleet → repo-trade-booking-and-settlement-orchestrator.yml

Orchestrates consumer checking account opening by verifying identity, running ChexSystems screening, creating the account in the core banking system, and ordering a debit card via the card platform.

naftiko: '0.5'
info:
  label: Consumer Account Opening Orchestrator
  description: Orchestrates consumer checking account opening by verifying identity, running ChexSystems screening, creating the account in the core banking system, and ordering a debit card via the card platform.
  tags:
  - consumer-banking
  - onboarding
  - accounts
capability:
  exposes:
  - type: mcp
    namespace: consumer-account-opening
    port: 8080
    tools:
    - name: open-checking-account
      description: Open a consumer checking account.
      inputParameters:
      - name: customer_name
        in: body
        type: string
        description: The customer full name.
      - name: ssn_last4
        in: body
        type: string
        description: Last 4 of SSN.
      - name: address
        in: body
        type: string
        description: Customer address.
      steps:
      - name: verify-identity
        type: call
        call: identity-service.verify
        with:
          name: '{{customer_name}}'
          ssn_last4: '{{ssn_last4}}'
      - name: screen-chexsystems
        type: call
        call: chexsystems.screen
        with:
          customer_id: '{{verify-identity.customer_id}}'
      - name: create-account
        type: call
        call: core-banking.create-account
        with:
          customer_id: '{{verify-identity.customer_id}}'
          product_type: checking
          address: '{{address}}'
      - name: order-card
        type: call
        call: card-platform.order-debit-card
        with:
          account_id: '{{create-account.account_id}}'
          customer_name: '{{customer_name}}'
          address: '{{address}}'
  consumes:
  - type: http
    namespace: identity-service
    baseUri: https://identity.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.identity_token
    resources:
    - name: verification
      path: /verify
      operations:
      - name: verify
        method: POST
  - type: http
    namespace: chexsystems
    baseUri: https://chexsystems.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.chexsystems_token
    resources:
    - name: screening
      path: /screen
      operations:
      - name: screen
        method: POST
  - type: http
    namespace: core-banking
    baseUri: https://core-banking.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
  - type: http
    namespace: card-platform
    baseUri: https://card-services.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.card_platform_token
    resources:
    - name: cards
      path: /debit-cards/order
      operations:
      - name: order-debit-card
        method: POST
Open in Framework → View in Fleet → consumer-account-opening-orchestrator.yml

Screens a portfolio for ESG compliance by fetching holdings, retrieving ESG scores from the data provider, identifying exclusions against the client's ESG policy, and generating a compliance report in SharePoint.

naftiko: '0.5'
info:
  label: ESG Portfolio Screening and Reporting
  description: Screens a portfolio for ESG compliance by fetching holdings, retrieving ESG scores from the data provider, identifying exclusions against the client's ESG policy, and generating a compliance report in SharePoint.
  tags:
  - wealth-management
  - esg
  - portfolio
  - compliance
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: esg-screening
    port: 8080
    tools:
    - name: screen-esg-compliance
      description: Fetch holdings, score ESG, identify policy violations, and generate report.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The portfolio identifier.
      - name: esg_policy_id
        in: body
        type: string
        description: The client ESG policy identifier.
      steps:
      - name: get-holdings
        type: call
        call: portfolio-svc.get-positions
        with:
          portfolio_id: '{{portfolio_id}}'
      - name: get-esg-scores
        type: call
        call: esg-provider.get-scores
        with:
          isins: '{{get-holdings.isinList}}'
      - name: apply-policy
        type: call
        call: esg-engine.screen
        with:
          policy_id: '{{esg_policy_id}}'
          holdings: '{{get-holdings.positions}}'
          scores: '{{get-esg-scores.scores}}'
      - name: generate-report
        type: call
        call: sharepoint.create-document
        with:
          site_id: esg_reporting_site
          folder_path: ESG_Reports/{{portfolio_id}}
          document_name: ESG_Screening_Report.xlsx
          violations: '{{apply-policy.violations}}'
          overall_score: '{{apply-policy.portfolioScore}}'
  consumes:
  - type: http
    namespace: portfolio-svc
    baseUri: https://portfolio-api.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.portfolio_api_token
    resources:
    - name: positions
      path: /portfolios/{{portfolio_id}}/positions
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: get-positions
        method: GET
  - type: http
    namespace: esg-provider
    baseUri: https://esg-data.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.esg_provider_token
    resources:
    - name: scores
      path: /scores
      operations:
      - name: get-scores
        method: POST
  - type: http
    namespace: esg-engine
    baseUri: https://esg-engine.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.esg_engine_token
    resources:
    - name: screening
      path: /screen
      operations:
      - name: screen
        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}}/{{document_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: document_name
        in: path
      operations:
      - name: create-document
        method: PUT
Open in Framework → View in Fleet → esg-portfolio-screening-and-reporting.yml

For a wealth management client, retrieves current portfolio positions, fetches the target model allocation, calculates rebalance trades, and submits them to the OMS. Notifies the advisor via Salesforce task.

naftiko: '0.5'
info:
  label: Wealth Client Portfolio Rebalance
  description: For a wealth management client, retrieves current portfolio positions, fetches the target model allocation, calculates rebalance trades, and submits them to the OMS. Notifies the advisor via Salesforce task.
  tags:
  - wealth-management
  - portfolio
  - rebalance
  - oms
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: wealth-rebalance
    port: 8080
    tools:
    - name: rebalance-portfolio
      description: Retrieve portfolio positions, compare to model, generate and submit rebalance trades, and notify the advisor.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The managed portfolio identifier.
      - name: model_id
        in: body
        type: string
        description: The target allocation model ID.
      - name: advisor_email
        in: body
        type: string
        description: Email address of the wealth advisor.
      steps:
      - name: get-positions
        type: call
        call: portfolio-svc.get-positions
        with:
          portfolio_id: '{{portfolio_id}}'
      - name: get-model
        type: call
        call: portfolio-svc.get-model
        with:
          model_id: '{{model_id}}'
      - name: generate-trades
        type: call
        call: rebalance-engine.calculate
        with:
          portfolio_id: '{{portfolio_id}}'
          current_positions: '{{get-positions.positions}}'
          target_model: '{{get-model.allocations}}'
      - name: submit-trades
        type: call
        call: oms.submit-basket
        with:
          portfolio_id: '{{portfolio_id}}'
          trades: '{{generate-trades.tradeList}}'
      - name: notify-advisor
        type: call
        call: salesforce.create-task
        with:
          subject: 'Rebalance completed: Portfolio {{portfolio_id}}'
          description: '{{generate-trades.tradeCount}} trades submitted. Basket ref: {{submit-trades.basketRef}}. Model: {{model_id}}.'
          owner_email: '{{advisor_email}}'
  consumes:
  - type: http
    namespace: portfolio-svc
    baseUri: https://portfolio-api.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.portfolio_api_token
    resources:
    - name: positions
      path: /portfolios/{{portfolio_id}}/positions
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: get-positions
        method: GET
    - name: models
      path: /models/{{model_id}}
      inputParameters:
      - name: model_id
        in: path
      operations:
      - name: get-model
        method: GET
  - type: http
    namespace: rebalance-engine
    baseUri: https://rebalance-engine.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.rebalance_engine_token
    resources:
    - name: calculations
      path: /calculate
      operations:
      - name: calculate
        method: POST
  - type: http
    namespace: oms
    baseUri: https://oms.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.oms_token
    resources:
    - name: baskets
      path: /baskets
      operations:
      - name: submit-basket
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://jpmorgan.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: tasks
      path: /sobjects/Task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → wealth-client-portfolio-rebalance.yml

Monitors commercial loan covenant compliance, returning covenant type, current ratio, threshold, and compliance status for each active covenant.

naftiko: '0.5'
info:
  label: Commercial Loan Covenant Monitor
  description: Monitors commercial loan covenant compliance, returning covenant type, current ratio, threshold, and compliance status for each active covenant.
  tags:
  - lending
  - commercial-banking
  - risk
capability:
  exposes:
  - type: mcp
    namespace: covenant-monitoring
    port: 8080
    tools:
    - name: check-covenants
      description: Check covenant compliance for a commercial loan.
      inputParameters:
      - name: facility_id
        in: body
        type: string
        description: The lending facility ID.
      call: lending.get-covenants
      with:
        facility_id: '{{facility_id}}'
      outputParameters:
      - name: covenant_count
        type: number
        mapping: $.covenants.length
      - name: breaches
        type: number
        mapping: $.covenants.breachCount
      - name: next_test_date
        type: string
        mapping: $.covenants.nextTestDate
  consumes:
  - type: http
    namespace: lending
    baseUri: https://lending-platform.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lending_token
    resources:
    - name: covenants
      path: /facilities/{{facility_id}}/covenants
      inputParameters:
      - name: facility_id
        in: path
      operations:
      - name: get-covenants
        method: GET
Open in Framework → View in Fleet → commercial-loan-covenant-monitor.yml

Retrieves merchant payment processing transaction details, returning transaction amount, card type, authorization code, and settlement status.

naftiko: '0.5'
info:
  label: Merchant Services Transaction Lookup
  description: Retrieves merchant payment processing transaction details, returning transaction amount, card type, authorization code, and settlement status.
  tags:
  - payments
  - merchant-services
capability:
  exposes:
  - type: mcp
    namespace: merchant-transactions
    port: 8080
    tools:
    - name: get-merchant-tx
      description: Look up a merchant services transaction.
      inputParameters:
      - name: transaction_id
        in: body
        type: string
        description: The transaction ID.
      call: merchant.get-transaction
      with:
        transaction_id: '{{transaction_id}}'
      outputParameters:
      - name: amount
        type: string
        mapping: $.transaction.amount
      - name: card_type
        type: string
        mapping: $.transaction.cardType
      - name: auth_code
        type: string
        mapping: $.transaction.authorizationCode
      - name: settlement_status
        type: string
        mapping: $.transaction.settlementStatus
  consumes:
  - type: http
    namespace: merchant
    baseUri: https://merchant-services.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.merchant_token
    resources:
    - name: transactions
      path: /transactions/{{transaction_id}}
      inputParameters:
      - name: transaction_id
        in: path
      operations:
      - name: get-transaction
        method: GET
Open in Framework → View in Fleet → merchant-services-transaction-lookup.yml

Queries the SWIFT gpi tracker for a cross-border payment by UETR. Returns current status, creditor agent, and settlement date. Used by treasury operations to trace international wire transfers.

naftiko: '0.5'
info:
  label: SWIFT Payment Status Lookup
  description: Queries the SWIFT gpi tracker for a cross-border payment by UETR. Returns current status, creditor agent, and settlement date. Used by treasury operations to trace international wire transfers.
  tags:
  - payments
  - swift
  - treasury
capability:
  exposes:
  - type: mcp
    namespace: payments-swift
    port: 8080
    tools:
    - name: get-payment-status
      description: Track a SWIFT gpi payment by UETR. Returns transaction status, last update, creditor agent BIC, and settlement date.
      inputParameters:
      - name: uetr
        in: body
        type: string
        description: The Unique End-to-End Transaction Reference for the SWIFT payment.
      call: swift.get-payment-tracking
      with:
        uetr: '{{uetr}}'
      outputParameters:
      - name: transaction_status
        type: string
        mapping: $.payment_event.tracker_status
      - name: creditor_agent_bic
        type: string
        mapping: $.payment_event.creditor_agent
      - name: settlement_date
        type: string
        mapping: $.payment_event.settlement_date
      - name: last_update
        type: string
        mapping: $.payment_event.last_update_time
  consumes:
  - type: http
    namespace: swift
    baseUri: https://api.swiftnet.sipn.swift.com/swift-apitracker/v4
    authentication:
      type: bearer
      token: $secrets.swift_gpi_token
    resources:
    - name: payments
      path: /payments/{{uetr}}/transactions
      inputParameters:
      - name: uetr
        in: path
      operations:
      - name: get-payment-tracking
        method: GET
Open in Framework → View in Fleet → swift-payment-status-lookup.yml

Fetches end-of-day P&L from the trading book, retrieves VaR limits, and if P&L exceeds VaR threshold, creates a risk breach incident in ServiceNow and notifies the desk head via Microsoft Teams.

naftiko: '0.5'
info:
  label: Daily P&L Report with Risk Breach Alerting
  description: Fetches end-of-day P&L from the trading book, retrieves VaR limits, and if P&L exceeds VaR threshold, creates a risk breach incident in ServiceNow and notifies the desk head via Microsoft Teams.
  tags:
  - trading
  - risk
  - market-risk
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: daily-pnl-risk
    port: 8080
    tools:
    - name: check-pnl-breach
      description: Retrieve daily P&L for a trading book, compare against VaR limits, and escalate if breached.
      inputParameters:
      - name: book_id
        in: body
        type: string
        description: The trading book identifier.
      - name: trade_date
        in: body
        type: string
        description: The trade date in YYYY-MM-DD format.
      - name: desk_head_email
        in: body
        type: string
        description: Email of the desk head for escalation.
      steps:
      - name: get-pnl
        type: call
        call: pnl-service.get-daily-pnl
        with:
          book_id: '{{book_id}}'
          trade_date: '{{trade_date}}'
      - name: get-var-limits
        type: call
        call: risk-engine.get-var
        with:
          book_id: '{{book_id}}'
      - name: create-breach-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'VaR breach: Book {{book_id}} P&L {{get-pnl.dailyPnl}} exceeds VaR-99 {{get-var-limits.confidence99}}'
          category: risk_breach
          assigned_group: Market_Risk
          description: Trading book {{book_id}} reported daily P&L of {{get-pnl.dailyPnl}} on {{trade_date}}, exceeding VaR-99 limit of {{get-var-limits.confidence99}}.
      - name: notify-desk-head
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{desk_head_email}}'
          text: 'RISK ALERT: Book {{book_id}} daily P&L ({{get-pnl.dailyPnl}}) breached VaR-99 ({{get-var-limits.confidence99}}) on {{trade_date}}. Incident: {{create-breach-incident.number}}.'
  consumes:
  - type: http
    namespace: pnl-service
    baseUri: https://pnl-service.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.pnl_service_token
    resources:
    - name: daily-pnl
      path: /books/{{book_id}}/pnl/{{trade_date}}
      inputParameters:
      - name: book_id
        in: path
      - name: trade_date
        in: path
      operations:
      - name: get-daily-pnl
        method: GET
  - type: http
    namespace: risk-engine
    baseUri: https://risk-engine.jpmorgan.com/api/v3
    authentication:
      type: bearer
      token: $secrets.risk_engine_token
    resources:
    - name: var
      path: /books/{{book_id}}/var
      inputParameters:
      - name: book_id
        in: path
      operations:
      - name: get-var
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://jpmorgan.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → daily-p-l-report-with-risk-breach-alerting.yml

Orchestrates a commercial loan from credit check through facility creation: pulls the counterparty credit score, screens against sanctions, creates the loan facility, and logs the deal in Salesforce.

naftiko: '0.5'
info:
  label: Commercial Loan Origination Pipeline
  description: 'Orchestrates a commercial loan from credit check through facility creation: pulls the counterparty credit score, screens against sanctions, creates the loan facility, and logs the deal in Salesforce.'
  tags:
  - commercial-banking
  - lending
  - risk
  - credit
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: loan-origination
    port: 8080
    tools:
    - name: originate-loan
      description: Run credit check, sanctions screen, create loan facility, and log in CRM.
      inputParameters:
      - name: borrower_lei
        in: body
        type: string
        description: LEI of the borrowing entity.
      - name: borrower_name
        in: body
        type: string
        description: Legal name of the borrower.
      - name: country_code
        in: body
        type: string
        description: Borrower domicile country code.
      - name: facility_amount
        in: body
        type: number
        description: Requested facility commitment amount.
      - name: maturity_years
        in: body
        type: number
        description: Facility tenor in years.
      - name: rm_email
        in: body
        type: string
        description: Relationship manager email.
      steps:
      - name: credit-check
        type: call
        call: risk-engine.get-credit-profile
        with:
          lei: '{{borrower_lei}}'
      - name: sanctions-screen
        type: call
        call: sanctions-svc.screen
        with:
          party_name: '{{borrower_name}}'
          country_code: '{{country_code}}'
      - name: create-facility
        type: call
        call: loan-system.create-facility
        with:
          borrower_lei: '{{borrower_lei}}'
          commitment_amount: '{{facility_amount}}'
          maturity_years: '{{maturity_years}}'
          internal_rating: '{{credit-check.internalRating}}'
      - name: log-deal
        type: call
        call: salesforce.create-opportunity
        with:
          name: 'Loan facility: {{borrower_name}} — ${{facility_amount}}'
          stage: Closed Won
          amount: '{{facility_amount}}'
          description: 'Facility {{create-facility.facilityId}} created. Rating: {{credit-check.internalRating}}. PD: {{credit-check.probabilityOfDefault}}. Sanctions score: {{sanctions-screen.highestMatchScore}}.'
          owner_email: '{{rm_email}}'
  consumes:
  - type: http
    namespace: risk-engine
    baseUri: https://risk-engine.jpmorgan.com/api/v3
    authentication:
      type: bearer
      token: $secrets.risk_engine_token
    resources:
    - name: credit-profiles
      path: /counterparties/{{lei}}/credit-profile
      inputParameters:
      - name: lei
        in: path
      operations:
      - name: get-credit-profile
        method: GET
  - type: http
    namespace: sanctions-svc
    baseUri: https://sanctions-screening.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.sanctions_svc_token
    resources:
    - name: screenings
      path: /screen
      operations:
      - name: screen
        method: POST
  - type: http
    namespace: loan-system
    baseUri: https://loan-origination.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.loan_system_token
    resources:
    - name: facilities
      path: /facilities
      operations:
      - name: create-facility
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://jpmorgan.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
Open in Framework → View in Fleet → commercial-loan-origination-pipeline.yml

Retrieves ETF creation/redemption basket details for authorized participant operations, returning basket composition, NAV, premium/discount, and creation unit size.

naftiko: '0.5'
info:
  label: ETF Authorized Participant Creation
  description: Retrieves ETF creation/redemption basket details for authorized participant operations, returning basket composition, NAV, premium/discount, and creation unit size.
  tags:
  - asset-management
  - etf
capability:
  exposes:
  - type: mcp
    namespace: etf-operations
    port: 8080
    tools:
    - name: get-creation-basket
      description: Retrieve ETF creation basket details.
      inputParameters:
      - name: fund_ticker
        in: body
        type: string
        description: The ETF ticker symbol.
      call: etf-platform.get-basket
      with:
        fund_ticker: '{{fund_ticker}}'
      outputParameters:
      - name: nav
        type: string
        mapping: $.basket.nav
      - name: premium_discount
        type: string
        mapping: $.basket.premiumDiscount
      - name: creation_unit_size
        type: number
        mapping: $.basket.creationUnitSize
      - name: component_count
        type: number
        mapping: $.basket.componentCount
  consumes:
  - type: http
    namespace: etf-platform
    baseUri: https://etf-services.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.etf_platform_token
    resources:
    - name: baskets
      path: /funds/{{fund_ticker}}/creation-basket
      inputParameters:
      - name: fund_ticker
        in: path
      operations:
      - name: get-basket
        method: GET
Open in Framework → View in Fleet → etf-authorized-participant-creation.yml

Retrieves securities clearing and settlement status from the post-trade platform, returning clearing status, settlement instruction status, and matched/unmatched indicator.

naftiko: '0.5'
info:
  label: Securities Clearing Status Lookup
  description: Retrieves securities clearing and settlement status from the post-trade platform, returning clearing status, settlement instruction status, and matched/unmatched indicator.
  tags:
  - operations
  - clearing
  - settlement
capability:
  exposes:
  - type: mcp
    namespace: securities-clearing
    port: 8080
    tools:
    - name: get-clearing-status
      description: Look up securities clearing status.
      inputParameters:
      - name: trade_ref
        in: body
        type: string
        description: The trade reference.
      call: post-trade.get-clearing
      with:
        trade_ref: '{{trade_ref}}'
      outputParameters:
      - name: clearing_status
        type: string
        mapping: $.clearing.status
      - name: settlement_instruction
        type: string
        mapping: $.clearing.settlementInstruction
      - name: matched
        type: string
        mapping: $.clearing.matchStatus
      - name: settlement_date
        type: string
        mapping: $.clearing.settlementDate
  consumes:
  - type: http
    namespace: post-trade
    baseUri: https://post-trade.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.post_trade_token
    resources:
    - name: clearing
      path: /clearing/{{trade_ref}}
      inputParameters:
      - name: trade_ref
        in: path
      operations:
      - name: get-clearing
        method: GET
Open in Framework → View in Fleet → securities-clearing-status-lookup.yml

Retrieves consumer savings account details from the core banking system, returning current balance, APY, interest earned YTD, and account status.

naftiko: '0.5'
info:
  label: Consumer Savings Account Lookup
  description: Retrieves consumer savings account details from the core banking system, returning current balance, APY, interest earned YTD, and account status.
  tags:
  - consumer-banking
  - savings
  - accounts
capability:
  exposes:
  - type: mcp
    namespace: consumer-savings
    port: 8080
    tools:
    - name: get-savings-account
      description: Look up a consumer savings account.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The savings account ID.
      call: core-banking.get-savings
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: balance
        type: string
        mapping: $.account.currentBalance
      - name: apy
        type: string
        mapping: $.account.apy
      - name: interest_ytd
        type: string
        mapping: $.account.interestEarnedYTD
      - name: status
        type: string
        mapping: $.account.status
  consumes:
  - type: http
    namespace: core-banking
    baseUri: https://core-banking.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: savings
      path: /savings/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-savings
        method: GET
Open in Framework → View in Fleet → consumer-savings-account-lookup.yml

Retrieves Value-at-Risk calculation results from the risk engine, returning 1-day VaR, 10-day VaR, and stressed VaR by trading desk.

naftiko: '0.5'
info:
  label: Market Risk VaR Calculation
  description: Retrieves Value-at-Risk calculation results from the risk engine, returning 1-day VaR, 10-day VaR, and stressed VaR by trading desk.
  tags:
  - risk
  - market-risk
capability:
  exposes:
  - type: mcp
    namespace: market-risk-var
    port: 8080
    tools:
    - name: get-var
      description: Retrieve VaR calculation for a trading desk.
      inputParameters:
      - name: desk_id
        in: body
        type: string
        description: The trading desk ID.
      - name: date
        in: body
        type: string
        description: The calculation date.
      call: risk-engine.get-var
      with:
        desk_id: '{{desk_id}}'
        date: '{{date}}'
      outputParameters:
      - name: var_1d
        type: string
        mapping: $.var.oneDay99
      - name: var_10d
        type: string
        mapping: $.var.tenDay99
      - name: stressed_var
        type: string
        mapping: $.var.stressedVaR
  consumes:
  - type: http
    namespace: risk-engine
    baseUri: https://risk-engine.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.risk_engine_token
    resources:
    - name: var
      path: /var/desks/{{desk_id}}?date={{date}}
      inputParameters:
      - name: desk_id
        in: path
      - name: date
        in: query
      operations:
      - name: get-var
        method: GET
Open in Framework → View in Fleet → market-risk-var-calculation.yml

Retrieves FX forward rates from the market data service, returning outright rate, forward points, and swap points for a given currency pair and tenor.

naftiko: '0.5'
info:
  label: FX Forward Rate Lookup
  description: Retrieves FX forward rates from the market data service, returning outright rate, forward points, and swap points for a given currency pair and tenor.
  tags:
  - fx
  - market-data
  - trading
capability:
  exposes:
  - type: mcp
    namespace: fx-forwards
    port: 8080
    tools:
    - name: get-forward-rate
      description: Look up FX forward rate for a currency pair.
      inputParameters:
      - name: ccy_pair
        in: body
        type: string
        description: The currency pair (e.g. EURUSD).
      - name: tenor
        in: body
        type: string
        description: The forward tenor (1M, 3M, 6M, 1Y).
      call: market-data.get-fx-forward
      with:
        ccy_pair: '{{ccy_pair}}'
        tenor: '{{tenor}}'
      outputParameters:
      - name: outright_rate
        type: string
        mapping: $.data.outrightRate
      - name: forward_points
        type: string
        mapping: $.data.forwardPoints
      - name: spot_rate
        type: string
        mapping: $.data.spotRate
  consumes:
  - type: http
    namespace: market-data
    baseUri: https://market-data.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.market_data_token
    resources:
    - name: fx-forwards
      path: /fx/forwards?pair={{ccy_pair}}&tenor={{tenor}}
      inputParameters:
      - name: ccy_pair
        in: query
      - name: tenor
        in: query
      operations:
      - name: get-fx-forward
        method: GET
Open in Framework → View in Fleet → fx-forward-rate-lookup.yml

Executes a derivatives pricing calculation in the Athena risk platform for a given trade ID. Returns mark-to-market value, Greeks, and model timestamp. Used by derivatives traders and quantitative analysts.

naftiko: '0.5'
info:
  label: Athena Pricing Model Execution
  description: Executes a derivatives pricing calculation in the Athena risk platform for a given trade ID. Returns mark-to-market value, Greeks, and model timestamp. Used by derivatives traders and quantitative analysts.
  tags:
  - trading
  - derivatives
  - athena
  - pricing
capability:
  exposes:
  - type: mcp
    namespace: athena-pricing
    port: 8080
    tools:
    - name: price-trade
      description: Run a pricing calculation for a derivatives trade in Athena by trade ID. Returns MTM, delta, gamma, vega, and model timestamp.
      inputParameters:
      - name: trade_id
        in: body
        type: string
        description: The Athena trade identifier.
      call: athena.price-trade
      with:
        trade_id: '{{trade_id}}'
      outputParameters:
      - name: mtm_value
        type: number
        mapping: $.pricing.mtm
      - name: delta
        type: number
        mapping: $.pricing.delta
      - name: gamma
        type: number
        mapping: $.pricing.gamma
      - name: vega
        type: number
        mapping: $.pricing.vega
      - name: model_timestamp
        type: string
        mapping: $.pricing.timestamp
  consumes:
  - type: http
    namespace: athena
    baseUri: https://athena.jpmorgan.com/api/v3
    authentication:
      type: bearer
      token: $secrets.athena_token
    resources:
    - name: pricing
      path: /trades/{{trade_id}}/price
      inputParameters:
      - name: trade_id
        in: path
      operations:
      - name: price-trade
        method: POST
Open in Framework → View in Fleet → athena-pricing-model-execution.yml

Retrieves treasury services balance reporting for corporate clients, returning opening balance, closing balance, available balance, and float for cash management.

naftiko: '0.5'
info:
  label: Treasury Services Balance Reporting
  description: Retrieves treasury services balance reporting for corporate clients, returning opening balance, closing balance, available balance, and float for cash management.
  tags:
  - treasury-services
  - commercial-banking
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: ts-balance-reporting
    port: 8080
    tools:
    - name: get-balance-report
      description: Retrieve treasury services balance report.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The treasury services account ID.
      - name: report_date
        in: body
        type: string
        description: The report date.
      call: ts-platform.get-balances
      with:
        account_id: '{{account_id}}'
        report_date: '{{report_date}}'
      outputParameters:
      - name: opening_balance
        type: string
        mapping: $.balances.openingBalance
      - name: closing_balance
        type: string
        mapping: $.balances.closingBalance
      - name: available_balance
        type: string
        mapping: $.balances.availableBalance
      - name: float
        type: string
        mapping: $.balances.float
  consumes:
  - type: http
    namespace: ts-platform
    baseUri: https://treasury-services.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.ts_platform_token
    resources:
    - name: balances
      path: /accounts/{{account_id}}/balances?date={{report_date}}
      inputParameters:
      - name: account_id
        in: path
      - name: report_date
        in: query
      operations:
      - name: get-balances
        method: GET
Open in Framework → View in Fleet → treasury-services-balance-reporting.yml

Reconciles payment clearing by extracting settled payments from the payment hub, matching against the general ledger, identifying breaks, and creating resolution tasks in the operations system.

naftiko: '0.5'
info:
  label: Payment Clearing Reconciliation Pipeline
  description: Reconciles payment clearing by extracting settled payments from the payment hub, matching against the general ledger, identifying breaks, and creating resolution tasks in the operations system.
  tags:
  - operations
  - payments
  - reconciliation
capability:
  exposes:
  - type: mcp
    namespace: clearing-recon
    port: 8080
    tools:
    - name: reconcile-clearing
      description: Reconcile payment clearing for a business date.
      inputParameters:
      - name: business_date
        in: body
        type: string
        description: The business date.
      - name: payment_type
        in: body
        type: string
        description: Payment type (ACH, wire, SWIFT).
      steps:
      - name: extract-settlements
        type: call
        call: payment-hub.get-settled
        with:
          date: '{{business_date}}'
          type: '{{payment_type}}'
      - name: match-gl
        type: call
        call: gl-system.match-entries
        with:
          date: '{{business_date}}'
          settlement_count: '{{extract-settlements.count}}'
      - name: identify-breaks
        type: call
        call: recon-engine.find-breaks
        with:
          matched: '{{match-gl.matched_count}}'
          total: '{{extract-settlements.count}}'
      - name: create-tasks
        type: call
        call: ops-system.create-recon-tasks
        with:
          break_count: '{{identify-breaks.break_count}}'
          total_break_amount: '{{identify-breaks.total_amount}}'
          business_date: '{{business_date}}'
  consumes:
  - type: http
    namespace: payment-hub
    baseUri: https://payment-hub.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.payment_hub_token
    resources:
    - name: settlements
      path: /settlements
      operations:
      - name: get-settled
        method: GET
  - type: http
    namespace: gl-system
    baseUri: https://general-ledger.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.gl_token
    resources:
    - name: matching
      path: /match
      operations:
      - name: match-entries
        method: POST
  - type: http
    namespace: recon-engine
    baseUri: https://reconciliation.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.recon_token
    resources:
    - name: breaks
      path: /breaks/identify
      operations:
      - name: find-breaks
        method: POST
  - type: http
    namespace: ops-system
    baseUri: https://operations.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: tasks
      path: /tasks/reconciliation
      operations:
      - name: create-recon-tasks
        method: POST
Open in Framework → View in Fleet → payment-clearing-reconciliation-pipeline.yml

Before executing a real-time payment, scores the transaction through the fraud detection engine, screens the payee, and then submits via the RTP network. Blocks and escalates if fraud score is high.

naftiko: '0.5'
info:
  label: Real-Time Payments with Fraud Detection
  description: Before executing a real-time payment, scores the transaction through the fraud detection engine, screens the payee, and then submits via the RTP network. Blocks and escalates if fraud score is high.
  tags:
  - payments
  - rtp
  - fraud
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: rtp-payments
    port: 8080
    tools:
    - name: send-rtp-payment
      description: Score for fraud, screen payee, and submit a real-time payment.
      inputParameters:
      - name: payer_account
        in: body
        type: string
        description: Payer account number.
      - name: payee_name
        in: body
        type: string
        description: Full name of the payee.
      - name: payee_account
        in: body
        type: string
        description: Payee account or routing number.
      - name: amount
        in: body
        type: number
        description: Payment amount in USD.
      - name: memo
        in: body
        type: string
        description: Payment memo or reference.
      steps:
      - name: fraud-score
        type: call
        call: fraud-engine.score
        with:
          payer_account: '{{payer_account}}'
          payee_account: '{{payee_account}}'
          amount: '{{amount}}'
      - name: screen-payee
        type: call
        call: sanctions-svc.screen
        with:
          party_name: '{{payee_name}}'
          country_code: US
      - name: submit-rtp
        type: call
        call: rtp-network.submit
        with:
          payer_account: '{{payer_account}}'
          payee_account: '{{payee_account}}'
          payee_name: '{{payee_name}}'
          amount: '{{amount}}'
          memo: '{{memo}}'
          fraud_score: '{{fraud-score.score}}'
  consumes:
  - type: http
    namespace: fraud-engine
    baseUri: https://fraud-engine.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.fraud_engine_token
    resources:
    - name: scoring
      path: /score
      operations:
      - name: score
        method: POST
  - type: http
    namespace: sanctions-svc
    baseUri: https://sanctions-screening.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.sanctions_svc_token
    resources:
    - name: screenings
      path: /screen
      operations:
      - name: screen
        method: POST
  - type: http
    namespace: rtp-network
    baseUri: https://rtp-gateway.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.rtp_gateway_token
    resources:
    - name: payments
      path: /payments
      operations:
      - name: submit
        method: POST
Open in Framework → View in Fleet → real-time-payments-with-fraud-detection.yml

Books a new interest rate swap in the derivatives platform, prices it via Athena, registers the trade with the DTCC trade repository, and sends an electronic confirmation to the counterparty.

naftiko: '0.5'
info:
  label: Interest Rate Swap Booking and Confirmation
  description: Books a new interest rate swap in the derivatives platform, prices it via Athena, registers the trade with the DTCC trade repository, and sends an electronic confirmation to the counterparty.
  tags:
  - trading
  - derivatives
  - athena
  - dtcc
  - confirmation
capability:
  exposes:
  - type: mcp
    namespace: irs-booking
    port: 8080
    tools:
    - name: book-irs
      description: Book an IRS, price in Athena, report to DTCC, and send electronic confirmation.
      inputParameters:
      - name: counterparty_lei
        in: body
        type: string
        description: LEI of the swap counterparty.
      - name: notional
        in: body
        type: number
        description: Notional amount.
      - name: currency
        in: body
        type: string
        description: Notional currency.
      - name: fixed_rate
        in: body
        type: number
        description: Fixed leg rate.
      - name: tenor
        in: body
        type: string
        description: Swap tenor (e.g., 5Y, 10Y).
      - name: client_id
        in: body
        type: string
        description: Client account identifier.
      steps:
      - name: book-trade
        type: call
        call: derivatives-platform.book-irs
        with:
          counterparty_lei: '{{counterparty_lei}}'
          notional: '{{notional}}'
          currency: '{{currency}}'
          fixed_rate: '{{fixed_rate}}'
          tenor: '{{tenor}}'
      - name: price-trade
        type: call
        call: athena.price-trade
        with:
          trade_id: '{{book-trade.tradeId}}'
      - name: report-dtcc
        type: call
        call: dtcc-gateway.report-trade
        with:
          trade_id: '{{book-trade.tradeId}}'
          product_type: IRS
          notional: '{{notional}}'
          currency: '{{currency}}'
          counterparty_lei: '{{counterparty_lei}}'
      - name: send-confirmation
        type: call
        call: messaging.send-confirmation
        with:
          client_id: '{{client_id}}'
          message: 'IRS booked: {{notional}} {{currency}} {{tenor}} at {{fixed_rate}}% fixed. MTM: {{price-trade.mtm}}. Trade ref: {{book-trade.tradeId}}. DTCC UTI: {{report-dtcc.uti}}.'
  consumes:
  - type: http
    namespace: derivatives-platform
    baseUri: https://derivatives-platform.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.derivatives_platform_token
    resources:
    - name: irs
      path: /irs
      operations:
      - name: book-irs
        method: POST
  - type: http
    namespace: athena
    baseUri: https://athena.jpmorgan.com/api/v3
    authentication:
      type: bearer
      token: $secrets.athena_token
    resources:
    - name: pricing
      path: /trades/{{trade_id}}/price
      inputParameters:
      - name: trade_id
        in: path
      operations:
      - name: price-trade
        method: POST
  - type: http
    namespace: dtcc-gateway
    baseUri: https://dtcc-gateway.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dtcc_gateway_token
    resources:
    - name: trade-reports
      path: /reports
      operations:
      - name: report-trade
        method: POST
  - type: http
    namespace: messaging
    baseUri: https://client-messaging.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.messaging_token
    resources:
    - name: confirmations
      path: /confirmations
      operations:
      - name: send-confirmation
        method: POST
Open in Framework → View in Fleet → interest-rate-swap-booking-and-confirmation.yml

Screens a party name against OFAC, EU, and UN sanctions lists via the sanctions screening service. Returns match score, list source, and screening timestamp. Used by compliance for transaction and onboarding screening.

naftiko: '0.5'
info:
  label: Sanctions Screening Check
  description: Screens a party name against OFAC, EU, and UN sanctions lists via the sanctions screening service. Returns match score, list source, and screening timestamp. Used by compliance for transaction and onboarding screening.
  tags:
  - compliance
  - sanctions
  - aml
capability:
  exposes:
  - type: mcp
    namespace: compliance-sanctions
    port: 8080
    tools:
    - name: screen-party
      description: Screen a party name against global sanctions lists. Returns match score, matched list, and screening timestamp.
      inputParameters:
      - name: party_name
        in: body
        type: string
        description: The full name of the individual or entity to screen.
      - name: country_code
        in: body
        type: string
        description: ISO 3166-1 alpha-2 country code of the party.
      call: sanctions-svc.screen
      with:
        party_name: '{{party_name}}'
        country_code: '{{country_code}}'
      outputParameters:
      - name: match_score
        type: number
        mapping: $.screening.highestMatchScore
      - name: matched_list
        type: string
        mapping: $.screening.matchedList
      - name: screening_timestamp
        type: string
        mapping: $.screening.timestamp
  consumes:
  - type: http
    namespace: sanctions-svc
    baseUri: https://sanctions-screening.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.sanctions_svc_token
    resources:
    - name: screenings
      path: /screen
      operations:
      - name: screen
        method: POST
Open in Framework → View in Fleet → sanctions-screening-check.yml

Retrieves credit card rewards balance for Chase cardholders, returning points balance, pending points, tier status, and redemption options.

naftiko: '0.5'
info:
  label: Credit Card Rewards Balance Lookup
  description: Retrieves credit card rewards balance for Chase cardholders, returning points balance, pending points, tier status, and redemption options.
  tags:
  - consumer-banking
  - credit-cards
  - rewards
capability:
  exposes:
  - type: mcp
    namespace: card-rewards
    port: 8080
    tools:
    - name: get-rewards-balance
      description: Look up credit card rewards balance.
      inputParameters:
      - name: card_id
        in: body
        type: string
        description: The credit card account ID.
      call: card-platform.get-rewards
      with:
        card_id: '{{card_id}}'
      outputParameters:
      - name: points_balance
        type: number
        mapping: $.rewards.pointsBalance
      - name: pending_points
        type: number
        mapping: $.rewards.pendingPoints
      - name: tier_status
        type: string
        mapping: $.rewards.tierStatus
  consumes:
  - type: http
    namespace: card-platform
    baseUri: https://card-services.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.card_platform_token
    resources:
    - name: rewards
      path: /cards/{{card_id}}/rewards
      inputParameters:
      - name: card_id
        in: path
      operations:
      - name: get-rewards
        method: GET
Open in Framework → View in Fleet → credit-card-rewards-balance-lookup.yml

Validates an AI/ML model before production deployment by pulling model metadata from the model registry, running bias and fairness checks, logging results in the model risk management system, and notifying the MRM team.

naftiko: '0.5'
info:
  label: AI Model Risk Validation Pipeline
  description: Validates an AI/ML model before production deployment by pulling model metadata from the model registry, running bias and fairness checks, logging results in the model risk management system, and notifying the MRM team.
  tags:
  - technology
  - ai
  - model-risk
  - compliance
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ai-model-validation
    port: 8080
    tools:
    - name: validate-model
      description: Retrieve model metadata, run validation checks, log results, and notify the MRM team.
      inputParameters:
      - name: model_id
        in: body
        type: string
        description: The AI/ML model identifier in the registry.
      - name: validation_type
        in: body
        type: string
        description: Type of validation (e.g., INITIAL, PERIODIC, MATERIAL_CHANGE).
      - name: mrm_reviewer_email
        in: body
        type: string
        description: Email of the model risk reviewer.
      steps:
      - name: get-model-metadata
        type: call
        call: model-registry.get-model
        with:
          model_id: '{{model_id}}'
      - name: run-validation
        type: call
        call: model-validation-svc.validate
        with:
          model_id: '{{model_id}}'
          validation_type: '{{validation_type}}'
          model_type: '{{get-model-metadata.modelType}}'
      - name: log-results
        type: call
        call: mrm-system.log-validation
        with:
          model_id: '{{model_id}}'
          validation_type: '{{validation_type}}'
          bias_score: '{{run-validation.biasScore}}'
          fairness_score: '{{run-validation.fairnessScore}}'
          overall_status: '{{run-validation.overallStatus}}'
      - name: notify-reviewer
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{mrm_reviewer_email}}'
          text: 'Model validation complete: {{get-model-metadata.modelName}} ({{model_id}}). Type: {{validation_type}}. Bias: {{run-validation.biasScore}}. Fairness: {{run-validation.fairnessScore}}. Status: {{run-validation.overallStatus}}. MRM ref: {{log-results.validationRef}}.'
  consumes:
  - type: http
    namespace: model-registry
    baseUri: https://model-registry.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.model_registry_token
    resources:
    - name: models
      path: /models/{{model_id}}
      inputParameters:
      - name: model_id
        in: path
      operations:
      - name: get-model
        method: GET
  - type: http
    namespace: model-validation-svc
    baseUri: https://model-validation.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.model_validation_token
    resources:
    - name: validations
      path: /validate
      operations:
      - name: validate
        method: POST
  - type: http
    namespace: mrm-system
    baseUri: https://mrm-system.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.mrm_system_token
    resources:
    - name: validations
      path: /validations
      operations:
      - name: log-validation
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → ai-model-risk-validation-pipeline.yml

At end of day, retrieves sub-account balances for a corporate client, calculates the net position, and executes a zero-balance sweep to the master account via the payments hub. Notifies the treasury team.

naftiko: '0.5'
info:
  label: Cash Management Sweep Orchestrator
  description: At end of day, retrieves sub-account balances for a corporate client, calculates the net position, and executes a zero-balance sweep to the master account via the payments hub. Notifies the treasury team.
  tags:
  - treasury
  - cash-management
  - payments
  - commercial-banking
capability:
  exposes:
  - type: mcp
    namespace: cash-sweep
    port: 8080
    tools:
    - name: execute-sweep
      description: Retrieve sub-account balances, calculate net, and execute zero-balance sweep to master account.
      inputParameters:
      - name: master_account_id
        in: body
        type: string
        description: The master account identifier.
      - name: client_id
        in: body
        type: string
        description: The corporate client ID.
      - name: treasurer_email
        in: body
        type: string
        description: Email of the client treasurer for notification.
      steps:
      - name: get-balances
        type: call
        call: core-banking.get-sub-accounts
        with:
          client_id: '{{client_id}}'
          master_account_id: '{{master_account_id}}'
      - name: calc-sweep
        type: call
        call: cash-mgmt.calculate-sweep
        with:
          master_account_id: '{{master_account_id}}'
          sub_account_balances: '{{get-balances.subAccounts}}'
      - name: execute-transfers
        type: call
        call: payments-hub.execute-sweep
        with:
          master_account_id: '{{master_account_id}}'
          transfers: '{{calc-sweep.transfers}}'
      - name: notify-treasurer
        type: call
        call: messaging.send-confirmation
        with:
          client_id: '{{client_id}}'
          message: 'EOD sweep completed. {{calc-sweep.transferCount}} transfers executed. Net swept: {{calc-sweep.netAmount}} {{calc-sweep.currency}}. Master balance: {{execute-transfers.masterBalance}}.'
  consumes:
  - type: http
    namespace: core-banking
    baseUri: https://core-banking.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: sub-accounts
      path: /clients/{{client_id}}/accounts/{{master_account_id}}/sub-accounts
      inputParameters:
      - name: client_id
        in: path
      - name: master_account_id
        in: path
      operations:
      - name: get-sub-accounts
        method: GET
  - type: http
    namespace: cash-mgmt
    baseUri: https://cash-management.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.cash_mgmt_token
    resources:
    - name: sweeps
      path: /sweeps/calculate
      operations:
      - name: calculate-sweep
        method: POST
  - type: http
    namespace: payments-hub
    baseUri: https://payments-hub.jpmorgan.com/api/v3
    authentication:
      type: bearer
      token: $secrets.payments_hub_token
    resources:
    - name: sweeps
      path: /sweeps
      operations:
      - name: execute-sweep
        method: POST
  - type: http
    namespace: messaging
    baseUri: https://client-messaging.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.messaging_token
    resources:
    - name: confirmations
      path: /confirmations
      operations:
      - name: send-confirmation
        method: POST
Open in Framework → View in Fleet → cash-management-sweep-orchestrator.yml

Calculates margin requirements for a derivatives portfolio, compares against posted collateral, and if a shortfall exists, generates a margin call notice and notifies the counterparty via SWIFT messaging.

naftiko: '0.5'
info:
  label: Derivatives Margin Call Orchestrator
  description: Calculates margin requirements for a derivatives portfolio, compares against posted collateral, and if a shortfall exists, generates a margin call notice and notifies the counterparty via SWIFT messaging.
  tags:
  - trading
  - derivatives
  - collateral
  - margin
  - swift
capability:
  exposes:
  - type: mcp
    namespace: margin-management
    port: 8080
    tools:
    - name: process-margin-call
      description: Calculate margin, check collateral, and issue margin call if shortfall exists.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The derivatives portfolio identifier.
      - name: counterparty_lei
        in: body
        type: string
        description: LEI of the counterparty.
      - name: counterparty_bic
        in: body
        type: string
        description: SWIFT BIC of the counterparty.
      steps:
      - name: calc-margin
        type: call
        call: margin-engine.calculate
        with:
          portfolio_id: '{{portfolio_id}}'
      - name: get-collateral
        type: call
        call: collateral-mgmt.get-posted
        with:
          portfolio_id: '{{portfolio_id}}'
          counterparty_lei: '{{counterparty_lei}}'
      - name: issue-call
        type: call
        call: margin-engine.create-call
        with:
          portfolio_id: '{{portfolio_id}}'
          counterparty_lei: '{{counterparty_lei}}'
          required_margin: '{{calc-margin.totalMarginRequired}}'
          posted_collateral: '{{get-collateral.totalPosted}}'
      - name: notify-counterparty
        type: call
        call: swift-messaging.send-mt340
        with:
          counterparty_bic: '{{counterparty_bic}}'
          margin_call_ref: '{{issue-call.callRef}}'
          amount_due: '{{issue-call.shortfallAmount}}'
          currency: '{{issue-call.currency}}'
          deadline: '{{issue-call.deadline}}'
  consumes:
  - type: http
    namespace: margin-engine
    baseUri: https://margin-engine.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.margin_engine_token
    resources:
    - name: calculations
      path: /portfolios/{{portfolio_id}}/margin
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: calculate
        method: POST
    - name: calls
      path: /margin-calls
      operations:
      - name: create-call
        method: POST
  - type: http
    namespace: collateral-mgmt
    baseUri: https://collateral-mgmt.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.collateral_mgmt_token
    resources:
    - name: posted-collateral
      path: /portfolios/{{portfolio_id}}/counterparties/{{counterparty_lei}}/collateral
      inputParameters:
      - name: portfolio_id
        in: path
      - name: counterparty_lei
        in: path
      operations:
      - name: get-posted
        method: GET
  - type: http
    namespace: swift-messaging
    baseUri: https://swift-messaging.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.swift_messaging_token
    resources:
    - name: messages
      path: /messages/mt340
      operations:
      - name: send-mt340
        method: POST
Open in Framework → View in Fleet → derivatives-margin-call-orchestrator.yml

Orchestrates daily treasury funding by aggregating cash positions across entities, identifying funding gaps, executing intercompany transfers, and reporting to treasury management.

naftiko: '0.5'
info:
  label: Daily Treasury Funding Orchestrator
  description: Orchestrates daily treasury funding by aggregating cash positions across entities, identifying funding gaps, executing intercompany transfers, and reporting to treasury management.
  tags:
  - treasury
  - funding
  - cash-management
capability:
  exposes:
  - type: mcp
    namespace: treasury-funding
    port: 8080
    tools:
    - name: execute-daily-funding
      description: Execute daily treasury funding operations.
      inputParameters:
      - name: business_date
        in: body
        type: string
        description: The business date.
      steps:
      - name: aggregate-positions
        type: call
        call: treasury.aggregate-cash
        with:
          date: '{{business_date}}'
      - name: identify-gaps
        type: call
        call: treasury.identify-funding-gaps
        with:
          date: '{{business_date}}'
          total_position: '{{aggregate-positions.net_position}}'
      - name: execute-transfers
        type: call
        call: treasury.execute-interco-transfers
        with:
          gap_list: '{{identify-gaps.gap_list}}'
      - name: report-status
        type: call
        call: reporting.create-treasury-report
        with:
          date: '{{business_date}}'
          net_position: '{{aggregate-positions.net_position}}'
          transfers_executed: '{{execute-transfers.transfer_count}}'
          gaps_resolved: '{{identify-gaps.gap_count}}'
  consumes:
  - type: http
    namespace: treasury
    baseUri: https://treasury.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.treasury_token
    resources:
    - name: cash
      path: /cash/aggregate
      operations:
      - name: aggregate-cash
        method: GET
    - name: gaps
      path: /funding/gaps
      operations:
      - name: identify-funding-gaps
        method: POST
    - name: transfers
      path: /interco/transfers
      operations:
      - name: execute-interco-transfers
        method: POST
  - type: http
    namespace: reporting
    baseUri: https://reporting.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.reporting_token
    resources:
    - name: reports
      path: /treasury/daily
      operations:
      - name: create-treasury-report
        method: POST
Open in Framework → View in Fleet → daily-treasury-funding-orchestrator.yml

Settles a tokenized payment on JPMorgan's Onyx blockchain platform by verifying the counterparty, creating the payment instruction, submitting to the blockchain ledger, and recording in the core banking system.

naftiko: '0.5'
info:
  label: Blockchain Payment Rail Settlement
  description: Settles a tokenized payment on JPMorgan's Onyx blockchain platform by verifying the counterparty, creating the payment instruction, submitting to the blockchain ledger, and recording in the core banking system.
  tags:
  - payments
  - blockchain
  - onyx
  - technology
capability:
  exposes:
  - type: mcp
    namespace: blockchain-settlement
    port: 8080
    tools:
    - name: settle-on-chain
      description: Verify counterparty, create instruction, submit to Onyx ledger, and record in core banking.
      inputParameters:
      - name: counterparty_id
        in: body
        type: string
        description: The counterparty node identifier on Onyx.
      - name: amount
        in: body
        type: number
        description: Settlement amount.
      - name: currency
        in: body
        type: string
        description: Settlement currency.
      - name: reference
        in: body
        type: string
        description: Payment reference.
      steps:
      - name: verify-counterparty
        type: call
        call: onyx-platform.verify-node
        with:
          node_id: '{{counterparty_id}}'
      - name: create-instruction
        type: call
        call: onyx-platform.create-instruction
        with:
          counterparty_id: '{{counterparty_id}}'
          amount: '{{amount}}'
          currency: '{{currency}}'
          reference: '{{reference}}'
      - name: submit-to-ledger
        type: call
        call: onyx-platform.submit
        with:
          instruction_id: '{{create-instruction.instructionId}}'
      - name: record-in-core
        type: call
        call: core-banking.record-settlement
        with:
          tx_hash: '{{submit-to-ledger.txHash}}'
          amount: '{{amount}}'
          currency: '{{currency}}'
          counterparty: '{{verify-counterparty.legalName}}'
          reference: '{{reference}}'
  consumes:
  - type: http
    namespace: onyx-platform
    baseUri: https://onyx.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.onyx_token
    resources:
    - name: nodes
      path: /nodes/{{node_id}}/verify
      inputParameters:
      - name: node_id
        in: path
      operations:
      - name: verify-node
        method: GET
    - name: instructions
      path: /instructions
      operations:
      - name: create-instruction
        method: POST
    - name: submit
      path: /instructions/{{instruction_id}}/submit
      inputParameters:
      - name: instruction_id
        in: path
      operations:
      - name: submit
        method: POST
  - type: http
    namespace: core-banking
    baseUri: https://core-banking.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.core_banking_token
    resources:
    - name: settlements
      path: /settlements
      operations:
      - name: record-settlement
        method: POST
Open in Framework → View in Fleet → blockchain-payment-rail-settlement.yml

Retrieves mobile check deposit status for consumer banking, returning deposit amount, hold status, available date, and image quality score.

naftiko: '0.5'
info:
  label: Digital Banking Mobile Deposit Status
  description: Retrieves mobile check deposit status for consumer banking, returning deposit amount, hold status, available date, and image quality score.
  tags:
  - consumer-banking
  - digital
  - deposits
capability:
  exposes:
  - type: mcp
    namespace: mobile-deposits
    port: 8080
    tools:
    - name: get-deposit-status
      description: Look up a mobile check deposit status.
      inputParameters:
      - name: deposit_id
        in: body
        type: string
        description: The mobile deposit ID.
      call: digital-banking.get-deposit
      with:
        deposit_id: '{{deposit_id}}'
      outputParameters:
      - name: amount
        type: string
        mapping: $.deposit.amount
      - name: hold_status
        type: string
        mapping: $.deposit.holdStatus
      - name: available_date
        type: string
        mapping: $.deposit.availableDate
      - name: image_quality
        type: string
        mapping: $.deposit.imageQualityScore
  consumes:
  - type: http
    namespace: digital-banking
    baseUri: https://digital-banking.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.digital_banking_token
    resources:
    - name: deposits
      path: /mobile-deposits/{{deposit_id}}
      inputParameters:
      - name: deposit_id
        in: path
      operations:
      - name: get-deposit
        method: GET
Open in Framework → View in Fleet → digital-banking-mobile-deposit-status.yml

When a trade fails to settle, retrieves the settlement instruction from the OMS, checks the counterparty SSI in reference data, creates a ServiceNow incident, and notifies the operations team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Trade Settlement Exception Resolution
  description: When a trade fails to settle, retrieves the settlement instruction from the OMS, checks the counterparty SSI in reference data, creates a ServiceNow incident, and notifies the operations team via Microsoft Teams.
  tags:
  - operations
  - settlement
  - oms
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: settlement-exceptions
    port: 8080
    tools:
    - name: resolve-settlement-fail
      description: Investigate a failed trade settlement, cross-check SSIs, open an incident, and notify ops.
      inputParameters:
      - name: trade_ref
        in: body
        type: string
        description: The failed trade reference.
      - name: ops_team_email
        in: body
        type: string
        description: Email of the settlement operations team.
      steps:
      - name: get-trade
        type: call
        call: oms.get-trade
        with:
          trade_ref: '{{trade_ref}}'
      - name: get-ssi
        type: call
        call: ref-data-svc.get-ssi
        with:
          counterparty_lei: '{{get-trade.counterpartyLEI}}'
          instrument_type: '{{get-trade.instrumentType}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Settlement fail: Trade {{trade_ref}} — {{get-trade.instrumentName}}'
          category: settlement_exception
          assigned_group: Settlement_Ops
          description: 'Trade {{trade_ref}} failed settlement. Counterparty: {{get-trade.counterpartyName}}. Expected settlement: {{get-trade.settlementDate}}. SSI on file: {{get-ssi.custodianBIC}} / {{get-ssi.accountNumber}}.'
      - name: notify-ops
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{ops_team_email}}'
          text: 'SETTLEMENT FAIL: Trade {{trade_ref}} ({{get-trade.instrumentName}}). Counterparty: {{get-trade.counterpartyName}}. Incident: {{create-incident.number}}. Please investigate SSI mismatch.'
  consumes:
  - type: http
    namespace: oms
    baseUri: https://oms.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.oms_token
    resources:
    - name: trades
      path: /trades/{{trade_ref}}
      inputParameters:
      - name: trade_ref
        in: path
      operations:
      - name: get-trade
        method: GET
  - type: http
    namespace: ref-data-svc
    baseUri: https://ref-data.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.ref_data_token
    resources:
    - name: ssi
      path: /ssi/{{counterparty_lei}}/{{instrument_type}}
      inputParameters:
      - name: counterparty_lei
        in: path
      - name: instrument_type
        in: path
      operations:
      - name: get-ssi
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://jpmorgan.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → trade-settlement-exception-resolution.yml

Retrieves collateral valuation for margin calculations, returning market value, haircut percentage, eligible value, and margin deficit/excess.

naftiko: '0.5'
info:
  label: Collateral Margin Valuation
  description: Retrieves collateral valuation for margin calculations, returning market value, haircut percentage, eligible value, and margin deficit/excess.
  tags:
  - risk
  - collateral
  - derivatives
capability:
  exposes:
  - type: mcp
    namespace: collateral-valuation
    port: 8080
    tools:
    - name: get-collateral-value
      description: Retrieve collateral valuation for margin.
      inputParameters:
      - name: agreement_id
        in: body
        type: string
        description: The collateral agreement ID.
      call: collateral.get-valuation
      with:
        agreement_id: '{{agreement_id}}'
      outputParameters:
      - name: market_value
        type: string
        mapping: $.valuation.marketValue
      - name: haircut_pct
        type: string
        mapping: $.valuation.haircutPercentage
      - name: eligible_value
        type: string
        mapping: $.valuation.eligibleValue
      - name: margin_status
        type: string
        mapping: $.valuation.marginStatus
  consumes:
  - type: http
    namespace: collateral
    baseUri: https://collateral.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.collateral_token
    resources:
    - name: valuations
      path: /agreements/{{agreement_id}}/valuation
      inputParameters:
      - name: agreement_id
        in: path
      operations:
      - name: get-valuation
        method: GET
Open in Framework → View in Fleet → collateral-margin-valuation.yml

On receipt of a new equities order, submits to the FIX gateway, retrieves the fill status, books the trade in the OMS, and sends a confirmation to the client via the messaging platform.

naftiko: '0.5'
info:
  label: Trade Execution and Confirmation Orchestrator
  description: On receipt of a new equities order, submits to the FIX gateway, retrieves the fill status, books the trade in the OMS, and sends a confirmation to the client via the messaging platform.
  tags:
  - trading
  - equities
  - fix-gateway
  - oms
  - confirmation
capability:
  exposes:
  - type: mcp
    namespace: trade-execution
    port: 8080
    tools:
    - name: execute-and-confirm
      description: Submit an equities order, book the fill in the OMS, and send trade confirmation to the client.
      inputParameters:
      - name: symbol
        in: body
        type: string
        description: The ticker symbol of the instrument.
      - name: side
        in: body
        type: string
        description: BUY or SELL.
      - name: quantity
        in: body
        type: number
        description: Number of shares.
      - name: order_type
        in: body
        type: string
        description: Order type (MARKET, LIMIT).
      - name: client_id
        in: body
        type: string
        description: The client account identifier.
      steps:
      - name: submit-order
        type: call
        call: fix-gw.submit-order
        with:
          symbol: '{{symbol}}'
          side: '{{side}}'
          quantity: '{{quantity}}'
          order_type: '{{order_type}}'
      - name: book-trade
        type: call
        call: oms.book-trade
        with:
          cl_ord_id: '{{submit-order.clOrdId}}'
          client_id: '{{client_id}}'
          symbol: '{{symbol}}'
          side: '{{side}}'
          quantity: '{{submit-order.cumQty}}'
          price: '{{submit-order.avgPx}}'
      - name: send-confirmation
        type: call
        call: messaging.send-confirmation
        with:
          client_id: '{{client_id}}'
          message: 'Trade confirmed: {{side}} {{submit-order.cumQty}} {{symbol}} at {{submit-order.avgPx}}. Order ref: {{submit-order.clOrdId}}. Booking ref: {{book-trade.bookingRef}}.'
  consumes:
  - type: http
    namespace: fix-gw
    baseUri: https://fix-gateway.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.fix_gateway_token
    resources:
    - name: orders
      path: /orders
      operations:
      - name: submit-order
        method: POST
  - type: http
    namespace: oms
    baseUri: https://oms.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.oms_token
    resources:
    - name: bookings
      path: /bookings
      operations:
      - name: book-trade
        method: POST
  - type: http
    namespace: messaging
    baseUri: https://client-messaging.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.messaging_token
    resources:
    - name: confirmations
      path: /confirmations
      operations:
      - name: send-confirmation
        method: POST
Open in Framework → View in Fleet → trade-execution-and-confirmation-orchestrator.yml

Orchestrates IPO bookbuilding by setting up the offering in the IB platform, collecting investor indications, running allocation analysis, and distributing allocation results to the syndicate.

naftiko: '0.5'
info:
  label: Equity IPO Bookbuilding Orchestrator
  description: Orchestrates IPO bookbuilding by setting up the offering in the IB platform, collecting investor indications, running allocation analysis, and distributing allocation results to the syndicate.
  tags:
  - investment-banking
  - equities
  - capital-markets
capability:
  exposes:
  - type: mcp
    namespace: ipo-bookbuilding
    port: 8080
    tools:
    - name: manage-bookbuild
      description: Manage IPO bookbuilding process.
      inputParameters:
      - name: deal_id
        in: body
        type: string
        description: The IPO deal ID.
      - name: price_range_low
        in: body
        type: string
        description: Price range low end.
      - name: price_range_high
        in: body
        type: string
        description: Price range high end.
      steps:
      - name: setup-book
        type: call
        call: ib-platform.create-book
        with:
          deal_id: '{{deal_id}}'
          price_low: '{{price_range_low}}'
          price_high: '{{price_range_high}}'
      - name: collect-indications
        type: call
        call: ib-platform.get-indications
        with:
          deal_id: '{{deal_id}}'
      - name: run-allocation
        type: call
        call: allocation-engine.allocate-ipo
        with:
          deal_id: '{{deal_id}}'
          total_demand: '{{collect-indications.total_demand}}'
          investor_count: '{{collect-indications.investor_count}}'
      - name: distribute-results
        type: call
        call: messaging.send-allocation-notices
        with:
          deal_id: '{{deal_id}}'
          allocation_count: '{{run-allocation.allocation_count}}'
  consumes:
  - type: http
    namespace: ib-platform
    baseUri: https://ib-platform.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ib_platform_token
    resources:
    - name: books
      path: /books
      operations:
      - name: create-book
        method: POST
    - name: indications
      path: /books/{{deal_id}}/indications
      inputParameters:
      - name: deal_id
        in: path
      operations:
      - name: get-indications
        method: GET
  - type: http
    namespace: allocation-engine
    baseUri: https://allocation.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.allocation_token
    resources:
    - name: ipo
      path: /ipo/allocate
      operations:
      - name: allocate-ipo
        method: POST
  - type: http
    namespace: messaging
    baseUri: https://client-messaging.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.messaging_token
    resources:
    - name: notices
      path: /allocation-notices
      operations:
      - name: send-allocation-notices
        method: POST
Open in Framework → View in Fleet → equity-ipo-bookbuilding-orchestrator.yml

Retrieves operational risk incident details from the risk management system, returning incident type, financial impact, root cause, and remediation status.

naftiko: '0.5'
info:
  label: Operational Risk Incident Lookup
  description: Retrieves operational risk incident details from the risk management system, returning incident type, financial impact, root cause, and remediation status.
  tags:
  - risk
  - operational-risk
capability:
  exposes:
  - type: mcp
    namespace: op-risk-incidents
    port: 8080
    tools:
    - name: get-incident
      description: Look up an operational risk incident.
      inputParameters:
      - name: incident_id
        in: body
        type: string
        description: The incident ID.
      call: risk-system.get-incident
      with:
        incident_id: '{{incident_id}}'
      outputParameters:
      - name: type
        type: string
        mapping: $.incident.type
      - name: financial_impact
        type: string
        mapping: $.incident.financialImpact
      - name: root_cause
        type: string
        mapping: $.incident.rootCause
      - name: remediation_status
        type: string
        mapping: $.incident.remediationStatus
  consumes:
  - type: http
    namespace: risk-system
    baseUri: https://risk-management.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.risk_system_token
    resources:
    - name: incidents
      path: /op-risk/incidents/{{incident_id}}
      inputParameters:
      - name: incident_id
        in: path
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → operational-risk-incident-lookup.yml

Orchestrates a corporate bond issuance by setting up the deal in the IB platform, pricing via the syndication desk, allocating to investors, and confirming settlement via the custody system.

naftiko: '0.5'
info:
  label: Corporate Bond Issuance Orchestrator
  description: Orchestrates a corporate bond issuance by setting up the deal in the IB platform, pricing via the syndication desk, allocating to investors, and confirming settlement via the custody system.
  tags:
  - investment-banking
  - fixed-income
  - capital-markets
capability:
  exposes:
  - type: mcp
    namespace: bond-issuance
    port: 8080
    tools:
    - name: process-issuance
      description: Process a corporate bond issuance.
      inputParameters:
      - name: deal_id
        in: body
        type: string
        description: The deal ID.
      - name: issuer
        in: body
        type: string
        description: The issuer name.
      - name: notional
        in: body
        type: string
        description: The issuance size.
      steps:
      - name: setup-deal
        type: call
        call: ib-platform.create-deal
        with:
          deal_id: '{{deal_id}}'
          issuer: '{{issuer}}'
          notional: '{{notional}}'
      - name: price-deal
        type: call
        call: syndication.price-bond
        with:
          deal_id: '{{deal_id}}'
          benchmark: '{{setup-deal.benchmark_rate}}'
      - name: allocate-investors
        type: call
        call: syndication.allocate
        with:
          deal_id: '{{deal_id}}'
          final_spread: '{{price-deal.final_spread}}'
      - name: confirm-settlement
        type: call
        call: custody.setup-settlement
        with:
          deal_id: '{{deal_id}}'
          isin: '{{price-deal.isin}}'
          settlement_date: '{{price-deal.settlement_date}}'
  consumes:
  - type: http
    namespace: ib-platform
    baseUri: https://ib-platform.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ib_platform_token
    resources:
    - name: deals
      path: /deals
      operations:
      - name: create-deal
        method: POST
  - type: http
    namespace: syndication
    baseUri: https://syndication.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.syndication_token
    resources:
    - name: pricing
      path: /pricing
      operations:
      - name: price-bond
        method: POST
    - name: allocation
      path: /allocations
      operations:
      - name: allocate
        method: POST
  - type: http
    namespace: custody
    baseUri: https://custody.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.custody_token
    resources:
    - name: settlement
      path: /setup
      operations:
      - name: setup-settlement
        method: POST
Open in Framework → View in Fleet → corporate-bond-issuance-orchestrator.yml

Deploys a new algorithmic trading strategy by registering it in the algo management platform, configuring risk limits, activating on the execution gateway, and notifying the quant desk via Microsoft Teams.

naftiko: '0.5'
info:
  label: Algorithmic Trading Strategy Deployment
  description: Deploys a new algorithmic trading strategy by registering it in the algo management platform, configuring risk limits, activating on the execution gateway, and notifying the quant desk via Microsoft Teams.
  tags:
  - trading
  - algorithmic
  - risk
  - technology
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: algo-deployment
    port: 8080
    tools:
    - name: deploy-strategy
      description: Register algo strategy, set risk limits, activate on gateway, and notify the desk.
      inputParameters:
      - name: strategy_id
        in: body
        type: string
        description: The algo strategy identifier.
      - name: max_notional
        in: body
        type: number
        description: Maximum notional per order.
      - name: max_participation_rate
        in: body
        type: number
        description: Maximum participation rate as percentage.
      - name: quant_desk_email
        in: body
        type: string
        description: Email of the quant desk lead.
      steps:
      - name: register-strategy
        type: call
        call: algo-platform.register
        with:
          strategy_id: '{{strategy_id}}'
      - name: set-limits
        type: call
        call: risk-engine.set-algo-limits
        with:
          strategy_id: '{{strategy_id}}'
          max_notional: '{{max_notional}}'
          max_participation_rate: '{{max_participation_rate}}'
      - name: activate
        type: call
        call: fix-gw.activate-strategy
        with:
          strategy_id: '{{strategy_id}}'
          limits_ref: '{{set-limits.limitsRef}}'
      - name: notify-desk
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{quant_desk_email}}'
          text: 'Algo strategy {{strategy_id}} deployed. Max notional: {{max_notional}}. Max participation: {{max_participation_rate}}%. Gateway status: {{activate.status}}. Limits ref: {{set-limits.limitsRef}}.'
  consumes:
  - type: http
    namespace: algo-platform
    baseUri: https://algo-platform.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.algo_platform_token
    resources:
    - name: strategies
      path: /strategies
      operations:
      - name: register
        method: POST
  - type: http
    namespace: risk-engine
    baseUri: https://risk-engine.jpmorgan.com/api/v3
    authentication:
      type: bearer
      token: $secrets.risk_engine_token
    resources:
    - name: algo-limits
      path: /algo-limits
      operations:
      - name: set-algo-limits
        method: POST
  - type: http
    namespace: fix-gw
    baseUri: https://fix-gateway.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.fix_gateway_token
    resources:
    - name: strategies
      path: /strategies/activate
      operations:
      - name: activate-strategy
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → algorithmic-trading-strategy-deployment.yml

Retrieves the latest cash and securities balances for a custody account from the global custody platform. Used by asset managers and fund administrators for daily reconciliation.

naftiko: '0.5'
info:
  label: Custody Account Balance Lookup
  description: Retrieves the latest cash and securities balances for a custody account from the global custody platform. Used by asset managers and fund administrators for daily reconciliation.
  tags:
  - custody
  - asset-management
  - reconciliation
capability:
  exposes:
  - type: mcp
    namespace: custody
    port: 8080
    tools:
    - name: get-custody-balance
      description: Fetch cash and securities balances for a custody account by account ID. Returns total AUM, cash balance, and number of holdings.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The custody account identifier.
      call: custody-platform.get-balance
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: total_aum
        type: number
        mapping: $.account.totalAUM
      - name: cash_balance
        type: number
        mapping: $.account.cashBalance
      - name: holdings_count
        type: number
        mapping: $.account.holdingsCount
  consumes:
  - type: http
    namespace: custody-platform
    baseUri: https://custody-api.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.custody_api_token
    resources:
    - name: accounts
      path: /accounts/{{account_id}}/balances
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-balance
        method: GET
Open in Framework → View in Fleet → custody-account-balance-lookup.yml

Retrieves wire transfer status from the payment hub, returning transfer state, beneficiary bank, amount, and value date for domestic and international wires.

naftiko: '0.5'
info:
  label: Wire Transfer Status Lookup
  description: Retrieves wire transfer status from the payment hub, returning transfer state, beneficiary bank, amount, and value date for domestic and international wires.
  tags:
  - payments
  - wire-transfer
capability:
  exposes:
  - type: mcp
    namespace: wire-transfers
    port: 8080
    tools:
    - name: get-wire-status
      description: Look up a wire transfer status.
      inputParameters:
      - name: reference_id
        in: body
        type: string
        description: The wire transfer reference ID.
      call: payment-hub.get-wire
      with:
        reference_id: '{{reference_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.wire.status
      - name: beneficiary_bank
        type: string
        mapping: $.wire.beneficiaryBank
      - name: amount
        type: string
        mapping: $.wire.amount
      - name: value_date
        type: string
        mapping: $.wire.valueDate
  consumes:
  - type: http
    namespace: payment-hub
    baseUri: https://payment-hub.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.payment_hub_token
    resources:
    - name: wires
      path: /wires/{{reference_id}}
      inputParameters:
      - name: reference_id
        in: path
      operations:
      - name: get-wire
        method: GET
Open in Framework → View in Fleet → wire-transfer-status-lookup.yml

Queries the internal credit risk engine for the probability-of-default score and credit rating of a counterparty by LEI. Used by credit officers and relationship managers during onboarding and periodic reviews.

naftiko: '0.5'
info:
  label: Credit Risk Score Retrieval
  description: Queries the internal credit risk engine for the probability-of-default score and credit rating of a counterparty by LEI. Used by credit officers and relationship managers during onboarding and periodic reviews.
  tags:
  - risk
  - credit
  - counterparty
capability:
  exposes:
  - type: mcp
    namespace: credit-risk
    port: 8080
    tools:
    - name: get-credit-score
      description: Look up a counterparty credit risk profile by Legal Entity Identifier (LEI). Returns PD score, internal rating, and last review date.
      inputParameters:
      - name: lei
        in: body
        type: string
        description: The 20-character Legal Entity Identifier of the counterparty.
      call: risk-engine.get-credit-profile
      with:
        lei: '{{lei}}'
      outputParameters:
      - name: pd_score
        type: number
        mapping: $.creditProfile.probabilityOfDefault
      - name: internal_rating
        type: string
        mapping: $.creditProfile.internalRating
      - name: last_review_date
        type: string
        mapping: $.creditProfile.lastReviewDate
  consumes:
  - type: http
    namespace: risk-engine
    baseUri: https://risk-engine.jpmorgan.com/api/v3
    authentication:
      type: bearer
      token: $secrets.risk_engine_token
    resources:
    - name: credit-profiles
      path: /counterparties/{{lei}}/credit-profile
      inputParameters:
      - name: lei
        in: path
      operations:
      - name: get-credit-profile
        method: GET
Open in Framework → View in Fleet → credit-risk-score-retrieval.yml

Identifies tax-loss harvesting opportunities by scanning portfolio positions for unrealized losses, finding substitute securities that maintain factor exposure, generating sell/buy trades, and logging the harvest event for tax reporting.

naftiko: '0.5'
info:
  label: Wealth Client Tax-Loss Harvesting
  description: Identifies tax-loss harvesting opportunities by scanning portfolio positions for unrealized losses, finding substitute securities that maintain factor exposure, generating sell/buy trades, and logging the harvest event for tax reporting.
  tags:
  - wealth-management
  - tax
  - portfolio
  - trading
capability:
  exposes:
  - type: mcp
    namespace: tax-loss-harvesting
    port: 8080
    tools:
    - name: harvest-losses
      description: Scan for unrealized losses, find substitutes, generate trades, and log for tax reporting.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The client portfolio identifier.
      - name: loss_threshold
        in: body
        type: number
        description: Minimum unrealized loss in USD to trigger harvest.
      - name: advisor_email
        in: body
        type: string
        description: Email of the wealth advisor.
      steps:
      - name: get-positions
        type: call
        call: portfolio-svc.get-positions
        with:
          portfolio_id: '{{portfolio_id}}'
      - name: identify-losses
        type: call
        call: tax-engine.scan-losses
        with:
          positions: '{{get-positions.positions}}'
          threshold: '{{loss_threshold}}'
      - name: find-substitutes
        type: call
        call: tax-engine.find-substitutes
        with:
          loss_positions: '{{identify-losses.eligiblePositions}}'
      - name: submit-trades
        type: call
        call: oms.submit-basket
        with:
          portfolio_id: '{{portfolio_id}}'
          trades: '{{find-substitutes.tradeList}}'
      - name: log-harvest
        type: call
        call: tax-engine.log-harvest
        with:
          portfolio_id: '{{portfolio_id}}'
          basket_ref: '{{submit-trades.basketRef}}'
          total_losses_harvested: '{{identify-losses.totalLoss}}'
          positions_count: '{{identify-losses.positionCount}}'
  consumes:
  - type: http
    namespace: portfolio-svc
    baseUri: https://portfolio-api.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.portfolio_api_token
    resources:
    - name: positions
      path: /portfolios/{{portfolio_id}}/positions
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: get-positions
        method: GET
  - type: http
    namespace: tax-engine
    baseUri: https://tax-engine.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.tax_engine_token
    resources:
    - name: loss-scanning
      path: /scan-losses
      operations:
      - name: scan-losses
        method: POST
    - name: substitutes
      path: /substitutes
      operations:
      - name: find-substitutes
        method: POST
    - name: harvest-log
      path: /harvest-log
      operations:
      - name: log-harvest
        method: POST
  - type: http
    namespace: oms
    baseUri: https://oms.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.oms_token
    resources:
    - name: baskets
      path: /baskets
      operations:
      - name: submit-basket
        method: POST
Open in Framework → View in Fleet → wealth-client-tax-loss-harvesting.yml

Checks the submission status of a regulatory filing (e.g., FR Y-14, CCAR) from the regulatory reporting platform. Returns filing status, submission timestamp, and acknowledgement ID. Used by regulatory affairs teams.

naftiko: '0.5'
info:
  label: Regulatory Report Status
  description: Checks the submission status of a regulatory filing (e.g., FR Y-14, CCAR) from the regulatory reporting platform. Returns filing status, submission timestamp, and acknowledgement ID. Used by regulatory affairs teams.
  tags:
  - compliance
  - regulatory
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: regulatory-reporting
    port: 8080
    tools:
    - name: get-filing-status
      description: Check the status of a regulatory filing by report ID. Returns filing status, submission timestamp, and regulator acknowledgement ID.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The regulatory report filing identifier.
      call: reg-platform.get-filing
      with:
        report_id: '{{report_id}}'
      outputParameters:
      - name: filing_status
        type: string
        mapping: $.filing.status
      - name: submitted_at
        type: string
        mapping: $.filing.submittedAt
      - name: ack_id
        type: string
        mapping: $.filing.acknowledgementId
  consumes:
  - type: http
    namespace: reg-platform
    baseUri: https://reg-reporting.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.reg_platform_token
    resources:
    - name: filings
      path: /filings/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-filing
        method: GET
Open in Framework → View in Fleet → regulatory-report-status.yml

When a new equity research report is published, fetches the report metadata, identifies subscribed institutional clients in Salesforce, and distributes the report via the client document portal and email notifications.

naftiko: '0.5'
info:
  label: Equity Research Distribution Pipeline
  description: When a new equity research report is published, fetches the report metadata, identifies subscribed institutional clients in Salesforce, and distributes the report via the client document portal and email notifications.
  tags:
  - research
  - equities
  - salesforce
  - distribution
capability:
  exposes:
  - type: mcp
    namespace: research-distribution
    port: 8080
    tools:
    - name: distribute-research
      description: Fetch research report, identify subscribers, publish to document portal, and send email notifications.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The research report identifier.
      - name: analyst_name
        in: body
        type: string
        description: Name of the publishing analyst.
      steps:
      - name: get-report
        type: call
        call: research-platform.get-report
        with:
          report_id: '{{report_id}}'
      - name: get-subscribers
        type: call
        call: salesforce.get-subscribers
        with:
          coverage_ticker: '{{get-report.ticker}}'
          sector: '{{get-report.sector}}'
      - name: publish-portal
        type: call
        call: document-portal.publish
        with:
          report_id: '{{report_id}}'
          title: '{{get-report.title}}'
          ticker: '{{get-report.ticker}}'
          analyst: '{{analyst_name}}'
          subscriber_ids: '{{get-subscribers.clientIds}}'
      - name: send-notifications
        type: call
        call: email-service.send-bulk
        with:
          template: research_alert
          recipients: '{{get-subscribers.emails}}'
          subject: 'New Research: {{get-report.title}} — {{get-report.ticker}}'
          body: '{{analyst_name}} published a new report on {{get-report.ticker}}: {{get-report.title}}. Rating: {{get-report.rating}}. Target price: {{get-report.targetPrice}}. Access at: {{publish-portal.portalUrl}}.'
  consumes:
  - type: http
    namespace: research-platform
    baseUri: https://research-platform.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.research_platform_token
    resources:
    - name: reports
      path: /reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-report
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://jpmorgan.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: subscribers
      path: /query
      operations:
      - name: get-subscribers
        method: GET
  - type: http
    namespace: document-portal
    baseUri: https://doc-portal.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.doc_portal_token
    resources:
    - name: publications
      path: /publications
      operations:
      - name: publish
        method: POST
  - type: http
    namespace: email-service
    baseUri: https://email-service.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.email_service_token
    resources:
    - name: bulk-send
      path: /bulk
      operations:
      - name: send-bulk
        method: POST
Open in Framework → View in Fleet → equity-research-distribution-pipeline.yml

Retrieves yield curve data from the market data service, returning spot rates, forward rates, and discount factors for a specified curve and date.

naftiko: '0.5'
info:
  label: Fixed Income Yield Curve Retrieval
  description: Retrieves yield curve data from the market data service, returning spot rates, forward rates, and discount factors for a specified curve and date.
  tags:
  - market-data
  - fixed-income
  - rates
capability:
  exposes:
  - type: mcp
    namespace: yield-curves
    port: 8080
    tools:
    - name: get-yield-curve
      description: Retrieve yield curve data.
      inputParameters:
      - name: curve_name
        in: body
        type: string
        description: The curve name (UST, LIBOR, SOFR).
      - name: date
        in: body
        type: string
        description: The curve date.
      call: market-data.get-curve
      with:
        curve_name: '{{curve_name}}'
        date: '{{date}}'
      outputParameters:
      - name: spot_rates
        type: string
        mapping: $.curve.spotRates
      - name: forward_rates
        type: string
        mapping: $.curve.forwardRates
      - name: tenors
        type: string
        mapping: $.curve.tenors
  consumes:
  - type: http
    namespace: market-data
    baseUri: https://market-data.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.market_data_token
    resources:
    - name: curves
      path: /yield-curves/{{curve_name}}?date={{date}}
      inputParameters:
      - name: curve_name
        in: path
      - name: date
        in: query
      operations:
      - name: get-curve
        method: GET
Open in Framework → View in Fleet → fixed-income-yield-curve-retrieval.yml

Orchestrates client relationship reviews by pulling revenue data from the CRM, analyzing wallet share, generating the review presentation, and scheduling the client meeting.

naftiko: '0.5'
info:
  label: Client Relationship Review Pipeline
  description: Orchestrates client relationship reviews by pulling revenue data from the CRM, analyzing wallet share, generating the review presentation, and scheduling the client meeting.
  tags:
  - client-management
  - commercial-banking
  - crm
capability:
  exposes:
  - type: mcp
    namespace: client-review
    port: 8080
    tools:
    - name: prepare-review
      description: Prepare a client relationship review.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The client ID.
      - name: review_period
        in: body
        type: string
        description: The review period.
      steps:
      - name: get-revenue
        type: call
        call: crm.get-client-revenue
        with:
          client_id: '{{client_id}}'
          period: '{{review_period}}'
      - name: analyze-wallet
        type: call
        call: analytics.wallet-share-analysis
        with:
          client_id: '{{client_id}}'
          revenue: '{{get-revenue.total_revenue}}'
      - name: generate-presentation
        type: call
        call: doc-gen.create-review-deck
        with:
          client_id: '{{client_id}}'
          revenue: '{{get-revenue.total_revenue}}'
          wallet_share: '{{analyze-wallet.wallet_share_pct}}'
          opportunities: '{{analyze-wallet.opportunities}}'
  consumes:
  - type: http
    namespace: crm
    baseUri: https://crm.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.crm_token
    resources:
    - name: revenue
      path: /clients/{{client_id}}/revenue
      inputParameters:
      - name: client_id
        in: path
      operations:
      - name: get-client-revenue
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://analytics.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: wallet-share
      path: /wallet-share/analyze
      operations:
      - name: wallet-share-analysis
        method: POST
  - type: http
    namespace: doc-gen
    baseUri: https://doc-generation.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.docgen_token
    resources:
    - name: presentations
      path: /review-decks
      operations:
      - name: create-review-deck
        method: POST
Open in Framework → View in Fleet → client-relationship-review-pipeline.yml

Synchronizes M&A deal status from the deal management system to Salesforce, updates the pitch book repository in SharePoint, and notifies the coverage banker via Microsoft Teams when a deal stage changes.

naftiko: '0.5'
info:
  label: Investment Banking Deal Pipeline Tracker
  description: Synchronizes M&A deal status from the deal management system to Salesforce, updates the pitch book repository in SharePoint, and notifies the coverage banker via Microsoft Teams when a deal stage changes.
  tags:
  - investment-banking
  - deals
  - salesforce
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ib-deal-pipeline
    port: 8080
    tools:
    - name: sync-deal-status
      description: Update CRM, refresh pitch book repository, and notify banker on deal stage change.
      inputParameters:
      - name: deal_id
        in: body
        type: string
        description: The M&A deal identifier.
      - name: new_stage
        in: body
        type: string
        description: The new deal stage.
      - name: banker_email
        in: body
        type: string
        description: Email of the coverage banker.
      steps:
      - name: get-deal
        type: call
        call: deal-mgmt.get-deal
        with:
          deal_id: '{{deal_id}}'
      - name: update-crm
        type: call
        call: salesforce.update-opportunity
        with:
          opportunity_id: '{{get-deal.crmOpportunityId}}'
          stage: '{{new_stage}}'
      - name: update-pitchbook
        type: call
        call: sharepoint.update-metadata
        with:
          site_id: ib_deals_site
          folder_path: Deals/{{get-deal.dealName}}
          metadata_stage: '{{new_stage}}'
      - name: notify-banker
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{banker_email}}'
          text: 'Deal update: {{get-deal.dealName}} moved to {{new_stage}}. Target: {{get-deal.targetName}}. Deal size: {{get-deal.dealSize}}. CRM updated, pitch book refreshed.'
  consumes:
  - type: http
    namespace: deal-mgmt
    baseUri: https://deal-management.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.deal_mgmt_token
    resources:
    - name: deals
      path: /deals/{{deal_id}}
      inputParameters:
      - name: deal_id
        in: path
      operations:
      - name: get-deal
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://jpmorgan.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: 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: update-metadata
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → investment-banking-deal-pipeline-tracker.yml

Retrieves cross-currency swap valuation from Athena, returning NPV, accrued interest, current notional exchange rate, and next payment date.

naftiko: '0.5'
info:
  label: Cross-Currency Swap Valuation
  description: Retrieves cross-currency swap valuation from Athena, returning NPV, accrued interest, current notional exchange rate, and next payment date.
  tags:
  - trading
  - derivatives
  - fx
capability:
  exposes:
  - type: mcp
    namespace: xccy-swaps
    port: 8080
    tools:
    - name: value-xccy-swap
      description: Value a cross-currency swap via Athena.
      inputParameters:
      - name: trade_id
        in: body
        type: string
        description: The trade ID.
      call: athena.value-swap
      with:
        trade_id: '{{trade_id}}'
      outputParameters:
      - name: npv
        type: string
        mapping: $.valuation.npv
      - name: accrued_interest
        type: string
        mapping: $.valuation.accruedInterest
      - name: fx_rate
        type: string
        mapping: $.valuation.currentFxRate
      - name: next_payment
        type: string
        mapping: $.valuation.nextPaymentDate
  consumes:
  - type: http
    namespace: athena
    baseUri: https://athena.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.athena_token
    resources:
    - name: valuations
      path: /valuations/xccy-swaps/{{trade_id}}
      inputParameters:
      - name: trade_id
        in: path
      operations:
      - name: value-swap
        method: GET
Open in Framework → View in Fleet → cross-currency-swap-valuation.yml

Retrieves structured note pricing from Athena, returning indicative price, embedded option value, credit spread, and coupon schedule for wealth management products.

naftiko: '0.5'
info:
  label: Structured Note Pricing
  description: Retrieves structured note pricing from Athena, returning indicative price, embedded option value, credit spread, and coupon schedule for wealth management products.
  tags:
  - structured-products
  - wealth-management
  - pricing
capability:
  exposes:
  - type: mcp
    namespace: structured-notes
    port: 8080
    tools:
    - name: price-note
      description: Price a structured note via Athena.
      inputParameters:
      - name: note_id
        in: body
        type: string
        description: The structured note ISIN.
      call: athena.price-structured-note
      with:
        note_id: '{{note_id}}'
      outputParameters:
      - name: indicative_price
        type: string
        mapping: $.pricing.indicativePrice
      - name: option_value
        type: string
        mapping: $.pricing.embeddedOptionValue
      - name: credit_spread
        type: string
        mapping: $.pricing.creditSpread
  consumes:
  - type: http
    namespace: athena
    baseUri: https://athena.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.athena_token
    resources:
    - name: structured-notes
      path: /pricing/structured-notes/{{note_id}}
      inputParameters:
      - name: note_id
        in: path
      operations:
      - name: price-structured-note
        method: GET
Open in Framework → View in Fleet → structured-note-pricing.yml

When the AML engine flags a suspicious transaction, enriches it with customer KYC data, creates a case in the case management system, and notifies the BSA officer via email.

naftiko: '0.5'
info:
  label: AML Transaction Monitoring and Escalation
  description: When the AML engine flags a suspicious transaction, enriches it with customer KYC data, creates a case in the case management system, and notifies the BSA officer via email.
  tags:
  - compliance
  - aml
  - kyc
  - case-management
capability:
  exposes:
  - type: mcp
    namespace: aml-monitoring
    port: 8080
    tools:
    - name: escalate-aml-alert
      description: Enrich an AML alert with KYC data, create a compliance case, and notify the BSA officer.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The AML alert identifier.
      - name: customer_id
        in: body
        type: string
        description: The customer entity ID.
      - name: bsa_officer_email
        in: body
        type: string
        description: Email of the BSA/AML officer.
      steps:
      - name: get-alert
        type: call
        call: aml-engine.get-alert
        with:
          alert_id: '{{alert_id}}'
      - name: get-kyc
        type: call
        call: kyc-platform.get-entity
        with:
          entity_id: '{{customer_id}}'
      - name: create-case
        type: call
        call: case-mgmt.create-case
        with:
          title: 'AML Alert: {{get-alert.alertType}} — {{get-kyc.entityName}}'
          description: 'Alert {{alert_id}} flagged transaction of {{get-alert.amount}} {{get-alert.currency}}. Customer risk tier: {{get-kyc.riskTier}}. KYC status: {{get-kyc.verificationStatus}}.'
          priority: high
          category: aml_investigation
      - name: notify-bsa-officer
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{bsa_officer_email}}'
          text: 'AML ALERT: Case {{create-case.caseId}} opened for {{get-kyc.entityName}}. Alert type: {{get-alert.alertType}}. Amount: {{get-alert.amount}} {{get-alert.currency}}. Risk tier: {{get-kyc.riskTier}}.'
  consumes:
  - type: http
    namespace: aml-engine
    baseUri: https://aml-engine.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.aml_engine_token
    resources:
    - name: alerts
      path: /alerts/{{alert_id}}
      inputParameters:
      - name: alert_id
        in: path
      operations:
      - name: get-alert
        method: GET
  - type: http
    namespace: kyc-platform
    baseUri: https://kyc-platform.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.kyc_platform_token
    resources:
    - name: entities
      path: /entities/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-entity
        method: GET
  - type: http
    namespace: case-mgmt
    baseUri: https://case-management.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.case_mgmt_token
    resources:
    - name: cases
      path: /cases
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → aml-transaction-monitoring-and-escalation.yml

Orchestrates periodic KYC refresh by pulling client data from the CRM, running sanctions screening, updating risk classification, and creating a review case in the compliance system.

naftiko: '0.5'
info:
  label: Client KYC Refresh Orchestrator
  description: Orchestrates periodic KYC refresh by pulling client data from the CRM, running sanctions screening, updating risk classification, and creating a review case in the compliance system.
  tags:
  - compliance
  - kyc
  - sanctions
capability:
  exposes:
  - type: mcp
    namespace: kyc-refresh
    port: 8080
    tools:
    - name: refresh-kyc
      description: Orchestrate a KYC refresh for a client.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The client ID.
      steps:
      - name: get-client-data
        type: call
        call: crm.get-client
        with:
          client_id: '{{client_id}}'
      - name: screen-sanctions
        type: call
        call: sanctions.screen-entity
        with:
          entity_name: '{{get-client-data.legal_name}}'
          entity_type: '{{get-client-data.entity_type}}'
          country: '{{get-client-data.domicile}}'
      - name: update-risk
        type: call
        call: risk-system.update-classification
        with:
          client_id: '{{client_id}}'
          sanctions_result: '{{screen-sanctions.result}}'
          pep_status: '{{screen-sanctions.pep_match}}'
      - name: create-review
        type: call
        call: compliance-system.create-case
        with:
          client_id: '{{client_id}}'
          case_type: KYC_Refresh
          risk_rating: '{{update-risk.new_rating}}'
          sanctions_hits: '{{screen-sanctions.hit_count}}'
  consumes:
  - type: http
    namespace: crm
    baseUri: https://crm.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.crm_token
    resources:
    - name: clients
      path: /clients/{{client_id}}
      inputParameters:
      - name: client_id
        in: path
      operations:
      - name: get-client
        method: GET
  - type: http
    namespace: sanctions
    baseUri: https://sanctions-screening.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sanctions_token
    resources:
    - name: screening
      path: /screen
      operations:
      - name: screen-entity
        method: POST
  - type: http
    namespace: risk-system
    baseUri: https://risk-management.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.risk_system_token
    resources:
    - name: classification
      path: /clients/classify
      operations:
      - name: update-classification
        method: POST
  - type: http
    namespace: compliance-system
    baseUri: https://compliance.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.compliance_token
    resources:
    - name: cases
      path: /cases
      operations:
      - name: create-case
        method: POST
Open in Framework → View in Fleet → client-kyc-refresh-orchestrator.yml

Fetches a real-time quote for a given instrument from the Bloomberg B-PIPE market data feed. Returns bid, ask, last price, and volume. Used by traders, portfolio managers, and risk analysts.

naftiko: '0.5'
info:
  label: Market Data Quote Retrieval
  description: Fetches a real-time quote for a given instrument from the Bloomberg B-PIPE market data feed. Returns bid, ask, last price, and volume. Used by traders, portfolio managers, and risk analysts.
  tags:
  - trading
  - market-data
  - bloomberg
capability:
  exposes:
  - type: mcp
    namespace: market-data
    port: 8080
    tools:
    - name: get-quote
      description: Retrieve a real-time quote from Bloomberg B-PIPE for a given ticker symbol. Returns bid, ask, last trade price, and volume.
      inputParameters:
      - name: ticker
        in: body
        type: string
        description: The Bloomberg ticker symbol (e.g., AAPL US Equity).
      call: bloomberg.get-quote
      with:
        ticker: '{{ticker}}'
      outputParameters:
      - name: bid
        type: number
        mapping: $.data.bid
      - name: ask
        type: number
        mapping: $.data.ask
      - name: last_price
        type: number
        mapping: $.data.lastPrice
      - name: volume
        type: number
        mapping: $.data.volume
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://bpipe-api.bloomberg.com/eap/catalogs/bbg/snapshots
    authentication:
      type: bearer
      token: $secrets.bloomberg_bpipe_token
    resources:
    - name: quotes
      path: /{{ticker}}
      inputParameters:
      - name: ticker
        in: path
      operations:
      - name: get-quote
        method: GET
Open in Framework → View in Fleet → market-data-quote-retrieval.yml

Retrieves account analysis statement for commercial banking clients, returning average balance, earnings credit rate, service charges, and net position.

naftiko: '0.5'
info:
  label: Commercial Banking Account Analysis
  description: Retrieves account analysis statement for commercial banking clients, returning average balance, earnings credit rate, service charges, and net position.
  tags:
  - commercial-banking
  - accounts
capability:
  exposes:
  - type: mcp
    namespace: account-analysis
    port: 8080
    tools:
    - name: get-analysis
      description: Retrieve commercial account analysis statement.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The commercial account ID.
      - name: statement_period
        in: body
        type: string
        description: The statement period.
      call: commercial-banking.get-analysis
      with:
        account_id: '{{account_id}}'
        statement_period: '{{statement_period}}'
      outputParameters:
      - name: avg_balance
        type: string
        mapping: $.analysis.averageBalance
      - name: ecr
        type: string
        mapping: $.analysis.earningsCreditRate
      - name: service_charges
        type: string
        mapping: $.analysis.totalServiceCharges
      - name: net_position
        type: string
        mapping: $.analysis.netPosition
  consumes:
  - type: http
    namespace: commercial-banking
    baseUri: https://commercial.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.commercial_token
    resources:
    - name: analysis
      path: /accounts/{{account_id}}/analysis
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-analysis
        method: GET
Open in Framework → View in Fleet → commercial-banking-account-analysis.yml

When a corporate action event is announced, retrieves affected holdings from the custody platform, calculates entitlements, records elections, and notifies the asset manager via the client portal.

naftiko: '0.5'
info:
  label: Custody Corporate Action Processing
  description: When a corporate action event is announced, retrieves affected holdings from the custody platform, calculates entitlements, records elections, and notifies the asset manager via the client portal.
  tags:
  - custody
  - corporate-actions
  - asset-management
capability:
  exposes:
  - type: mcp
    namespace: corporate-actions
    port: 8080
    tools:
    - name: process-corporate-action
      description: Identify affected holdings, calculate entitlements, record elections, and notify the asset manager.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The corporate action event identifier.
      - name: account_id
        in: body
        type: string
        description: The custody account affected.
      - name: election
        in: body
        type: string
        description: The client election choice (e.g., CASH, STOCK).
      steps:
      - name: get-event
        type: call
        call: corp-actions-svc.get-event
        with:
          event_id: '{{event_id}}'
      - name: get-holdings
        type: call
        call: custody-platform.get-holdings
        with:
          account_id: '{{account_id}}'
          isin: '{{get-event.isin}}'
      - name: calc-entitlement
        type: call
        call: corp-actions-svc.calculate-entitlement
        with:
          event_id: '{{event_id}}'
          quantity: '{{get-holdings.quantity}}'
          election: '{{election}}'
      - name: record-election
        type: call
        call: corp-actions-svc.submit-election
        with:
          event_id: '{{event_id}}'
          account_id: '{{account_id}}'
          election: '{{election}}'
          entitled_amount: '{{calc-entitlement.entitledAmount}}'
  consumes:
  - type: http
    namespace: corp-actions-svc
    baseUri: https://corp-actions.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.corp_actions_token
    resources:
    - name: events
      path: /events/{{event_id}}
      inputParameters:
      - name: event_id
        in: path
      operations:
      - name: get-event
        method: GET
    - name: entitlements
      path: /entitlements/calculate
      operations:
      - name: calculate-entitlement
        method: POST
    - name: elections
      path: /elections
      operations:
      - name: submit-election
        method: POST
  - type: http
    namespace: custody-platform
    baseUri: https://custody-api.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.custody_api_token
    resources:
    - name: holdings
      path: /accounts/{{account_id}}/holdings
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-holdings
        method: GET
Open in Framework → View in Fleet → custody-corporate-action-processing.yml

Processes a consumer mortgage application by pulling credit reports, running automated underwriting, generating the loan estimate, and notifying the loan officer via the CRM.

naftiko: '0.5'
info:
  label: Consumer Mortgage Origination Pipeline
  description: Processes a consumer mortgage application by pulling credit reports, running automated underwriting, generating the loan estimate, and notifying the loan officer via the CRM.
  tags:
  - lending
  - mortgage
  - consumer-banking
capability:
  exposes:
  - type: mcp
    namespace: mortgage-origination
    port: 8080
    tools:
    - name: originate-mortgage
      description: Process a consumer mortgage application.
      inputParameters:
      - name: application_id
        in: body
        type: string
        description: The mortgage application ID.
      - name: borrower_id
        in: body
        type: string
        description: The borrower ID.
      steps:
      - name: pull-credit
        type: call
        call: credit-bureau.pull-report
        with:
          borrower_id: '{{borrower_id}}'
      - name: run-underwriting
        type: call
        call: underwriting-engine.evaluate
        with:
          application_id: '{{application_id}}'
          credit_score: '{{pull-credit.fico_score}}'
          dti_ratio: '{{pull-credit.dti}}'
      - name: generate-estimate
        type: call
        call: loan-platform.generate-le
        with:
          application_id: '{{application_id}}'
          rate: '{{run-underwriting.offered_rate}}'
          term: '{{run-underwriting.term}}'
      - name: notify-lo
        type: call
        call: crm.create-task
        with:
          subject: 'Mortgage app {{application_id}}: {{run-underwriting.decision}}'
          description: 'FICO: {{pull-credit.fico_score}}. Rate: {{run-underwriting.offered_rate}}. Loan estimate generated: {{generate-estimate.le_id}}.'
  consumes:
  - type: http
    namespace: credit-bureau
    baseUri: https://credit-services.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.credit_bureau_token
    resources:
    - name: reports
      path: /reports/pull
      operations:
      - name: pull-report
        method: POST
  - type: http
    namespace: underwriting-engine
    baseUri: https://underwriting.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.underwriting_token
    resources:
    - name: evaluation
      path: /evaluate
      operations:
      - name: evaluate
        method: POST
  - type: http
    namespace: loan-platform
    baseUri: https://mortgage-platform.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.mortgage_platform_token
    resources:
    - name: loan-estimates
      path: /loan-estimates
      operations:
      - name: generate-le
        method: POST
  - type: http
    namespace: crm
    baseUri: https://crm.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.crm_token
    resources:
    - name: tasks
      path: /tasks
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → consumer-mortgage-origination-pipeline.yml

Orchestrates LC issuance by verifying the applicant KYC, screening the beneficiary, creating the LC in the trade finance system, and transmitting to the advising bank via SWIFT MT700.

naftiko: '0.5'
info:
  label: Trade Finance Letter of Credit Issuance
  description: Orchestrates LC issuance by verifying the applicant KYC, screening the beneficiary, creating the LC in the trade finance system, and transmitting to the advising bank via SWIFT MT700.
  tags:
  - commercial-banking
  - trade-finance
  - compliance
  - swift
  - kyc
capability:
  exposes:
  - type: mcp
    namespace: trade-finance
    port: 8080
    tools:
    - name: issue-letter-of-credit
      description: Verify KYC, screen beneficiary, create LC, and transmit via SWIFT.
      inputParameters:
      - name: applicant_entity_id
        in: body
        type: string
        description: Entity ID of the LC applicant.
      - name: beneficiary_name
        in: body
        type: string
        description: Full name of the beneficiary.
      - name: beneficiary_country
        in: body
        type: string
        description: Country code of the beneficiary.
      - name: advising_bank_bic
        in: body
        type: string
        description: SWIFT BIC of the advising bank.
      - name: amount
        in: body
        type: number
        description: LC amount.
      - name: currency
        in: body
        type: string
        description: LC currency.
      - name: expiry_date
        in: body
        type: string
        description: LC expiry date in YYYY-MM-DD format.
      steps:
      - name: verify-kyc
        type: call
        call: kyc-platform.get-entity
        with:
          entity_id: '{{applicant_entity_id}}'
      - name: screen-beneficiary
        type: call
        call: sanctions-svc.screen
        with:
          party_name: '{{beneficiary_name}}'
          country_code: '{{beneficiary_country}}'
      - name: create-lc
        type: call
        call: trade-finance-svc.create-lc
        with:
          applicant_entity_id: '{{applicant_entity_id}}'
          beneficiary_name: '{{beneficiary_name}}'
          amount: '{{amount}}'
          currency: '{{currency}}'
          expiry_date: '{{expiry_date}}'
      - name: transmit-mt700
        type: call
        call: swift-messaging.send-mt700
        with:
          advising_bank_bic: '{{advising_bank_bic}}'
          lc_number: '{{create-lc.lcNumber}}'
          amount: '{{amount}}'
          currency: '{{currency}}'
          beneficiary_name: '{{beneficiary_name}}'
          expiry_date: '{{expiry_date}}'
  consumes:
  - type: http
    namespace: kyc-platform
    baseUri: https://kyc-platform.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.kyc_platform_token
    resources:
    - name: entities
      path: /entities/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-entity
        method: GET
  - type: http
    namespace: sanctions-svc
    baseUri: https://sanctions-screening.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.sanctions_svc_token
    resources:
    - name: screenings
      path: /screen
      operations:
      - name: screen
        method: POST
  - type: http
    namespace: trade-finance-svc
    baseUri: https://trade-finance.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.trade_finance_token
    resources:
    - name: letters-of-credit
      path: /lc
      operations:
      - name: create-lc
        method: POST
  - type: http
    namespace: swift-messaging
    baseUri: https://swift-messaging.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.swift_messaging_token
    resources:
    - name: mt700
      path: /messages/mt700
      operations:
      - name: send-mt700
        method: POST
Open in Framework → View in Fleet → trade-finance-letter-of-credit-issuance.yml

Handles an FX spot trade from pricing through execution: fetches the live spot rate, submits the trade to the FX execution engine, books in the OMS, and confirms to the client via messaging.

naftiko: '0.5'
info:
  label: FX Trade Lifecycle Orchestrator
  description: 'Handles an FX spot trade from pricing through execution: fetches the live spot rate, submits the trade to the FX execution engine, books in the OMS, and confirms to the client via messaging.'
  tags:
  - trading
  - fx
  - oms
  - confirmation
capability:
  exposes:
  - type: mcp
    namespace: fx-trade-lifecycle
    port: 8080
    tools:
    - name: execute-fx-trade
      description: Price, execute, book, and confirm an FX spot trade.
      inputParameters:
      - name: currency_pair
        in: body
        type: string
        description: Currency pair (e.g., EURUSD).
      - name: side
        in: body
        type: string
        description: BUY or SELL the base currency.
      - name: notional
        in: body
        type: number
        description: Notional amount in base currency.
      - name: client_id
        in: body
        type: string
        description: Client account identifier.
      steps:
      - name: get-rate
        type: call
        call: fx-engine.get-spot
        with:
          currency_pair: '{{currency_pair}}'
      - name: execute-trade
        type: call
        call: fx-execution.submit
        with:
          currency_pair: '{{currency_pair}}'
          side: '{{side}}'
          notional: '{{notional}}'
          rate: '{{get-rate.mid}}'
      - name: book-trade
        type: call
        call: oms.book-trade
        with:
          trade_ref: '{{execute-trade.tradeRef}}'
          client_id: '{{client_id}}'
          currency_pair: '{{currency_pair}}'
          notional: '{{notional}}'
          rate: '{{execute-trade.executedRate}}'
      - name: confirm-client
        type: call
        call: messaging.send-confirmation
        with:
          client_id: '{{client_id}}'
          message: 'FX trade confirmed: {{side}} {{notional}} {{currency_pair}} at {{execute-trade.executedRate}}. Trade ref: {{execute-trade.tradeRef}}. Value date: {{execute-trade.valueDate}}.'
  consumes:
  - type: http
    namespace: fx-engine
    baseUri: https://fx-pricing.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.fx_engine_token
    resources:
    - name: spot-rates
      path: /spot/{{currency_pair}}
      inputParameters:
      - name: currency_pair
        in: path
      operations:
      - name: get-spot
        method: GET
  - type: http
    namespace: fx-execution
    baseUri: https://fx-execution.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.fx_execution_token
    resources:
    - name: trades
      path: /trades
      operations:
      - name: submit
        method: POST
  - type: http
    namespace: oms
    baseUri: https://oms.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.oms_token
    resources:
    - name: bookings
      path: /bookings
      operations:
      - name: book-trade
        method: POST
  - type: http
    namespace: messaging
    baseUri: https://client-messaging.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.messaging_token
    resources:
    - name: confirmations
      path: /confirmations
      operations:
      - name: send-confirmation
        method: POST
Open in Framework → View in Fleet → fx-trade-lifecycle-orchestrator.yml

Orchestrates regulatory stress test submission by extracting portfolio data, running stress scenarios in the risk engine, compiling the CCAR/DFAST report, and submitting to the Federal Reserve portal.

naftiko: '0.5'
info:
  label: Regulatory Stress Test Submission Pipeline
  description: Orchestrates regulatory stress test submission by extracting portfolio data, running stress scenarios in the risk engine, compiling the CCAR/DFAST report, and submitting to the Federal Reserve portal.
  tags:
  - regulatory
  - risk
  - stress-testing
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: stress-test-submission
    port: 8080
    tools:
    - name: submit-stress-test
      description: Execute and submit a regulatory stress test.
      inputParameters:
      - name: test_cycle
        in: body
        type: string
        description: The stress test cycle (e.g. CCAR-2026).
      - name: scenario_set
        in: body
        type: string
        description: The scenario set (baseline, adverse, severely_adverse).
      steps:
      - name: extract-portfolios
        type: call
        call: risk-engine.extract-positions
        with:
          test_cycle: '{{test_cycle}}'
      - name: run-scenarios
        type: call
        call: risk-engine.run-stress-scenarios
        with:
          test_cycle: '{{test_cycle}}'
          scenario_set: '{{scenario_set}}'
          portfolio_id: '{{extract-portfolios.portfolio_id}}'
      - name: compile-report
        type: call
        call: reporting-engine.compile-ccar
        with:
          test_cycle: '{{test_cycle}}'
          results_id: '{{run-scenarios.results_id}}'
      - name: submit-to-fed
        type: call
        call: regulatory-gateway.submit
        with:
          report_id: '{{compile-report.report_id}}'
          test_cycle: '{{test_cycle}}'
  consumes:
  - type: http
    namespace: risk-engine
    baseUri: https://risk-engine.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.risk_engine_token
    resources:
    - name: positions
      path: /stress-test/extract
      operations:
      - name: extract-positions
        method: POST
    - name: scenarios
      path: /stress-test/run
      operations:
      - name: run-stress-scenarios
        method: POST
  - type: http
    namespace: reporting-engine
    baseUri: https://regulatory-reporting.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.reporting_token
    resources:
    - name: ccar
      path: /ccar/compile
      operations:
      - name: compile-ccar
        method: POST
  - type: http
    namespace: regulatory-gateway
    baseUri: https://regulatory-gateway.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.regulatory_gateway_token
    resources:
    - name: submissions
      path: /submit
      operations:
      - name: submit
        method: POST
Open in Framework → View in Fleet → regulatory-stress-test-submission-pipeline.yml

Queries the FIX gateway for the current execution status of an equities order by ClOrdID. Returns fill quantity, average price, and order state. Used by electronic trading desks to check order lifecycle without accessing the OMS directly.

naftiko: '0.5'
info:
  label: FIX Order Status Lookup
  description: Queries the FIX gateway for the current execution status of an equities order by ClOrdID. Returns fill quantity, average price, and order state. Used by electronic trading desks to check order lifecycle without accessing the OMS directly.
  tags:
  - trading
  - equities
  - fix-gateway
capability:
  exposes:
  - type: mcp
    namespace: equities-trading
    port: 8080
    tools:
    - name: get-order-status
      description: Look up a FIX equities order by ClOrdID. Returns execution status, filled quantity, average price, and last update timestamp.
      inputParameters:
      - name: cl_ord_id
        in: body
        type: string
        description: The client order ID assigned at submission.
      call: fix-gw.get-order
      with:
        cl_ord_id: '{{cl_ord_id}}'
      outputParameters:
      - name: order_status
        type: string
        mapping: $.ordStatus
      - name: filled_qty
        type: number
        mapping: $.cumQty
      - name: avg_price
        type: number
        mapping: $.avgPx
      - name: last_updated
        type: string
        mapping: $.transactTime
  consumes:
  - type: http
    namespace: fix-gw
    baseUri: https://fix-gateway.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.fix_gateway_token
    resources:
    - name: orders
      path: /orders/{{cl_ord_id}}
      inputParameters:
      - name: cl_ord_id
        in: path
      operations:
      - name: get-order
        method: GET
Open in Framework → View in Fleet → fix-order-status-lookup.yml

Fetches the latest Value-at-Risk calculation for a trading book from the market risk engine. Returns VaR at 95% and 99% confidence levels, plus stressed VaR. Used by risk managers for daily limit monitoring.

naftiko: '0.5'
info:
  label: VaR Calculation Retrieval
  description: Fetches the latest Value-at-Risk calculation for a trading book from the market risk engine. Returns VaR at 95% and 99% confidence levels, plus stressed VaR. Used by risk managers for daily limit monitoring.
  tags:
  - risk
  - market-risk
  - var
  - trading
capability:
  exposes:
  - type: mcp
    namespace: market-risk
    port: 8080
    tools:
    - name: get-var
      description: Retrieve the latest VaR for a trading book by book ID. Returns VaR-95, VaR-99, stressed VaR, and calculation date.
      inputParameters:
      - name: book_id
        in: body
        type: string
        description: The trading book identifier.
      call: risk-engine.get-var
      with:
        book_id: '{{book_id}}'
      outputParameters:
      - name: var_95
        type: number
        mapping: $.var.confidence95
      - name: var_99
        type: number
        mapping: $.var.confidence99
      - name: stressed_var
        type: number
        mapping: $.var.stressedVar
      - name: calc_date
        type: string
        mapping: $.var.calculationDate
  consumes:
  - type: http
    namespace: risk-engine
    baseUri: https://risk-engine.jpmorgan.com/api/v3
    authentication:
      type: bearer
      token: $secrets.risk_engine_token
    resources:
    - name: var
      path: /books/{{book_id}}/var
      inputParameters:
      - name: book_id
        in: path
      operations:
      - name: get-var
        method: GET
Open in Framework → View in Fleet → var-calculation-retrieval.yml

Looks up a legal entity in the enterprise reference data service by LEI or short name. Returns full legal name, domicile, sector classification, and parent hierarchy. Used across the firm for entity resolution.

naftiko: '0.5'
info:
  label: Reference Data Entity Lookup
  description: Looks up a legal entity in the enterprise reference data service by LEI or short name. Returns full legal name, domicile, sector classification, and parent hierarchy. Used across the firm for entity resolution.
  tags:
  - reference-data
  - entity
  - operations
capability:
  exposes:
  - type: mcp
    namespace: ref-data
    port: 8080
    tools:
    - name: get-entity
      description: Look up a legal entity by LEI. Returns full legal name, domicile, GICS sector, and parent entity.
      inputParameters:
      - name: lei
        in: body
        type: string
        description: The 20-character Legal Entity Identifier.
      call: ref-data-svc.get-entity
      with:
        lei: '{{lei}}'
      outputParameters:
      - name: legal_name
        type: string
        mapping: $.entity.legalName
      - name: domicile
        type: string
        mapping: $.entity.domicileCountry
      - name: gics_sector
        type: string
        mapping: $.entity.gicsSector
      - name: parent_lei
        type: string
        mapping: $.entity.parentLEI
  consumes:
  - type: http
    namespace: ref-data-svc
    baseUri: https://ref-data.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.ref_data_token
    resources:
    - name: entities
      path: /entities/{{lei}}
      inputParameters:
      - name: lei
        in: path
      operations:
      - name: get-entity
        method: GET
Open in Framework → View in Fleet → reference-data-entity-lookup.yml

Retrieves fund NAV calculation from the custody platform, returning total assets, total liabilities, NAV per share, and shares outstanding for fund administration.

naftiko: '0.5'
info:
  label: Custody Fund NAV Calculation
  description: Retrieves fund NAV calculation from the custody platform, returning total assets, total liabilities, NAV per share, and shares outstanding for fund administration.
  tags:
  - custody
  - fund-administration
  - asset-management
capability:
  exposes:
  - type: mcp
    namespace: fund-nav
    port: 8080
    tools:
    - name: get-nav
      description: Retrieve fund NAV calculation.
      inputParameters:
      - name: fund_id
        in: body
        type: string
        description: The fund ID.
      - name: nav_date
        in: body
        type: string
        description: The NAV calculation date.
      call: custody.get-nav
      with:
        fund_id: '{{fund_id}}'
        nav_date: '{{nav_date}}'
      outputParameters:
      - name: total_assets
        type: string
        mapping: $.nav.totalAssets
      - name: total_liabilities
        type: string
        mapping: $.nav.totalLiabilities
      - name: nav_per_share
        type: string
        mapping: $.nav.navPerShare
      - name: shares_outstanding
        type: number
        mapping: $.nav.sharesOutstanding
  consumes:
  - type: http
    namespace: custody
    baseUri: https://custody.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.custody_token
    resources:
    - name: nav
      path: /funds/{{fund_id}}/nav?date={{nav_date}}
      inputParameters:
      - name: fund_id
        in: path
      - name: nav_date
        in: query
      operations:
      - name: get-nav
        method: GET
Open in Framework → View in Fleet → custody-fund-nav-calculation.yml

Runs a regulatory stress test scenario across portfolios: applies market shocks, recalculates P&L impact, aggregates losses, and stores results in the regulatory reporting platform for CCAR/DFAST submission.

naftiko: '0.5'
info:
  label: Stress Test Scenario Execution
  description: 'Runs a regulatory stress test scenario across portfolios: applies market shocks, recalculates P&L impact, aggregates losses, and stores results in the regulatory reporting platform for CCAR/DFAST submission.'
  tags:
  - risk
  - stress-testing
  - regulatory
  - ccar
capability:
  exposes:
  - type: mcp
    namespace: stress-testing
    port: 8080
    tools:
    - name: run-stress-test
      description: Apply scenario shocks, calculate portfolio impacts, aggregate results, and store for regulatory filing.
      inputParameters:
      - name: scenario_id
        in: body
        type: string
        description: The stress test scenario identifier.
      - name: reporting_date
        in: body
        type: string
        description: Reporting date in YYYY-MM-DD format.
      steps:
      - name: get-scenario
        type: call
        call: stress-engine.get-scenario
        with:
          scenario_id: '{{scenario_id}}'
      - name: apply-shocks
        type: call
        call: stress-engine.apply-shocks
        with:
          scenario_id: '{{scenario_id}}'
          reporting_date: '{{reporting_date}}'
      - name: aggregate-results
        type: call
        call: stress-engine.aggregate
        with:
          run_id: '{{apply-shocks.runId}}'
      - name: store-results
        type: call
        call: reg-platform.submit-stress-results
        with:
          scenario_id: '{{scenario_id}}'
          reporting_date: '{{reporting_date}}'
          total_loss: '{{aggregate-results.totalLoss}}'
          capital_impact: '{{aggregate-results.capitalImpact}}'
          run_id: '{{apply-shocks.runId}}'
  consumes:
  - type: http
    namespace: stress-engine
    baseUri: https://stress-testing.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.stress_engine_token
    resources:
    - name: scenarios
      path: /scenarios/{{scenario_id}}
      inputParameters:
      - name: scenario_id
        in: path
      operations:
      - name: get-scenario
        method: GET
    - name: shocks
      path: /execute
      operations:
      - name: apply-shocks
        method: POST
    - name: aggregation
      path: /runs/{{run_id}}/aggregate
      inputParameters:
      - name: run_id
        in: path
      operations:
      - name: aggregate
        method: POST
  - type: http
    namespace: reg-platform
    baseUri: https://reg-reporting.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.reg_platform_token
    resources:
    - name: stress-results
      path: /stress-results
      operations:
      - name: submit-stress-results
        method: POST
Open in Framework → View in Fleet → stress-test-scenario-execution.yml

Checks securities lending availability for a given ISIN, sources a locate from the inventory pool, books the borrow in the lending system, and confirms to the requesting trader via messaging.

naftiko: '0.5'
info:
  label: Securities Lending Availability and Locate
  description: Checks securities lending availability for a given ISIN, sources a locate from the inventory pool, books the borrow in the lending system, and confirms to the requesting trader via messaging.
  tags:
  - trading
  - securities-lending
  - prime-brokerage
capability:
  exposes:
  - type: mcp
    namespace: sec-lending
    port: 8080
    tools:
    - name: locate-and-borrow
      description: Check availability, source a locate, book the borrow, and confirm to the trader.
      inputParameters:
      - name: isin
        in: body
        type: string
        description: The ISIN of the security to borrow.
      - name: quantity
        in: body
        type: number
        description: Number of shares to borrow.
      - name: trader_email
        in: body
        type: string
        description: Email of the requesting trader.
      steps:
      - name: check-availability
        type: call
        call: lending-platform.check-availability
        with:
          isin: '{{isin}}'
          quantity: '{{quantity}}'
      - name: book-borrow
        type: call
        call: lending-platform.book-borrow
        with:
          isin: '{{isin}}'
          quantity: '{{quantity}}'
          rate: '{{check-availability.indicativeRate}}'
          lender_pool: '{{check-availability.lenderPool}}'
      - name: confirm-trader
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{trader_email}}'
          text: 'Locate confirmed: {{quantity}} shares of {{isin}} at {{check-availability.indicativeRate}} bps. Borrow ref: {{book-borrow.borrowRef}}. Available pool: {{check-availability.availableQty}}.'
  consumes:
  - type: http
    namespace: lending-platform
    baseUri: https://sec-lending.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.sec_lending_token
    resources:
    - name: availability
      path: /availability
      operations:
      - name: check-availability
        method: POST
    - name: borrows
      path: /borrows
      operations:
      - name: book-borrow
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → securities-lending-availability-and-locate.yml

Retrieves credit exposure data for a counterparty, returning current exposure, potential future exposure, credit limit, and utilization percentage.

naftiko: '0.5'
info:
  label: Credit Exposure Counterparty Lookup
  description: Retrieves credit exposure data for a counterparty, returning current exposure, potential future exposure, credit limit, and utilization percentage.
  tags:
  - risk
  - credit
  - counterparty
capability:
  exposes:
  - type: mcp
    namespace: credit-exposure
    port: 8080
    tools:
    - name: get-exposure
      description: Look up credit exposure for a counterparty.
      inputParameters:
      - name: counterparty_id
        in: body
        type: string
        description: The counterparty ID.
      call: risk-engine.get-exposure
      with:
        counterparty_id: '{{counterparty_id}}'
      outputParameters:
      - name: current_exposure
        type: string
        mapping: $.exposure.currentExposure
      - name: pfe
        type: string
        mapping: $.exposure.potentialFutureExposure
      - name: credit_limit
        type: string
        mapping: $.exposure.creditLimit
      - name: utilization_pct
        type: string
        mapping: $.exposure.utilizationPercentage
  consumes:
  - type: http
    namespace: risk-engine
    baseUri: https://risk-engine.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.risk_engine_token
    resources:
    - name: exposure
      path: /credit/counterparty/{{counterparty_id}}
      inputParameters:
      - name: counterparty_id
        in: path
      operations:
      - name: get-exposure
        method: GET
Open in Framework → View in Fleet → credit-exposure-counterparty-lookup.yml

Prepares a quarterly client review for private banking: pulls portfolio performance, retrieves recent transactions, fetches CRM activity notes from Salesforce, and generates a briefing document in SharePoint.

naftiko: '0.5'
info:
  label: Private Banking Client Review Preparation
  description: 'Prepares a quarterly client review for private banking: pulls portfolio performance, retrieves recent transactions, fetches CRM activity notes from Salesforce, and generates a briefing document in SharePoint.'
  tags:
  - wealth-management
  - private-banking
  - portfolio
  - salesforce
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: client-review-prep
    port: 8080
    tools:
    - name: prepare-review
      description: Assemble portfolio performance, transactions, CRM notes, and generate a briefing document.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The private banking client identifier.
      - name: portfolio_id
        in: body
        type: string
        description: The client portfolio identifier.
      - name: review_period
        in: body
        type: string
        description: Review period (e.g., Q1-2026).
      steps:
      - name: get-performance
        type: call
        call: portfolio-svc.get-performance
        with:
          portfolio_id: '{{portfolio_id}}'
          period: '{{review_period}}'
      - name: get-transactions
        type: call
        call: portfolio-svc.get-transactions
        with:
          portfolio_id: '{{portfolio_id}}'
          period: '{{review_period}}'
      - name: get-crm-notes
        type: call
        call: salesforce.get-activity
        with:
          client_id: '{{client_id}}'
          period: '{{review_period}}'
      - name: generate-briefing
        type: call
        call: sharepoint.create-document
        with:
          site_id: private_banking_site
          folder_path: ClientReviews/{{client_id}}/{{review_period}}
          document_name: Quarterly_Review_{{review_period}}.docx
          performance_data: '{{get-performance.summary}}'
          transactions_data: '{{get-transactions.summary}}'
          crm_notes: '{{get-crm-notes.notes}}'
  consumes:
  - type: http
    namespace: portfolio-svc
    baseUri: https://portfolio-api.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.portfolio_api_token
    resources:
    - name: performance
      path: /portfolios/{{portfolio_id}}/performance
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: get-performance
        method: GET
    - name: transactions
      path: /portfolios/{{portfolio_id}}/transactions
      inputParameters:
      - name: portfolio_id
        in: path
      operations:
      - name: get-transactions
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://jpmorgan.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: activity
      path: /query
      operations:
      - name: get-activity
        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}}/{{document_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: document_name
        in: path
      operations:
      - name: create-document
        method: PUT
Open in Framework → View in Fleet → private-banking-client-review-preparation.yml

Retrieves financial plan details for a JP Morgan private banking client, returning retirement readiness score, asset allocation, and projected wealth trajectory.

naftiko: '0.5'
info:
  label: Wealth Client Financial Plan Lookup
  description: Retrieves financial plan details for a JP Morgan private banking client, returning retirement readiness score, asset allocation, and projected wealth trajectory.
  tags:
  - wealth-management
  - financial-planning
capability:
  exposes:
  - type: mcp
    namespace: financial-planning
    port: 8080
    tools:
    - name: get-financial-plan
      description: Retrieve a wealth client financial plan.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The client ID.
      call: wealth-platform.get-plan
      with:
        client_id: '{{client_id}}'
      outputParameters:
      - name: retirement_score
        type: number
        mapping: $.plan.retirementReadinessScore
      - name: asset_allocation
        type: string
        mapping: $.plan.currentAllocation
      - name: projected_wealth
        type: string
        mapping: $.plan.projectedWealth
  consumes:
  - type: http
    namespace: wealth-platform
    baseUri: https://wealth.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.wealth_token
    resources:
    - name: plans
      path: /clients/{{client_id}}/financial-plan
      inputParameters:
      - name: client_id
        in: path
      operations:
      - name: get-plan
        method: GET
Open in Framework → View in Fleet → wealth-client-financial-plan-lookup.yml

Retrieves global payment routing status from the payment hub, returning selected route, estimated arrival time, correspondent bank chain, and total fees.

naftiko: '0.5'
info:
  label: Global Payments Routing Status
  description: Retrieves global payment routing status from the payment hub, returning selected route, estimated arrival time, correspondent bank chain, and total fees.
  tags:
  - payments
  - global
capability:
  exposes:
  - type: mcp
    namespace: payment-routing
    port: 8080
    tools:
    - name: get-routing-status
      description: Retrieve payment routing status.
      inputParameters:
      - name: payment_id
        in: body
        type: string
        description: The payment ID.
      call: payment-hub.get-route
      with:
        payment_id: '{{payment_id}}'
      outputParameters:
      - name: route
        type: string
        mapping: $.routing.selectedRoute
      - name: eta
        type: string
        mapping: $.routing.estimatedArrival
      - name: correspondent_chain
        type: string
        mapping: $.routing.correspondentBanks
      - name: total_fees
        type: string
        mapping: $.routing.totalFees
  consumes:
  - type: http
    namespace: payment-hub
    baseUri: https://payment-hub.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.payment_hub_token
    resources:
    - name: routing
      path: /payments/{{payment_id}}/routing
      inputParameters:
      - name: payment_id
        in: path
      operations:
      - name: get-route
        method: GET
Open in Framework → View in Fleet → global-payments-routing-status.yml

Retrieves mutual fund order details from the fund platform, returning order type, amount, NAV applied, and settlement status for asset management operations.

naftiko: '0.5'
info:
  label: Mutual Fund Order Lookup
  description: Retrieves mutual fund order details from the fund platform, returning order type, amount, NAV applied, and settlement status for asset management operations.
  tags:
  - asset-management
  - mutual-funds
capability:
  exposes:
  - type: mcp
    namespace: fund-orders
    port: 8080
    tools:
    - name: get-fund-order
      description: Look up a mutual fund order.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The fund order ID.
      call: fund-platform.get-order
      with:
        order_id: '{{order_id}}'
      outputParameters:
      - name: order_type
        type: string
        mapping: $.order.type
      - name: amount
        type: string
        mapping: $.order.amount
      - name: nav_applied
        type: string
        mapping: $.order.navApplied
      - name: settlement_status
        type: string
        mapping: $.order.settlementStatus
  consumes:
  - type: http
    namespace: fund-platform
    baseUri: https://fund-services.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.fund_platform_token
    resources:
    - name: orders
      path: /orders/{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
Open in Framework → View in Fleet → mutual-fund-order-lookup.yml

Retrieves current exposure for a counterparty, checks against approved credit limits, and if utilization exceeds threshold, creates a limit breach event and notifies the credit officer via ServiceNow and Teams.

naftiko: '0.5'
info:
  label: Counterparty Credit Limit Monitoring
  description: Retrieves current exposure for a counterparty, checks against approved credit limits, and if utilization exceeds threshold, creates a limit breach event and notifies the credit officer via ServiceNow and Teams.
  tags:
  - risk
  - credit
  - counterparty
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: credit-limit-monitoring
    port: 8080
    tools:
    - name: check-credit-limit
      description: Retrieve counterparty exposure, compare to limits, and escalate breaches.
      inputParameters:
      - name: counterparty_lei
        in: body
        type: string
        description: LEI of the counterparty.
      - name: credit_officer_email
        in: body
        type: string
        description: Email of the responsible credit officer.
      steps:
      - name: get-exposure
        type: call
        call: risk-engine.get-exposure
        with:
          lei: '{{counterparty_lei}}'
      - name: get-limits
        type: call
        call: risk-engine.get-credit-limits
        with:
          lei: '{{counterparty_lei}}'
      - name: create-breach-event
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Credit limit breach: {{get-exposure.counterpartyName}} utilization {{get-exposure.utilizationPct}}%'
          category: credit_risk
          assigned_group: Credit_Risk
          description: 'Current exposure: {{get-exposure.totalExposure}}. Approved limit: {{get-limits.approvedLimit}}. Utilization: {{get-exposure.utilizationPct}}%.'
      - name: notify-credit-officer
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{credit_officer_email}}'
          text: 'CREDIT LIMIT ALERT: {{get-exposure.counterpartyName}} at {{get-exposure.utilizationPct}}% utilization. Exposure: {{get-exposure.totalExposure}}. Limit: {{get-limits.approvedLimit}}. Incident: {{create-breach-event.number}}.'
  consumes:
  - type: http
    namespace: risk-engine
    baseUri: https://risk-engine.jpmorgan.com/api/v3
    authentication:
      type: bearer
      token: $secrets.risk_engine_token
    resources:
    - name: exposure
      path: /counterparties/{{lei}}/exposure
      inputParameters:
      - name: lei
        in: path
      operations:
      - name: get-exposure
        method: GET
    - name: credit-limits
      path: /counterparties/{{lei}}/limits
      inputParameters:
      - name: lei
        in: path
      operations:
      - name: get-credit-limits
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://jpmorgan.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → counterparty-credit-limit-monitoring.yml

Retrieves commodity futures position data from the OMS, returning contract details, quantity, average price, and unrealized P&L.

naftiko: '0.5'
info:
  label: Commodity Futures Position Lookup
  description: Retrieves commodity futures position data from the OMS, returning contract details, quantity, average price, and unrealized P&L.
  tags:
  - trading
  - commodities
capability:
  exposes:
  - type: mcp
    namespace: commodity-positions
    port: 8080
    tools:
    - name: get-futures-position
      description: Look up a commodity futures position.
      inputParameters:
      - name: contract_id
        in: body
        type: string
        description: The futures contract ID.
      call: oms.get-position
      with:
        contract_id: '{{contract_id}}'
      outputParameters:
      - name: contract
        type: string
        mapping: $.position.contractName
      - name: quantity
        type: number
        mapping: $.position.quantity
      - name: avg_price
        type: string
        mapping: $.position.averagePrice
      - name: unrealized_pnl
        type: string
        mapping: $.position.unrealizedPnL
  consumes:
  - type: http
    namespace: oms
    baseUri: https://oms.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.oms_token
    resources:
    - name: positions
      path: /positions/futures/{{contract_id}}
      inputParameters:
      - name: contract_id
        in: path
      operations:
      - name: get-position
        method: GET
Open in Framework → View in Fleet → commodity-futures-position-lookup.yml

Retrieves syndicated loan facility details, returning facility amount, drawn amount, participant banks, and agent bank for leveraged lending.

naftiko: '0.5'
info:
  label: Syndicated Loan Facility Lookup
  description: Retrieves syndicated loan facility details, returning facility amount, drawn amount, participant banks, and agent bank for leveraged lending.
  tags:
  - lending
  - syndicated-loans
  - investment-banking
capability:
  exposes:
  - type: mcp
    namespace: syndicated-loans
    port: 8080
    tools:
    - name: get-facility
      description: Look up a syndicated loan facility.
      inputParameters:
      - name: facility_id
        in: body
        type: string
        description: The facility ID.
      call: lending.get-syndicated-facility
      with:
        facility_id: '{{facility_id}}'
      outputParameters:
      - name: facility_amount
        type: string
        mapping: $.facility.totalAmount
      - name: drawn_amount
        type: string
        mapping: $.facility.drawnAmount
      - name: participant_count
        type: number
        mapping: $.facility.participantCount
      - name: agent_bank
        type: string
        mapping: $.facility.agentBank
  consumes:
  - type: http
    namespace: lending
    baseUri: https://lending-platform.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lending_token
    resources:
    - name: syndicated
      path: /syndicated/facilities/{{facility_id}}
      inputParameters:
      - name: facility_id
        in: path
      operations:
      - name: get-syndicated-facility
        method: GET
Open in Framework → View in Fleet → syndicated-loan-facility-lookup.yml

Fetches the current Know Your Customer record for a client entity from the KYC platform. Returns verification status, risk tier, and document expiry. Used by compliance analysts during periodic reviews.

naftiko: '0.5'
info:
  label: KYC Document Retrieval
  description: Fetches the current Know Your Customer record for a client entity from the KYC platform. Returns verification status, risk tier, and document expiry. Used by compliance analysts during periodic reviews.
  tags:
  - compliance
  - kyc
  - onboarding
capability:
  exposes:
  - type: mcp
    namespace: compliance-kyc
    port: 8080
    tools:
    - name: get-kyc-record
      description: Retrieve a KYC record for a client entity by entity ID. Returns verification status, risk tier, and document expiry date.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The internal entity identifier for the client.
      call: kyc-platform.get-entity
      with:
        entity_id: '{{entity_id}}'
      outputParameters:
      - name: verification_status
        type: string
        mapping: $.entity.verificationStatus
      - name: risk_tier
        type: string
        mapping: $.entity.riskTier
      - name: document_expiry
        type: string
        mapping: $.entity.documentExpiryDate
  consumes:
  - type: http
    namespace: kyc-platform
    baseUri: https://kyc-platform.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.kyc_platform_token
    resources:
    - name: entities
      path: /entities/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-entity
        method: GET
Open in Framework → View in Fleet → kyc-document-retrieval.yml

Retrieves equity option pricing from the Athena pricing engine, returning theoretical price, delta, gamma, vega, and implied volatility.

naftiko: '0.5'
info:
  label: Equity Option Pricing Lookup
  description: Retrieves equity option pricing from the Athena pricing engine, returning theoretical price, delta, gamma, vega, and implied volatility.
  tags:
  - trading
  - derivatives
  - equities
capability:
  exposes:
  - type: mcp
    namespace: option-pricing
    port: 8080
    tools:
    - name: price-option
      description: Price an equity option via Athena.
      inputParameters:
      - name: underlying
        in: body
        type: string
        description: The underlying ticker.
      - name: strike
        in: body
        type: string
        description: The strike price.
      - name: expiry
        in: body
        type: string
        description: The expiry date.
      - name: option_type
        in: body
        type: string
        description: CALL or PUT.
      call: athena.price-option
      with:
        underlying: '{{underlying}}'
        strike: '{{strike}}'
        expiry: '{{expiry}}'
        option_type: '{{option_type}}'
      outputParameters:
      - name: theo_price
        type: string
        mapping: $.pricing.theoreticalPrice
      - name: delta
        type: string
        mapping: $.pricing.delta
      - name: gamma
        type: string
        mapping: $.pricing.gamma
      - name: implied_vol
        type: string
        mapping: $.pricing.impliedVol
  consumes:
  - type: http
    namespace: athena
    baseUri: https://athena.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.athena_token
    resources:
    - name: options
      path: /pricing/equity-options
      operations:
      - name: price-option
        method: POST
Open in Framework → View in Fleet → equity-option-pricing-lookup.yml

Retrieves prime brokerage client portfolio data, returning NAV, gross exposure, net exposure, and margin utilization for hedge fund clients.

naftiko: '0.5'
info:
  label: Prime Brokerage Portfolio Lookup
  description: Retrieves prime brokerage client portfolio data, returning NAV, gross exposure, net exposure, and margin utilization for hedge fund clients.
  tags:
  - prime-brokerage
  - portfolio
capability:
  exposes:
  - type: mcp
    namespace: prime-brokerage
    port: 8080
    tools:
    - name: get-pb-portfolio
      description: Look up a prime brokerage client portfolio.
      inputParameters:
      - name: fund_id
        in: body
        type: string
        description: The fund account ID.
      call: pb-platform.get-portfolio
      with:
        fund_id: '{{fund_id}}'
      outputParameters:
      - name: nav
        type: string
        mapping: $.portfolio.nav
      - name: gross_exposure
        type: string
        mapping: $.portfolio.grossExposure
      - name: net_exposure
        type: string
        mapping: $.portfolio.netExposure
      - name: margin_utilization
        type: string
        mapping: $.portfolio.marginUtilization
  consumes:
  - type: http
    namespace: pb-platform
    baseUri: https://prime-brokerage.jpmorgan.com/api/v1
    authentication:
      type: bearer
      token: $secrets.pb_token
    resources:
    - name: portfolios
      path: /funds/{{fund_id}}/portfolio
      inputParameters:
      - name: fund_id
        in: path
      operations:
      - name: get-portfolio
        method: GET
Open in Framework → View in Fleet → prime-brokerage-portfolio-lookup.yml

Retrieves instrument reference data from the golden source, returning ISIN, ticker, instrument type, currency, and exchange for trade booking.

naftiko: '0.5'
info:
  label: Reference Data Instrument Lookup
  description: Retrieves instrument reference data from the golden source, returning ISIN, ticker, instrument type, currency, and exchange for trade booking.
  tags:
  - reference-data
  - trading
capability:
  exposes:
  - type: mcp
    namespace: instrument-reference
    port: 8080
    tools:
    - name: get-instrument
      description: Look up instrument reference data.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: The instrument identifier (ISIN, ticker, CUSIP).
      call: ref-data.get-instrument
      with:
        identifier: '{{identifier}}'
      outputParameters:
      - name: isin
        type: string
        mapping: $.instrument.isin
      - name: ticker
        type: string
        mapping: $.instrument.ticker
      - name: instrument_type
        type: string
        mapping: $.instrument.type
      - name: currency
        type: string
        mapping: $.instrument.currency
  consumes:
  - type: http
    namespace: ref-data
    baseUri: https://reference-data.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.ref_data_token
    resources:
    - name: instruments
      path: /instruments/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-instrument
        method: GET
Open in Framework → View in Fleet → reference-data-instrument-lookup.yml

Retrieves CDS pricing data from the pricing engine, returning spread, upfront fee, recovery rate, and implied probability of default for credit trading.

naftiko: '0.5'
info:
  label: Credit Default Swap Pricing Lookup
  description: Retrieves CDS pricing data from the pricing engine, returning spread, upfront fee, recovery rate, and implied probability of default for credit trading.
  tags:
  - trading
  - credit
  - derivatives
capability:
  exposes:
  - type: mcp
    namespace: cds-pricing
    port: 8080
    tools:
    - name: get-cds-price
      description: Look up CDS pricing for a reference entity.
      inputParameters:
      - name: reference_entity
        in: body
        type: string
        description: The reference entity name or ticker.
      - name: tenor
        in: body
        type: string
        description: The CDS tenor (e.g. 5Y).
      call: athena.price-cds
      with:
        reference_entity: '{{reference_entity}}'
        tenor: '{{tenor}}'
      outputParameters:
      - name: spread_bps
        type: number
        mapping: $.pricing.spread
      - name: upfront_pct
        type: string
        mapping: $.pricing.upfront
      - name: recovery_rate
        type: string
        mapping: $.pricing.recoveryRate
      - name: implied_pd
        type: string
        mapping: $.pricing.impliedPD
  consumes:
  - type: http
    namespace: athena
    baseUri: https://athena.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.athena_token
    resources:
    - name: cds
      path: /pricing/cds
      operations:
      - name: price-cds
        method: POST
Open in Framework → View in Fleet → credit-default-swap-pricing-lookup.yml

Retrieves details of a commercial lending facility by facility ID from the loan origination system. Returns commitment amount, drawn balance, maturity date, and pricing. Used by commercial bankers and credit officers.

naftiko: '0.5'
info:
  label: Loan Facility Lookup
  description: Retrieves details of a commercial lending facility by facility ID from the loan origination system. Returns commitment amount, drawn balance, maturity date, and pricing. Used by commercial bankers and credit officers.
  tags:
  - commercial-banking
  - lending
  - loans
capability:
  exposes:
  - type: mcp
    namespace: commercial-lending
    port: 8080
    tools:
    - name: get-loan-facility
      description: Look up a commercial loan facility by facility ID. Returns commitment amount, drawn balance, maturity date, and current rate.
      inputParameters:
      - name: facility_id
        in: body
        type: string
        description: The loan facility identifier.
      call: loan-system.get-facility
      with:
        facility_id: '{{facility_id}}'
      outputParameters:
      - name: commitment_amount
        type: number
        mapping: $.facility.commitmentAmount
      - name: drawn_balance
        type: number
        mapping: $.facility.drawnBalance
      - name: maturity_date
        type: string
        mapping: $.facility.maturityDate
      - name: current_rate
        type: number
        mapping: $.facility.currentRate
  consumes:
  - type: http
    namespace: loan-system
    baseUri: https://loan-origination.jpmorgan.com/api/v2
    authentication:
      type: bearer
      token: $secrets.loan_system_token
    resources:
    - name: facilities
      path: /facilities/{{facility_id}}
      inputParameters:
      - name: facility_id
        in: path
      operations:
      - name: get-facility
        method: GET
Open in Framework → View in Fleet → loan-facility-lookup.yml

Monitors AKS pod metrics in Datadog, scales deployments, and notifies the platform team via Microsoft Teams.

naftiko: '0.5'
info:
  label: AKS Pod Scaling and Notification Pipeline
  description: Monitors AKS pod metrics in Datadog, scales deployments, and notifies the platform team via Microsoft Teams.
  tags:
  - infrastructure
  - azure-kubernetes-service
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: aks-scaling
    port: 8080
    tools:
    - name: scale-aks-pods
      description: Scale AKS pods based on metrics and notify the team.
      inputParameters:
      - name: namespace
        in: body
        type: string
        description: Kubernetes namespace.
      - name: deployment
        in: body
        type: string
        description: Deployment name.
      steps:
      - name: check-metrics
        type: call
        call: datadog-api.query-metrics
        with:
          query: kubernetes.cpu.usage{kube_namespace:{{namespace}},kube_deployment:{{deployment}}}
      - name: scale-deployment
        type: call
        call: aks-api.scale-deployment
        with:
          namespace: '{{namespace}}'
          deployment: '{{deployment}}'
      - name: notify-team
        type: call
        call: msteams-api.post-message
        with:
          team_id: platform-engineering
          channel_id: scaling
          message: 'AKS scaling: {{deployment}} in {{namespace}}. CPU: {{check-metrics.value}}%.'
  consumes:
  - type: http
    namespace: datadog-api
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: metrics
      path: /query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: aks-api
    baseUri: https://management.azure.com/subscriptions
    authentication:
      type: bearer
      token: $secrets.azure_management_token
    resources:
    - name: deployments
      path: /resourceGroups/mc-prod/providers/Microsoft.ContainerService/managedClusters/mc-prod-aks
      operations:
      - name: scale-deployment
        method: PATCH
  - type: http
    namespace: msteams-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_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: post-message
        method: POST
Open in Framework → View in Fleet → aks-pod-scaling-and-notification-pipeline.yml

Creates a new vendor record in SAP Ariba, assigns the appropriate spend categories, and notifies the procurement team via Teams.

naftiko: '0.5'
info:
  label: SAP Ariba Vendor Onboarding
  description: Creates a new vendor record in SAP Ariba, assigns the appropriate spend categories, and notifies the procurement team via Teams.
  tags:
  - procurement
  - sap-ariba
  - vendor-management
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: vendor-onboarding
    port: 8080
    tools:
    - name: onboard-vendor
      description: Given a vendor company name, tax ID, and spend category, create the vendor record in SAP Ariba and notify the procurement lead via Teams. Use when a new supplier is approved for Mastercard procurement.
      inputParameters:
      - name: vendor_name
        in: body
        type: string
        description: Legal company name of the vendor to onboard.
      - name: tax_id
        in: body
        type: string
        description: Vendor tax identification number (EIN/TIN).
      - name: spend_category
        in: body
        type: string
        description: Primary SAP Ariba spend category for this vendor.
      - name: procurement_lead_upn
        in: body
        type: string
        description: UPN of the procurement lead to notify upon completion.
      steps:
      - name: create-vendor
        type: call
        call: ariba.create-vendor
        with:
          name: '{{vendor_name}}'
          tax_id: '{{tax_id}}'
          category: '{{spend_category}}'
      - name: notify-procurement
        type: call
        call: msteams-vendors.send-message
        with:
          recipient_upn: '{{procurement_lead_upn}}'
          text: 'New vendor onboarded in SAP Ariba: {{vendor_name}} ({{spend_category}}). Vendor ID: {{create-vendor.vendor_id}}. Ready for procurement use.'
  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
      operations:
      - name: create-vendor
        method: POST
  - type: http
    namespace: msteams-vendors
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /users/{upn}/chats
      inputParameters:
      - name: upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-ariba-vendor-onboarding.yml

Scans infrastructure with Checkmarx, validates compliance posture in Snowflake, and generates audit reports in Confluence.

naftiko: '0.5'
info:
  label: PCI Compliance Audit Pipeline
  description: Scans infrastructure with Checkmarx, validates compliance posture in Snowflake, and generates audit reports in Confluence.
  tags:
  - compliance
  - checkmarx
  - snowflake
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: pci-audit
    port: 8080
    tools:
    - name: run-pci-audit
      description: Execute a PCI compliance audit across infrastructure and applications.
      inputParameters:
      - name: scope
        in: body
        type: string
        description: Audit scope (e.g. cardholder-data-environment).
      steps:
      - name: run-scan
        type: call
        call: checkmarx-api.create-scan
        with:
          project: '{{scope}}'
      - name: check-posture
        type: call
        call: snowflake-api.run-query
        with:
          query: SELECT * FROM compliance.pci_controls WHERE scope = '{{scope}}' AND status != 'compliant'
      - name: generate-report
        type: call
        call: confluence-api.create-page
        with:
          space: COMPLIANCE
          title: 'PCI Audit: {{scope}}'
          body: 'Scan findings: {{run-scan.vulnerability_count}}. Non-compliant controls: {{check-posture.count}}.'
  consumes:
  - type: http
    namespace: checkmarx-api
    baseUri: https://checkmarx.mastercard.com/cxrestapi
    authentication:
      type: bearer
      token: $secrets.checkmarx_token
    resources:
    - name: scans
      path: /sast/scans
      operations:
      - name: create-scan
        method: POST
  - type: http
    namespace: snowflake-api
    baseUri: https://mastercard.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: confluence-api
    baseUri: https://mastercard.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_password
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → pci-compliance-audit-pipeline.yml

Retrieves the list of applications assigned to a user in Okta for access management auditing.

naftiko: '0.5'
info:
  label: Okta User Application Assignments Lookup
  description: Retrieves the list of applications assigned to a user in Okta for access management auditing.
  tags:
  - identity
  - okta
capability:
  exposes:
  - type: mcp
    namespace: okta
    port: 8080
    tools:
    - name: get-user-apps
      description: List applications assigned to an Okta user.
      inputParameters:
      - name: user_login
        in: body
        type: string
        description: Okta user login (email).
      call: okta-api.list-user-apps
      with:
        user_login: '{{user_login}}'
  consumes:
  - type: http
    namespace: okta-api
    baseUri: https://mastercard.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: users
      path: /users/{{user_login}}/appLinks
      inputParameters:
      - name: user_login
        in: path
      operations:
      - name: list-user-apps
        method: GET
Open in Framework → View in Fleet → okta-user-application-assignments-lookup.yml

Provisions application access in Okta for a new or transferring employee based on their job role, then confirms via Teams.

naftiko: '0.5'
info:
  label: Okta Application Access Provisioning
  description: Provisions application access in Okta for a new or transferring employee based on their job role, then confirms via Teams.
  tags:
  - identity
  - security
  - okta
  - access-management
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: access-provisioning
    port: 8080
    tools:
    - name: provision-application-access
      description: Given an employee email and job role code, assign the appropriate Okta application groups for their role and send an access confirmation to their Teams account. Use during onboarding or role changes requiring updated application access across payment and analytics platforms.
      inputParameters:
      - name: user_email
        in: body
        type: string
        description: Work email of the employee requiring access provisioning.
      - name: job_role
        in: body
        type: string
        description: Job role code determining which Okta groups to assign (e.g., PAYMENTS_ANALYST, DATA_ENGINEER, PRODUCT_MANAGER).
      - name: teams_upn
        in: body
        type: string
        description: UPN of the employee's Teams account for confirmation.
      steps:
      - name: get-user
        type: call
        call: okta-prov.get-user-by-email
        with:
          email: '{{user_email}}'
      - name: assign-role-groups
        type: call
        call: okta-prov.assign-group
        with:
          user_id: '{{get-user.user_id}}'
          group_name: '{{job_role}}'
      - name: confirm-access
        type: call
        call: msteams-access.send-message
        with:
          recipient_upn: '{{teams_upn}}'
          text: Your application access has been provisioned for role {{job_role}}. You can access your applications at mastercard.okta.com.
  consumes:
  - type: http
    namespace: okta-prov
    baseUri: https://mastercard.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: users
      path: /users
      operations:
      - name: get-user-by-email
        method: GET
    - name: group-members
      path: /groups/{group_id}/users/{user_id}
      inputParameters:
      - name: group_id
        in: path
      - name: user_id
        in: path
      operations:
      - name: assign-group
        method: PUT
  - type: http
    namespace: msteams-access
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /users/{upn}/chats
      inputParameters:
      - name: upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → okta-application-access-provisioning.yml

Validates release gates in Azure DevOps, checks quality metrics in Datadog, and creates change records in ServiceNow.

naftiko: '0.5'
info:
  label: Azure DevOps Release Gate Pipeline
  description: Validates release gates in Azure DevOps, checks quality metrics in Datadog, and creates change records in ServiceNow.
  tags:
  - cicd
  - azure-devops
  - datadog
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: release-gate
    port: 8080
    tools:
    - name: validate-release-gate
      description: Validate release quality gates before deployment.
      inputParameters:
      - name: release_id
        in: body
        type: string
        description: Azure DevOps release ID.
      steps:
      - name: get-release
        type: call
        call: azdo-api.get-release
        with:
          release_id: '{{release_id}}'
      - name: check-quality
        type: call
        call: datadog-api.query-metrics
        with:
          query: ci.test.pass_rate{release:{{release_id}}}
      - name: create-change
        type: call
        call: servicenow-api.create-change
        with:
          short_description: 'Release: {{get-release.name}} v{{get-release.version}}'
          description: 'Test pass rate: {{check-quality.value}}%. Artifacts: {{get-release.artifacts_count}}.'
  consumes:
  - type: http
    namespace: azdo-api
    baseUri: https://vsrm.dev.azure.com/mastercard
    authentication:
      type: basic
      username: ''
      password: $secrets.azdo_pat
    resources:
    - name: releases
      path: /_apis/release/releases/{{release_id}}
      inputParameters:
      - name: release_id
        in: path
      operations:
      - name: get-release
        method: GET
  - type: http
    namespace: datadog-api
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: metrics
      path: /query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: servicenow-api
    baseUri: https://mastercard.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
Open in Framework → View in Fleet → azure-devops-release-gate-pipeline.yml

Reviews expense reports from SAP Concur, validates against policies in Snowflake, and flags violations in Jira.

naftiko: '0.5'
info:
  label: SAP Concur Travel Expense Compliance Check
  description: Reviews expense reports from SAP Concur, validates against policies in Snowflake, and flags violations in Jira.
  tags:
  - finance
  - sap-concur
  - snowflake
  - jira
capability:
  exposes:
  - type: mcp
    namespace: expense-compliance
    port: 8080
    tools:
    - name: check-expense-compliance
      description: Audit travel expenses against corporate policies.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: SAP Concur expense report ID.
      steps:
      - name: get-report
        type: call
        call: concur-api.get-report
        with:
          report_id: '{{report_id}}'
      - name: check-policy
        type: call
        call: snowflake-api.run-query
        with:
          query: SELECT * FROM finance.expense_policy_violations WHERE report_id = '{{report_id}}'
      - name: flag-violations
        type: call
        call: jira-api.create-issue
        with:
          project: FINANCE
          summary: 'Expense policy violation: {{report_id}}'
          description: 'Total: {{get-report.total}}. Violations: {{check-policy.count}}.'
  consumes:
  - type: http
    namespace: concur-api
    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: snowflake-api
    baseUri: https://mastercard.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: jira-api
    baseUri: https://mastercard.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_password
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → sap-concur-travel-expense-compliance-check.yml

Monitors Lambda function concurrency, adjusts reserved capacity, and notifies the platform team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Lambda Payment Processor Scaling Pipeline
  description: Monitors Lambda function concurrency, adjusts reserved capacity, and notifies the platform team via Microsoft Teams.
  tags:
  - serverless
  - aws-lambda
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: lambda-scaling
    port: 8080
    tools:
    - name: scale-lambda-processor
      description: Monitor and scale Lambda payment processor concurrency.
      inputParameters:
      - name: function_name
        in: body
        type: string
        description: Lambda function name.
      - name: target_concurrency
        in: body
        type: string
        description: Target reserved concurrency.
      steps:
      - name: check-metrics
        type: call
        call: datadog-api.query-metrics
        with:
          query: aws.lambda.concurrent_executions{function:{{function_name}}}
      - name: update-config
        type: call
        call: lambda-api.update-concurrency
        with:
          function_name: '{{function_name}}'
          concurrency: '{{target_concurrency}}'
      - name: notify-team
        type: call
        call: msteams-api.post-message
        with:
          team_id: platform-team
          channel_id: scaling
          message: 'Lambda scaling: {{function_name}} to {{target_concurrency}}. Current: {{check-metrics.value}}.'
  consumes:
  - type: http
    namespace: datadog-api
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: metrics
      path: /query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: lambda-api
    baseUri: https://lambda.us-east-1.amazonaws.com/2015-03-31
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_sig_v4
      placement: header
    resources:
    - name: concurrency
      path: /functions/{{function_name}}/concurrency
      inputParameters:
      - name: function_name
        in: path
      operations:
      - name: update-concurrency
        method: PUT
  - type: http
    namespace: msteams-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_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: post-message
        method: POST
Open in Framework → View in Fleet → lambda-payment-processor-scaling-pipeline.yml

Aggregates merchant performance data from Snowflake, calculates health scores, and updates Salesforce account records.

naftiko: '0.5'
info:
  label: Salesforce Merchant Health Score Updater
  description: Aggregates merchant performance data from Snowflake, calculates health scores, and updates Salesforce account records.
  tags:
  - merchant-management
  - snowflake
  - salesforce
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: merchant-health
    port: 8080
    tools:
    - name: update-merchant-health
      description: Calculate and update merchant health scores across platforms.
      inputParameters:
      - name: region
        in: body
        type: string
        description: Geographic region.
      steps:
      - name: aggregate-data
        type: call
        call: snowflake-api.run-query
        with:
          query: CALL merchants.calculate_health_scores('{{region}}')
      - name: update-salesforce
        type: call
        call: salesforce-api.composite-update
        with:
          object: Account
          region: '{{region}}'
      - name: refresh-dashboard
        type: call
        call: powerbi-api.refresh-dataset
        with:
          dataset_id: merchant-health-{{region}}
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://mastercard.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: salesforce-api
    baseUri: https://mastercard.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: composite
      path: /composite/sobjects
      operations:
      - name: composite-update
        method: PATCH
  - type: http
    namespace: powerbi-api
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → salesforce-merchant-health-score-updater.yml

Detects malicious endpoints via CrowdStrike, quarantines the device, revokes Okta access, and logs the incident in ServiceNow.

naftiko: '0.5'
info:
  label: CrowdStrike Endpoint Quarantine Workflow
  description: Detects malicious endpoints via CrowdStrike, quarantines the device, revokes Okta access, and logs the incident in ServiceNow.
  tags:
  - security
  - crowdstrike
  - okta
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: endpoint-quarantine
    port: 8080
    tools:
    - name: quarantine-endpoint
      description: Quarantine a compromised endpoint and revoke user access.
      inputParameters:
      - name: device_id
        in: body
        type: string
        description: CrowdStrike device identifier.
      steps:
      - name: get-detection
        type: call
        call: crowdstrike-api.get-detection
        with:
          device_id: '{{device_id}}'
      - name: revoke-access
        type: call
        call: okta-api.suspend-user
        with:
          login: '{{get-detection.user_email}}'
      - name: log-incident
        type: call
        call: servicenow-api.create-incident
        with:
          short_description: 'Endpoint quarantine: {{device_id}}'
          description: 'Threat: {{get-detection.threat_name}}. User: {{get-detection.user_email}}. Okta suspended.'
          priority: '1'
  consumes:
  - type: http
    namespace: crowdstrike-api
    baseUri: https://api.crowdstrike.com
    authentication:
      type: bearer
      token: $secrets.crowdstrike_token
    resources:
    - name: detections
      path: /detects/entities/summaries/GET/v1
      operations:
      - name: get-detection
        method: POST
  - type: http
    namespace: okta-api
    baseUri: https://mastercard.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: users
      path: /users/{{login}}/lifecycle/suspend
      inputParameters:
      - name: login
        in: path
      operations:
      - name: suspend-user
        method: POST
  - type: http
    namespace: servicenow-api
    baseUri: https://mastercard.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → crowdstrike-endpoint-quarantine-workflow.yml

Extracts business unit cost center data from SAP S/4HANA and refreshes the consolidated forecast Power BI dataset for CFO and finance leadership review.

naftiko: '0.5'
info:
  label: Quarterly Finance Forecast Consolidation
  description: Extracts business unit cost center data from SAP S/4HANA and refreshes the consolidated forecast Power BI dataset for CFO and finance leadership review.
  tags:
  - finance
  - forecasting
  - sap
  - power-bi
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: finance-planning
    port: 8080
    tools:
    - name: consolidate-quarterly-forecast
      description: Given a fiscal quarter identifier, SAP cost center hierarchy, and Power BI dataset ID, extract actuals and forecast data from SAP S/4HANA and trigger a Power BI refresh. Use during quarterly planning cycles, budget reviews, and CFO reporting preparation.
      inputParameters:
      - name: fiscal_quarter
        in: body
        type: string
        description: Fiscal quarter to consolidate (e.g., Q2-2026).
      - name: powerbi_dataset_id
        in: body
        type: string
        description: Power BI dataset ID for the consolidated finance forecast.
      - name: powerbi_workspace_id
        in: body
        type: string
        description: Power BI workspace ID containing the forecast dataset.
      steps:
      - name: get-sap-actuals
        type: call
        call: sap-finance.get-cost-center-data
        with:
          fiscal_period: '{{fiscal_quarter}}'
      - name: refresh-powerbi
        type: call
        call: powerbi-finance.trigger-refresh
        with:
          workspace_id: '{{powerbi_workspace_id}}'
          dataset_id: '{{powerbi_dataset_id}}'
  consumes:
  - type: http
    namespace: sap-finance
    baseUri: https://mastercard-s4.sap.com/sap/opu/odata/sap/FAR_ACDOCA_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: cost-center-data
      path: /AcdocaItems
      operations:
      - name: get-cost-center-data
        method: GET
  - type: http
    namespace: powerbi-finance
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refreshes
      path: /groups/{workspace_id}/datasets/{dataset_id}/refreshes
      inputParameters:
      - name: workspace_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
Open in Framework → View in Fleet → quarterly-finance-forecast-consolidation.yml

Identifies target merchants in Salesforce, distributes NPS surveys via HubSpot, and aggregates results in Snowflake.

naftiko: '0.5'
info:
  label: Salesforce NPS Survey Distribution Pipeline
  description: Identifies target merchants in Salesforce, distributes NPS surveys via HubSpot, and aggregates results in Snowflake.
  tags:
  - merchant-management
  - salesforce
  - hubspot
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: nps-survey
    port: 8080
    tools:
    - name: distribute-nps-survey
      description: Distribute NPS surveys to merchants and track responses.
      inputParameters:
      - name: segment
        in: body
        type: string
        description: Merchant segment to survey.
      steps:
      - name: get-merchants
        type: call
        call: salesforce-api.get-accounts
        with:
          segment: '{{segment}}'
      - name: send-surveys
        type: call
        call: hubspot-api.create-campaign
        with:
          name: 'NPS Survey: {{segment}}'
          contacts: '{{get-merchants.email_list}}'
      - name: setup-tracking
        type: call
        call: snowflake-api.run-query
        with:
          query: INSERT INTO surveys.nps_campaigns (segment, merchant_count, campaign_id) VALUES ('{{segment}}', {{get-merchants.count}}, '{{send-surveys.id}}')
  consumes:
  - type: http
    namespace: salesforce-api
    baseUri: https://mastercard.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account
      operations:
      - name: get-accounts
        method: GET
  - type: http
    namespace: hubspot-api
    baseUri: https://api.hubapi.com/marketing/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: campaigns
      path: /campaigns
      operations:
      - name: create-campaign
        method: POST
  - type: http
    namespace: snowflake-api
    baseUri: https://mastercard.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: queries
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → salesforce-nps-survey-distribution-pipeline.yml

Checks the health and deployment status of APIs managed through MuleSoft Anypoint Platform.

naftiko: '0.5'
info:
  label: MuleSoft API Health Check
  description: Checks the health and deployment status of APIs managed through MuleSoft Anypoint Platform.
  tags:
  - api-management
  - mulesoft
capability:
  exposes:
  - type: mcp
    namespace: mulesoft
    port: 8080
    tools:
    - name: check-api-health
      description: Retrieve health status for a MuleSoft-managed API.
      inputParameters:
      - name: api_id
        in: body
        type: string
        description: MuleSoft API identifier.
      call: mulesoft-api.get-status
      with:
        api_id: '{{api_id}}'
  consumes:
  - type: http
    namespace: mulesoft-api
    baseUri: https://anypoint.mulesoft.com/apimanager/api/v1
    authentication:
      type: bearer
      token: $secrets.mulesoft_token
    resources:
    - name: apis
      path: /organizations/mastercard/environments/production/apis/{{api_id}}
      inputParameters:
      - name: api_id
        in: path
      operations:
      - name: get-status
        method: GET
Open in Framework → View in Fleet → mulesoft-api-health-check.yml

Monitors API usage in MuleSoft, enforces rate limits for high-traffic merchants, and notifies account managers via Salesforce.

naftiko: '0.5'
info:
  label: MuleSoft API Rate Limiting Enforcement
  description: Monitors API usage in MuleSoft, enforces rate limits for high-traffic merchants, and notifies account managers via Salesforce.
  tags:
  - api-management
  - mulesoft
  - datadog
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: rate-limiting
    port: 8080
    tools:
    - name: enforce-rate-limits
      description: Monitor and enforce API rate limits for merchants.
      inputParameters:
      - name: api_id
        in: body
        type: string
        description: MuleSoft API identifier.
      steps:
      - name: check-usage
        type: call
        call: datadog-api.query-metrics
        with:
          query: mulesoft.api.requests{api_id:{{api_id}}}
      - name: update-policy
        type: call
        call: mulesoft-api.update-policy
        with:
          api_id: '{{api_id}}'
          rate_limit: '{{check-usage.recommended_limit}}'
      - name: notify-account-mgr
        type: call
        call: salesforce-api.create-task
        with:
          subject: 'Rate limit updated: API {{api_id}}'
          description: 'Current usage: {{check-usage.value}} req/min. New limit: {{check-usage.recommended_limit}}.'
  consumes:
  - type: http
    namespace: datadog-api
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: metrics
      path: /query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: mulesoft-api
    baseUri: https://anypoint.mulesoft.com/apimanager/api/v1
    authentication:
      type: bearer
      token: $secrets.mulesoft_token
    resources:
    - name: policies
      path: /organizations/mastercard/apis/{{api_id}}/policies
      inputParameters:
      - name: api_id
        in: path
      operations:
      - name: update-policy
        method: POST
  - type: http
    namespace: salesforce-api
    baseUri: https://mastercard.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: tasks
      path: /sobjects/Task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → mulesoft-api-rate-limiting-enforcement.yml

Monitors GitHub Dependabot alerts, prioritizes via Checkmarx scan, and creates remediation tickets in Jira.

naftiko: '0.5'
info:
  label: GitHub Security Advisory Response Pipeline
  description: Monitors GitHub Dependabot alerts, prioritizes via Checkmarx scan, and creates remediation tickets in Jira.
  tags:
  - security
  - github
  - checkmarx
  - jira
capability:
  exposes:
  - type: mcp
    namespace: security-advisory
    port: 8080
    tools:
    - name: respond-to-advisory
      description: Respond to GitHub security advisories with prioritized remediation.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository.
      steps:
      - name: get-alerts
        type: call
        call: github-api.list-dependabot-alerts
        with:
          repo: '{{repo}}'
      - name: run-scan
        type: call
        call: checkmarx-api.create-scan
        with:
          project: '{{repo}}'
      - name: create-tickets
        type: call
        call: jira-api.create-issue
        with:
          project: SECURITY
          summary: 'Dependabot alerts: {{repo}}'
          description: 'Critical: {{get-alerts.critical}}. High: {{get-alerts.high}}. Checkmarx findings: {{run-scan.vulnerability_count}}.'
  consumes:
  - type: http
    namespace: github-api
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: alerts
      path: /repos/mastercard/{{repo}}/dependabot/alerts
      inputParameters:
      - name: repo
        in: path
      operations:
      - name: list-dependabot-alerts
        method: GET
  - type: http
    namespace: checkmarx-api
    baseUri: https://checkmarx.mastercard.com/cxrestapi
    authentication:
      type: bearer
      token: $secrets.checkmarx_token
    resources:
    - name: scans
      path: /sast/scans
      operations:
      - name: create-scan
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://mastercard.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_password
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → github-security-advisory-response-pipeline.yml

Monitors payment processing latency SLOs in Datadog, detects breaches in Snowflake, and escalates via PagerDuty.

naftiko: '0.5'
info:
  label: Datadog Payment Latency SLO Monitor
  description: Monitors payment processing latency SLOs in Datadog, detects breaches in Snowflake, and escalates via PagerDuty.
  tags:
  - monitoring
  - datadog
  - snowflake
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: payment-slo
    port: 8080
    tools:
    - name: monitor-payment-slo
      description: Monitor payment latency SLOs and escalate breaches.
      inputParameters:
      - name: service
        in: body
        type: string
        description: Payment service name.
      steps:
      - name: check-slo
        type: call
        call: datadog-api.get-slo
        with:
          service: '{{service}}'
      - name: check-history
        type: call
        call: snowflake-api.run-query
        with:
          query: SELECT * FROM monitoring.slo_history WHERE service = '{{service}}' AND breached = true
      - name: escalate
        type: call
        call: pagerduty-api.create-event
        with:
          routing_key: $secrets.pagerduty_routing_key
          summary: 'SLO breach: {{service}}. Current: {{check-slo.value}}. Target: {{check-slo.target}}.'
  consumes:
  - type: http
    namespace: datadog-api
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: slos
      path: /slo
      operations:
      - name: get-slo
        method: GET
  - type: http
    namespace: snowflake-api
    baseUri: https://mastercard.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: pagerduty-api
    baseUri: https://events.pagerduty.com/v2
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: events
      path: /enqueue
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → datadog-payment-latency-slo-monitor.yml

Aggregates KPIs from Snowflake, refreshes Power BI datasets, and sends executive summaries via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Power BI Executive KPI Refresh Pipeline
  description: Aggregates KPIs from Snowflake, refreshes Power BI datasets, and sends executive summaries via Microsoft Outlook.
  tags:
  - reporting
  - snowflake
  - power-bi
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: exec-kpi
    port: 8080
    tools:
    - name: refresh-executive-kpis
      description: Refresh executive KPI dashboards and distribute summaries.
      inputParameters:
      - name: period
        in: body
        type: string
        description: Reporting period (e.g. weekly, monthly).
      steps:
      - name: aggregate-kpis
        type: call
        call: snowflake-api.run-query
        with:
          query: CALL reporting.aggregate_executive_kpis('{{period}}')
      - name: refresh-dashboard
        type: call
        call: powerbi-api.refresh-dataset
        with:
          dataset_id: executive-kpis
      - name: send-summary
        type: call
        call: outlook-api.send-mail
        with:
          to: executive-team@mastercard.com
          subject: 'Executive KPI Summary: {{period}}'
          body: 'KPI dashboard refreshed. Transaction volume: {{aggregate-kpis.total_volume}}. Revenue: {{aggregate-kpis.revenue}}.'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://mastercard.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-api
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: outlook-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → power-bi-executive-kpi-refresh-pipeline.yml

Tracks regulatory changes in Confluence, assesses impact in Snowflake, and creates compliance tasks in Jira.

naftiko: '0.5'
info:
  label: Regulatory Change Impact Assessment Workflow
  description: Tracks regulatory changes in Confluence, assesses impact in Snowflake, and creates compliance tasks in Jira.
  tags:
  - compliance
  - confluence
  - snowflake
  - jira
capability:
  exposes:
  - type: mcp
    namespace: reg-change
    port: 8080
    tools:
    - name: assess-regulatory-change
      description: Assess the impact of a regulatory change on payment operations.
      inputParameters:
      - name: regulation_id
        in: body
        type: string
        description: Regulation reference identifier.
      steps:
      - name: get-regulation
        type: call
        call: confluence-api.get-page
        with:
          page_id: '{{regulation_id}}'
      - name: assess-impact
        type: call
        call: snowflake-api.run-query
        with:
          query: CALL compliance.assess_regulation_impact('{{regulation_id}}')
      - name: create-tasks
        type: call
        call: jira-api.create-issue
        with:
          project: COMPLIANCE
          summary: 'Regulatory change: {{get-regulation.title}}'
          description: 'Affected systems: {{assess-impact.system_count}}. Deadline: {{assess-impact.deadline}}.'
  consumes:
  - type: http
    namespace: confluence-api
    baseUri: https://mastercard.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_password
    resources:
    - name: pages
      path: /content/{{page_id}}
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: get-page
        method: GET
  - type: http
    namespace: snowflake-api
    baseUri: https://mastercard.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: jira-api
    baseUri: https://mastercard.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_password
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → regulatory-change-impact-assessment-workflow.yml

Runs data quality checks on Redshift payment tables, logs results in Snowflake, and alerts data teams via Microsoft Teams.

naftiko: '0.5'
info:
  label: Redshift Data Quality Validation Pipeline
  description: Runs data quality checks on Redshift payment tables, logs results in Snowflake, and alerts data teams via Microsoft Teams.
  tags:
  - data-quality
  - amazon-redshift
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: redshift-dq
    port: 8080
    tools:
    - name: validate-redshift-data
      description: Run data quality checks on Redshift and alert on failures.
      inputParameters:
      - name: table_name
        in: body
        type: string
        description: Redshift table to validate.
      steps:
      - name: run-checks
        type: call
        call: redshift-api.execute-statement
        with:
          query: SELECT COUNT(*) as nulls FROM {{table_name}} WHERE primary_key IS NULL
      - name: log-results
        type: call
        call: snowflake-api.run-query
        with:
          query: INSERT INTO data_quality.checks (table_name, null_count) VALUES ('{{table_name}}', {{run-checks.nulls}})
      - name: alert-team
        type: call
        call: msteams-api.post-message
        with:
          team_id: data-engineering
          channel_id: quality-alerts
          message: 'Data quality check: {{table_name}}. Null PKs: {{run-checks.nulls}}.'
  consumes:
  - type: http
    namespace: redshift-api
    baseUri: https://redshift-data.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_sig_v4
      placement: header
    resources:
    - name: statements
      path: /
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: snowflake-api
    baseUri: https://mastercard.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: msteams-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_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: post-message
        method: POST
Open in Framework → View in Fleet → redshift-data-quality-validation-pipeline.yml

Retrieves dispute details from Salesforce, analyzes transaction history in Snowflake, and updates the resolution in ServiceNow.

naftiko: '0.5'
info:
  label: Transaction Dispute Resolution Workflow
  description: Retrieves dispute details from Salesforce, analyzes transaction history in Snowflake, and updates the resolution in ServiceNow.
  tags:
  - disputes
  - salesforce
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: dispute-resolution
    port: 8080
    tools:
    - name: resolve-transaction-dispute
      description: Investigate and resolve a payment transaction dispute.
      inputParameters:
      - name: dispute_id
        in: body
        type: string
        description: Salesforce dispute case ID.
      steps:
      - name: get-dispute
        type: call
        call: salesforce-api.get-case
        with:
          case_id: '{{dispute_id}}'
      - name: analyze-history
        type: call
        call: snowflake-api.run-query
        with:
          query: SELECT * FROM payments.transaction_history WHERE transaction_id = '{{get-dispute.transaction_id}}'
      - name: update-resolution
        type: call
        call: servicenow-api.create-incident
        with:
          short_description: 'Dispute resolution: {{dispute_id}}'
          description: 'Transaction: {{get-dispute.transaction_id}}. Amount: {{get-dispute.amount}}. History records: {{analyze-history.count}}.'
          category: dispute_resolution
  consumes:
  - type: http
    namespace: salesforce-api
    baseUri: https://mastercard.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: snowflake-api
    baseUri: https://mastercard.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: servicenow-api
    baseUri: https://mastercard.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → transaction-dispute-resolution-workflow.yml

Pulls GitHub Copilot adoption metrics, stores them in Snowflake, and generates adoption dashboards in Power BI.

naftiko: '0.5'
info:
  label: GitHub Copilot Usage Reporting Pipeline
  description: Pulls GitHub Copilot adoption metrics, stores them in Snowflake, and generates adoption dashboards in Power BI.
  tags:
  - developer-tools
  - github-copilot
  - snowflake
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: copilot-usage
    port: 8080
    tools:
    - name: report-copilot-usage
      description: Generate GitHub Copilot adoption reports.
      inputParameters:
      - name: org
        in: body
        type: string
        description: GitHub organization name.
      steps:
      - name: get-usage
        type: call
        call: github-api.get-copilot-usage
        with:
          org: '{{org}}'
      - name: store-metrics
        type: call
        call: snowflake-api.run-query
        with:
          query: INSERT INTO devtools.copilot_usage (org, active_users, suggestions_accepted) VALUES ('{{org}}', {{get-usage.active_users}}, {{get-usage.suggestions_accepted}})
      - name: refresh-dashboard
        type: call
        call: powerbi-api.refresh-dataset
        with:
          dataset_id: copilot-adoption
  consumes:
  - type: http
    namespace: github-api
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: copilot
      path: /orgs/{{org}}/copilot/usage
      inputParameters:
      - name: org
        in: path
      operations:
      - name: get-copilot-usage
        method: GET
  - type: http
    namespace: snowflake-api
    baseUri: https://mastercard.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-api
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → github-copilot-usage-reporting-pipeline.yml

Queries Palo Alto Networks for active firewall policy rules on payment network segments and posts a compliance summary to the security operations Teams channel.

naftiko: '0.5'
info:
  label: Palo Alto Networks Security Policy Audit
  description: Queries Palo Alto Networks for active firewall policy rules on payment network segments and posts a compliance summary to the security operations Teams channel.
  tags:
  - security
  - network
  - palo-alto
  - microsoft-teams
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: network-security
    port: 8080
    tools:
    - name: audit-firewall-policies
      description: Given a Palo Alto Networks firewall hostname and a Teams channel ID, retrieve all active security policy rules for the specified device group and post a summary of any permissive or non-compliant rules to the security operations channel. Use for PCI-DSS compliance audits and quarterly firewall rule reviews.
      inputParameters:
      - name: firewall_hostname
        in: body
        type: string
        description: The Palo Alto Networks Panorama or NGFW hostname to audit.
      - name: device_group
        in: body
        type: string
        description: The Panorama device group or vsys scope to audit.
      - name: security_channel_id
        in: body
        type: string
        description: Teams channel ID for the security operations team.
      steps:
      - name: get-policies
        type: call
        call: paloalto.get-security-rules
        with:
          device_group: '{{device_group}}'
      - name: post-audit-summary
        type: call
        call: msteams-netsec.post-channel-message
        with:
          channel_id: '{{security_channel_id}}'
          text: 'Firewall Policy Audit for {{firewall_hostname}} ({{device_group}}): {{get-policies.rule_count}} rules retrieved. Review complete — check for permissive rules flagged in output.'
  consumes:
  - type: http
    namespace: paloalto
    baseUri: https://panorama.mastercard.com/restapi/v10.1
    authentication:
      type: apikey
      key: X-PAN-KEY
      value: $secrets.paloalto_api_key
      placement: header
    resources:
    - name: security-rules
      path: /Objects/SecurityRules
      operations:
      - name: get-security-rules
        method: GET
  - type: http
    namespace: msteams-netsec
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{team_id}/channels/{channel_id}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → palo-alto-networks-security-policy-audit.yml

Extracts diversity metrics from Workday, stores in Snowflake, and generates executive reports in Power BI.

naftiko: '0.5'
info:
  label: Workday Diversity Metrics Reporting Pipeline
  description: Extracts diversity metrics from Workday, stores in Snowflake, and generates executive reports in Power BI.
  tags:
  - hr
  - workday
  - snowflake
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: diversity-reporting
    port: 8080
    tools:
    - name: generate-diversity-report
      description: Generate diversity and inclusion metrics report.
      inputParameters:
      - name: quarter
        in: body
        type: string
        description: Reporting quarter.
      steps:
      - name: get-metrics
        type: call
        call: workday-api.get-diversity-data
        with:
          quarter: '{{quarter}}'
      - name: store-data
        type: call
        call: snowflake-api.run-query
        with:
          query: INSERT INTO hr.diversity_metrics (quarter, total, diverse_pct) VALUES ('{{quarter}}', {{get-metrics.total}}, {{get-metrics.diverse_pct}})
      - name: refresh-dashboard
        type: call
        call: powerbi-api.refresh-dataset
        with:
          dataset_id: diversity-metrics
  consumes:
  - type: http
    namespace: workday-api
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: diversity
      path: /mastercard/analytics/diversity
      operations:
      - name: get-diversity-data
        method: GET
  - type: http
    namespace: snowflake-api
    baseUri: https://mastercard.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-api
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → workday-diversity-metrics-reporting-pipeline.yml

Pulls sprint status across all engineering squads from Jira and publishes a delivery digest to the technology leadership Teams channel.

naftiko: '0.5'
info:
  label: Jira Sprint Delivery Digest
  description: Pulls sprint status across all engineering squads from Jira and publishes a delivery digest to the technology leadership Teams channel.
  tags:
  - devops
  - jira
  - sprint
  - reporting
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: delivery-reporting
    port: 8080
    tools:
    - name: digest-sprint-delivery
      description: Given a Jira board ID and active sprint ID, retrieve all in-progress, blocked, and completed issues and post a delivery digest to the technology leadership Teams channel. Use for weekly engineering all-hands, sprint reviews, and executive delivery reporting.
      inputParameters:
      - name: board_id
        in: body
        type: integer
        description: The Jira board ID for the engineering squad.
      - name: sprint_id
        in: body
        type: integer
        description: The active sprint ID to report on.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID to post the sprint digest to.
      steps:
      - name: get-sprint-issues
        type: call
        call: jira-boards.get-sprint-issues
        with:
          board_id: '{{board_id}}'
          sprint_id: '{{sprint_id}}'
      - name: post-digest
        type: call
        call: msteams-delivery.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Sprint Digest — Board {{board_id}} Sprint {{sprint_id}}: {{get-sprint-issues.in_progress_count}} in progress, {{get-sprint-issues.blocked_count}} blocked, {{get-sprint-issues.done_count}} done.'
  consumes:
  - type: http
    namespace: jira-boards
    baseUri: https://mastercard.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: sprint-issues
      path: /board/{board_id}/sprint/{sprint_id}/issue
      inputParameters:
      - name: board_id
        in: path
      - name: sprint_id
        in: path
      operations:
      - name: get-sprint-issues
        method: GET
  - type: http
    namespace: msteams-delivery
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{team_id}/channels/{channel_id}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → jira-sprint-delivery-digest.yml

Retrieves the current status of all Datadog monitors tagged to a specific payment service for use in operational health checks and status pages.

naftiko: '0.5'
info:
  label: Datadog Infrastructure Monitor Status Lookup
  description: Retrieves the current status of all Datadog monitors tagged to a specific payment service for use in operational health checks and status pages.
  tags:
  - observability
  - datadog
  - monitoring
  - payments
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: infra-monitoring
    port: 8080
    tools:
    - name: get-service-monitor-status
      description: Given a Datadog service tag, retrieve all monitors associated with that service and their current alert states. Use for real-time health checks of payment processing services, authorization systems, and network infrastructure.
      inputParameters:
      - name: service_tag
        in: body
        type: string
        description: Datadog service tag to filter monitors (e.g., service:authorization, service:clearing).
      call: datadog.get-monitors
      with:
        tags: '{{service_tag}}'
      outputParameters:
      - name: monitors
        type: array
        mapping: $.monitors
      - name: alerting_count
        type: number
        mapping: $.counts.Alert
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor
      operations:
      - name: get-monitors
        method: GET
Open in Framework → View in Fleet → datadog-infrastructure-monitor-status-lookup.yml

When a Salesforce opportunity reaches Closed Won, creates a Jira project or epic for delivery and notifies the assigned solutions team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Sync to Jira
  description: When a Salesforce opportunity reaches Closed Won, creates a Jira project or epic for delivery and notifies the assigned solutions team via Microsoft Teams.
  tags:
  - crm
  - sales
  - salesforce
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sales-delivery
    port: 8080
    tools:
    - name: sync-opportunity-to-delivery
      description: Given a Salesforce opportunity ID that has reached Closed Won stage, create a corresponding Jira epic for the delivery team and notify the solutions engineering Teams channel. Invoke when a financial institution or merchant deal closes in Salesforce.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID that has reached Closed Won.
      - name: delivery_team_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID for the delivery team notification.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce-opps.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: create-epic
        type: call
        call: jira-delivery.create-issue
        with:
          project_key: DEL
          issuetype: Epic
          summary: 'Delivery: {{get-opportunity.account_name}} — {{get-opportunity.name}}'
          description: 'Salesforce Opportunity: {{opportunity_id}}

            Account: {{get-opportunity.account_name}}

            Contract Value: {{get-opportunity.amount}}

            Close Date: {{get-opportunity.close_date}}'
      - name: notify-team
        type: call
        call: msteams-delivery.post-channel-message
        with:
          channel_id: '{{delivery_team_channel_id}}'
          text: 'New deal closed: {{get-opportunity.account_name}} — {{get-opportunity.name}} (${{get-opportunity.amount}}). Jira epic: {{create-epic.key}}'
  consumes:
  - type: http
    namespace: salesforce-opps
    baseUri: https://mastercard.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-delivery
    baseUri: https://mastercard.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-delivery
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{team_id}/channels/{channel_id}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → salesforce-opportunity-sync-to-jira.yml

When a CrowdStrike Falcon detection alert fires, creates a ServiceNow security incident, notifies the SOC team via Teams, and logs the detection in Datadog.

naftiko: '0.5'
info:
  label: CrowdStrike Threat Detection Alert Handler
  description: When a CrowdStrike Falcon detection alert fires, creates a ServiceNow security incident, notifies the SOC team via Teams, and logs the detection in Datadog.
  tags:
  - security
  - crowdstrike
  - servicenow
  - datadog
  - microsoft-teams
  - threat-detection
capability:
  exposes:
  - type: mcp
    namespace: soc-ops
    port: 8080
    tools:
    - name: handle-threat-detection
      description: Given a CrowdStrike Falcon detection ID, severity, and affected hostname, retrieve the full detection context, create a ServiceNow security incident, post a Datadog security event, and alert the SOC Teams channel. Invoke immediately on any CrowdStrike detection at medium severity or above.
      inputParameters:
      - name: detection_id
        in: body
        type: string
        description: CrowdStrike Falcon detection ID.
      - name: severity
        in: body
        type: string
        description: 'Detection severity: critical, high, medium.'
      - name: affected_host
        in: body
        type: string
        description: Hostname of the affected endpoint.
      - name: tactic
        in: body
        type: string
        description: MITRE ATT&CK tactic associated with the detection.
      steps:
      - name: get-detection
        type: call
        call: crowdstrike.get-detection
        with:
          detection_id: '{{detection_id}}'
      - name: create-security-incident
        type: call
        call: servicenow-soc.create-incident
        with:
          short_description: '[{{severity}}] CrowdStrike detection on {{affected_host}} — {{tactic}}'
          category: security_incident
          urgency: '1'
      - name: post-datadog-event
        type: call
        call: datadog-soc.create-event
        with:
          title: 'CrowdStrike Detection: {{affected_host}}'
          text: 'Detection {{detection_id}} | Severity: {{severity}} | Tactic: {{tactic}} | ServiceNow: {{create-security-incident.number}}'
          alert_type: error
      - name: alert-soc
        type: call
        call: msteams-soc.post-channel-message
        with:
          channel_id: security-operations-center
          text: 'THREAT DETECTION: {{affected_host}} | Severity: {{severity}} | Tactic: {{tactic}} | CrowdStrike: {{detection_id}} | ServiceNow: {{create-security-incident.number}}'
  consumes:
  - type: http
    namespace: crowdstrike
    baseUri: https://api.crowdstrike.com
    authentication:
      type: bearer
      token: $secrets.crowdstrike_token
    resources:
    - name: detections
      path: /detects/entities/detect/v2
      operations:
      - name: get-detection
        method: GET
  - type: http
    namespace: servicenow-soc
    baseUri: https://mastercard.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: datadog-soc
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: msteams-soc
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{team_id}/channels/{channel_id}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → crowdstrike-threat-detection-alert-handler.yml

Analyzes transaction patterns in Snowflake, detects fraud via Databricks ML models, and creates investigation cases in ServiceNow.

naftiko: '0.5'
info:
  label: Payment Fraud Detection and Alerting Pipeline
  description: Analyzes transaction patterns in Snowflake, detects fraud via Databricks ML models, and creates investigation cases in ServiceNow.
  tags:
  - fraud
  - snowflake
  - azure-databricks
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: fraud-detection
    port: 8080
    tools:
    - name: detect-payment-fraud
      description: Analyze transactions for fraud patterns and create investigation cases.
      inputParameters:
      - name: merchant_id
        in: body
        type: string
        description: Merchant identifier.
      - name: time_window
        in: body
        type: string
        description: Analysis time window (e.g. last_24h).
      steps:
      - name: get-transactions
        type: call
        call: snowflake-api.run-query
        with:
          query: SELECT * FROM payments.transactions WHERE merchant_id = '{{merchant_id}}' AND created_at > DATEADD(hour, -24, CURRENT_TIMESTAMP())
      - name: run-model
        type: call
        call: databricks-api.run-job
        with:
          job_id: fraud-detection-model
          parameters: merchant_id={{merchant_id}}
      - name: create-case
        type: call
        call: servicenow-api.create-incident
        with:
          short_description: 'Fraud alert: merchant {{merchant_id}}'
          description: 'Transactions analyzed: {{get-transactions.count}}. Fraud score: {{run-model.score}}. Window: {{time_window}}.'
          category: fraud_investigation
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://mastercard.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: databricks-api
    baseUri: https://mastercard.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: servicenow-api
    baseUri: https://mastercard.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → payment-fraud-detection-and-alerting-pipeline.yml

When an employee submits a time-off request in Workday, notifies their manager via Teams with request details and a direct Workday approval link.

naftiko: '0.5'
info:
  label: Workday Time-Off Request Approval Notifier
  description: When an employee submits a time-off request in Workday, notifies their manager via Teams with request details and a direct Workday approval link.
  tags:
  - hr
  - workday
  - time-off
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: pto-approvals
    port: 8080
    tools:
    - name: notify-pto-approver
      description: Given a Workday employee ID, leave type, start date, and end date, submit a leave request in Workday and notify the manager via Teams for approval. Use when an employee requests vacation, personal, or sick leave.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: The Workday worker ID of the employee requesting leave.
      - name: leave_type
        in: body
        type: string
        description: 'Leave type: VACATION, SICK, or PERSONAL.'
      - name: start_date
        in: body
        type: string
        description: First day of the leave period in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: Last day of the leave period in YYYY-MM-DD format.
      steps:
      - name: get-worker
        type: call
        call: workday-pto.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: create-leave
        type: call
        call: workday-pto.create-leave-request
        with:
          worker_id: '{{workday_employee_id}}'
          leave_type: '{{leave_type}}'
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: notify-manager
        type: call
        call: msteams-pto.send-message
        with:
          recipient_upn: '{{get-worker.manager_email}}'
          text: 'Leave approval required: {{get-worker.full_name}} has requested {{leave_type}} from {{start_date}} to {{end_date}}. Request: {{create-leave.request_id}}. Approve in Workday.'
  consumes:
  - type: http
    namespace: workday-pto
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /mastercard/workers/{worker_id}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
    - name: leave-requests
      path: /mastercard/workers/{worker_id}/leaveRequests
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: create-leave-request
        method: POST
  - type: http
    namespace: msteams-pto
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /users/{upn}/chats
      inputParameters:
      - name: upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-time-off-request-approval-notifier.yml

Triggers a Net Promoter Score survey campaign in Salesforce Marketing Cloud for a cohort of financial institution contacts and logs the campaign event in Salesforce CRM.

naftiko: '0.5'
info:
  label: Salesforce NPS Campaign Trigger
  description: Triggers a Net Promoter Score survey campaign in Salesforce Marketing Cloud for a cohort of financial institution contacts and logs the campaign event in Salesforce CRM.
  tags:
  - crm
  - marketing
  - salesforce
  - nps
  - customer-success
capability:
  exposes:
  - type: mcp
    namespace: nps-campaigns
    port: 8080
    tools:
    - name: trigger-nps-campaign
      description: Given a Salesforce campaign ID containing a financial institution contact cohort, trigger the NPS survey journey in Salesforce Marketing Cloud and update the campaign record with the launch timestamp. Use for quarterly relationship NPS surveys with issuing banks and merchant partners.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The Salesforce campaign ID whose members will receive the NPS survey.
      - name: survey_journey_name
        in: body
        type: string
        description: The Salesforce Marketing Cloud journey name for the NPS survey.
      steps:
      - name: get-campaign
        type: call
        call: salesforce-nps.get-campaign
        with:
          campaign_id: '{{campaign_id}}'
      - name: trigger-journey
        type: call
        call: sfmc-nps.trigger-journey
        with:
          journey_name: '{{survey_journey_name}}'
          campaign_id: '{{campaign_id}}'
      - name: update-campaign
        type: call
        call: salesforce-nps.update-campaign
        with:
          campaign_id: '{{campaign_id}}'
          status: Active
  consumes:
  - type: http
    namespace: salesforce-nps
    baseUri: https://mastercard.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign/{campaign_id}
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-campaign
        method: GET
      - name: update-campaign
        method: PATCH
  - type: http
    namespace: sfmc-nps
    baseUri: https://mc.mastercard.com/interaction/v1
    authentication:
      type: bearer
      token: $secrets.sfmc_token
    resources:
    - name: journeys
      path: /interactions/contactEvents
      operations:
      - name: trigger-journey
        method: POST
Open in Framework → View in Fleet → salesforce-nps-campaign-trigger.yml

Checks the status of Databricks model serving endpoints for payment fraud and risk models, and alerts the data science team via Teams if any endpoints are degraded.

naftiko: '0.5'
info:
  label: Databricks ML Model Deployment Monitor
  description: Checks the status of Databricks model serving endpoints for payment fraud and risk models, and alerts the data science team via Teams if any endpoints are degraded.
  tags:
  - ai
  - data
  - databricks
  - microsoft-teams
  - ml-operations
  - payments
capability:
  exposes:
  - type: mcp
    namespace: mlops
    port: 8080
    tools:
    - name: monitor-model-endpoints
      description: Given an Azure Databricks workspace URL and a model serving endpoint name, retrieve the endpoint health status and alert the data science Teams channel if the endpoint is degraded or unavailable. Use for continuous monitoring of payment fraud and risk scoring models in production.
      inputParameters:
      - name: databricks_host
        in: body
        type: string
        description: The Azure Databricks workspace hostname (e.g., adb-1234567890.12.azuredatabricks.net).
      - name: endpoint_name
        in: body
        type: string
        description: The Databricks model serving endpoint name to check.
      - name: data_science_channel_id
        in: body
        type: string
        description: Teams channel ID for the data science team alert.
      steps:
      - name: get-endpoint-status
        type: call
        call: databricks.get-serving-endpoint
        with:
          endpoint_name: '{{endpoint_name}}'
      - name: alert-if-degraded
        type: call
        call: msteams-mlops.post-channel-message
        with:
          channel_id: '{{data_science_channel_id}}'
          text: 'Model Endpoint Alert: {{endpoint_name}} status is {{get-endpoint-status.state}}. Please investigate model serving health in Databricks workspace {{databricks_host}}.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://adb-0000000000.0.azuredatabricks.net/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: serving-endpoints
      path: /serving-endpoints/{name}
      inputParameters:
      - name: name
        in: path
      operations:
      - name: get-serving-endpoint
        method: GET
  - type: http
    namespace: msteams-mlops
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{team_id}/channels/{channel_id}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → databricks-ml-model-deployment-monitor.yml

Detects overdue Zendesk tickets, escalates to Salesforce account owners, and posts alerts to Microsoft Teams.

naftiko: '0.5'
info:
  label: Zendesk Merchant Support Escalation Pipeline
  description: Detects overdue Zendesk tickets, escalates to Salesforce account owners, and posts alerts to Microsoft Teams.
  tags:
  - support
  - zendesk
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: support-escalation
    port: 8080
    tools:
    - name: escalate-support-tickets
      description: Escalate overdue merchant support tickets.
      inputParameters:
      - name: sla_hours
        in: body
        type: string
        description: SLA threshold in hours.
      steps:
      - name: get-overdue
        type: call
        call: zendesk-api.search-tickets
        with:
          query: status:open created<{{sla_hours}}hours
      - name: notify-owner
        type: call
        call: salesforce-api.create-task
        with:
          subject: 'Escalation: {{get-overdue.count}} overdue tickets'
      - name: post-alert
        type: call
        call: msteams-api.post-message
        with:
          team_id: merchant-support
          channel_id: escalations
          message: '{{get-overdue.count}} tickets exceeded {{sla_hours}}h SLA.'
  consumes:
  - type: http
    namespace: zendesk-api
    baseUri: https://mastercard.zendesk.com/api/v2
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: search
      path: /search.json
      operations:
      - name: search-tickets
        method: GET
  - type: http
    namespace: salesforce-api
    baseUri: https://mastercard.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-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_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: post-message
        method: POST
Open in Framework → View in Fleet → zendesk-merchant-support-escalation-pipeline.yml

Checks the last refresh status of a Power BI dataset used for payment network executive reporting.

naftiko: '0.5'
info:
  label: Power BI Report Refresh Status
  description: Checks the last refresh status of a Power BI dataset used for payment network executive reporting.
  tags:
  - reporting
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: powerbi
    port: 8080
    tools:
    - name: get-refresh-status
      description: Retrieve the last refresh status for a Power BI dataset.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset identifier.
      call: powerbi-api.get-refresh-history
      with:
        dataset_id: '{{dataset_id}}'
  consumes:
  - type: http
    namespace: powerbi-api
    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: get-refresh-history
        method: GET
Open in Framework → View in Fleet → power-bi-report-refresh-status.yml

Checks scheduled Snowflake task execution health for transaction analytics pipelines and creates a ServiceNow incident if critical tasks have failed.

naftiko: '0.5'
info:
  label: Snowflake Transaction Analytics Pipeline Monitor
  description: Checks scheduled Snowflake task execution health for transaction analytics pipelines and creates a ServiceNow incident if critical tasks have failed.
  tags:
  - data
  - analytics
  - snowflake
  - servicenow
  - monitoring
  - payments
capability:
  exposes:
  - type: mcp
    namespace: analytics-ops
    port: 8080
    tools:
    - name: monitor-transaction-pipeline
      description: Given a Snowflake database and schema hosting transaction analytics tasks, check for failed or overdue tasks and automatically open a ServiceNow incident if failures are detected. Use for daily monitoring of payment transaction data pipelines.
      inputParameters:
      - name: snowflake_database
        in: body
        type: string
        description: The Snowflake database containing the transaction analytics tasks.
      - name: snowflake_schema
        in: body
        type: string
        description: The Snowflake schema to check for task failures.
      steps:
      - name: get-task-status
        type: call
        call: snowflake.get-task-history
        with:
          database: '{{snowflake_database}}'
          schema: '{{snowflake_schema}}'
      - name: create-incident
        type: call
        call: servicenow-analytics.create-incident
        with:
          short_description: 'Snowflake pipeline failure: {{snowflake_database}}.{{snowflake_schema}}'
          category: data_pipeline
          urgency: '2'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://mastercard.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: task-history
      path: /databases/{database}/schemas/{schema}/tasks
      inputParameters:
      - name: database
        in: path
      - name: schema
        in: path
      operations:
      - name: get-task-history
        method: GET
  - type: http
    namespace: servicenow-analytics
    baseUri: https://mastercard.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → snowflake-transaction-analytics-pipeline-monitor.yml

Retrieves security event logs from Splunk for a specified time range and source to support fraud investigation.

naftiko: '0.5'
info:
  label: Splunk Security Event Lookup
  description: Retrieves security event logs from Splunk for a specified time range and source to support fraud investigation.
  tags:
  - security
  - splunk
capability:
  exposes:
  - type: mcp
    namespace: splunk-security
    port: 8080
    tools:
    - name: get-security-events
      description: Search Splunk for security events by source and time range.
      inputParameters:
      - name: source
        in: body
        type: string
        description: Event source identifier.
      - name: time_range
        in: body
        type: string
        description: Time range (e.g. last_1h, last_24h).
      call: splunk-api.search-events
      with:
        source: '{{source}}'
        time_range: '{{time_range}}'
  consumes:
  - type: http
    namespace: splunk-api
    baseUri: https://splunk.mastercard.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search
      path: /search/jobs
      operations:
      - name: search-events
        method: POST
Open in Framework → View in Fleet → splunk-security-event-lookup.yml

Retrieves account activity data from Salesforce and updates each financial institution account record with a calculated health score based on recent transaction volumes and engagement.

naftiko: '0.5'
info:
  label: Salesforce Account Health Score Update
  description: Retrieves account activity data from Salesforce and updates each financial institution account record with a calculated health score based on recent transaction volumes and engagement.
  tags:
  - crm
  - sales
  - salesforce
  - account-management
capability:
  exposes:
  - type: mcp
    namespace: account-intelligence
    port: 8080
    tools:
    - name: update-account-health-score
      description: Given a Salesforce account ID, retrieve the account's recent activity metrics, calculate a health score, and update the account record. Use for quarterly account reviews, renewal risk identification, and sales prioritization for financial institution and merchant accounts.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID to calculate and update health score for.
      steps:
      - name: get-account
        type: call
        call: salesforce-accounts.get-account
        with:
          account_id: '{{account_id}}'
      - name: update-health-score
        type: call
        call: salesforce-accounts.update-account
        with:
          account_id: '{{account_id}}'
          health_score_last_calculated: '2026-03-20'
  consumes:
  - type: http
    namespace: salesforce-accounts
    baseUri: https://mastercard.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: update-account
        method: PATCH
Open in Framework → View in Fleet → salesforce-account-health-score-update.yml

Retrieves employee certification and compliance training records from Workday for regulatory audit support.

naftiko: '0.5'
info:
  label: Workday Employee Certification Lookup
  description: Retrieves employee certification and compliance training records from Workday for regulatory audit support.
  tags:
  - hr
  - workday
capability:
  exposes:
  - type: mcp
    namespace: workday-certs
    port: 8080
    tools:
    - name: get-certifications
      description: Look up an employee's certifications and training records.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: Workday worker ID.
      call: workday-api.get-certifications
      with:
        worker_id: '{{worker_id}}'
  consumes:
  - type: http
    namespace: workday-api
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: certifications
      path: /mastercard/workers/{{worker_id}}/certifications
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-certifications
        method: GET
Open in Framework → View in Fleet → workday-employee-certification-lookup.yml

Retrieves SLO compliance data for all payment processing monitors from Datadog and publishes a weekly summary to the engineering leadership Teams channel.

naftiko: '0.5'
info:
  label: Datadog SLO Compliance Weekly Report
  description: Retrieves SLO compliance data for all payment processing monitors from Datadog and publishes a weekly summary to the engineering leadership Teams channel.
  tags:
  - observability
  - datadog
  - slo
  - reporting
  - microsoft-teams
  - payments
capability:
  exposes:
  - type: mcp
    namespace: slo-compliance
    port: 8080
    tools:
    - name: publish-slo-compliance-report
      description: Given a Datadog SLO tag filter and a Teams channel ID, retrieve all SLO statuses for the past 7 days and post a compliance summary. Use for weekly engineering reliability reviews and payment network SLA reporting to leadership.
      inputParameters:
      - name: slo_tag_filter
        in: body
        type: string
        description: Datadog tag filter for SLOs to include (e.g., service:payments, env:production).
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the engineering leadership SLO digest.
      steps:
      - name: get-slo-status
        type: call
        call: datadog-slos.get-slos
        with:
          tags_query: '{{slo_tag_filter}}'
      - name: post-report
        type: call
        call: msteams-slos.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Weekly SLO Compliance Report: {{get-slo-status.compliant_count}} SLOs meeting target, {{get-slo-status.breached_count}} SLOs breaching targets. Filter: {{slo_tag_filter}}.'
  consumes:
  - type: http
    namespace: datadog-slos
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: slos
      path: /slo
      operations:
      - name: get-slos
        method: GET
  - type: http
    namespace: msteams-slos
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{team_id}/channels/{channel_id}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → datadog-slo-compliance-weekly-report.yml

Scans VMware VMs for compliance, logs findings in Snowflake, and creates remediation tasks in Jira.

naftiko: '0.5'
info:
  label: VMware VM Compliance Scan Pipeline
  description: Scans VMware VMs for compliance, logs findings in Snowflake, and creates remediation tasks in Jira.
  tags:
  - infrastructure
  - vmware
  - snowflake
  - jira
capability:
  exposes:
  - type: mcp
    namespace: vm-compliance
    port: 8080
    tools:
    - name: scan-vm-compliance
      description: Scan VMware VMs for security and compliance issues.
      inputParameters:
      - name: datacenter
        in: body
        type: string
        description: VMware datacenter name.
      steps:
      - name: scan-vms
        type: call
        call: vmware-api.get-compliance
        with:
          datacenter: '{{datacenter}}'
      - name: log-findings
        type: call
        call: snowflake-api.run-query
        with:
          query: INSERT INTO compliance.vm_scans (datacenter, non_compliant) VALUES ('{{datacenter}}', {{scan-vms.non_compliant_count}})
      - name: create-tasks
        type: call
        call: jira-api.create-issue
        with:
          project: INFRA
          summary: 'VM compliance: {{datacenter}}'
          description: 'Non-compliant VMs: {{scan-vms.non_compliant_count}}.'
  consumes:
  - type: http
    namespace: vmware-api
    baseUri: https://vcenter.mastercard.com/api
    authentication:
      type: bearer
      token: $secrets.vmware_token
    resources:
    - name: compliance
      path: /vcenter/vm
      operations:
      - name: get-compliance
        method: GET
  - type: http
    namespace: snowflake-api
    baseUri: https://mastercard.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: jira-api
    baseUri: https://mastercard.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_password
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → vmware-vm-compliance-scan-pipeline.yml

Identifies expiring partner agreements in Salesforce, creates renewal tasks in Jira, and sends notifications via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Salesforce Partner Agreement Renewal Pipeline
  description: Identifies expiring partner agreements in Salesforce, creates renewal tasks in Jira, and sends notifications via Microsoft Outlook.
  tags:
  - partner-management
  - salesforce
  - jira
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: agreement-renewal
    port: 8080
    tools:
    - name: process-agreement-renewals
      description: Identify and process expiring partner agreements.
      inputParameters:
      - name: days_until_expiry
        in: body
        type: string
        description: Days before expiry to trigger renewal.
      steps:
      - name: get-expiring
        type: call
        call: salesforce-api.get-agreements
        with:
          days: '{{days_until_expiry}}'
      - name: create-task
        type: call
        call: jira-api.create-issue
        with:
          project: PARTNERS
          summary: 'Agreement renewal: {{get-expiring.top.partner_name}}'
          description: 'Expires: {{get-expiring.top.expiry_date}}. Value: {{get-expiring.top.annual_value}}.'
      - name: notify-partner
        type: call
        call: outlook-api.send-mail
        with:
          to: '{{get-expiring.top.contact_email}}'
          subject: 'Agreement Renewal: {{get-expiring.top.partner_name}}'
          body: Your partnership agreement expires on {{get-expiring.top.expiry_date}}. Please contact your account manager.
  consumes:
  - type: http
    namespace: salesforce-api
    baseUri: https://mastercard.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: agreements
      path: /sobjects/Contract
      operations:
      - name: get-agreements
        method: GET
  - type: http
    namespace: jira-api
    baseUri: https://mastercard.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_password
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: outlook-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → salesforce-partner-agreement-renewal-pipeline.yml

Detects Datadog synthetic test failures, creates PagerDuty incidents, and tracks resolution in Jira.

naftiko: '0.5'
info:
  label: Datadog Synthetic Test Failure Handler
  description: Detects Datadog synthetic test failures, creates PagerDuty incidents, and tracks resolution in Jira.
  tags:
  - monitoring
  - datadog
  - pagerduty
  - jira
capability:
  exposes:
  - type: mcp
    namespace: synthetic-failure
    port: 8080
    tools:
    - name: handle-synthetic-failure
      description: Respond to Datadog synthetic test failures.
      inputParameters:
      - name: test_id
        in: body
        type: string
        description: Datadog synthetic test ID.
      steps:
      - name: get-results
        type: call
        call: datadog-api.get-test-results
        with:
          test_id: '{{test_id}}'
      - name: alert-oncall
        type: call
        call: pagerduty-api.create-event
        with:
          routing_key: $secrets.pagerduty_routing_key
          summary: 'Synthetic test failure: {{test_id}}. Location: {{get-results.failing_location}}.'
      - name: track-issue
        type: call
        call: jira-api.create-issue
        with:
          project: PLATFORM
          summary: 'Synthetic failure: {{test_id}}'
          description: 'Failing location: {{get-results.failing_location}}. Response time: {{get-results.response_time_ms}}ms.'
  consumes:
  - type: http
    namespace: datadog-api
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: synthetics
      path: /synthetics/tests/{{test_id}}/results
      inputParameters:
      - name: test_id
        in: path
      operations:
      - name: get-test-results
        method: GET
  - type: http
    namespace: pagerduty-api
    baseUri: https://events.pagerduty.com/v2
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: events
      path: /enqueue
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://mastercard.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_password
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → datadog-synthetic-test-failure-handler.yml

Extracts resolved ServiceNow incidents, creates knowledge articles in Confluence, and notifies support teams via Microsoft Teams.

naftiko: '0.5'
info:
  label: Confluence Knowledge Article Creation Pipeline
  description: Extracts resolved ServiceNow incidents, creates knowledge articles in Confluence, and notifies support teams via Microsoft Teams.
  tags:
  - knowledge-management
  - servicenow
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: kb-creation
    port: 8080
    tools:
    - name: create-knowledge-article
      description: Convert resolved incidents into knowledge base articles.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number.
      steps:
      - name: get-incident
        type: call
        call: servicenow-api.get-incident
        with:
          incident_number: '{{incident_number}}'
      - name: create-article
        type: call
        call: confluence-api.create-page
        with:
          space: KB
          title: 'KB: {{get-incident.short_description}}'
          body: 'Problem: {{get-incident.description}}. Resolution: {{get-incident.close_notes}}.'
      - name: notify-team
        type: call
        call: msteams-api.post-message
        with:
          team_id: support
          channel_id: knowledge-base
          message: 'New KB article: {{get-incident.short_description}}. Link: {{create-article.url}}.'
  consumes:
  - type: http
    namespace: servicenow-api
    baseUri: https://mastercard.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: get-incident
        method: GET
  - type: http
    namespace: confluence-api
    baseUri: https://mastercard.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_password
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: msteams-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_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: post-message
        method: POST
Open in Framework → View in Fleet → confluence-knowledge-article-creation-pipeline.yml

Reconciles settlement files from Snowflake, detects discrepancies, and creates resolution tickets in ServiceNow.

naftiko: '0.5'
info:
  label: Transaction Settlement Reconciliation Pipeline
  description: Reconciles settlement files from Snowflake, detects discrepancies, and creates resolution tickets in ServiceNow.
  tags:
  - settlements
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: settlement-recon
    port: 8080
    tools:
    - name: reconcile-settlements
      description: Reconcile payment settlements and flag discrepancies.
      inputParameters:
      - name: settlement_date
        in: body
        type: string
        description: Settlement date YYYY-MM-DD.
      steps:
      - name: run-recon
        type: call
        call: snowflake-api.run-query
        with:
          query: CALL settlements.reconcile('{{settlement_date}}')
      - name: create-ticket
        type: call
        call: servicenow-api.create-incident
        with:
          short_description: 'Settlement recon: {{settlement_date}}'
          description: 'Breaks: {{run-recon.break_count}}. Total amount: {{run-recon.break_amount}}.'
      - name: notify-ops
        type: call
        call: msteams-api.post-message
        with:
          team_id: settlement-ops
          channel_id: reconciliation
          message: 'Settlement recon for {{settlement_date}}: {{run-recon.break_count}} breaks totaling {{run-recon.break_amount}}.'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://mastercard.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: servicenow-api
    baseUri: https://mastercard.service-now.com/api/now
    authentication:
      type: 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-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_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: post-message
        method: POST
Open in Framework → View in Fleet → transaction-settlement-reconciliation-pipeline.yml

Detects payroll discrepancies between ADP and Workday, flags issues in ServiceNow, and notifies HR via Microsoft Teams.

naftiko: '0.5'
info:
  label: ADP Payroll Discrepancy Handler
  description: Detects payroll discrepancies between ADP and Workday, flags issues in ServiceNow, and notifies HR via Microsoft Teams.
  tags:
  - hr
  - adp
  - workday
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: payroll-discrepancy
    port: 8080
    tools:
    - name: handle-payroll-discrepancy
      description: Detect and escalate payroll discrepancies.
      inputParameters:
      - name: pay_period
        in: body
        type: string
        description: Pay period identifier.
      steps:
      - name: get-adp-data
        type: call
        call: adp-api.get-payroll
        with:
          pay_period: '{{pay_period}}'
      - name: get-workday-data
        type: call
        call: workday-api.get-payroll
        with:
          pay_period: '{{pay_period}}'
      - name: create-incident
        type: call
        call: servicenow-api.create-incident
        with:
          short_description: 'Payroll discrepancy: {{pay_period}}'
          description: 'ADP total: {{get-adp-data.total}}. Workday total: {{get-workday-data.total}}.'
          category: payroll
  consumes:
  - type: http
    namespace: adp-api
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: payroll
      path: /payroll-outputs
      operations:
      - name: get-payroll
        method: GET
  - type: http
    namespace: workday-api
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: payroll
      path: /mastercard/payroll
      operations:
      - name: get-payroll
        method: GET
  - type: http
    namespace: servicenow-api
    baseUri: https://mastercard.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → adp-payroll-discrepancy-handler.yml

Reviews user access in Okta, compares against Workday employment status, and revokes access for terminated employees.

naftiko: '0.5'
info:
  label: Okta Access Review and Revocation Pipeline
  description: Reviews user access in Okta, compares against Workday employment status, and revokes access for terminated employees.
  tags:
  - identity
  - okta
  - workday
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: access-review
    port: 8080
    tools:
    - name: review-and-revoke-access
      description: Review Okta access against employment status and revoke as needed.
      inputParameters:
      - name: department
        in: body
        type: string
        description: Department to audit.
      steps:
      - name: get-okta-users
        type: call
        call: okta-api.list-users
        with:
          department: '{{department}}'
      - name: check-workday
        type: call
        call: workday-api.list-active-workers
        with:
          department: '{{department}}'
      - name: log-revocations
        type: call
        call: servicenow-api.create-incident
        with:
          short_description: 'Access review: {{department}}'
          description: 'Okta users: {{get-okta-users.count}}. Active workers: {{check-workday.count}}.'
          category: access_management
  consumes:
  - type: http
    namespace: okta-api
    baseUri: https://mastercard.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: users
      path: /users
      operations:
      - name: list-users
        method: GET
  - type: http
    namespace: workday-api
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /mastercard/workers
      operations:
      - name: list-active-workers
        method: GET
  - type: http
    namespace: servicenow-api
    baseUri: https://mastercard.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → okta-access-review-and-revocation-pipeline.yml

Retrieves vendor invoices from SAP, validates against purchase orders in Snowflake, and routes approvals via ServiceNow.

naftiko: '0.5'
info:
  label: SAP Vendor Invoice Processing Pipeline
  description: Retrieves vendor invoices from SAP, validates against purchase orders in Snowflake, and routes approvals via ServiceNow.
  tags:
  - procurement
  - sap
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: invoice-processing
    port: 8080
    tools:
    - name: process-vendor-invoice
      description: Validate and route vendor invoices for approval.
      inputParameters:
      - name: invoice_id
        in: body
        type: string
        description: SAP invoice identifier.
      steps:
      - name: get-invoice
        type: call
        call: sap-api.get-invoice
        with:
          invoice_id: '{{invoice_id}}'
      - name: validate-po
        type: call
        call: snowflake-api.run-query
        with:
          query: SELECT * FROM procurement.purchase_orders WHERE po_number = '{{get-invoice.po_number}}'
      - name: route-approval
        type: call
        call: servicenow-api.create-request
        with:
          short_description: 'Invoice approval: {{invoice_id}}'
          description: 'Vendor: {{get-invoice.vendor}}. Amount: {{get-invoice.amount}}. PO: {{get-invoice.po_number}}.'
  consumes:
  - type: http
    namespace: sap-api
    baseUri: https://sap.mastercard.com/sap/opu/odata/sap
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: invoices
      path: /API_SUPPLIER_INVOICE_PROCESS_SRV/A_SupplierInvoice('{{invoice_id}}')
      inputParameters:
      - name: invoice_id
        in: path
      operations:
      - name: get-invoice
        method: GET
  - type: http
    namespace: snowflake-api
    baseUri: https://mastercard.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: servicenow-api
    baseUri: https://mastercard.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
Open in Framework → View in Fleet → sap-vendor-invoice-processing-pipeline.yml

Retrieves configuration and invocation metrics for an AWS Lambda function used in payment processing microservices.

naftiko: '0.5'
info:
  label: AWS Lambda Function Status Check
  description: Retrieves configuration and invocation metrics for an AWS Lambda function used in payment processing microservices.
  tags:
  - serverless
  - aws-lambda
capability:
  exposes:
  - type: mcp
    namespace: lambda
    port: 8080
    tools:
    - name: get-function-status
      description: Fetch the configuration and last invocation status of a Lambda function.
      inputParameters:
      - name: function_name
        in: body
        type: string
        description: Lambda function name.
      call: lambda-api.get-function
      with:
        function_name: '{{function_name}}'
  consumes:
  - type: http
    namespace: lambda-api
    baseUri: https://lambda.us-east-1.amazonaws.com/2015-03-31
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_sig_v4
      placement: header
    resources:
    - name: functions
      path: /functions/{{function_name}}
      inputParameters:
      - name: function_name
        in: path
      operations:
      - name: get-function
        method: GET
Open in Framework → View in Fleet → aws-lambda-function-status-check.yml

Verifies that branch protection rules are properly configured on a GitHub repository for payment platform codebases.

naftiko: '0.5'
info:
  label: GitHub Repository Branch Protection Check
  description: Verifies that branch protection rules are properly configured on a GitHub repository for payment platform codebases.
  tags:
  - security
  - github
capability:
  exposes:
  - type: mcp
    namespace: github-branch
    port: 8080
    tools:
    - name: check-branch-protection
      description: Verify branch protection rules on a GitHub repository.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository name.
      - name: branch
        in: body
        type: string
        description: Branch name to check.
      call: github-api.get-branch-protection
      with:
        repo: '{{repo}}'
        branch: '{{branch}}'
  consumes:
  - type: http
    namespace: github-api
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: branches
      path: /repos/mastercard/{{repo}}/branches/{{branch}}/protection
      inputParameters:
      - name: repo
        in: path
      - name: branch
        in: path
      operations:
      - name: get-branch-protection
        method: GET
Open in Framework → View in Fleet → github-repository-branch-protection-check.yml

Launches performance review cycles in Workday, sends reminders via Microsoft Teams, and tracks completion in Jira.

naftiko: '0.5'
info:
  label: Workday Performance Review Cycle Orchestrator
  description: Launches performance review cycles in Workday, sends reminders via Microsoft Teams, and tracks completion in Jira.
  tags:
  - hr
  - workday
  - microsoft-teams
  - jira
capability:
  exposes:
  - type: mcp
    namespace: perf-review
    port: 8080
    tools:
    - name: launch-review-cycle
      description: Launch and track a performance review cycle.
      inputParameters:
      - name: cycle_name
        in: body
        type: string
        description: Review cycle name.
      - name: department
        in: body
        type: string
        description: Department to review.
      steps:
      - name: launch-cycle
        type: call
        call: workday-api.create-review-cycle
        with:
          name: '{{cycle_name}}'
          department: '{{department}}'
      - name: send-reminders
        type: call
        call: msteams-api.post-message
        with:
          team_id: hr-team
          channel_id: performance
          message: 'Performance review cycle launched: {{cycle_name}} for {{department}}. Eligible: {{launch-cycle.eligible_count}}.'
      - name: track-progress
        type: call
        call: jira-api.create-issue
        with:
          project: HR
          summary: 'Performance review: {{department}} - {{cycle_name}}'
          description: 'Eligible: {{launch-cycle.eligible_count}}. Deadline: {{launch-cycle.deadline}}.'
  consumes:
  - type: http
    namespace: workday-api
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: reviews
      path: /mastercard/performance/reviews
      operations:
      - name: create-review-cycle
        method: POST
  - type: http
    namespace: msteams-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_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: post-message
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://mastercard.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_password
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → workday-performance-review-cycle-orchestrator.yml

Fetches API call metrics and error rates from Azure API Management for payment gateway monitoring.

naftiko: '0.5'
info:
  label: Azure API Gateway Metrics Lookup
  description: Fetches API call metrics and error rates from Azure API Management for payment gateway monitoring.
  tags:
  - api-management
  - microsoft-azure
capability:
  exposes:
  - type: mcp
    namespace: azure-apim
    port: 8080
    tools:
    - name: get-api-metrics
      description: Retrieve API metrics from Azure API Management.
      inputParameters:
      - name: api_id
        in: body
        type: string
        description: Azure APIM API identifier.
      call: apim-api.get-metrics
      with:
        api_id: '{{api_id}}'
  consumes:
  - type: http
    namespace: apim-api
    baseUri: https://management.azure.com/subscriptions
    authentication:
      type: bearer
      token: $secrets.azure_management_token
    resources:
    - name: metrics
      path: /resourceGroups/mc-prod/providers/Microsoft.ApiManagement/service/mc-apim/apis/{{api_id}}/diagnostics
      inputParameters:
      - name: api_id
        in: path
      operations:
      - name: get-metrics
        method: GET
Open in Framework → View in Fleet → azure-api-gateway-metrics-lookup.yml

Checks the execution status of an Azure Databricks job to verify that payment analytics pipelines completed successfully.

naftiko: '0.5'
info:
  label: Azure Databricks Job Status Check
  description: Checks the execution status of an Azure Databricks job to verify that payment analytics pipelines completed successfully.
  tags:
  - data-engineering
  - azure-databricks
capability:
  exposes:
  - type: mcp
    namespace: databricks
    port: 8080
    tools:
    - name: get-job-status
      description: Fetch the status of a Databricks job run.
      inputParameters:
      - name: run_id
        in: body
        type: string
        description: Databricks job run identifier.
      call: databricks-api.get-run
      with:
        run_id: '{{run_id}}'
  consumes:
  - type: http
    namespace: databricks-api
    baseUri: https://mastercard.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
Open in Framework → View in Fleet → azure-databricks-job-status-check.yml

Posts an alert message to a Microsoft Teams channel for payment network operational notifications.

naftiko: '0.5'
info:
  label: Microsoft Teams Alert Post
  description: Posts an alert message to a Microsoft Teams channel for payment network operational notifications.
  tags:
  - communication
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: msteams
    port: 8080
    tools:
    - name: post-alert
      description: Send an alert to a Teams channel.
      inputParameters:
      - name: team_id
        in: body
        type: string
        description: Teams team identifier.
      - name: channel_id
        in: body
        type: string
        description: Teams channel identifier.
      - name: message
        in: body
        type: string
        description: Alert message text.
      call: msteams-api.post-message
      with:
        team_id: '{{team_id}}'
        channel_id: '{{channel_id}}'
        message: '{{message}}'
  consumes:
  - type: http
    namespace: msteams-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_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: post-message
        method: POST
Open in Framework → View in Fleet → microsoft-teams-alert-post.yml

Triggers a Postman collection test run to validate payment API endpoints and returns pass/fail results.

naftiko: '0.5'
info:
  label: Postman API Collection Test Run
  description: Triggers a Postman collection test run to validate payment API endpoints and returns pass/fail results.
  tags:
  - api-testing
  - postman
capability:
  exposes:
  - type: mcp
    namespace: postman
    port: 8080
    tools:
    - name: run-collection-tests
      description: Trigger a Postman collection run and retrieve results.
      inputParameters:
      - name: collection_id
        in: body
        type: string
        description: Postman collection identifier.
      call: postman-api.run-collection
      with:
        collection_id: '{{collection_id}}'
  consumes:
  - type: http
    namespace: postman-api
    baseUri: https://api.getpostman.com
    authentication:
      type: apikey
      key: X-API-Key
      value: $secrets.postman_api_key
      placement: header
    resources:
    - name: collections
      path: /collections/{{collection_id}}/runs
      inputParameters:
      - name: collection_id
        in: path
      operations:
      - name: run-collection
        method: POST
Open in Framework → View in Fleet → postman-api-collection-test-run.yml

Processes project intake requests from Airtable, creates Jira epics, and notifies project managers via Microsoft Teams.

naftiko: '0.5'
info:
  label: Airtable Project Intake to Jira Pipeline
  description: Processes project intake requests from Airtable, creates Jira epics, and notifies project managers via Microsoft Teams.
  tags:
  - project-management
  - airtable
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: project-intake
    port: 8080
    tools:
    - name: process-project-intake
      description: Convert Airtable project requests into Jira epics.
      inputParameters:
      - name: record_id
        in: body
        type: string
        description: Airtable record identifier.
      steps:
      - name: get-request
        type: call
        call: airtable-api.get-record
        with:
          record_id: '{{record_id}}'
      - name: create-epic
        type: call
        call: jira-api.create-issue
        with:
          project: PMO
          summary: '{{get-request.project_name}}'
          description: 'Requester: {{get-request.requester}}. Priority: {{get-request.priority}}. Budget: {{get-request.budget}}.'
          issuetype: Epic
      - name: notify-pm
        type: call
        call: msteams-api.post-message
        with:
          team_id: project-management
          channel_id: intake
          message: 'New project: {{get-request.project_name}}. Epic: {{create-epic.key}}.'
  consumes:
  - type: http
    namespace: airtable-api
    baseUri: https://api.airtable.com/v0
    authentication:
      type: bearer
      token: $secrets.airtable_token
    resources:
    - name: records
      path: /appXXXXXX/Project%20Intake/{{record_id}}
      inputParameters:
      - name: record_id
        in: path
      operations:
      - name: get-record
        method: GET
  - type: http
    namespace: jira-api
    baseUri: https://mastercard.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_password
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_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: post-message
        method: POST
Open in Framework → View in Fleet → airtable-project-intake-to-jira-pipeline.yml

Retrieves weekly LinkedIn company page engagement metrics for Mastercard and posts a brand performance digest to the marketing leadership Teams channel.

naftiko: '0.5'
info:
  label: LinkedIn Employer Brand Performance Digest
  description: Retrieves weekly LinkedIn company page engagement metrics for Mastercard and posts a brand performance digest to the marketing leadership Teams channel.
  tags:
  - marketing
  - linkedin
  - social-media
  - reporting
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: brand-reporting
    port: 8080
    tools:
    - name: digest-linkedin-brand-performance
      description: Given a LinkedIn organization ID and a Teams channel ID, retrieve the latest company page follower growth, post impressions, and engagement rate, and publish a digest to the marketing leadership channel. Use for weekly brand health reviews and talent marketing reporting.
      inputParameters:
      - name: linkedin_org_id
        in: body
        type: string
        description: LinkedIn organization URN ID for the Mastercard company page.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the marketing leadership digest.
      steps:
      - name: get-page-stats
        type: call
        call: linkedin.get-organization-stats
        with:
          organization_id: '{{linkedin_org_id}}'
      - name: post-digest
        type: call
        call: msteams-brand.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'LinkedIn Brand Digest: Followers: {{get-page-stats.follower_count}} | Impressions: {{get-page-stats.impressions}} | Engagement Rate: {{get-page-stats.engagement_rate}}%'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: organization-stats
      path: /organizationalEntityShareStatistics
      operations:
      - name: get-organization-stats
        method: GET
  - type: http
    namespace: msteams-brand
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{team_id}/channels/{channel_id}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → linkedin-employer-brand-performance-digest.yml

Retrieves current headcount by business unit and grade from Workday for use in workforce planning, finance forecasting, and executive reporting.

naftiko: '0.5'
info:
  label: Workday Headcount and Payroll Snapshot
  description: Retrieves current headcount by business unit and grade from Workday for use in workforce planning, finance forecasting, and executive reporting.
  tags:
  - hr
  - finance
  - workday
  - headcount
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: workforce-reporting
    port: 8080
    tools:
    - name: get-headcount-snapshot
      description: Exports current headcount from Workday by business unit, grade, and location. Returns totals and breakdown for use in finance and HR reporting.
      call: workday-hc.headcount-export
      outputParameters:
      - name: total_headcount
        type: number
        mapping: $.total
      - name: by_business_unit
        type: array
        mapping: $.business_units
  consumes:
  - type: http
    namespace: workday-hc
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: headcount
      path: /mastercard/workers/export
      operations:
      - name: headcount-export
        method: GET
Open in Framework → View in Fleet → workday-headcount-and-payroll-snapshot.yml

Triggers a GitHub Actions deployment, runs Postman API tests, and logs the deployment in ServiceNow.

naftiko: '0.5'
info:
  label: GitHub Actions Payment API Deployment
  description: Triggers a GitHub Actions deployment, runs Postman API tests, and logs the deployment in ServiceNow.
  tags:
  - cicd
  - github-actions
  - postman
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: api-deployment
    port: 8080
    tools:
    - name: deploy-payment-api
      description: Deploy a payment API with automated testing and change management.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository.
      - name: version
        in: body
        type: string
        description: Version tag.
      steps:
      - name: trigger-deploy
        type: call
        call: github-api.dispatch-workflow
        with:
          repo: '{{repo}}'
          workflow: deploy.yml
          ref: v{{version}}
      - name: run-tests
        type: call
        call: postman-api.run-collection
        with:
          collection_id: payment-api-smoke-tests
      - name: log-deployment
        type: call
        call: servicenow-api.create-change
        with:
          short_description: 'API deployment: {{repo}} v{{version}}'
          description: 'Tests passed: {{run-tests.passed}}. Failed: {{run-tests.failed}}.'
  consumes:
  - type: http
    namespace: github-api
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflows
      path: /repos/mastercard/{{repo}}/actions/workflows/{{workflow}}/dispatches
      inputParameters:
      - name: repo
        in: path
      - name: workflow
        in: path
      operations:
      - name: dispatch-workflow
        method: POST
  - type: http
    namespace: postman-api
    baseUri: https://api.getpostman.com
    authentication:
      type: apikey
      key: X-API-Key
      value: $secrets.postman_api_key
      placement: header
    resources:
    - name: collections
      path: /collections/{{collection_id}}/runs
      inputParameters:
      - name: collection_id
        in: path
      operations:
      - name: run-collection
        method: POST
  - type: http
    namespace: servicenow-api
    baseUri: https://mastercard.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
Open in Framework → View in Fleet → github-actions-payment-api-deployment.yml

Analyzes transaction volume trends in Snowflake, forecasts capacity needs in Databricks, and creates scaling tickets in Jira.

naftiko: '0.5'
info:
  label: Payment Network Capacity Planning Pipeline
  description: Analyzes transaction volume trends in Snowflake, forecasts capacity needs in Databricks, and creates scaling tickets in Jira.
  tags:
  - capacity-planning
  - snowflake
  - azure-databricks
  - jira
capability:
  exposes:
  - type: mcp
    namespace: capacity-planning
    port: 8080
    tools:
    - name: plan-network-capacity
      description: Forecast payment network capacity needs and create scaling plans.
      inputParameters:
      - name: region
        in: body
        type: string
        description: Network region.
      - name: forecast_days
        in: body
        type: string
        description: Forecast horizon in days.
      steps:
      - name: get-trends
        type: call
        call: snowflake-api.run-query
        with:
          query: SELECT * FROM network.volume_trends WHERE region = '{{region}}'
      - name: run-forecast
        type: call
        call: databricks-api.run-job
        with:
          job_id: capacity-forecast
          parameters: region={{region}},days={{forecast_days}}
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: INFRA
          summary: 'Capacity planning: {{region}}'
          description: 'Forecast: {{run-forecast.peak_tps}}. Current: {{get-trends.current_tps}}. Headroom: {{run-forecast.headroom_pct}}%.'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://mastercard.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: databricks-api
    baseUri: https://mastercard.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: jira-api
    baseUri: https://mastercard.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_password
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → payment-network-capacity-planning-pipeline.yml

Executes a query against Amazon Redshift to retrieve payment transaction data for analytics and reporting.

naftiko: '0.5'
info:
  label: Amazon Redshift Query Execution
  description: Executes a query against Amazon Redshift to retrieve payment transaction data for analytics and reporting.
  tags:
  - data-warehouse
  - amazon-redshift
capability:
  exposes:
  - type: mcp
    namespace: redshift
    port: 8080
    tools:
    - name: execute-query
      description: Run a SQL query against the Redshift payment data warehouse.
      inputParameters:
      - name: query
        in: body
        type: string
        description: SQL query to execute.
      call: redshift-api.execute-statement
      with:
        query: '{{query}}'
  consumes:
  - type: http
    namespace: redshift-api
    baseUri: https://redshift-data.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_sig_v4
      placement: header
    resources:
    - name: statements
      path: /
      operations:
      - name: execute-statement
        method: POST
Open in Framework → View in Fleet → amazon-redshift-query-execution.yml

Queries fraud-related logs from Splunk, correlates with transaction data in Snowflake, and creates investigation tickets in Jira.

naftiko: '0.5'
info:
  label: Splunk Fraud Investigation Pipeline
  description: Queries fraud-related logs from Splunk, correlates with transaction data in Snowflake, and creates investigation tickets in Jira.
  tags:
  - fraud
  - splunk
  - snowflake
  - jira
capability:
  exposes:
  - type: mcp
    namespace: fraud-investigation
    port: 8080
    tools:
    - name: investigate-fraud-event
      description: Investigate a fraud event using log correlation and transaction analysis.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: Splunk alert identifier.
      steps:
      - name: get-logs
        type: call
        call: splunk-api.search-events
        with:
          alert_id: '{{alert_id}}'
      - name: correlate-transactions
        type: call
        call: snowflake-api.run-query
        with:
          query: SELECT * FROM payments.transactions WHERE alert_id = '{{alert_id}}'
      - name: create-investigation
        type: call
        call: jira-api.create-issue
        with:
          project: FRAUD
          summary: 'Fraud investigation: {{alert_id}}'
          description: 'Log events: {{get-logs.count}}. Transactions: {{correlate-transactions.count}}.'
  consumes:
  - type: http
    namespace: splunk-api
    baseUri: https://splunk.mastercard.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search
      path: /search/jobs
      operations:
      - name: search-events
        method: POST
  - type: http
    namespace: snowflake-api
    baseUri: https://mastercard.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: jira-api
    baseUri: https://mastercard.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_password
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → splunk-fraud-investigation-pipeline.yml

When an Azure spending anomaly is detected in a subscription, creates a ServiceNow change request and alerts the FinOps team via Teams.

naftiko: '0.5'
info:
  label: Azure Cloud Cost Anomaly Responder
  description: When an Azure spending anomaly is detected in a subscription, creates a ServiceNow change request and alerts the FinOps team via Teams.
  tags:
  - cloud
  - finops
  - azure
  - servicenow
  - microsoft-teams
  - cost-management
capability:
  exposes:
  - type: mcp
    namespace: cloud-finops
    port: 8080
    tools:
    - name: handle-cloud-cost-anomaly
      description: Given an Azure subscription ID, anomalous spend amount, and responsible service, open a ServiceNow change request and alert the FinOps Teams channel. Invoke when Azure Cost Management flags an unexpected spend increase in payment processing or data platform subscriptions.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID where the cost anomaly was detected.
      - name: anomaly_amount
        in: body
        type: number
        description: Anomalous spend amount in USD above the expected baseline.
      - name: service_name
        in: body
        type: string
        description: Azure service or resource group causing the anomaly.
      steps:
      - name: create-change
        type: call
        call: servicenow-cost.create-change
        with:
          short_description: 'Azure cost anomaly: {{service_name}} — ${{anomaly_amount}} above baseline'
          category: cloud_cost
      - name: alert-finops
        type: call
        call: msteams-finops.post-channel-message
        with:
          channel_id: finops-alerts
          text: 'Cost Anomaly: Azure {{service_name}} in {{subscription_id}} is ${{anomaly_amount}} over budget. ServiceNow: {{create-change.number}}'
  consumes:
  - type: http
    namespace: servicenow-cost
    baseUri: https://mastercard.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: msteams-finops
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{team_id}/channels/{channel_id}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → azure-cloud-cost-anomaly-responder.yml

Queries Snowflake for aggregate transaction volume metrics by region and time period for payment network analytics.

naftiko: '0.5'
info:
  label: Snowflake Transaction Volume Query
  description: Queries Snowflake for aggregate transaction volume metrics by region and time period for payment network analytics.
  tags:
  - analytics
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: transaction-analytics
    port: 8080
    tools:
    - name: get-transaction-volume
      description: Query aggregate transaction volumes from Snowflake.
      inputParameters:
      - name: region
        in: body
        type: string
        description: Geographic region code.
      - name: date
        in: body
        type: string
        description: Query date YYYY-MM-DD.
      call: snowflake-api.run-query
      with:
        region: '{{region}}'
        date: '{{date}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://mastercard.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: queries
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → snowflake-transaction-volume-query.yml

Triggers a Terraform Cloud workspace run to provision new payment processing infrastructure, logs a ServiceNow change record, and notifies the infrastructure team via Teams.

naftiko: '0.5'
info:
  label: Terraform Cloud Infrastructure Provisioning
  description: Triggers a Terraform Cloud workspace run to provision new payment processing infrastructure, logs a ServiceNow change record, and notifies the infrastructure team via Teams.
  tags:
  - cloud
  - infrastructure
  - terraform
  - servicenow
  - microsoft-teams
  - provisioning
capability:
  exposes:
  - type: mcp
    namespace: infra-provisioning
    port: 8080
    tools:
    - name: provision-payment-infrastructure
      description: Given a Terraform Cloud workspace ID and environment target, trigger a Terraform run for payment infrastructure provisioning, create a ServiceNow change record, and notify the infrastructure team. Use when scaling payment processing capacity or deploying new regions.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: Terraform Cloud workspace ID for the infrastructure configuration.
      - name: environment
        in: body
        type: string
        description: 'Target environment: dev, staging, or production.'
      - name: region
        in: body
        type: string
        description: Target cloud region for the infrastructure deployment.
      steps:
      - name: trigger-run
        type: call
        call: terraform.create-run
        with:
          workspace_id: '{{workspace_id}}'
          message: Provisioning payment infrastructure in {{region}} ({{environment}})
      - name: create-change
        type: call
        call: servicenow-infra.create-change
        with:
          short_description: 'Infrastructure provisioning: {{region}} — {{environment}}'
          category: cloud_provisioning
      - name: notify-infra
        type: call
        call: msteams-infra.post-channel-message
        with:
          channel_id: infrastructure-deployments
          text: 'Terraform run triggered for {{environment}} in {{region}}. Change: {{create-change.number}}. Run ID: {{trigger-run.run_id}}'
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: runs
      path: /runs
      operations:
      - name: create-run
        method: POST
  - type: http
    namespace: servicenow-infra
    baseUri: https://mastercard.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-infra
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{team_id}/channels/{channel_id}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → terraform-cloud-infrastructure-provisioning.yml

Extracts firewall rules from Palo Alto Networks, validates against compliance policies in Snowflake, and reports violations in ServiceNow.

naftiko: '0.5'
info:
  label: Palo Alto Firewall Rule Audit Pipeline
  description: Extracts firewall rules from Palo Alto Networks, validates against compliance policies in Snowflake, and reports violations in ServiceNow.
  tags:
  - security
  - palo-alto-networks
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: firewall-audit
    port: 8080
    tools:
    - name: audit-firewall-rules
      description: Audit Palo Alto firewall rules against compliance policies.
      inputParameters:
      - name: firewall_id
        in: body
        type: string
        description: Palo Alto firewall identifier.
      steps:
      - name: get-rules
        type: call
        call: paloalto-api.get-security-rules
        with:
          firewall_id: '{{firewall_id}}'
      - name: check-compliance
        type: call
        call: snowflake-api.run-query
        with:
          query: SELECT * FROM security.firewall_policy_violations WHERE firewall_id = '{{firewall_id}}'
      - name: report-violations
        type: call
        call: servicenow-api.create-incident
        with:
          short_description: 'Firewall audit: {{firewall_id}}'
          description: 'Rules: {{get-rules.count}}. Violations: {{check-compliance.count}}.'
          category: security_compliance
  consumes:
  - type: http
    namespace: paloalto-api
    baseUri: https://panorama.mastercard.com/restapi/v10.1
    authentication:
      type: apikey
      key: X-PAN-KEY
      value: $secrets.paloalto_api_key
      placement: header
    resources:
    - name: rules
      path: /Policies/SecurityRules
      operations:
      - name: get-security-rules
        method: GET
  - type: http
    namespace: snowflake-api
    baseUri: https://mastercard.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: servicenow-api
    baseUri: https://mastercard.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → palo-alto-firewall-rule-audit-pipeline.yml

Triggers a canary deployment via Harness, monitors error rates in Datadog, and rolls back or promotes based on results.

naftiko: '0.5'
info:
  label: Harness Deployment Canary Pipeline
  description: Triggers a canary deployment via Harness, monitors error rates in Datadog, and rolls back or promotes based on results.
  tags:
  - cicd
  - harness
  - datadog
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: canary-deploy
    port: 8080
    tools:
    - name: run-canary-deployment
      description: Execute a canary deployment with automated validation.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: Harness service name.
      - name: artifact_version
        in: body
        type: string
        description: Artifact version to deploy.
      steps:
      - name: trigger-canary
        type: call
        call: harness-api.trigger-pipeline
        with:
          service: '{{service_name}}'
          version: '{{artifact_version}}'
      - name: verify-health
        type: call
        call: datadog-api.query-metrics
        with:
          query: avg(last_5m):avg:http.error_rate{service:{{service_name}},version:{{artifact_version}}}
      - name: log-deployment
        type: call
        call: servicenow-api.create-change
        with:
          short_description: 'Canary deploy: {{service_name}} v{{artifact_version}}'
          description: 'Error rate: {{verify-health.value}}%. Pipeline: {{trigger-canary.id}}.'
  consumes:
  - type: http
    namespace: harness-api
    baseUri: https://app.harness.io/gateway/api
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.harness_api_key
      placement: header
    resources:
    - name: pipelines
      path: /pipelines/execute
      operations:
      - name: trigger-pipeline
        method: POST
  - type: http
    namespace: datadog-api
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: metrics
      path: /query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: servicenow-api
    baseUri: https://mastercard.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
Open in Framework → View in Fleet → harness-deployment-canary-pipeline.yml

Fetches completed Figma designs, creates implementation tickets in Jira, and notifies engineering via Microsoft Teams.

naftiko: '0.5'
info:
  label: Figma Design to Jira Handoff Pipeline
  description: Fetches completed Figma designs, creates implementation tickets in Jira, and notifies engineering via Microsoft Teams.
  tags:
  - design
  - figma
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: design-handoff
    port: 8080
    tools:
    - name: handoff-design-to-engineering
      description: Create engineering tickets from completed design files.
      inputParameters:
      - name: file_key
        in: body
        type: string
        description: Figma file key.
      - name: project
        in: body
        type: string
        description: Jira project key.
      steps:
      - name: get-design
        type: call
        call: figma-api.get-file
        with:
          file_key: '{{file_key}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: '{{project}}'
          summary: 'Implement: {{get-design.name}}'
          description: 'Figma: https://figma.com/file/{{file_key}}. Last modified: {{get-design.last_modified}}.'
      - name: notify-eng
        type: call
        call: msteams-api.post-message
        with:
          team_id: engineering
          channel_id: design-handoffs
          message: 'New design handoff: {{get-design.name}}. Jira: {{create-ticket.key}}.'
  consumes:
  - type: http
    namespace: figma-api
    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: jira-api
    baseUri: https://mastercard.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_password
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_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: post-message
        method: POST
Open in Framework → View in Fleet → figma-design-to-jira-handoff-pipeline.yml

Scans Box for documents exceeding retention policies, archives expired files, and logs actions in ServiceNow.

naftiko: '0.5'
info:
  label: Box Document Retention Policy Pipeline
  description: Scans Box for documents exceeding retention policies, archives expired files, and logs actions in ServiceNow.
  tags:
  - document-management
  - box
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: document-retention
    port: 8080
    tools:
    - name: enforce-retention-policy
      description: Enforce document retention policies on Box files.
      inputParameters:
      - name: folder_id
        in: body
        type: string
        description: Box folder identifier.
      steps:
      - name: scan-files
        type: call
        call: box-api.list-files
        with:
          folder_id: '{{folder_id}}'
      - name: check-retention
        type: call
        call: snowflake-api.run-query
        with:
          query: SELECT * FROM compliance.retention_policies WHERE folder_id = '{{folder_id}}'
      - name: log-actions
        type: call
        call: servicenow-api.create-incident
        with:
          short_description: 'Retention policy: folder {{folder_id}}'
          description: 'Files scanned: {{scan-files.count}}. Expired: {{check-retention.expired_count}}.'
  consumes:
  - type: http
    namespace: box-api
    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-files
        method: GET
  - type: http
    namespace: snowflake-api
    baseUri: https://mastercard.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: servicenow-api
    baseUri: https://mastercard.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → box-document-retention-policy-pipeline.yml

Searches Confluence for payment network policy and procedure documents by keyword.

naftiko: '0.5'
info:
  label: Confluence Policy Document Search
  description: Searches Confluence for payment network policy and procedure documents by keyword.
  tags:
  - knowledge-management
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: confluence
    port: 8080
    tools:
    - name: search-policies
      description: Search Confluence for policy documents by keyword.
      inputParameters:
      - name: query
        in: body
        type: string
        description: Search keyword or phrase.
      call: confluence-api.search
      with:
        query: '{{query}}'
  consumes:
  - type: http
    namespace: confluence-api
    baseUri: https://mastercard.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_password
    resources:
    - name: search
      path: /content/search
      operations:
      - name: search
        method: GET
Open in Framework → View in Fleet → confluence-policy-document-search.yml

Triggers model retraining in Databricks, validates accuracy metrics in Snowflake, and notifies the data science team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Databricks ML Model Retraining Pipeline
  description: Triggers model retraining in Databricks, validates accuracy metrics in Snowflake, and notifies the data science team via Microsoft Teams.
  tags:
  - ml-ops
  - azure-databricks
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ml-retraining
    port: 8080
    tools:
    - name: retrain-fraud-model
      description: Retrain a fraud detection model and validate its performance.
      inputParameters:
      - name: model_name
        in: body
        type: string
        description: ML model name.
      steps:
      - name: trigger-training
        type: call
        call: databricks-api.run-job
        with:
          job_id: retrain-{{model_name}}
      - name: validate-metrics
        type: call
        call: snowflake-api.run-query
        with:
          query: SELECT accuracy, precision, recall FROM ml.model_metrics WHERE model = '{{model_name}}' ORDER BY trained_at DESC LIMIT 1
      - name: notify-team
        type: call
        call: msteams-api.post-message
        with:
          team_id: data-science
          channel_id: ml-ops
          message: 'Model {{model_name}} retrained. Accuracy: {{validate-metrics.accuracy}}. Precision: {{validate-metrics.precision}}.'
  consumes:
  - type: http
    namespace: databricks-api
    baseUri: https://mastercard.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-api
    baseUri: https://mastercard.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: msteams-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_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: post-message
        method: POST
Open in Framework → View in Fleet → databricks-ml-model-retraining-pipeline.yml

Monitors SageMaker inference endpoint health, detects drift in Datadog, and creates retraining tickets in Jira.

naftiko: '0.5'
info:
  label: Amazon SageMaker Model Endpoint Monitor
  description: Monitors SageMaker inference endpoint health, detects drift in Datadog, and creates retraining tickets in Jira.
  tags:
  - ml-ops
  - amazon-sagemaker
  - datadog
  - jira
capability:
  exposes:
  - type: mcp
    namespace: sagemaker-monitor
    port: 8080
    tools:
    - name: monitor-sagemaker-endpoint
      description: Monitor a SageMaker model endpoint for drift and degradation.
      inputParameters:
      - name: endpoint_name
        in: body
        type: string
        description: SageMaker endpoint name.
      steps:
      - name: check-health
        type: call
        call: sagemaker-api.describe-endpoint
        with:
          endpoint_name: '{{endpoint_name}}'
      - name: check-drift
        type: call
        call: datadog-api.query-metrics
        with:
          query: sagemaker.endpoint.model_latency{endpoint:{{endpoint_name}}}
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: MLOPS
          summary: 'Model drift: {{endpoint_name}}'
          description: 'Status: {{check-health.status}}. Latency: {{check-drift.value}}ms.'
  consumes:
  - type: http
    namespace: sagemaker-api
    baseUri: https://api.sagemaker.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_sig_v4
      placement: header
    resources:
    - name: endpoints
      path: /
      operations:
      - name: describe-endpoint
        method: POST
  - type: http
    namespace: datadog-api
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: metrics
      path: /query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: jira-api
    baseUri: https://mastercard.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_password
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → amazon-sagemaker-model-endpoint-monitor.yml

Extracts merchant performance from Snowflake, generates review reports in Power BI, and creates review tasks in Jira.

naftiko: '0.5'
info:
  label: Quarterly Merchant Review Automation
  description: Extracts merchant performance from Snowflake, generates review reports in Power BI, and creates review tasks in Jira.
  tags:
  - merchant-management
  - snowflake
  - power-bi
  - jira
capability:
  exposes:
  - type: mcp
    namespace: merchant-review
    port: 8080
    tools:
    - name: generate-quarterly-review
      description: Automate quarterly merchant performance reviews.
      inputParameters:
      - name: quarter
        in: body
        type: string
        description: Quarter (e.g. Q1-2026).
      - name: region
        in: body
        type: string
        description: Region code.
      steps:
      - name: get-performance
        type: call
        call: snowflake-api.run-query
        with:
          query: SELECT * FROM merchants.quarterly_performance WHERE quarter = '{{quarter}}' AND region = '{{region}}'
      - name: refresh-report
        type: call
        call: powerbi-api.refresh-dataset
        with:
          dataset_id: merchant-review-{{region}}
      - name: create-reviews
        type: call
        call: jira-api.create-issue
        with:
          project: MERCHANTS
          summary: 'Quarterly review: {{region}} {{quarter}}'
          description: 'Merchants reviewed: {{get-performance.count}}. Top performer: {{get-performance.top.name}}.'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://mastercard.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-api
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://mastercard.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_password
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → quarterly-merchant-review-automation.yml

Pulls employer brand metrics from LinkedIn, stores in Snowflake, and creates recruitment insights in Confluence.

naftiko: '0.5'
info:
  label: LinkedIn Employer Brand Analytics Pipeline
  description: Pulls employer brand metrics from LinkedIn, stores in Snowflake, and creates recruitment insights in Confluence.
  tags:
  - recruiting
  - linkedin
  - snowflake
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: employer-brand
    port: 8080
    tools:
    - name: analyze-employer-brand
      description: Analyze employer brand performance and generate insights.
      inputParameters:
      - name: date_range
        in: body
        type: string
        description: Date range for analysis.
      steps:
      - name: get-metrics
        type: call
        call: linkedin-api.get-brand-metrics
        with:
          date_range: '{{date_range}}'
      - name: store-data
        type: call
        call: snowflake-api.run-query
        with:
          query: INSERT INTO hr.employer_brand (impressions, followers, apply_rate) VALUES ({{get-metrics.impressions}}, {{get-metrics.followers}}, {{get-metrics.apply_rate}})
      - name: publish-insights
        type: call
        call: confluence-api.create-page
        with:
          space: HR
          title: 'Employer Brand Report: {{date_range}}'
          body: 'Impressions: {{get-metrics.impressions}}. Followers: {{get-metrics.followers}}. Apply rate: {{get-metrics.apply_rate}}%.'
  consumes:
  - type: http
    namespace: linkedin-api
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: analytics
      path: /organizationalEntityShareStatistics
      operations:
      - name: get-brand-metrics
        method: GET
  - type: http
    namespace: snowflake-api
    baseUri: https://mastercard.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: confluence-api
    baseUri: https://mastercard.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_password
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → linkedin-employer-brand-analytics-pipeline.yml

Creates a new job requisition in Workday, assigns it to a recruiter, and notifies the hiring manager via Teams with details and a Workday link.

naftiko: '0.5'
info:
  label: Workday Recruitment Requisition Opener
  description: Creates a new job requisition in Workday, assigns it to a recruiter, and notifies the hiring manager via Teams with details and a Workday link.
  tags:
  - hr
  - recruiting
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: talent-ops
    port: 8080
    tools:
    - name: open-job-requisition
      description: Given a job title, business unit, grade level, and hiring manager UPN, create a new job requisition in Workday and notify the hiring manager via Teams. Use when a new headcount is approved or a backfill is needed across Mastercard technology and business units.
      inputParameters:
      - name: job_title
        in: body
        type: string
        description: Title of the role to be hired.
      - name: business_unit
        in: body
        type: string
        description: Mastercard business unit the role belongs to.
      - name: grade_level
        in: body
        type: string
        description: Compensation grade level for the role.
      - name: hiring_manager_upn
        in: body
        type: string
        description: UPN of the hiring manager sponsoring the requisition.
      steps:
      - name: create-req
        type: call
        call: workday-talent.create-requisition
        with:
          job_title: '{{job_title}}'
          business_unit: '{{business_unit}}'
          grade_level: '{{grade_level}}'
          hiring_manager: '{{hiring_manager_upn}}'
      - name: notify-hiring-manager
        type: call
        call: msteams-talent.send-message
        with:
          recipient_upn: '{{hiring_manager_upn}}'
          text: 'Job requisition opened in Workday: {{job_title}} ({{business_unit}}, {{grade_level}}). Req ID: {{create-req.requisition_id}}. Talent acquisition will reach out shortly.'
  consumes:
  - type: http
    namespace: workday-talent
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: requisitions
      path: /mastercard/jobRequisitions
      operations:
      - name: create-requisition
        method: POST
  - type: http
    namespace: msteams-talent
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /users/{upn}/chats
      inputParameters:
      - name: upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-recruitment-requisition-opener.yml

Retrieves merchant account details from Salesforce for payment network relationship management.

naftiko: '0.5'
info:
  label: Salesforce Merchant Account Lookup
  description: Retrieves merchant account details from Salesforce for payment network relationship management.
  tags:
  - crm
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: salesforce-merchant
    port: 8080
    tools:
    - name: get-merchant-account
      description: Look up a merchant account in Salesforce by ID.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Salesforce account identifier.
      call: salesforce-api.get-account
      with:
        account_id: '{{account_id}}'
  consumes:
  - type: http
    namespace: salesforce-api
    baseUri: https://mastercard.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
Open in Framework → View in Fleet → salesforce-merchant-account-lookup.yml

Audits MFA enrollment status in Okta, identifies non-compliant users via Workday, and sends enforcement notices via Microsoft Teams.

naftiko: '0.5'
info:
  label: Okta MFA Enrollment Enforcement Pipeline
  description: Audits MFA enrollment status in Okta, identifies non-compliant users via Workday, and sends enforcement notices via Microsoft Teams.
  tags:
  - security
  - okta
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: mfa-enforcement
    port: 8080
    tools:
    - name: enforce-mfa-enrollment
      description: Audit and enforce MFA enrollment across the organization.
      inputParameters:
      - name: department
        in: body
        type: string
        description: Department to audit.
      steps:
      - name: get-enrollment
        type: call
        call: okta-api.get-mfa-status
        with:
          department: '{{department}}'
      - name: get-employees
        type: call
        call: workday-api.list-workers
        with:
          department: '{{department}}'
      - name: send-notice
        type: call
        call: msteams-api.post-message
        with:
          team_id: security-team
          channel_id: mfa-compliance
          message: 'MFA audit: {{department}}. Enrolled: {{get-enrollment.enrolled_count}}/{{get-employees.count}}. Non-compliant: {{get-enrollment.non_compliant_count}}.'
  consumes:
  - type: http
    namespace: okta-api
    baseUri: https://mastercard.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: factors
      path: /users
      operations:
      - name: get-mfa-status
        method: GET
  - type: http
    namespace: workday-api
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /mastercard/workers
      operations:
      - name: list-workers
        method: GET
  - type: http
    namespace: msteams-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_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: post-message
        method: POST
Open in Framework → View in Fleet → okta-mfa-enrollment-enforcement-pipeline.yml

Detects infrastructure drift in Terraform Cloud, triggers remediation runs, and logs changes in ServiceNow.

naftiko: '0.5'
info:
  label: Terraform Infrastructure Drift Remediation
  description: Detects infrastructure drift in Terraform Cloud, triggers remediation runs, and logs changes in ServiceNow.
  tags:
  - infrastructure
  - terraform
  - servicenow
  - jira
capability:
  exposes:
  - type: mcp
    namespace: terraform-drift
    port: 8080
    tools:
    - name: remediate-drift
      description: Detect and remediate Terraform infrastructure drift.
      inputParameters:
      - name: workspace
        in: body
        type: string
        description: Terraform workspace name.
      steps:
      - name: detect-drift
        type: call
        call: terraform-api.plan-run
        with:
          workspace: '{{workspace}}'
      - name: apply-fix
        type: call
        call: terraform-api.apply-run
        with:
          run_id: '{{detect-drift.id}}'
      - name: log-change
        type: call
        call: servicenow-api.create-change
        with:
          short_description: 'Terraform drift remediation: {{workspace}}'
          description: 'Resources drifted: {{detect-drift.resource_changes}}. Run ID: {{detect-drift.id}}.'
  consumes:
  - type: http
    namespace: terraform-api
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: runs
      path: /workspaces/{{workspace}}/runs
      inputParameters:
      - name: workspace
        in: path
      operations:
      - name: plan-run
        method: POST
      - name: apply-run
        method: POST
  - type: http
    namespace: servicenow-api
    baseUri: https://mastercard.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
Open in Framework → View in Fleet → terraform-infrastructure-drift-remediation.yml

Collects completed Jira issues for a release, generates formatted release notes in Confluence, and notifies stakeholders via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Jira to Confluence Release Notes Generator
  description: Collects completed Jira issues for a release, generates formatted release notes in Confluence, and notifies stakeholders via Microsoft Outlook.
  tags:
  - documentation
  - jira
  - confluence
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: release-notes
    port: 8080
    tools:
    - name: generate-release-notes
      description: Generate and publish release notes from Jira issues.
      inputParameters:
      - name: fix_version
        in: body
        type: string
        description: Jira fix version.
      - name: project
        in: body
        type: string
        description: Jira project key.
      steps:
      - name: get-issues
        type: call
        call: jira-api.search-issues
        with:
          jql: project={{project}} AND fixVersion={{fix_version}} AND status=Done
      - name: create-notes
        type: call
        call: confluence-api.create-page
        with:
          space: RELEASES
          title: 'Release Notes: {{project}} {{fix_version}}'
          body: 'Issues completed: {{get-issues.total}}. Features: {{get-issues.feature_count}}. Bugs fixed: {{get-issues.bug_count}}.'
      - name: notify-stakeholders
        type: call
        call: outlook-api.send-mail
        with:
          to: stakeholders@mastercard.com
          subject: 'Release Notes: {{project}} {{fix_version}}'
          body: 'Release notes published: {{create-notes.url}}. {{get-issues.total}} issues completed.'
  consumes:
  - type: http
    namespace: jira-api
    baseUri: https://mastercard.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_password
    resources:
    - name: search
      path: /search
      operations:
      - name: search-issues
        method: GET
  - type: http
    namespace: confluence-api
    baseUri: https://mastercard.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_password
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: outlook-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → jira-to-confluence-release-notes-generator.yml

Calculates merchant risk scores in Snowflake, updates Salesforce records, and flags high-risk merchants in ServiceNow.

naftiko: '0.5'
info:
  label: Merchant Risk Scoring Pipeline
  description: Calculates merchant risk scores in Snowflake, updates Salesforce records, and flags high-risk merchants in ServiceNow.
  tags:
  - risk
  - snowflake
  - salesforce
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: merchant-risk
    port: 8080
    tools:
    - name: score-merchant-risk
      description: Calculate and update merchant risk scores.
      inputParameters:
      - name: merchant_id
        in: body
        type: string
        description: Merchant identifier.
      steps:
      - name: calculate-score
        type: call
        call: snowflake-api.run-query
        with:
          query: CALL risk.calculate_merchant_score('{{merchant_id}}')
      - name: update-crm
        type: call
        call: salesforce-api.update-account
        with:
          account_id: '{{merchant_id}}'
          risk_score: '{{calculate-score.score}}'
      - name: flag-high-risk
        type: call
        call: servicenow-api.create-incident
        with:
          short_description: 'High-risk merchant: {{merchant_id}}'
          description: 'Risk score: {{calculate-score.score}}. Factors: {{calculate-score.top_factors}}.'
          category: merchant_risk
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://mastercard.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: salesforce-api
    baseUri: https://mastercard.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: update-account
        method: PATCH
  - type: http
    namespace: servicenow-api
    baseUri: https://mastercard.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → merchant-risk-scoring-pipeline.yml

Submits a technology change request in ServiceNow for payment network changes and notifies the Change Advisory Board via Teams.

naftiko: '0.5'
info:
  label: ServiceNow Change Management Submission
  description: Submits a technology change request in ServiceNow for payment network changes and notifies the Change Advisory Board via Teams.
  tags:
  - itsm
  - change-management
  - servicenow
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: change-management
    port: 8080
    tools:
    - name: submit-network-change
      description: Given a change title, description, risk level, and implementation window, create a ServiceNow change request for a payment network change and notify the CAB channel in Teams. Use for planned maintenance, configuration changes, and software releases on payment processing systems.
      inputParameters:
      - name: change_title
        in: body
        type: string
        description: Short title of the change request.
      - name: change_description
        in: body
        type: string
        description: Full description of the change, risk, and rollback plan.
      - name: risk_level
        in: body
        type: string
        description: 'Change risk level: low, medium, or high.'
      - name: implementation_window
        in: body
        type: string
        description: Planned implementation date/time window in ISO 8601 format.
      steps:
      - name: create-change
        type: call
        call: servicenow-changes.create-change
        with:
          short_description: '{{change_title}}'
          description: '{{change_description}}'
          risk: '{{risk_level}}'
          start_date: '{{implementation_window}}'
      - name: notify-cab
        type: call
        call: msteams-cab.post-channel-message
        with:
          channel_id: change-advisory-board
          text: 'New change request: {{create-change.number}} — {{change_title}} | Risk: {{risk_level}} | Window: {{implementation_window}} | Review in ServiceNow.'
  consumes:
  - type: http
    namespace: servicenow-changes
    baseUri: https://mastercard.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: msteams-cab
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{team_id}/channels/{channel_id}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → servicenow-change-management-submission.yml

Analyzes cross-border payment flows in Snowflake, detects anomalies in Databricks, and publishes insights to Power BI.

naftiko: '0.5'
info:
  label: Snowflake Cross-Border Transaction Analytics
  description: Analyzes cross-border payment flows in Snowflake, detects anomalies in Databricks, and publishes insights to Power BI.
  tags:
  - analytics
  - snowflake
  - azure-databricks
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: cross-border-analytics
    port: 8080
    tools:
    - name: analyze-cross-border-flows
      description: Analyze cross-border payment patterns and detect anomalies.
      inputParameters:
      - name: corridor
        in: body
        type: string
        description: Payment corridor (e.g. US-EU, US-APAC).
      steps:
      - name: get-flows
        type: call
        call: snowflake-api.run-query
        with:
          query: SELECT * FROM payments.cross_border_summary WHERE corridor = '{{corridor}}'
      - name: detect-anomalies
        type: call
        call: databricks-api.run-job
        with:
          job_id: cross-border-anomaly
          parameters: corridor={{corridor}}
      - name: refresh-dashboard
        type: call
        call: powerbi-api.refresh-dataset
        with:
          dataset_id: cross-border-analytics
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://mastercard.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: databricks-api
    baseUri: https://mastercard.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-api
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → snowflake-cross-border-transaction-analytics.yml

Lists all GitHub organization collaborators across repositories and cross-references against active Okta users to identify stale access and flag accounts for removal.

naftiko: '0.5'
info:
  label: GitHub Repository Access Quarterly Audit
  description: Lists all GitHub organization collaborators across repositories and cross-references against active Okta users to identify stale access and flag accounts for removal.
  tags:
  - security
  - devops
  - github
  - okta
  - access-audit
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: repo-access-audit
    port: 8080
    tools:
    - name: audit-github-access
      description: Given a GitHub organization name, retrieve all repository collaborators and cross-reference with active Okta users to identify any deprovisioned or external accounts still holding repository access. Use for quarterly PCI-DSS access reviews and security compliance audits.
      inputParameters:
      - name: github_org
        in: body
        type: string
        description: GitHub organization name to audit (e.g., Mastercard).
      - name: repository
        in: body
        type: string
        description: Repository name to check for stale collaborator access.
      steps:
      - name: get-collaborators
        type: call
        call: github-access.get-repo-collaborators
        with:
          org: '{{github_org}}'
          repo: '{{repository}}'
      - name: list-active-users
        type: call
        call: okta-access.list-active-users
        with:
          filter: status eq ACTIVE
  consumes:
  - type: http
    namespace: github-access
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: collaborators
      path: /repos/{owner}/{repo}/collaborators
      inputParameters:
      - name: owner
        in: path
      - name: repo
        in: path
      operations:
      - name: get-repo-collaborators
        method: GET
  - type: http
    namespace: okta-access
    baseUri: https://mastercard.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: users
      path: /users
      operations:
      - name: list-active-users
        method: GET
Open in Framework → View in Fleet → github-repository-access-quarterly-audit.yml

Retrieves static application security testing results from Checkmarx for payment application code review.

naftiko: '0.5'
info:
  label: Checkmarx Security Scan Results
  description: Retrieves static application security testing results from Checkmarx for payment application code review.
  tags:
  - security
  - checkmarx
capability:
  exposes:
  - type: mcp
    namespace: checkmarx
    port: 8080
    tools:
    - name: get-scan-results
      description: Fetch SAST scan results for a Checkmarx project.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: Checkmarx project identifier.
      call: checkmarx-api.get-results
      with:
        project_id: '{{project_id}}'
  consumes:
  - type: http
    namespace: checkmarx-api
    baseUri: https://checkmarx.mastercard.com/cxrestapi
    authentication:
      type: bearer
      token: $secrets.checkmarx_token
    resources:
    - name: results
      path: /projects/{{project_id}}/results
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-results
        method: GET
Open in Framework → View in Fleet → checkmarx-security-scan-results.yml

Retrieves a submitted SAP Concur expense report and notifies the approver via Teams with a summary and direct approval link.

naftiko: '0.5'
info:
  label: SAP Concur Expense Report Approval Flow
  description: Retrieves a submitted SAP Concur expense report and notifies the approver via Teams with a summary and direct approval link.
  tags:
  - finance
  - expense-management
  - sap-concur
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: expense-management
    port: 8080
    tools:
    - name: notify-expense-approver
      description: Given a SAP Concur expense report ID and approver UPN, retrieve the report details and send the approver a Teams notification with a cost summary and direct link to review. Use when an employee submits a travel or business expense report requiring manager approval.
      inputParameters:
      - name: expense_report_id
        in: body
        type: string
        description: The SAP Concur expense report ID to retrieve and surface for approval.
      - name: approver_upn
        in: body
        type: string
        description: UPN of the approving manager.
      steps:
      - name: get-report
        type: call
        call: concur.get-expense-report
        with:
          report_id: '{{expense_report_id}}'
      - name: notify-approver
        type: call
        call: msteams-concur.send-message
        with:
          recipient_upn: '{{approver_upn}}'
          text: 'Expense approval needed: {{get-report.employee_name}} submitted ${{get-report.total_amount}} for {{get-report.purpose}}. Report ID: {{expense_report_id}}. Approve at: {{get-report.approval_url}}'
  consumes:
  - type: http
    namespace: concur
    baseUri: https://www.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: expense-reports
      path: /expense/reports/{report_id}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-expense-report
        method: GET
  - type: http
    namespace: msteams-concur
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /users/{upn}/chats
      inputParameters:
      - name: upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-concur-expense-report-approval-flow.yml

Retrieves design file metadata from Figma for payment product UI/UX design review and versioning.

naftiko: '0.5'
info:
  label: Figma Design File Lookup
  description: Retrieves design file metadata from Figma for payment product UI/UX design review and versioning.
  tags:
  - design
  - figma
capability:
  exposes:
  - type: mcp
    namespace: figma
    port: 8080
    tools:
    - name: get-design-file
      description: Fetch metadata for a Figma design file.
      inputParameters:
      - name: file_key
        in: body
        type: string
        description: Figma file key.
      call: figma-api.get-file
      with:
        file_key: '{{file_key}}'
  consumes:
  - type: http
    namespace: figma-api
    baseUri: https://api.figma.com/v1
    authentication:
      type: bearer
      token: $secrets.figma_token
    resources:
    - name: files
      path: /files/{{file_key}}
      inputParameters:
      - name: file_key
        in: path
      operations:
      - name: get-file
        method: GET
Open in Framework → View in Fleet → figma-design-file-lookup.yml

When a critical Datadog alert fires on payment processing infrastructure, creates a ServiceNow P1 incident, pages the on-call engineer, and posts an alert to the network operations Teams channel.

naftiko: '0.5'
info:
  label: Payment Network Incident Response
  description: When a critical Datadog alert fires on payment processing infrastructure, creates a ServiceNow P1 incident, pages the on-call engineer, and posts an alert to the network operations Teams channel.
  tags:
  - itsm
  - incident-response
  - datadog
  - servicenow
  - microsoft-teams
  - payments
capability:
  exposes:
  - type: mcp
    namespace: network-ops
    port: 8080
    tools:
    - name: handle-payment-network-incident
      description: Given a Datadog alert for payment network infrastructure, create a ServiceNow P1 incident, assign it to the on-call payments SRE team, and alert the NOC Teams channel. Invoke immediately when any payment processing or authorization service alert fires.
      inputParameters:
      - name: monitor_name
        in: body
        type: string
        description: The Datadog monitor name that triggered the alert.
      - name: severity
        in: body
        type: string
        description: 'Alert severity level: critical or high.'
      - name: affected_service
        in: body
        type: string
        description: The payment service or network component affected.
      - name: alert_url
        in: body
        type: string
        description: Direct URL to the Datadog alert event.
      steps:
      - name: create-incident
        type: call
        call: servicenow-p1.create-incident
        with:
          short_description: '[P1] Payment network alert: {{monitor_name}} — {{affected_service}}'
          urgency: '1'
          category: payment_infrastructure
          assigned_group: Payments_SRE
      - name: post-noc-alert
        type: call
        call: msteams-noc.post-channel-message
        with:
          channel_id: network-operations-center
          text: 'PAYMENT NETWORK INCIDENT {{create-incident.number}}: {{monitor_name}} | Service: {{affected_service}} | Severity: {{severity}} | Alert: {{alert_url}}'
  consumes:
  - type: http
    namespace: servicenow-p1
    baseUri: https://mastercard.service-now.com/api/now
    authentication:
      type: 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-noc
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{team_id}/channels/{channel_id}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → payment-network-incident-response.yml

Detects Databricks job failures, restarts pipelines, and creates incident tickets in ServiceNow.

naftiko: '0.5'
info:
  label: Databricks ETL Pipeline Failure Handler
  description: Detects Databricks job failures, restarts pipelines, and creates incident tickets in ServiceNow.
  tags:
  - data-engineering
  - azure-databricks
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: etl-failure
    port: 8080
    tools:
    - name: handle-etl-failure
      description: Detect, restart, and track Databricks ETL pipeline failures.
      inputParameters:
      - name: job_id
        in: body
        type: string
        description: Databricks job identifier.
      steps:
      - name: get-status
        type: call
        call: databricks-api.get-run
        with:
          job_id: '{{job_id}}'
      - name: restart-job
        type: call
        call: databricks-api.run-job
        with:
          job_id: '{{job_id}}'
      - name: create-incident
        type: call
        call: servicenow-api.create-incident
        with:
          short_description: 'ETL failure: job {{job_id}}'
          description: 'Status: {{get-status.state}}. Error: {{get-status.error}}. Restarted: {{restart-job.run_id}}.'
  consumes:
  - type: http
    namespace: databricks-api
    baseUri: https://mastercard.azuredatabricks.net/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/runs/get
      operations:
      - name: get-run
        method: GET
      - name: run-job
        method: POST
  - type: http
    namespace: servicenow-api
    baseUri: https://mastercard.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → databricks-etl-pipeline-failure-handler.yml

Checks the health and node status of an Azure Kubernetes Service cluster hosting payment microservices.

naftiko: '0.5'
info:
  label: Azure Kubernetes Cluster Health Check
  description: Checks the health and node status of an Azure Kubernetes Service cluster hosting payment microservices.
  tags:
  - infrastructure
  - azure-kubernetes-service
capability:
  exposes:
  - type: mcp
    namespace: aks
    port: 8080
    tools:
    - name: check-cluster-health
      description: Retrieve the health status of an AKS cluster.
      inputParameters:
      - name: cluster_name
        in: body
        type: string
        description: AKS cluster name.
      call: aks-api.get-cluster
      with:
        cluster_name: '{{cluster_name}}'
  consumes:
  - type: http
    namespace: aks-api
    baseUri: https://management.azure.com/subscriptions
    authentication:
      type: bearer
      token: $secrets.azure_management_token
    resources:
    - name: clusters
      path: /resourceGroups/mc-prod/providers/Microsoft.ContainerService/managedClusters/{{cluster_name}}
      inputParameters:
      - name: cluster_name
        in: path
      operations:
      - name: get-cluster
        method: GET
Open in Framework → View in Fleet → azure-kubernetes-cluster-health-check.yml

Checks the health of the Moody's analytics platform by querying Datadog for key infrastructure metrics including CPU, memory, and error rates.

naftiko: '0.5'
info:
  label: Datadog Analytics Platform Health Check
  description: Checks the health of the Moody's analytics platform by querying Datadog for key infrastructure metrics including CPU, memory, and error rates.
  tags:
  - monitoring
  - infrastructure
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: platform-health
    port: 8080
    tools:
    - name: check-platform-health
      description: Retrieve analytics platform health metrics from Datadog.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The service name to check.
      call: datadog.get-metrics
      with:
        service_name: '{{service_name}}'
  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?query=avg:system.cpu.user{service:{{service_name}}}
      inputParameters:
      - name: service_name
        in: query
      operations:
      - name: get-metrics
        method: GET
Open in Framework → View in Fleet → datadog-analytics-platform-health-check.yml

Generates economic forecast dashboards by pulling macroeconomic data from Snowflake, refreshing Power BI visualizations, uploading commentary to Confluence, and notifying the economics team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Economic Forecast Dashboard Pipeline
  description: Generates economic forecast dashboards by pulling macroeconomic data from Snowflake, refreshing Power BI visualizations, uploading commentary to Confluence, and notifying the economics team via Microsoft Teams.
  tags:
  - research
  - economics
  - snowflake
  - power-bi
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: economic-forecasts
    port: 8080
    tools:
    - name: generate-economic-forecast
      description: Given a region and forecast type, generate the economic forecast dashboard.
      inputParameters:
      - name: region
        in: body
        type: string
        description: The geographic region.
      - name: forecast_type
        in: body
        type: string
        description: Forecast type (gdp, inflation, unemployment, rates).
      steps:
      - name: pull-macro-data
        type: call
        call: snowflake.execute-query
        with:
          region: '{{region}}'
          forecast_type: '{{forecast_type}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: economic-forecast-dataset
      - name: publish-commentary
        type: call
        call: confluence.create-page
        with:
          space_key: ECON
          title: 'Economic Forecast: {{region}} - {{forecast_type}}'
          body: '{{region}} {{forecast_type}} forecast updated with {{pull-macro-data.rowCount}} data points.'
      - name: notify-economics
        type: call
        call: msteams.post-message
        with:
          team_id: economics-team
          channel_id: forecasts
          message: 'Economic forecast for {{region}} ({{forecast_type}}) updated. Dashboard refreshed. Commentary: {{publish-commentary._links.webui}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://moodys.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://moodys.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → economic-forecast-dashboard-pipeline.yml

Queries the debt maturity profile for an issuer from Snowflake, returning outstanding amounts by maturity bucket and currency.

naftiko: '0.5'
info:
  label: Debt Maturity Profile Query
  description: Queries the debt maturity profile for an issuer from Snowflake, returning outstanding amounts by maturity bucket and currency.
  tags:
  - fixed-income
  - maturity
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: debt-maturity
    port: 8080
    tools:
    - name: get-maturity-profile
      description: Retrieve debt maturity profile by issuer ID.
      inputParameters:
      - name: issuer_id
        in: body
        type: string
        description: The issuer identifier.
      call: snowflake.get-maturity-profile
      with:
        issuer_id: '{{issuer_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://moodys.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-maturity-profile
        method: POST
Open in Framework → View in Fleet → debt-maturity-profile-query.yml

Retrieves a company's risk assessment score from the analytics platform, including probability of default, loss given default, and credit score.

naftiko: '0.5'
info:
  label: Risk Assessment Score Retrieval
  description: Retrieves a company's risk assessment score from the analytics platform, including probability of default, loss given default, and credit score.
  tags:
  - risk-analytics
  - credit-risk
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: risk-scores
    port: 8080
    tools:
    - name: get-risk-score
      description: Look up a risk assessment score by company identifier. Returns PD, LGD, and composite score.
      inputParameters:
      - name: company_id
        in: body
        type: string
        description: The company identifier.
      call: snowflake.get-risk-score
      with:
        company_id: '{{company_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://moodys.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-risk-score
        method: POST
Open in Framework → View in Fleet → risk-assessment-score-retrieval.yml

Retrieves operational data for Moodys financial-services workflows.

naftiko: '0.5'
info:
  label: Moodys Data Lookup 15
  description: Retrieves operational data for Moodys financial-services workflows.
  tags:
  - financial-services
  - operations
capability:
  exposes:
  - type: mcp
    namespace: moodys-data
    port: 8080
    tools:
    - name: get-data-15
      description: Retrieves operational data for Moodys financial-services workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: moodys-data.get-data-15
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: moodys-data
    baseUri: https://api.moodys.com/data/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: data-15
      path: /data-15/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-15
        method: GET
Open in Framework → View in Fleet → moodys-data-lookup-15.yml

Computes ESG scores by pulling environmental, social, and governance data from Snowflake, running scoring models in Databricks, updating Salesforce records, and publishing results to Confluence.

naftiko: '0.5'
info:
  label: ESG Score Computation Pipeline
  description: Computes ESG scores by pulling environmental, social, and governance data from Snowflake, running scoring models in Databricks, updating Salesforce records, and publishing results to Confluence.
  tags:
  - risk-analytics
  - esg
  - snowflake
  - databricks
  - salesforce
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: esg-scoring
    port: 8080
    tools:
    - name: compute-esg-score
      description: Given an entity ID, compute comprehensive ESG scores.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: assessment_year
        in: body
        type: string
        description: The assessment year.
      steps:
      - name: pull-esg-data
        type: call
        call: snowflake.execute-query
        with:
          entity_id: '{{entity_id}}'
          year: '{{assessment_year}}'
      - name: run-scoring-model
        type: call
        call: databricks.invoke-model
        with:
          endpoint_name: esg-scoring-model
          entity_id: '{{entity_id}}'
      - name: store-scores
        type: call
        call: salesforce.update-esg-score
        with:
          entity_id: '{{entity_id}}'
          e_score: '{{run-scoring-model.environmental_score}}'
          s_score: '{{run-scoring-model.social_score}}'
          g_score: '{{run-scoring-model.governance_score}}'
      - name: publish-assessment
        type: call
        call: confluence.create-page
        with:
          space_key: ESG
          title: 'ESG Assessment: {{entity_id}} - {{assessment_year}}'
          body: 'E: {{run-scoring-model.environmental_score}}, S: {{run-scoring-model.social_score}}, G: {{run-scoring-model.governance_score}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://moodys.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: databricks
    baseUri: https://moodys.cloud.databricks.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: model-serving
      path: /serving-endpoints/{{endpoint_name}}/invocations
      inputParameters:
      - name: endpoint_name
        in: path
      operations:
      - name: invoke-model
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://moodys.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: esg-scores
      path: /sobjects/ESG_Score__c/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: update-esg-score
        method: PATCH
  - type: http
    namespace: confluence
    baseUri: https://moodys.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → esg-score-computation-pipeline.yml

Retrieves operational data for Moodys financial-services workflows.

naftiko: '0.5'
info:
  label: Moodys Data Lookup 14
  description: Retrieves operational data for Moodys financial-services workflows.
  tags:
  - financial-services
  - operations
capability:
  exposes:
  - type: mcp
    namespace: moodys-data
    port: 8080
    tools:
    - name: get-data-14
      description: Retrieves operational data for Moodys financial-services workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: moodys-data.get-data-14
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: moodys-data
    baseUri: https://api.moodys.com/data/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: data-14
      path: /data-14/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-14
        method: GET
Open in Framework → View in Fleet → moodys-data-lookup-14.yml

Generates a portfolio concentration report by querying Snowflake for sector and geography exposure, then storing the report in SharePoint and notifying the portfolio team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Credit Portfolio Concentration Report
  description: Generates a portfolio concentration report by querying Snowflake for sector and geography exposure, then storing the report in SharePoint and notifying the portfolio team via Microsoft Teams.
  tags:
  - portfolio
  - concentration
  - snowflake
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: portfolio-concentration
    port: 8080
    tools:
    - name: generate-concentration-report
      description: Given a portfolio ID, generate sector and geography concentration analysis.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The portfolio identifier.
      - name: as_of_date
        in: body
        type: string
        description: The as-of date in YYYY-MM-DD format.
      steps:
      - name: pull-exposure-data
        type: call
        call: snowflake.execute-query
        with:
          portfolio_id: '{{portfolio_id}}'
          as_of_date: '{{as_of_date}}'
      - name: store-report
        type: call
        call: sharepoint.create-folder
        with:
          site_id: analytics_site
          folder_path: Concentration/{{portfolio_id}}/{{as_of_date}}
      - name: notify-team
        type: call
        call: msteams.post-message
        with:
          team_id: portfolio-team
          channel_id: reports
          message: 'Concentration report ready for portfolio {{portfolio_id}} as of {{as_of_date}}. Location: {{store-report.webUrl}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://moodys.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → credit-portfolio-concentration-report.yml

Retrieves operational data for Moodys financial-services workflows.

naftiko: '0.5'
info:
  label: Moodys Data Lookup 10
  description: Retrieves operational data for Moodys financial-services workflows.
  tags:
  - financial-services
  - operations
capability:
  exposes:
  - type: mcp
    namespace: moodys-data
    port: 8080
    tools:
    - name: get-data-10
      description: Retrieves operational data for Moodys financial-services workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: moodys-data.get-data-10
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: moodys-data
    baseUri: https://api.moodys.com/data/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: data-10
      path: /data-10/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-10
        method: GET
Open in Framework → View in Fleet → moodys-data-lookup-10.yml

Retrieves the current credit rating for an entity by identifier from the Moody's ratings database, returning rating, outlook, and last action date.

naftiko: '0.5'
info:
  label: Credit Rating Lookup
  description: Retrieves the current credit rating for an entity by identifier from the Moody's ratings database, returning rating, outlook, and last action date.
  tags:
  - credit-ratings
  - ratings
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: credit-ratings
    port: 8080
    tools:
    - name: get-credit-rating
      description: Look up a credit rating by entity identifier. Returns current rating, outlook, and last rating action.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The Moody's entity identifier.
      call: salesforce.get-rating
      with:
        entity_id: '{{entity_id}}'
      outputParameters:
      - name: rating
        type: string
        mapping: $.records[0].Current_Rating__c
      - name: outlook
        type: string
        mapping: $.records[0].Rating_Outlook__c
      - name: last_action_date
        type: string
        mapping: $.records[0].Last_Action_Date__c
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://moodys.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: ratings
      path: /query/?q=SELECT+Current_Rating__c,Rating_Outlook__c,Last_Action_Date__c+FROM+Credit_Rating__c+WHERE+Entity_ID__c='{{entity_id}}'
      inputParameters:
      - name: entity_id
        in: query
      operations:
      - name: get-rating
        method: GET
Open in Framework → View in Fleet → credit-rating-lookup.yml

Retrieves operational data for Moodys financial-services workflows.

naftiko: '0.5'
info:
  label: Moodys Data Lookup 11
  description: Retrieves operational data for Moodys financial-services workflows.
  tags:
  - financial-services
  - operations
capability:
  exposes:
  - type: mcp
    namespace: moodys-data
    port: 8080
    tools:
    - name: get-data-11
      description: Retrieves operational data for Moodys financial-services workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: moodys-data.get-data-11
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: moodys-data
    baseUri: https://api.moodys.com/data/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: data-11
      path: /data-11/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-11
        method: GET
Open in Framework → View in Fleet → moodys-data-lookup-11.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 9
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - box
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-9
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-ops.run-workflow-9
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: box.upload-file
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-9
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → moodys-workflow-9.yml

Retrieves operational data for Moodys financial-services workflows.

naftiko: '0.5'
info:
  label: Moodys Data Lookup 13
  description: Retrieves operational data for Moodys financial-services workflows.
  tags:
  - financial-services
  - operations
capability:
  exposes:
  - type: mcp
    namespace: moodys-data
    port: 8080
    tools:
    - name: get-data-13
      description: Retrieves operational data for Moodys financial-services workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: moodys-data.get-data-13
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: moodys-data
    baseUri: https://api.moodys.com/data/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: data-13
      path: /data-13/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-13
        method: GET
Open in Framework → View in Fleet → moodys-data-lookup-13.yml

Retrieves compensation benchmarking data from Workday for a specified job family and location, returning salary ranges and market comparisons.

naftiko: '0.5'
info:
  label: Workday Compensation Benchmarking
  description: Retrieves compensation benchmarking data from Workday for a specified job family and location, returning salary ranges and market comparisons.
  tags:
  - hr
  - compensation
  - workday
capability:
  exposes:
  - type: mcp
    namespace: compensation-benchmark
    port: 8080
    tools:
    - name: get-comp-benchmark
      description: Look up compensation benchmarks by job family and location.
      inputParameters:
      - name: job_family
        in: body
        type: string
        description: The job family group.
      - name: location
        in: body
        type: string
        description: The location code.
      call: workday.get-compensation
      with:
        job_family: '{{job_family}}'
        location: '{{location}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/moodys
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: compensation
      path: /compensation?jobFamily={{job_family}}&location={{location}}
      inputParameters:
      - name: job_family
        in: query
      - name: location
        in: query
      operations:
      - name: get-compensation
        method: GET
Open in Framework → View in Fleet → workday-compensation-benchmarking.yml

Retrieves counterparty credit exposure data from Snowflake, returning gross and net exposure, collateral held, and exposure-at-default.

naftiko: '0.5'
info:
  label: Counterparty Exposure Lookup
  description: Retrieves counterparty credit exposure data from Snowflake, returning gross and net exposure, collateral held, and exposure-at-default.
  tags:
  - credit-risk
  - counterparty
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: counterparty-exposure
    port: 8080
    tools:
    - name: get-counterparty-exposure
      description: Look up counterparty exposure by counterparty ID.
      inputParameters:
      - name: counterparty_id
        in: body
        type: string
        description: The counterparty identifier.
      call: snowflake.get-exposure
      with:
        counterparty_id: '{{counterparty_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://moodys.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-exposure
        method: POST
Open in Framework → View in Fleet → counterparty-exposure-lookup.yml

Checks the status of a deployed ML model endpoint in Databricks used for credit risk scoring and default prediction.

naftiko: '0.5'
info:
  label: Databricks Model Endpoint Status
  description: Checks the status of a deployed ML model endpoint in Databricks used for credit risk scoring and default prediction.
  tags:
  - risk-analytics
  - databricks
  - machine-learning
capability:
  exposes:
  - type: mcp
    namespace: ml-models
    port: 8080
    tools:
    - name: get-model-status
      description: Check the status of a Databricks model serving endpoint.
      inputParameters:
      - name: endpoint_name
        in: body
        type: string
        description: The model serving endpoint name.
      call: databricks.get-endpoint
      with:
        endpoint_name: '{{endpoint_name}}'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://moodys.cloud.databricks.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: endpoints
      path: /serving-endpoints/{{endpoint_name}}
      inputParameters:
      - name: endpoint_name
        in: path
      operations:
      - name: get-endpoint
        method: GET
Open in Framework → View in Fleet → databricks-model-endpoint-status.yml

Generates sector outlook reports by querying industry data from Snowflake, pulling rating distribution from Salesforce, creating the report in Confluence, and distributing via SharePoint and Microsoft Teams.

naftiko: '0.5'
info:
  label: Sector Outlook Report Pipeline
  description: Generates sector outlook reports by querying industry data from Snowflake, pulling rating distribution from Salesforce, creating the report in Confluence, and distributing via SharePoint and Microsoft Teams.
  tags:
  - research
  - sector-outlook
  - snowflake
  - salesforce
  - confluence
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sector-outlook
    port: 8080
    tools:
    - name: generate-sector-outlook
      description: Given a sector and period, generate a comprehensive sector outlook report.
      inputParameters:
      - name: sector
        in: body
        type: string
        description: The sector name.
      - name: outlook_period
        in: body
        type: string
        description: The outlook period (e.g., 2026-H2).
      steps:
      - name: pull-industry-data
        type: call
        call: snowflake.execute-query
        with:
          sector: '{{sector}}'
          period: '{{outlook_period}}'
      - name: get-rating-distribution
        type: call
        call: salesforce.get-sector-ratings
        with:
          sector: '{{sector}}'
      - name: create-report
        type: call
        call: confluence.create-page
        with:
          space_key: RESEARCH
          title: 'Sector Outlook: {{sector}} - {{outlook_period}}'
          body: 'Sector: {{sector}}. Entities: {{pull-industry-data.rowCount}}. Rating distribution: {{get-rating-distribution.distribution}}.'
      - name: upload-data
        type: call
        call: sharepoint.create-folder
        with:
          site_id: research_site
          folder_path: SectorOutlooks/{{sector}}/{{outlook_period}}
      - name: notify-team
        type: call
        call: msteams.post-message
        with:
          team_id: research-team
          channel_id: sector-outlook
          message: 'Sector outlook for {{sector}} ({{outlook_period}}) published. Report: {{create-report._links.webui}}. Data: {{upload-data.webUrl}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://moodys.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://moodys.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: sector-ratings
      path: /query/?q=SELECT+Current_Rating__c,COUNT(Id)+FROM+Credit_Rating__c+WHERE+Sector__c='{{sector}}'+GROUP+BY+Current_Rating__c
      inputParameters:
      - name: sector
        in: query
      operations:
      - name: get-sector-ratings
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://moodys.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → sector-outlook-report-pipeline.yml

Retrieves operational data for Moodys financial-services workflows.

naftiko: '0.5'
info:
  label: Moodys Data Lookup 12
  description: Retrieves operational data for Moodys financial-services workflows.
  tags:
  - financial-services
  - operations
capability:
  exposes:
  - type: mcp
    namespace: moodys-data
    port: 8080
    tools:
    - name: get-data-12
      description: Retrieves operational data for Moodys financial-services workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: moodys-data.get-data-12
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: moodys-data
    baseUri: https://api.moodys.com/data/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: data-12
      path: /data-12/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-12
        method: GET
Open in Framework → View in Fleet → moodys-data-lookup-12.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 8
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-8
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-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: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-8
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://moodys-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → moodys-workflow-8.yml

Orchestrates a credit rating action by updating the rating in Salesforce, publishing the research note to Confluence, distributing market data via Bloomberg, and notifying the ratings team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Rating Action Publication Workflow
  description: Orchestrates a credit rating action by updating the rating in Salesforce, publishing the research note to Confluence, distributing market data via Bloomberg, and notifying the ratings team via Microsoft Teams.
  tags:
  - credit-ratings
  - publication
  - salesforce
  - confluence
  - bloomberg-enterprise-data
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: rating-actions
    port: 8080
    tools:
    - name: publish-rating-action
      description: Given an entity and new rating, update all systems and publish the action.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The rated entity identifier.
      - name: new_rating
        in: body
        type: string
        description: The new credit rating.
      - name: outlook
        in: body
        type: string
        description: The rating outlook (stable, positive, negative).
      - name: rationale
        in: body
        type: string
        description: Brief rationale for the rating action.
      steps:
      - name: update-rating
        type: call
        call: salesforce.update-rating
        with:
          entity_id: '{{entity_id}}'
          new_rating: '{{new_rating}}'
          outlook: '{{outlook}}'
      - name: publish-research-note
        type: call
        call: confluence.create-page
        with:
          space_key: RATINGS
          title: 'Rating Action: {{entity_id}} - {{new_rating}}'
          body: 'Rating changed to {{new_rating}} with {{outlook}} outlook. Rationale: {{rationale}}.'
      - name: distribute-data
        type: call
        call: bloomberg.publish-rating
        with:
          entity_id: '{{entity_id}}'
          rating: '{{new_rating}}'
          outlook: '{{outlook}}'
      - name: notify-team
        type: call
        call: msteams.post-message
        with:
          team_id: ratings-team
          channel_id: rating-actions
          message: 'Rating action published: {{entity_id}} -> {{new_rating}} ({{outlook}}). Research note: {{publish-research-note._links.webui}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://moodys.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: ratings
      path: /sobjects/Credit_Rating__c/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: update-rating
        method: PATCH
  - type: http
    namespace: confluence
    baseUri: https://moodys.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/datasets
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: rating-feed
      path: /ratings/publish
      operations:
      - name: publish-rating
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → rating-action-publication-workflow.yml

Retrieves operational data for Moodys financial-services workflows.

naftiko: '0.5'
info:
  label: Moodys Data Lookup 5
  description: Retrieves operational data for Moodys financial-services workflows.
  tags:
  - financial-services
  - operations
capability:
  exposes:
  - type: mcp
    namespace: moodys-data
    port: 8080
    tools:
    - name: get-data-5
      description: Retrieves operational data for Moodys financial-services workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: moodys-data.get-data-5
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: moodys-data
    baseUri: https://api.moodys.com/data/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: data-5
      path: /data-5/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-5
        method: GET
Open in Framework → View in Fleet → moodys-data-lookup-5.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 27
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - slack
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-27
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-ops.run-workflow-27
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#financial-services'
          text: 'Completed workflow 27: {{process.summary}}'
  consumes:
  - type: http
    namespace: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-27
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → moodys-workflow-27.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 33
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - box
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-33
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-ops.run-workflow-33
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: box.upload-file
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-33
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → moodys-workflow-33.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 32
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-32
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-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: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-32
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://moodys-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → moodys-workflow-32.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 26
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-26
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-ops.run-workflow-26
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-26
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://moodys.service-now.com/api/now/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → moodys-workflow-26.yml

Retrieves operational data for Moodys financial-services workflows.

naftiko: '0.5'
info:
  label: Moodys Data Lookup 4
  description: Retrieves operational data for Moodys financial-services workflows.
  tags:
  - financial-services
  - operations
capability:
  exposes:
  - type: mcp
    namespace: moodys-data
    port: 8080
    tools:
    - name: get-data-4
      description: Retrieves operational data for Moodys financial-services workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: moodys-data.get-data-4
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: moodys-data
    baseUri: https://api.moodys.com/data/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: data-4
      path: /data-4/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-4
        method: GET
Open in Framework → View in Fleet → moodys-data-lookup-4.yml

Retrieves operational data for Moodys financial-services workflows.

naftiko: '0.5'
info:
  label: Moodys Data Lookup 6
  description: Retrieves operational data for Moodys financial-services workflows.
  tags:
  - financial-services
  - operations
capability:
  exposes:
  - type: mcp
    namespace: moodys-data
    port: 8080
    tools:
    - name: get-data-6
      description: Retrieves operational data for Moodys financial-services workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: moodys-data.get-data-6
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: moodys-data
    baseUri: https://api.moodys.com/data/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: data-6
      path: /data-6/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-6
        method: GET
Open in Framework → View in Fleet → moodys-data-lookup-6.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 30
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-30
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-ops.run-workflow-30
        with:
          identifier: '{{identifier}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: FINA
          summary: Task from workflow 30
          description: '{{process.details}}'
  consumes:
  - type: http
    namespace: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-30
        method: POST
  - type: http
    namespace: jira
    baseUri: https://moodys.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issues
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → moodys-workflow-30.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 24
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-24
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-ops.run-workflow-24
        with:
          identifier: '{{identifier}}'
      - name: push
        type: call
        call: datadog.submit-metrics
        with:
          metric_name: financial-services.workflow_24
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-24
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_token
    resources:
    - name: metrics
      path: /metrics
      operations:
      - name: submit-metrics
        method: POST
Open in Framework → View in Fleet → moodys-workflow-24.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 18
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-18
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-ops.run-workflow-18
        with:
          identifier: '{{identifier}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: FINA
          summary: Task from workflow 18
          description: '{{process.details}}'
  consumes:
  - type: http
    namespace: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-18
        method: POST
  - type: http
    namespace: jira
    baseUri: https://moodys.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issues
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → moodys-workflow-18.yml

Executes a credit risk model by pulling financial data from Snowflake, running the model in Databricks, storing results in Salesforce, and notifying the analytics team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Credit Risk Model Execution Pipeline
  description: Executes a credit risk model by pulling financial data from Snowflake, running the model in Databricks, storing results in Salesforce, and notifying the analytics team via Microsoft Teams.
  tags:
  - risk-analytics
  - credit-risk
  - snowflake
  - databricks
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: risk-modeling
    port: 8080
    tools:
    - name: run-credit-risk-model
      description: Given a portfolio ID, execute the credit risk model pipeline.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The portfolio identifier.
      - name: model_version
        in: body
        type: string
        description: The model version to execute.
      steps:
      - name: pull-financial-data
        type: call
        call: snowflake.execute-query
        with:
          portfolio_id: '{{portfolio_id}}'
      - name: run-model
        type: call
        call: databricks.invoke-model
        with:
          endpoint_name: credit-risk-model-{{model_version}}
          portfolio_id: '{{portfolio_id}}'
      - name: store-results
        type: call
        call: salesforce.update-risk-scores
        with:
          portfolio_id: '{{portfolio_id}}'
          model_version: '{{model_version}}'
          results: '{{run-model.predictions}}'
      - name: notify-analytics
        type: call
        call: msteams.post-message
        with:
          team_id: analytics-team
          channel_id: risk-models
          message: Credit risk model v{{model_version}} executed for portfolio {{portfolio_id}}. {{pull-financial-data.rowCount}} entities scored. Results stored in Salesforce.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://moodys.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: databricks
    baseUri: https://moodys.cloud.databricks.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: model-serving
      path: /serving-endpoints/{{endpoint_name}}/invocations
      inputParameters:
      - name: endpoint_name
        in: path
      operations:
      - name: invoke-model
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://moodys.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: risk-scores
      path: /services/apexrest/risk/scores
      operations:
      - name: update-risk-scores
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → credit-risk-model-execution-pipeline.yml

Delivers client data feeds by extracting data from Snowflake, packaging it according to client specifications, uploading to the client's designated endpoint, and logging the delivery in Salesforce and ServiceNow.

naftiko: '0.5'
info:
  label: Client Data Delivery Pipeline
  description: Delivers client data feeds by extracting data from Snowflake, packaging it according to client specifications, uploading to the client's designated endpoint, and logging the delivery in Salesforce and ServiceNow.
  tags:
  - data
  - data-delivery
  - snowflake
  - salesforce
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: data-delivery
    port: 8080
    tools:
    - name: deliver-client-data
      description: Given a client ID and data product, extract, package, and deliver the data feed.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The Salesforce client account ID.
      - name: data_product
        in: body
        type: string
        description: The data product name.
      - name: delivery_date
        in: body
        type: string
        description: The delivery date in YYYY-MM-DD format.
      steps:
      - name: extract-data
        type: call
        call: snowflake.execute-query
        with:
          client_id: '{{client_id}}'
          data_product: '{{data_product}}'
          delivery_date: '{{delivery_date}}'
      - name: log-in-salesforce
        type: call
        call: salesforce.create-delivery-log
        with:
          client_id: '{{client_id}}'
          data_product: '{{data_product}}'
          delivery_date: '{{delivery_date}}'
          record_count: '{{extract-data.rowCount}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Data delivery: {{data_product}} for {{client_id}}'
          category: data_delivery
          description: Delivered {{extract-data.rowCount}} records of {{data_product}} to client {{client_id}} on {{delivery_date}}.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://moodys.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://moodys.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: delivery-logs
      path: /sobjects/Data_Delivery__c
      operations:
      - name: create-delivery-log
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://moodys.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → client-data-delivery-pipeline.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 19
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - teams
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-19
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-ops.run-workflow-19
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: teams.send-message
        with:
          channel_id: financial-services
          message: 'Workflow 19 complete: {{process.summary}}'
  consumes:
  - type: http
    namespace: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-19
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → moodys-workflow-19.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 25
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-25
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-ops.run-workflow-25
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-25
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://moodys.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → moodys-workflow-25.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 31
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - teams
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-31
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-ops.run-workflow-31
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: teams.send-message
        with:
          channel_id: financial-services
          message: 'Workflow 31 complete: {{process.summary}}'
  consumes:
  - type: http
    namespace: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-31
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → moodys-workflow-31.yml

Creates an IT change request in ServiceNow, links documentation from Confluence, creates a Jira implementation task, and notifies the change advisory board via Microsoft Teams.

naftiko: '0.5'
info:
  label: IT Change Request Pipeline
  description: Creates an IT change request in ServiceNow, links documentation from Confluence, creates a Jira implementation task, and notifies the change advisory board via Microsoft Teams.
  tags:
  - it-service
  - change-management
  - servicenow
  - confluence
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: change-management
    port: 8080
    tools:
    - name: submit-change-request
      description: Given change details, create a ServiceNow change, link docs, and notify the CAB.
      inputParameters:
      - name: change_summary
        in: body
        type: string
        description: Summary of the change.
      - name: change_type
        in: body
        type: string
        description: Type of change.
      - name: doc_page_id
        in: body
        type: string
        description: Confluence page ID.
      steps:
      - name: create-change
        type: call
        call: servicenow.create-change
        with:
          short_description: '{{change_summary}}'
          type: '{{change_type}}'
      - name: get-doc
        type: call
        call: confluence.get-page
        with:
          page_id: '{{doc_page_id}}'
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project_key: ITOPS
          summary: 'Implement: {{change_summary}}'
          description: 'Change: {{create-change.number}}. Docs: {{get-doc._links.webui}}.'
          issue_type: Task
      - name: notify-cab
        type: call
        call: msteams.post-message
        with:
          team_id: it-team
          channel_id: change-advisory
          message: 'Change request {{create-change.number}}: {{change_summary}}. Type: {{change_type}}. Jira: {{create-task.key}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://moodys.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://moodys.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content/{{page_id}}
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: get-page
        method: GET
  - type: http
    namespace: jira
    baseUri: https://moodys.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → it-change-request-pipeline.yml

Retrieves operational data for Moodys financial-services workflows.

naftiko: '0.5'
info:
  label: Moodys Data Lookup 7
  description: Retrieves operational data for Moodys financial-services workflows.
  tags:
  - financial-services
  - operations
capability:
  exposes:
  - type: mcp
    namespace: moodys-data
    port: 8080
    tools:
    - name: get-data-7
      description: Retrieves operational data for Moodys financial-services workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: moodys-data.get-data-7
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: moodys-data
    baseUri: https://api.moodys.com/data/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: data-7
      path: /data-7/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-7
        method: GET
Open in Framework → View in Fleet → moodys-data-lookup-7.yml

Retrieves operational data for Moodys financial-services workflows.

naftiko: '0.5'
info:
  label: Moodys Data Lookup 3
  description: Retrieves operational data for Moodys financial-services workflows.
  tags:
  - financial-services
  - operations
capability:
  exposes:
  - type: mcp
    namespace: moodys-data
    port: 8080
    tools:
    - name: get-data-3
      description: Retrieves operational data for Moodys financial-services workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: moodys-data.get-data-3
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: moodys-data
    baseUri: https://api.moodys.com/data/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: data-3
      path: /data-3/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-3
        method: GET
Open in Framework → View in Fleet → moodys-data-lookup-3.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 35
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-35
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-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: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-35
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → moodys-workflow-35.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 21
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - box
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-21
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-ops.run-workflow-21
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: box.upload-file
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-21
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → moodys-workflow-21.yml

Retrieves structured finance deal details from Salesforce by deal ID, returning tranche structure, collateral type, and deal status.

naftiko: '0.5'
info:
  label: Structured Finance Deal Tracker
  description: Retrieves structured finance deal details from Salesforce by deal ID, returning tranche structure, collateral type, and deal status.
  tags:
  - structured-finance
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: structured-finance
    port: 8080
    tools:
    - name: get-sf-deal-details
      description: Look up structured finance deal by deal ID.
      inputParameters:
      - name: deal_id
        in: body
        type: string
        description: The deal identifier.
      call: salesforce.get-sf-deal
      with:
        deal_id: '{{deal_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://moodys.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: deals
      path: /query/?q=SELECT+Deal_Name__c,Tranche_Structure__c,Collateral_Type__c,Status__c+FROM+SF_Deal__c+WHERE+Deal_ID__c='{{deal_id}}'
      inputParameters:
      - name: deal_id
        in: query
      operations:
      - name: get-sf-deal
        method: GET
Open in Framework → View in Fleet → structured-finance-deal-tracker.yml

Submits a batch of entities to a Databricks credit scoring model endpoint and returns predicted default probabilities and risk tiers.

naftiko: '0.5'
info:
  label: Databricks Credit Model Scoring
  description: Submits a batch of entities to a Databricks credit scoring model endpoint and returns predicted default probabilities and risk tiers.
  tags:
  - machine-learning
  - credit-scoring
  - databricks
capability:
  exposes:
  - type: mcp
    namespace: credit-model
    port: 8080
    tools:
    - name: score-entities
      description: Submit entity batch to credit scoring model.
      inputParameters:
      - name: model_name
        in: body
        type: string
        description: The model name.
      - name: entity_ids
        in: body
        type: string
        description: Comma-separated entity IDs to score.
      call: databricks.invoke-model
      with:
        model_name: '{{model_name}}'
        entity_ids: '{{entity_ids}}'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://moodys.cloud.databricks.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: serving-endpoints
      path: /serving-endpoints/{{model_name}}/invocations
      inputParameters:
      - name: model_name
        in: path
      operations:
      - name: invoke-model
        method: POST
Open in Framework → View in Fleet → databricks-credit-model-scoring.yml

Searches Moody's research reports by keyword, sector, or entity from the Confluence knowledge base, returning matching report titles and links.

naftiko: '0.5'
info:
  label: Research Report Search
  description: Searches Moody's research reports by keyword, sector, or entity from the Confluence knowledge base, returning matching report titles and links.
  tags:
  - research
  - knowledge-management
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: research-reports
    port: 8080
    tools:
    - name: search-research-reports
      description: Search research reports by keyword. Returns report titles, authors, and URLs.
      inputParameters:
      - name: query
        in: body
        type: string
        description: Search keyword or phrase.
      call: confluence.search-content
      with:
        query: '{{query}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://moodys.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content/search?cql=text~'{{query}}'+and+space=RESEARCH
      inputParameters:
      - name: query
        in: query
      operations:
      - name: search-content
        method: GET
Open in Framework → View in Fleet → research-report-search.yml

Retrieves pending travel approval requests for credit analysts from SAP Concur, returning trip details, estimated cost, and approval status.

naftiko: '0.5'
info:
  label: SAP Concur Analyst Travel Approval
  description: Retrieves pending travel approval requests for credit analysts from SAP Concur, returning trip details, estimated cost, and approval status.
  tags:
  - travel
  - expense
  - sap-concur
capability:
  exposes:
  - type: mcp
    namespace: travel-approvals
    port: 8080
    tools:
    - name: get-travel-requests
      description: Retrieve pending travel requests for an analyst.
      inputParameters:
      - name: analyst_id
        in: body
        type: string
        description: The analyst employee ID.
      call: concur.get-travel-requests
      with:
        analyst_id: '{{analyst_id}}'
  consumes:
  - type: http
    namespace: concur
    baseUri: https://us.api.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: travel-requests
      path: /travelrequest/requests?owner={{analyst_id}}&status=PENDING
      inputParameters:
      - name: analyst_id
        in: query
      operations:
      - name: get-travel-requests
        method: GET
Open in Framework → View in Fleet → sap-concur-analyst-travel-approval.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 20
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-20
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-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: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-20
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://moodys-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → moodys-workflow-20.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 34
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-34
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-ops.run-workflow-34
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: sharepoint.upload-document
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-34
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://moodys.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: upload-document
        method: POST
Open in Framework → View in Fleet → moodys-workflow-34.yml

Retrieves operational data for Moodys financial-services workflows.

naftiko: '0.5'
info:
  label: Moodys Data Lookup 2
  description: Retrieves operational data for Moodys financial-services workflows.
  tags:
  - financial-services
  - operations
capability:
  exposes:
  - type: mcp
    namespace: moodys-data
    port: 8080
    tools:
    - name: get-data-2
      description: Retrieves operational data for Moodys financial-services workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: moodys-data.get-data-2
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: moodys-data
    baseUri: https://api.moodys.com/data/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: data-2
      path: /data-2/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-2
        method: GET
Open in Framework → View in Fleet → moodys-data-lookup-2.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 22
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-22
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-ops.run-workflow-22
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: sharepoint.upload-document
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-22
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://moodys.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: upload-document
        method: POST
Open in Framework → View in Fleet → moodys-workflow-22.yml

Fetches current bond spread data for an issuer from Bloomberg Enterprise Data, returning option-adjusted spread, Z-spread, and benchmark yield.

naftiko: '0.5'
info:
  label: Bond Spread Lookup
  description: Fetches current bond spread data for an issuer from Bloomberg Enterprise Data, returning option-adjusted spread, Z-spread, and benchmark yield.
  tags:
  - fixed-income
  - spreads
  - bloomberg-enterprise-data
capability:
  exposes:
  - type: mcp
    namespace: bond-spreads
    port: 8080
    tools:
    - name: get-bond-spread
      description: Look up bond spread data by issuer identifier.
      inputParameters:
      - name: issuer_id
        in: body
        type: string
        description: The issuer identifier.
      call: bloomberg.get-spread
      with:
        issuer_id: '{{issuer_id}}'
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/datasets
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: spreads
      path: /spreads?identifier={{issuer_id}}
      inputParameters:
      - name: issuer_id
        in: query
      operations:
      - name: get-spread
        method: GET
Open in Framework → View in Fleet → bond-spread-lookup.yml

Searches the Moody's methodology knowledge base in Confluence for rating methodology documents by keyword, returning titles, authors, and publication dates.

naftiko: '0.5'
info:
  label: Confluence Methodology Document Search
  description: Searches the Moody's methodology knowledge base in Confluence for rating methodology documents by keyword, returning titles, authors, and publication dates.
  tags:
  - methodology
  - knowledge-management
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: methodology-docs
    port: 8080
    tools:
    - name: search-methodologies
      description: Search methodology documents by keyword.
      inputParameters:
      - name: keyword
        in: body
        type: string
        description: The search keyword.
      call: confluence.search-methodologies
      with:
        keyword: '{{keyword}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://moodys.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: methodology-content
      path: /content/search?cql=text~'{{keyword}}'+and+space=METHODOLOGY
      inputParameters:
      - name: keyword
        in: query
      operations:
      - name: search-methodologies
        method: GET
Open in Framework → View in Fleet → confluence-methodology-document-search.yml

Executes a parameterized query against the Snowflake data warehouse for financial statement data, credit metrics, and economic indicators.

naftiko: '0.5'
info:
  label: Snowflake Financial Data Query
  description: Executes a parameterized query against the Snowflake data warehouse for financial statement data, credit metrics, and economic indicators.
  tags:
  - data
  - snowflake
  - financial-data
capability:
  exposes:
  - type: mcp
    namespace: financial-data
    port: 8080
    tools:
    - name: query-financial-data
      description: Query Snowflake for financial data by entity and metric type.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: metric_type
        in: body
        type: string
        description: The metric type (e.g., financials, credit_metrics, economic).
      call: snowflake.execute-query
      with:
        entity_id: '{{entity_id}}'
        metric_type: '{{metric_type}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://moodys.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → snowflake-financial-data-query.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 23
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-23
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-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: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-23
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → moodys-workflow-23.yml

Monitors rated issuers for credit events by querying market data from Bloomberg, checking financial triggers in Snowflake, creating a surveillance case in ServiceNow, and alerting the ratings team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Issuer Surveillance Alert Pipeline
  description: Monitors rated issuers for credit events by querying market data from Bloomberg, checking financial triggers in Snowflake, creating a surveillance case in ServiceNow, and alerting the ratings team via Microsoft Teams.
  tags:
  - credit-ratings
  - surveillance
  - bloomberg-enterprise-data
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: issuer-surveillance
    port: 8080
    tools:
    - name: check-issuer-surveillance
      description: Given an entity ID, check for credit event triggers and alert if needed.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The rated entity identifier.
      - name: trigger_type
        in: body
        type: string
        description: Type of trigger to check (spread_widening, downgrade_trigger, covenant_breach).
      steps:
      - name: get-market-signals
        type: call
        call: bloomberg.get-pricing
        with:
          identifier: '{{entity_id}}'
          identifier_type: ENTITY
      - name: check-financial-triggers
        type: call
        call: snowflake.execute-query
        with:
          entity_id: '{{entity_id}}'
          trigger_type: '{{trigger_type}}'
      - name: create-surveillance-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Surveillance alert: {{entity_id}} - {{trigger_type}}'
          category: issuer_surveillance
          description: 'Trigger: {{trigger_type}}. Market signal: {{get-market-signals.spread}}. Financial check: {{check-financial-triggers.trigger_status}}.'
      - name: alert-ratings-team
        type: call
        call: msteams.post-message
        with:
          team_id: ratings-team
          channel_id: surveillance
          message: 'SURVEILLANCE ALERT: {{entity_id}} triggered {{trigger_type}}. Case: {{create-surveillance-case.number}}. Spread: {{get-market-signals.spread}}.'
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/datasets
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: pricing
      path: /pricing?identifier={{identifier}}&identifierType={{identifier_type}}
      inputParameters:
      - name: identifier
        in: query
      - name: identifier_type
        in: query
      operations:
      - name: get-pricing
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://moodys.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://moodys.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → issuer-surveillance-alert-pipeline.yml

Retrieves operational data for Moodys financial-services workflows.

naftiko: '0.5'
info:
  label: Moodys Data Lookup 1
  description: Retrieves operational data for Moodys financial-services workflows.
  tags:
  - financial-services
  - operations
capability:
  exposes:
  - type: mcp
    namespace: moodys-data
    port: 8080
    tools:
    - name: get-data-1
      description: Retrieves operational data for Moodys financial-services workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: moodys-data.get-data-1
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: moodys-data
    baseUri: https://api.moodys.com/data/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: data-1
      path: /data-1/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-1
        method: GET
Open in Framework → View in Fleet → moodys-data-lookup-1.yml

Publishes a research report by creating the document in Confluence, uploading supporting data to SharePoint, updating the Salesforce research catalog, and notifying subscribers via Microsoft Teams.

naftiko: '0.5'
info:
  label: Research Report Publishing Pipeline
  description: Publishes a research report by creating the document in Confluence, uploading supporting data to SharePoint, updating the Salesforce research catalog, and notifying subscribers via Microsoft Teams.
  tags:
  - research
  - publication
  - confluence
  - sharepoint
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: research-publishing
    port: 8080
    tools:
    - name: publish-research-report
      description: Given report details, publish across Confluence, SharePoint, and Salesforce, then notify subscribers.
      inputParameters:
      - name: report_title
        in: body
        type: string
        description: The research report title.
      - name: sector
        in: body
        type: string
        description: The sector covered.
      - name: analyst_id
        in: body
        type: string
        description: The lead analyst's employee ID.
      - name: report_type
        in: body
        type: string
        description: Type of report (sector_update, issuer_comment, methodology).
      steps:
      - name: create-report-page
        type: call
        call: confluence.create-page
        with:
          space_key: RESEARCH
          title: '{{report_title}}'
          body: 'Sector: {{sector}}. Type: {{report_type}}. Analyst: {{analyst_id}}.'
      - name: upload-data
        type: call
        call: sharepoint.create-folder
        with:
          site_id: research_site
          folder_path: Reports/{{sector}}/{{report_title}}
      - name: update-catalog
        type: call
        call: salesforce.create-research-entry
        with:
          title: '{{report_title}}'
          sector: '{{sector}}'
          analyst_id: '{{analyst_id}}'
          type: '{{report_type}}'
          url: '{{create-report-page._links.webui}}'
      - name: notify-subscribers
        type: call
        call: msteams.post-message
        with:
          team_id: research-team
          channel_id: publications
          message: 'New research report: {{report_title}} ({{sector}} - {{report_type}}). Read: {{create-report-page._links.webui}}.'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://moodys.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://moodys.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: research-entries
      path: /sobjects/Research_Report__c
      operations:
      - name: create-research-entry
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → research-report-publishing-pipeline.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 12
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-12
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-ops.run-workflow-12
        with:
          identifier: '{{identifier}}'
      - name: push
        type: call
        call: datadog.submit-metrics
        with:
          metric_name: financial-services.workflow_12
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-12
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_token
    resources:
    - name: metrics
      path: /metrics
      operations:
      - name: submit-metrics
        method: POST
Open in Framework → View in Fleet → moodys-workflow-12.yml

Prepares regulatory compliance filings by extracting compliance data from Snowflake, generating filing documents in SharePoint, creating a review task in Jira, and notifying the compliance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Regulatory Compliance Filing Workflow
  description: Prepares regulatory compliance filings by extracting compliance data from Snowflake, generating filing documents in SharePoint, creating a review task in Jira, and notifying the compliance team via Microsoft Teams.
  tags:
  - compliance
  - regulatory
  - snowflake
  - sharepoint
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: regulatory-compliance
    port: 8080
    tools:
    - name: prepare-compliance-filing
      description: Given a filing type and period, extract data, generate documents, and route for review.
      inputParameters:
      - name: filing_type
        in: body
        type: string
        description: The regulatory filing type (e.g., SEC, ESMA, annual_report).
      - name: reporting_period
        in: body
        type: string
        description: The reporting period.
      steps:
      - name: extract-compliance-data
        type: call
        call: snowflake.execute-query
        with:
          filing_type: '{{filing_type}}'
          period: '{{reporting_period}}'
      - name: generate-filing-docs
        type: call
        call: sharepoint.create-folder
        with:
          site_id: compliance_site
          folder_path: Filings/{{filing_type}}/{{reporting_period}}
      - name: create-review-task
        type: call
        call: jira.create-issue
        with:
          project_key: COMP
          summary: 'Compliance filing: {{filing_type}} - {{reporting_period}}'
          description: 'Data extracted: {{extract-compliance-data.rowCount}} records. Docs: {{generate-filing-docs.webUrl}}.'
          issue_type: Task
      - name: notify-compliance
        type: call
        call: msteams.post-message
        with:
          team_id: compliance-team
          channel_id: filings
          message: 'Compliance filing {{filing_type}} for {{reporting_period}} ready for review. Jira: {{create-review-task.key}}. Docs: {{generate-filing-docs.webUrl}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://moodys.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: jira
    baseUri: https://moodys.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → regulatory-compliance-filing-workflow.yml

Retrieves current market data for a financial instrument from Bloomberg Enterprise Data, including price, yield, and spread.

naftiko: '0.5'
info:
  label: Bloomberg Market Data Fetch
  description: Retrieves current market data for a financial instrument from Bloomberg Enterprise Data, including price, yield, and spread.
  tags:
  - data
  - market-data
  - bloomberg-enterprise-data
capability:
  exposes:
  - type: mcp
    namespace: market-data
    port: 8080
    tools:
    - name: get-market-data
      description: Fetch current market data for a security by ISIN or Bloomberg ticker.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: The ISIN or Bloomberg ticker.
      - name: identifier_type
        in: body
        type: string
        description: Type of identifier (ISIN, TICKER).
      call: bloomberg.get-pricing
      with:
        identifier: '{{identifier}}'
        identifier_type: '{{identifier_type}}'
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/datasets
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: pricing
      path: /pricing?identifier={{identifier}}&identifierType={{identifier_type}}
      inputParameters:
      - name: identifier
        in: query
      - name: identifier_type
        in: query
      operations:
      - name: get-pricing
        method: GET
Open in Framework → View in Fleet → bloomberg-market-data-fetch.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 13
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-13
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-ops.run-workflow-13
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-13
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://moodys.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → moodys-workflow-13.yml

Retrieves historical default probability trends for an entity from Snowflake, returning monthly PD values over a specified lookback window.

naftiko: '0.5'
info:
  label: Default Probability Trend Query
  description: Retrieves historical default probability trends for an entity from Snowflake, returning monthly PD values over a specified lookback window.
  tags:
  - credit-risk
  - default-probability
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: default-trends
    port: 8080
    tools:
    - name: get-default-trend
      description: Retrieve default probability trend by entity ID and lookback months.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: months
        in: body
        type: string
        description: Number of months to look back.
      call: snowflake.get-pd-trend
      with:
        entity_id: '{{entity_id}}'
        months: '{{months}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://moodys.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-pd-trend
        method: POST
Open in Framework → View in Fleet → default-probability-trend-query.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 11
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-11
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-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: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-11
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → moodys-workflow-11.yml

Retrieves a travel expense report status from SAP Concur for analyst and research team travel.

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

Retrieves issuer financial statements from the Salesforce CRM, returning revenue, EBITDA, total debt, and net income for a specified fiscal year.

naftiko: '0.5'
info:
  label: Issuer Financial Statement Retrieval
  description: Retrieves issuer financial statements from the Salesforce CRM, returning revenue, EBITDA, total debt, and net income for a specified fiscal year.
  tags:
  - financials
  - issuer
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: issuer-financials
    port: 8080
    tools:
    - name: get-issuer-financials
      description: Retrieve financial statements by issuer ID and fiscal year.
      inputParameters:
      - name: issuer_id
        in: body
        type: string
        description: The Salesforce issuer account ID.
      - name: fiscal_year
        in: body
        type: string
        description: The fiscal year.
      call: salesforce.get-financials
      with:
        issuer_id: '{{issuer_id}}'
        fiscal_year: '{{fiscal_year}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://moodys.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: financials
      path: /query/?q=SELECT+Revenue__c,EBITDA__c,Total_Debt__c,Net_Income__c+FROM+Financial_Statement__c+WHERE+Issuer_ID__c='{{issuer_id}}'+AND+Fiscal_Year__c='{{fiscal_year}}'
      inputParameters:
      - name: issuer_id
        in: query
      - name: fiscal_year
        in: query
      operations:
      - name: get-financials
        method: GET
Open in Framework → View in Fleet → issuer-financial-statement-retrieval.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 10
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-10
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-ops.run-workflow-10
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: sharepoint.upload-document
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-10
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://moodys.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: upload-document
        method: POST
Open in Framework → View in Fleet → moodys-workflow-10.yml

Conducts an industry default study by extracting default history from Snowflake, generating documentation in Confluence, creating a Jira task for peer review, and notifying the credit research team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Industry Default Study Pipeline
  description: Conducts an industry default study by extracting default history from Snowflake, generating documentation in Confluence, creating a Jira task for peer review, and notifying the credit research team via Microsoft Teams.
  tags:
  - default-study
  - research
  - snowflake
  - confluence
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: default-study
    port: 8080
    tools:
    - name: run-default-study
      description: Given a sector and period, run a default study and route for review.
      inputParameters:
      - name: sector
        in: body
        type: string
        description: The industry sector.
      - name: period
        in: body
        type: string
        description: The study period (e.g., 2020-2025).
      steps:
      - name: extract-defaults
        type: call
        call: snowflake.execute-query
        with:
          sector: '{{sector}}'
          period: '{{period}}'
      - name: publish-study
        type: call
        call: confluence.create-page
        with:
          space: RESEARCH
          title: 'Default Study: {{sector}} ({{period}})'
      - name: create-review-task
        type: call
        call: jira.create-issue
        with:
          project: RESEARCH
          summary: 'Review default study: {{sector}} ({{period}})'
          issue_type: Task
      - name: notify-team
        type: call
        call: msteams.post-message
        with:
          team_id: credit-research
          channel_id: studies
          message: 'Default study published: {{sector}} ({{period}}). {{extract-defaults.rowCount}} events. Review: {{create-review-task.key}}. Read: {{publish-study._links.webui}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://moodys.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://moodys.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: jira
    baseUri: https://moodys.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → industry-default-study-pipeline.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 28
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-28
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-ops.run-workflow-28
        with:
          identifier: '{{identifier}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space: FINANC
          title: Report 28
          content: '{{process.report}}'
  consumes:
  - type: http
    namespace: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-28
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://moodys.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → moodys-workflow-28.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 14
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-14
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-ops.run-workflow-14
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-14
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://moodys.service-now.com/api/now/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → moodys-workflow-14.yml

Runs portfolio stress tests by loading scenario parameters from Snowflake, executing models in Databricks, storing results in Salesforce, uploading reports to SharePoint, and notifying the risk team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Portfolio Stress Testing Pipeline
  description: Runs portfolio stress tests by loading scenario parameters from Snowflake, executing models in Databricks, storing results in Salesforce, uploading reports to SharePoint, and notifying the risk team via Microsoft Teams.
  tags:
  - risk-analytics
  - stress-testing
  - snowflake
  - databricks
  - salesforce
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: stress-testing
    port: 8080
    tools:
    - name: run-stress-test
      description: Given a portfolio and stress scenario, execute the full stress testing pipeline.
      inputParameters:
      - name: portfolio_id
        in: body
        type: string
        description: The portfolio identifier.
      - name: scenario_name
        in: body
        type: string
        description: The stress scenario name (e.g., recession, rate_shock, geopolitical).
      steps:
      - name: load-scenario
        type: call
        call: snowflake.execute-query
        with:
          scenario_name: '{{scenario_name}}'
          portfolio_id: '{{portfolio_id}}'
      - name: execute-stress-model
        type: call
        call: databricks.invoke-model
        with:
          endpoint_name: stress-test-model
          portfolio_id: '{{portfolio_id}}'
          scenario: '{{scenario_name}}'
      - name: store-results
        type: call
        call: salesforce.create-stress-result
        with:
          portfolio_id: '{{portfolio_id}}'
          scenario: '{{scenario_name}}'
          results: '{{execute-stress-model.predictions}}'
      - name: upload-report
        type: call
        call: sharepoint.create-folder
        with:
          site_id: risk_site
          folder_path: StressTests/{{portfolio_id}}/{{scenario_name}}
      - name: notify-risk-team
        type: call
        call: msteams.post-message
        with:
          team_id: risk-team
          channel_id: stress-tests
          message: 'Stress test complete: {{scenario_name}} on portfolio {{portfolio_id}}. Results: {{upload-report.webUrl}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://moodys.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: databricks
    baseUri: https://moodys.cloud.databricks.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: model-serving
      path: /serving-endpoints/{{endpoint_name}}/invocations
      inputParameters:
      - name: endpoint_name
        in: path
      operations:
      - name: invoke-model
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://moodys.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: stress-results
      path: /sobjects/Stress_Test_Result__c
      operations:
      - name: create-stress-result
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → portfolio-stress-testing-pipeline.yml

Queries the rating migration matrix from Snowflake for a specified time horizon, returning transition probabilities between rating categories.

naftiko: '0.5'
info:
  label: Rating Migration Matrix Query
  description: Queries the rating migration matrix from Snowflake for a specified time horizon, returning transition probabilities between rating categories.
  tags:
  - ratings
  - migration
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: rating-migration
    port: 8080
    tools:
    - name: get-migration-matrix
      description: Retrieve rating migration matrix for a given time horizon.
      inputParameters:
      - name: horizon_years
        in: body
        type: string
        description: The time horizon in years.
      - name: asset_class
        in: body
        type: string
        description: The asset class (corporate, sovereign, structured).
      call: snowflake.get-migration
      with:
        horizon_years: '{{horizon_years}}'
        asset_class: '{{asset_class}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://moodys.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-migration
        method: POST
Open in Framework → View in Fleet → rating-migration-matrix-query.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 15
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - slack
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-15
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-ops.run-workflow-15
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#financial-services'
          text: 'Completed workflow 15: {{process.summary}}'
  consumes:
  - type: http
    namespace: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-15
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → moodys-workflow-15.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 29
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-29
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-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: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-29
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → moodys-workflow-29.yml

Retrieves operational data for Moodys financial-services workflows.

naftiko: '0.5'
info:
  label: Moodys Data Lookup 9
  description: Retrieves operational data for Moodys financial-services workflows.
  tags:
  - financial-services
  - operations
capability:
  exposes:
  - type: mcp
    namespace: moodys-data
    port: 8080
    tools:
    - name: get-data-9
      description: Retrieves operational data for Moodys financial-services workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: moodys-data.get-data-9
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: moodys-data
    baseUri: https://api.moodys.com/data/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: data-9
      path: /data-9/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-9
        method: GET
Open in Framework → View in Fleet → moodys-data-lookup-9.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 17
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-17
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-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: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-17
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → moodys-workflow-17.yml

Triggers a ratings calculation pipeline in Azure DevOps and returns the run ID and status.

naftiko: '0.5'
info:
  label: Azure DevOps Ratings Pipeline Trigger
  description: Triggers a ratings calculation pipeline in Azure DevOps and returns the run ID and status.
  tags:
  - ci-cd
  - ratings
  - azure-devops
capability:
  exposes:
  - type: mcp
    namespace: ratings-pipeline
    port: 8080
    tools:
    - name: trigger-ratings-pipeline
      description: Trigger the ratings calculation pipeline for a given entity set.
      inputParameters:
      - name: pipeline_id
        in: body
        type: string
        description: The Azure DevOps pipeline ID.
      - name: entity_set
        in: body
        type: string
        description: The entity set to process.
      call: azuredevops.run-pipeline
      with:
        pipeline_id: '{{pipeline_id}}'
        entity_set: '{{entity_set}}'
  consumes:
  - type: http
    namespace: azuredevops
    baseUri: https://dev.azure.com/moodys
    authentication:
      type: bearer
      token: $secrets.azuredevops_token
    resources:
    - name: pipelines
      path: /ratings/_apis/pipelines/{{pipeline_id}}/runs?api-version=7.0
      inputParameters:
      - name: pipeline_id
        in: path
      operations:
      - name: run-pipeline
        method: POST
Open in Framework → View in Fleet → azure-devops-ratings-pipeline-trigger.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 16
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-16
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-ops.run-workflow-16
        with:
          identifier: '{{identifier}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space: FINANC
          title: Report 16
          content: '{{process.report}}'
  consumes:
  - type: http
    namespace: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-16
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://moodys.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → moodys-workflow-16.yml

Retrieves operational data for Moodys financial-services workflows.

naftiko: '0.5'
info:
  label: Moodys Data Lookup 8
  description: Retrieves operational data for Moodys financial-services workflows.
  tags:
  - financial-services
  - operations
capability:
  exposes:
  - type: mcp
    namespace: moodys-data
    port: 8080
    tools:
    - name: get-data-8
      description: Retrieves operational data for Moodys financial-services workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: moodys-data.get-data-8
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: moodys-data
    baseUri: https://api.moodys.com/data/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: data-8
      path: /data-8/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-8
        method: GET
Open in Framework → View in Fleet → moodys-data-lookup-8.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 5
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-5
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-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: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-5
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → moodys-workflow-5.yml

Fetches an employee profile from Workday by worker ID, including department, title, manager, and location.

naftiko: '0.5'
info:
  label: Workday Employee Profile
  description: Fetches an employee profile from Workday by worker ID, including department, title, manager, and location.
  tags:
  - hr
  - workday
capability:
  exposes:
  - type: mcp
    namespace: hr-employee
    port: 8080
    tools:
    - name: get-employee-profile
      description: Retrieve a Workday employee profile by worker ID.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: The Workday worker ID.
      call: workday.get-worker
      with:
        worker_id: '{{worker_id}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
Open in Framework → View in Fleet → workday-employee-profile.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 4
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-4
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-ops.run-workflow-4
        with:
          identifier: '{{identifier}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space: FINANC
          title: Report 4
          content: '{{process.report}}'
  consumes:
  - type: http
    namespace: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-4
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://moodys.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → moodys-workflow-4.yml

Onboards new analytics clients by creating accounts in Salesforce, provisioning data access in Snowflake, setting up a ServiceNow support profile, and sending welcome communications via Microsoft Teams and Outlook.

naftiko: '0.5'
info:
  label: Client Onboarding Pipeline
  description: Onboards new analytics clients by creating accounts in Salesforce, provisioning data access in Snowflake, setting up a ServiceNow support profile, and sending welcome communications via Microsoft Teams and Outlook.
  tags:
  - data
  - client-onboarding
  - salesforce
  - snowflake
  - servicenow
  - microsoft-teams
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: client-onboarding
    port: 8080
    tools:
    - name: onboard-analytics-client
      description: Given client details, set up accounts, provision access, and send welcome communications.
      inputParameters:
      - name: client_name
        in: body
        type: string
        description: The client company name.
      - name: contact_email
        in: body
        type: string
        description: The primary contact email.
      - name: data_products
        in: body
        type: string
        description: Comma-separated list of subscribed data products.
      steps:
      - name: create-account
        type: call
        call: salesforce.create-account
        with:
          name: '{{client_name}}'
          contact_email: '{{contact_email}}'
          products: '{{data_products}}'
      - name: provision-access
        type: call
        call: snowflake.execute-query
        with:
          client_id: '{{create-account.id}}'
          data_products: '{{data_products}}'
      - name: create-support-profile
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'New client onboarding: {{client_name}}'
          category: client_onboarding
          description: 'New client {{client_name}}. Products: {{data_products}}. Account: {{create-account.id}}.'
      - name: notify-team
        type: call
        call: msteams.post-message
        with:
          team_id: client-success-team
          channel_id: onboarding
          message: 'New client onboarded: {{client_name}}. Products: {{data_products}}. Salesforce: {{create-account.id}}.'
      - name: send-welcome
        type: call
        call: outlook.send-mail
        with:
          recipient: '{{contact_email}}'
          subject: Welcome to Moody's Analytics
          body: 'Welcome {{client_name}}! Your data products ({{data_products}}) are now active. Support case: {{create-support-profile.number}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://moodys.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: snowflake
    baseUri: https://moodys.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://moodys.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/onboarding@moodys.com/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → client-onboarding-pipeline.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 6
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-6
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-ops.run-workflow-6
        with:
          identifier: '{{identifier}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: FINA
          summary: Task from workflow 6
          description: '{{process.details}}'
  consumes:
  - type: http
    namespace: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-6
        method: POST
  - type: http
    namespace: jira
    baseUri: https://moodys.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issues
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → moodys-workflow-6.yml

Monitors covenant compliance for leveraged loans by pulling covenant test results from Snowflake, checking breach status, logging findings in Salesforce, and alerting the credit surveillance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Covenant Compliance Monitoring Pipeline
  description: Monitors covenant compliance for leveraged loans by pulling covenant test results from Snowflake, checking breach status, logging findings in Salesforce, and alerting the credit surveillance team via Microsoft Teams.
  tags:
  - covenants
  - surveillance
  - snowflake
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: covenant-monitoring
    port: 8080
    tools:
    - name: check-covenant-compliance
      description: Given a deal ID, check covenant compliance and escalate breaches.
      inputParameters:
      - name: deal_id
        in: body
        type: string
        description: The deal identifier.
      - name: test_date
        in: body
        type: string
        description: The covenant test date.
      steps:
      - name: pull-covenant-data
        type: call
        call: snowflake.execute-query
        with:
          deal_id: '{{deal_id}}'
          test_date: '{{test_date}}'
      - name: log-results
        type: call
        call: salesforce.create-covenant-log
        with:
          deal_id: '{{deal_id}}'
          test_date: '{{test_date}}'
          status: '{{pull-covenant-data.compliance_status}}'
      - name: alert-surveillance
        type: call
        call: msteams.post-message
        with:
          team_id: surveillance-team
          channel_id: covenants
          message: 'Covenant test for deal {{deal_id}} on {{test_date}}: {{pull-covenant-data.compliance_status}}. {{pull-covenant-data.breach_count}} breaches detected.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://moodys.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://moodys.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: covenant-logs
      path: /sobjects/Covenant_Log__c
      operations:
      - name: create-covenant-log
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → covenant-compliance-monitoring-pipeline.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 7
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - teams
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-7
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-ops.run-workflow-7
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: teams.send-message
        with:
          channel_id: financial-services
          message: 'Workflow 7 complete: {{process.summary}}'
  consumes:
  - type: http
    namespace: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-7
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → moodys-workflow-7.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 3
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - slack
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-3
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-ops.run-workflow-3
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#financial-services'
          text: 'Completed workflow 3: {{process.summary}}'
  consumes:
  - type: http
    namespace: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-3
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → moodys-workflow-3.yml

Manages rating methodology updates by creating the methodology document in Confluence, uploading supporting analysis to SharePoint, creating review tasks in Jira, and notifying the methodology committee via Microsoft Teams.

naftiko: '0.5'
info:
  label: Methodology Update Workflow
  description: Manages rating methodology updates by creating the methodology document in Confluence, uploading supporting analysis to SharePoint, creating review tasks in Jira, and notifying the methodology committee via Microsoft Teams.
  tags:
  - credit-ratings
  - methodology
  - confluence
  - sharepoint
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: methodology-updates
    port: 8080
    tools:
    - name: initiate-methodology-update
      description: Given methodology details, create documents, route for review, and notify committee.
      inputParameters:
      - name: methodology_name
        in: body
        type: string
        description: The methodology name.
      - name: sector
        in: body
        type: string
        description: The sector the methodology applies to.
      - name: change_summary
        in: body
        type: string
        description: Summary of proposed changes.
      steps:
      - name: create-methodology-doc
        type: call
        call: confluence.create-page
        with:
          space_key: METHODOLOGY
          title: 'Update: {{methodology_name}}'
          body: 'Sector: {{sector}}. Proposed changes: {{change_summary}}.'
      - name: upload-analysis
        type: call
        call: sharepoint.create-folder
        with:
          site_id: methodology_site
          folder_path: Updates/{{methodology_name}}
      - name: create-review-task
        type: call
        call: jira.create-issue
        with:
          project_key: METH
          summary: 'Methodology review: {{methodology_name}}'
          description: '{{change_summary}}. Doc: {{create-methodology-doc._links.webui}}. Analysis: {{upload-analysis.webUrl}}.'
          issue_type: Task
      - name: notify-committee
        type: call
        call: msteams.post-message
        with:
          team_id: methodology-committee
          channel_id: updates
          message: 'Methodology update proposed: {{methodology_name}} ({{sector}}). Review: {{create-review-task.key}}. Doc: {{create-methodology-doc._links.webui}}.'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://moodys.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: jira
    baseUri: https://moodys.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → methodology-update-workflow.yml

Analyzes recovery rates for a sector by extracting historical default and recovery data from Snowflake, generating a report in SharePoint, logging results in Salesforce, and alerting the research team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Recovery Rate Analysis Pipeline
  description: Analyzes recovery rates for a sector by extracting historical default and recovery data from Snowflake, generating a report in SharePoint, logging results in Salesforce, and alerting the research team via Microsoft Teams.
  tags:
  - recovery-rates
  - analytics
  - snowflake
  - sharepoint
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: recovery-analysis
    port: 8080
    tools:
    - name: analyze-recovery-rates
      description: Given a sector and time period, analyze historical recovery rates.
      inputParameters:
      - name: sector
        in: body
        type: string
        description: The industry sector.
      - name: start_year
        in: body
        type: string
        description: The start year.
      - name: end_year
        in: body
        type: string
        description: The end year.
      steps:
      - name: extract-recovery-data
        type: call
        call: snowflake.execute-query
        with:
          sector: '{{sector}}'
          start_year: '{{start_year}}'
          end_year: '{{end_year}}'
      - name: create-report-folder
        type: call
        call: sharepoint.create-folder
        with:
          site_id: research_site
          folder_path: Recovery/{{sector}}/{{start_year}}-{{end_year}}
      - name: log-analysis
        type: call
        call: salesforce.create-analysis-record
        with:
          sector: '{{sector}}'
          record_count: '{{extract-recovery-data.rowCount}}'
      - name: notify-research
        type: call
        call: msteams.post-message
        with:
          team_id: research-team
          channel_id: recovery
          message: 'Recovery rate analysis complete for {{sector}} ({{start_year}}-{{end_year}}). {{extract-recovery-data.rowCount}} defaults analyzed. Report: {{create-report-folder.webUrl}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://moodys.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://moodys.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: analysis-records
      path: /sobjects/Analysis_Record__c
      operations:
      - name: create-analysis-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → recovery-rate-analysis-pipeline.yml

Assesses climate risk exposure for an entity by querying physical and transition risk scores from Snowflake, returning climate VaR, carbon intensity, and stranded asset probability.

naftiko: '0.5'
info:
  label: Climate Risk Exposure Assessment
  description: Assesses climate risk exposure for an entity by querying physical and transition risk scores from Snowflake, returning climate VaR, carbon intensity, and stranded asset probability.
  tags:
  - esg
  - climate-risk
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: climate-risk
    port: 8080
    tools:
    - name: get-climate-risk
      description: Retrieve climate risk exposure by entity ID.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      call: snowflake.get-climate-risk
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://moodys.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-climate-risk
        method: POST
Open in Framework → View in Fleet → climate-risk-exposure-assessment.yml

Retrieves sovereign credit risk indicators from Snowflake by country code, returning sovereign rating, GDP trend, debt-to-GDP ratio, and political risk score.

naftiko: '0.5'
info:
  label: Sovereign Credit Risk Analysis
  description: Retrieves sovereign credit risk indicators from Snowflake by country code, returning sovereign rating, GDP trend, debt-to-GDP ratio, and political risk score.
  tags:
  - credit-risk
  - sovereign
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: sovereign-risk
    port: 8080
    tools:
    - name: get-sovereign-risk
      description: Look up sovereign credit risk indicators by country code.
      inputParameters:
      - name: country_code
        in: body
        type: string
        description: The ISO country code.
      call: snowflake.get-sovereign-risk
      with:
        country_code: '{{country_code}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://moodys.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-sovereign-risk
        method: POST
Open in Framework → View in Fleet → sovereign-credit-risk-analysis.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 2
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-2
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-ops.run-workflow-2
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-2
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://moodys.service-now.com/api/now/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → moodys-workflow-2.yml

Triggers a refresh of the credit analytics Power BI dashboard and returns the refresh status.

naftiko: '0.5'
info:
  label: Power BI Credit Dashboard Data Sync
  description: Triggers a refresh of the credit analytics Power BI dashboard and returns the refresh status.
  tags:
  - analytics
  - dashboard
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: credit-dashboard
    port: 8080
    tools:
    - name: refresh-credit-dashboard
      description: Trigger a Power BI dashboard refresh by dataset ID.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID.
      call: powerbi.refresh-dataset
      with:
        dataset_id: '{{dataset_id}}'
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → power-bi-credit-dashboard-data-sync.yml

Reviews entities on the credit watchlist by pulling latest financials from Snowflake, fetching current rating from Salesforce, creating a Jira review task, and alerting the ratings committee via Microsoft Teams.

naftiko: '0.5'
info:
  label: Watchlist Entity Review Pipeline
  description: Reviews entities on the credit watchlist by pulling latest financials from Snowflake, fetching current rating from Salesforce, creating a Jira review task, and alerting the ratings committee via Microsoft Teams.
  tags:
  - watchlist
  - ratings
  - snowflake
  - salesforce
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: watchlist-review
    port: 8080
    tools:
    - name: review-watchlist-entity
      description: Given an entity ID, pull financials, check rating, and route for committee review.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      steps:
      - name: pull-financials
        type: call
        call: snowflake.execute-query
        with:
          entity_id: '{{entity_id}}'
      - name: get-current-rating
        type: call
        call: salesforce.get-rating
        with:
          entity_id: '{{entity_id}}'
      - name: create-review-task
        type: call
        call: jira.create-issue
        with:
          project: RATINGS
          summary: 'Watchlist review: {{entity_id}} (current: {{get-current-rating.Current_Rating__c}})'
          issue_type: Task
      - name: alert-committee
        type: call
        call: msteams.post-message
        with:
          team_id: ratings-committee
          channel_id: watchlist
          message: 'Watchlist review initiated for {{entity_id}}. Current rating: {{get-current-rating.Current_Rating__c}}. Jira: {{create-review-task.key}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://moodys.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://moodys.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: ratings
      path: /query/?q=SELECT+Current_Rating__c,Rating_Outlook__c+FROM+Credit_Rating__c+WHERE+Entity_ID__c='{{entity_id}}'
      inputParameters:
      - name: entity_id
        in: query
      operations:
      - name: get-rating
        method: GET
  - type: http
    namespace: jira
    baseUri: https://moodys.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → watchlist-entity-review-pipeline.yml

Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.

naftiko: '0.5'
info:
  label: Moodys Workflow 1
  description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
  tags:
  - financial-services
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: financial-services
    port: 8080
    tools:
    - name: moodys-workflow-1
      description: Orchestrates financial-services operations including data retrieval, processing, and automated notification for Moodys.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moodys-ops.run-workflow-1
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: moodys-ops
    baseUri: https://api.moodys.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moodys_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-1
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://moodys.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → moodys-workflow-1.yml

Retrieves operational data for Nasdaq capital-markets workflows.

naftiko: '0.5'
info:
  label: Nasdaq Data Lookup 8
  description: Retrieves operational data for Nasdaq capital-markets workflows.
  tags:
  - capital-markets
  - operations
capability:
  exposes:
  - type: mcp
    namespace: nasdaq-data
    port: 8080
    tools:
    - name: get-data-8
      description: Retrieves operational data for Nasdaq capital-markets workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: nasdaq-data.get-data-8
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: nasdaq-data
    baseUri: https://api.nasdaq.com/data/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: data-8
      path: /data-8/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-8
        method: GET
Open in Framework → View in Fleet → nasdaq-data-lookup-8.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 34
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-34
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-ops.run-workflow-34
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: sharepoint.upload-document
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-34
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://nasdaq.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: upload-document
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-34.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 20
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-20
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-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: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-20
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://nasdaq-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-20.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 21
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - box
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-21
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-ops.run-workflow-21
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: box.upload-file
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-21
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-21.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 35
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-35
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-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: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-35
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-35.yml

Retrieves operational data for Nasdaq capital-markets workflows.

naftiko: '0.5'
info:
  label: Nasdaq Data Lookup 9
  description: Retrieves operational data for Nasdaq capital-markets workflows.
  tags:
  - capital-markets
  - operations
capability:
  exposes:
  - type: mcp
    namespace: nasdaq-data
    port: 8080
    tools:
    - name: get-data-9
      description: Retrieves operational data for Nasdaq capital-markets workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: nasdaq-data.get-data-9
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: nasdaq-data
    baseUri: https://api.nasdaq.com/data/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: data-9
      path: /data-9/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-9
        method: GET
Open in Framework → View in Fleet → nasdaq-data-lookup-9.yml

Retrieves regulatory document metadata from SharePoint by folder path, returning document names, last modified dates, and version history.

naftiko: '0.5'
info:
  label: SharePoint Regulatory Document Archive
  description: Retrieves regulatory document metadata from SharePoint by folder path, returning document names, last modified dates, and version history.
  tags:
  - regulatory
  - document-management
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: regulatory-docs
    port: 8080
    tools:
    - name: list-regulatory-docs
      description: List regulatory documents in a SharePoint folder.
      inputParameters:
      - name: folder_path
        in: body
        type: string
        description: The SharePoint folder path.
      call: sharepoint.list-documents
      with:
        folder_path: '{{folder_path}}'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /regulatory_site/drive/root:/{{folder_path}}:/children
      inputParameters:
      - name: folder_path
        in: path
      operations:
      - name: list-documents
        method: GET
Open in Framework → View in Fleet → sharepoint-regulatory-document-archive.yml

Checks a listed company's compliance with Nasdaq listing standards by querying financial metrics from Snowflake and returning compliance status for each requirement.

naftiko: '0.5'
info:
  label: Listing Standards Compliance Check
  description: Checks a listed company's compliance with Nasdaq listing standards by querying financial metrics from Snowflake and returning compliance status for each requirement.
  tags:
  - listing
  - compliance
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: listing-compliance
    port: 8080
    tools:
    - name: check-listing-compliance
      description: Check listing standards compliance by company ticker.
      inputParameters:
      - name: ticker
        in: body
        type: string
        description: The listed company ticker.
      call: snowflake.check-compliance
      with:
        ticker: '{{ticker}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nasdaq.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: check-compliance
        method: POST
Open in Framework → View in Fleet → listing-standards-compliance-check.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 23
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-23
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-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: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-23
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-23.yml

Retrieves operational data for Nasdaq capital-markets workflows.

naftiko: '0.5'
info:
  label: Nasdaq Data Lookup 14
  description: Retrieves operational data for Nasdaq capital-markets workflows.
  tags:
  - capital-markets
  - operations
capability:
  exposes:
  - type: mcp
    namespace: nasdaq-data
    port: 8080
    tools:
    - name: get-data-14
      description: Retrieves operational data for Nasdaq capital-markets workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: nasdaq-data.get-data-14
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: nasdaq-data
    baseUri: https://api.nasdaq.com/data/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: data-14
      path: /data-14/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-14
        method: GET
Open in Framework → View in Fleet → nasdaq-data-lookup-14.yml

Retrieves the current composition of a Nasdaq index from Snowflake, returning constituent tickers, weights, and sector classifications.

naftiko: '0.5'
info:
  label: Index Composition Lookup
  description: Retrieves the current composition of a Nasdaq index from Snowflake, returning constituent tickers, weights, and sector classifications.
  tags:
  - indices
  - market-data
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: index-composition
    port: 8080
    tools:
    - name: get-index-composition
      description: Look up index constituents by index name.
      inputParameters:
      - name: index_name
        in: body
        type: string
        description: The index name (e.g., NASDAQ-100, NASDAQ Composite).
      call: snowflake.get-index-composition
      with:
        index_name: '{{index_name}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nasdaq.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-index-composition
        method: POST
Open in Framework → View in Fleet → index-composition-lookup.yml

Retrieves corporate actions events from Snowflake for a security, including dividends, splits, mergers, and spin-offs.

naftiko: '0.5'
info:
  label: Corporate Actions Event Lookup
  description: Retrieves corporate actions events from Snowflake for a security, including dividends, splits, mergers, and spin-offs.
  tags:
  - corporate-actions
  - market-data
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: corporate-actions
    port: 8080
    tools:
    - name: get-corporate-actions
      description: Look up corporate actions for a security by ticker and date range.
      inputParameters:
      - name: ticker
        in: body
        type: string
        description: The security ticker symbol.
      - name: start_date
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      call: snowflake.get-corporate-actions
      with:
        ticker: '{{ticker}}'
        start_date: '{{start_date}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nasdaq.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-corporate-actions
        method: POST
Open in Framework → View in Fleet → corporate-actions-event-lookup.yml

Retrieves operational data for Nasdaq capital-markets workflows.

naftiko: '0.5'
info:
  label: Nasdaq Data Lookup 15
  description: Retrieves operational data for Nasdaq capital-markets workflows.
  tags:
  - capital-markets
  - operations
capability:
  exposes:
  - type: mcp
    namespace: nasdaq-data
    port: 8080
    tools:
    - name: get-data-15
      description: Retrieves operational data for Nasdaq capital-markets workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: nasdaq-data.get-data-15
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: nasdaq-data
    baseUri: https://api.nasdaq.com/data/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: data-15
      path: /data-15/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-15
        method: GET
Open in Framework → View in Fleet → nasdaq-data-lookup-15.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 22
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-22
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-ops.run-workflow-22
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: sharepoint.upload-document
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-22
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://nasdaq.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: upload-document
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-22.yml

Retrieves real-time order book depth for a security from Snowflake, returning top-of-book bid/ask levels, depth at each price level, and aggregate volume.

naftiko: '0.5'
info:
  label: Order Book Depth Lookup
  description: Retrieves real-time order book depth for a security from Snowflake, returning top-of-book bid/ask levels, depth at each price level, and aggregate volume.
  tags:
  - market-data
  - order-book
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: order-book
    port: 8080
    tools:
    - name: get-order-book
      description: Look up order book depth by ticker symbol.
      inputParameters:
      - name: ticker
        in: body
        type: string
        description: The security ticker symbol.
      call: snowflake.get-order-book
      with:
        ticker: '{{ticker}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nasdaq.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-order-book
        method: POST
Open in Framework → View in Fleet → order-book-depth-lookup.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 26
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-26
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-ops.run-workflow-26
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-26
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://nasdaq.service-now.com/api/now/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-26.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 32
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-32
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-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: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-32
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://nasdaq-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-32.yml

Retrieves operational data for Nasdaq capital-markets workflows.

naftiko: '0.5'
info:
  label: Nasdaq Data Lookup 11
  description: Retrieves operational data for Nasdaq capital-markets workflows.
  tags:
  - capital-markets
  - operations
capability:
  exposes:
  - type: mcp
    namespace: nasdaq-data
    port: 8080
    tools:
    - name: get-data-11
      description: Retrieves operational data for Nasdaq capital-markets workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: nasdaq-data.get-data-11
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: nasdaq-data
    baseUri: https://api.nasdaq.com/data/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: data-11
      path: /data-11/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-11
        method: GET
Open in Framework → View in Fleet → nasdaq-data-lookup-11.yml

Prepares and submits regulatory filings by extracting filing data from Snowflake, generating documents in SharePoint, creating a ServiceNow tracking ticket, and notifying the regulatory team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SEC Filing Submission Pipeline
  description: Prepares and submits regulatory filings by extracting filing data from Snowflake, generating documents in SharePoint, creating a ServiceNow tracking ticket, and notifying the regulatory team via Microsoft Teams.
  tags:
  - regulatory
  - compliance
  - snowflake
  - sharepoint
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sec-filing
    port: 8080
    tools:
    - name: prepare-sec-filing
      description: Given a filing type and period, prepare and submit the SEC filing.
      inputParameters:
      - name: filing_type
        in: body
        type: string
        description: The SEC filing type (e.g., 10-K, 10-Q, 8-K).
      - name: reporting_period
        in: body
        type: string
        description: The reporting period.
      steps:
      - name: extract-filing-data
        type: call
        call: snowflake.execute-query
        with:
          filing_type: '{{filing_type}}'
          period: '{{reporting_period}}'
      - name: create-filing-folder
        type: call
        call: sharepoint.create-folder
        with:
          site_id: regulatory_site
          folder_path: SEC/{{filing_type}}/{{reporting_period}}
      - name: create-tracking-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'SEC filing: {{filing_type}} for {{reporting_period}}'
          category: regulatory
          description: Filing data extracted. {{extract-filing-data.rowCount}} records.
      - name: notify-regulatory
        type: call
        call: msteams.post-message
        with:
          team_id: regulatory-team
          channel_id: filings
          message: 'SEC {{filing_type}} filing prepared for {{reporting_period}}. Documents: {{create-filing-folder.webUrl}}. Ticket: {{create-tracking-ticket.number}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nasdaq.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://nasdaq.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → sec-filing-submission-pipeline.yml

Retrieves operational data for Nasdaq capital-markets workflows.

naftiko: '0.5'
info:
  label: Nasdaq Data Lookup 10
  description: Retrieves operational data for Nasdaq capital-markets workflows.
  tags:
  - capital-markets
  - operations
capability:
  exposes:
  - type: mcp
    namespace: nasdaq-data
    port: 8080
    tools:
    - name: get-data-10
      description: Retrieves operational data for Nasdaq capital-markets workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: nasdaq-data.get-data-10
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: nasdaq-data
    baseUri: https://api.nasdaq.com/data/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: data-10
      path: /data-10/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-10
        method: GET
Open in Framework → View in Fleet → nasdaq-data-lookup-10.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 33
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - box
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-33
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-ops.run-workflow-33
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: box.upload-file
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-33
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-33.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 27
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - slack
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-27
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-ops.run-workflow-27
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#capital-markets'
          text: 'Completed workflow 27: {{process.summary}}'
  consumes:
  - type: http
    namespace: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-27
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-27.yml

Processes AML alerts by pulling transaction patterns from Snowflake, checking entity details in Salesforce, creating a ServiceNow case, and escalating to the compliance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Anti-Money Laundering Alert Pipeline
  description: Processes AML alerts by pulling transaction patterns from Snowflake, checking entity details in Salesforce, creating a ServiceNow case, and escalating to the compliance team via Microsoft Teams.
  tags:
  - compliance
  - aml
  - snowflake
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: aml-alerts
    port: 8080
    tools:
    - name: process-aml-alert
      description: Given an alert ID, investigate the AML alert and escalate.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The AML alert ID.
      - name: entity_id
        in: body
        type: string
        description: The entity under investigation.
      steps:
      - name: pull-transactions
        type: call
        call: snowflake.execute-query
        with:
          alert_id: '{{alert_id}}'
          entity_id: '{{entity_id}}'
      - name: get-entity-info
        type: call
        call: salesforce.get-entity
        with:
          entity_id: '{{entity_id}}'
      - name: create-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'AML investigation: Alert {{alert_id}} - {{get-entity-info.Name}}'
          category: aml_compliance
          description: '{{pull-transactions.rowCount}} suspicious transactions flagged.'
      - name: escalate-compliance
        type: call
        call: msteams.post-message
        with:
          team_id: compliance-team
          channel_id: aml-alerts
          message: 'AML alert {{alert_id}} for {{get-entity-info.Name}}: {{pull-transactions.rowCount}} transactions flagged. Case: {{create-case.number}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nasdaq.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://nasdaq.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: entities
      path: /query/?q=SELECT+Name,Entity_Type__c+FROM+Account+WHERE+Entity_ID__c='{{entity_id}}'
      inputParameters:
      - name: entity_id
        in: query
      operations:
      - name: get-entity
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://nasdaq.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → anti-money-laundering-alert-pipeline.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 19
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - teams
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-19
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-ops.run-workflow-19
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: teams.send-message
        with:
          channel_id: capital-markets
          message: 'Workflow 19 complete: {{process.summary}}'
  consumes:
  - type: http
    namespace: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-19
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-19.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 31
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - teams
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-31
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-ops.run-workflow-31
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: teams.send-message
        with:
          channel_id: capital-markets
          message: 'Workflow 31 complete: {{process.summary}}'
  consumes:
  - type: http
    namespace: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-31
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-31.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 25
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-25
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-ops.run-workflow-25
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-25
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://nasdaq.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-25.yml

Retrieves operational data for Nasdaq capital-markets workflows.

naftiko: '0.5'
info:
  label: Nasdaq Data Lookup 12
  description: Retrieves operational data for Nasdaq capital-markets workflows.
  tags:
  - capital-markets
  - operations
capability:
  exposes:
  - type: mcp
    namespace: nasdaq-data
    port: 8080
    tools:
    - name: get-data-12
      description: Retrieves operational data for Nasdaq capital-markets workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: nasdaq-data.get-data-12
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: nasdaq-data
    baseUri: https://api.nasdaq.com/data/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: data-12
      path: /data-12/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-12
        method: GET
Open in Framework → View in Fleet → nasdaq-data-lookup-12.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 8
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-8
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-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: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-8
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://nasdaq-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-8.yml

Retrieves infrastructure metrics from Datadog for trading platform monitoring including latency, throughput, and error rates.

naftiko: '0.5'
info:
  label: Datadog Infrastructure Metrics
  description: Retrieves infrastructure metrics from Datadog for trading platform monitoring including latency, throughput, and error rates.
  tags:
  - monitoring
  - datadog
  - trading
capability:
  exposes:
  - type: mcp
    namespace: infra-metrics
    port: 8080
    tools:
    - name: get-metrics
      description: Query Datadog for infrastructure metrics.
      inputParameters:
      - name: metric_name
        in: body
        type: string
        description: The Datadog metric name.
      - name: from_ts
        in: body
        type: string
        description: Start timestamp (epoch seconds).
      - name: to_ts
        in: body
        type: string
        description: End timestamp (epoch seconds).
      call: datadog.query-metrics
      with:
        metric_name: '{{metric_name}}'
        from_ts: '{{from_ts}}'
        to_ts: '{{to_ts}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /query?query={{metric_name}}&from={{from_ts}}&to={{to_ts}}
      inputParameters:
      - name: metric_name
        in: query
      - name: from_ts
        in: query
      - name: to_ts
        in: query
      operations:
      - name: query-metrics
        method: GET
Open in Framework → View in Fleet → datadog-infrastructure-metrics.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 9
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - box
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-9
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-ops.run-workflow-9
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: box.upload-file
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-9
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-9.yml

Retrieves operational data for Nasdaq capital-markets workflows.

naftiko: '0.5'
info:
  label: Nasdaq Data Lookup 13
  description: Retrieves operational data for Nasdaq capital-markets workflows.
  tags:
  - capital-markets
  - operations
capability:
  exposes:
  - type: mcp
    namespace: nasdaq-data
    port: 8080
    tools:
    - name: get-data-13
      description: Retrieves operational data for Nasdaq capital-markets workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: nasdaq-data.get-data-13
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: nasdaq-data
    baseUri: https://api.nasdaq.com/data/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: data-13
      path: /data-13/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-13
        method: GET
Open in Framework → View in Fleet → nasdaq-data-lookup-13.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 24
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-24
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-ops.run-workflow-24
        with:
          identifier: '{{identifier}}'
      - name: push
        type: call
        call: datadog.submit-metrics
        with:
          metric_name: capital-markets.workflow_24
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-24
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_token
    resources:
    - name: metrics
      path: /metrics
      operations:
      - name: submit-metrics
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-24.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 30
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-30
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-ops.run-workflow-30
        with:
          identifier: '{{identifier}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: CAPI
          summary: Task from workflow 30
          description: '{{process.details}}'
  consumes:
  - type: http
    namespace: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-30
        method: POST
  - type: http
    namespace: jira
    baseUri: https://nasdaq.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issues
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-30.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 18
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-18
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-ops.run-workflow-18
        with:
          identifier: '{{identifier}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: CAPI
          summary: Task from workflow 18
          description: '{{process.details}}'
  consumes:
  - type: http
    namespace: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-18
        method: POST
  - type: http
    namespace: jira
    baseUri: https://nasdaq.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issues
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-18.yml

Retrieves trade surveillance alert details by alert ID from the monitoring system, including alert type, severity, and flagged trades.

naftiko: '0.5'
info:
  label: Trade Surveillance Alert Lookup
  description: Retrieves trade surveillance alert details by alert ID from the monitoring system, including alert type, severity, and flagged trades.
  tags:
  - surveillance
  - compliance
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: trade-surveillance
    port: 8080
    tools:
    - name: get-surveillance-alert
      description: Look up a trade surveillance alert by alert ID.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The surveillance alert identifier.
      call: snowflake.get-alert
      with:
        alert_id: '{{alert_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nasdaq.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-alert
        method: POST
Open in Framework → View in Fleet → trade-surveillance-alert-lookup.yml

Retrieves real-time market data for a security by ticker symbol, returning last price, bid/ask, volume, and market cap.

naftiko: '0.5'
info:
  label: Market Data Quote Lookup
  description: Retrieves real-time market data for a security by ticker symbol, returning last price, bid/ask, volume, and market cap.
  tags:
  - market-data
  - trading
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: market-data
    port: 8080
    tools:
    - name: get-market-quote
      description: Look up real-time market data for a security by ticker symbol.
      inputParameters:
      - name: ticker
        in: body
        type: string
        description: The security ticker symbol.
      call: snowflake.get-quote
      with:
        ticker: '{{ticker}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nasdaq.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-quote
        method: POST
Open in Framework → View in Fleet → market-data-quote-lookup.yml

Retrieves headcount summary from Workday by department, returning active employee count, open positions, and attrition rate.

naftiko: '0.5'
info:
  label: Workday Headcount Report
  description: Retrieves headcount summary from Workday by department, returning active employee count, open positions, and attrition rate.
  tags:
  - hr
  - workday
capability:
  exposes:
  - type: mcp
    namespace: hr-headcount
    port: 8080
    tools:
    - name: get-headcount
      description: Retrieve headcount report by department.
      inputParameters:
      - name: department
        in: body
        type: string
        description: The department name.
      call: workday.get-headcount
      with:
        department: '{{department}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/nasdaq
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: headcount
      path: /headcount?department={{department}}
      inputParameters:
      - name: department
        in: query
      operations:
      - name: get-headcount
        method: GET
Open in Framework → View in Fleet → workday-headcount-report.yml

Responds to trading platform incidents by pulling system metrics from Datadog, checking logs in Splunk, creating a critical ServiceNow incident, creating a Jira task for engineering, and alerting operations via Microsoft Teams.

naftiko: '0.5'
info:
  label: Trading Platform Incident Response
  description: Responds to trading platform incidents by pulling system metrics from Datadog, checking logs in Splunk, creating a critical ServiceNow incident, creating a Jira task for engineering, and alerting operations via Microsoft Teams.
  tags:
  - trading
  - incident-response
  - datadog
  - splunk
  - servicenow
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: platform-incidents
    port: 8080
    tools:
    - name: respond-to-platform-incident
      description: Given an incident description and affected system, orchestrate the full incident response.
      inputParameters:
      - name: incident_description
        in: body
        type: string
        description: Description of the platform incident.
      - name: affected_system
        in: body
        type: string
        description: The affected trading system component.
      - name: severity
        in: body
        type: string
        description: Severity level (critical, high, medium).
      steps:
      - name: get-system-metrics
        type: call
        call: datadog.query-metrics
        with:
          metric_name: '{{affected_system}}.latency'
          from_ts: '-3600'
          to_ts: now
      - name: search-logs
        type: call
        call: splunk.search
        with:
          search_query: index=trading source={{affected_system}} error
          earliest_time: -1h
          latest_time: now
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Platform incident: {{affected_system}} - {{severity}}'
          category: platform_operations
          priority: '{{severity}}'
          description: '{{incident_description}}. Latency: {{get-system-metrics.avg_latency}}ms. Log hits: {{search-logs.result_count}}.'
      - name: create-eng-task
        type: call
        call: jira.create-issue
        with:
          project_key: PLAT
          summary: 'Platform incident: {{affected_system}}'
          description: '{{incident_description}}. ServiceNow: {{create-incident.number}}.'
          issue_type: Bug
      - name: alert-ops
        type: call
        call: msteams.post-message
        with:
          team_id: platform-ops-team
          channel_id: incidents
          message: 'PLATFORM INCIDENT ({{severity}}): {{affected_system}} - {{incident_description}}. Latency: {{get-system-metrics.avg_latency}}ms. Case: {{create-incident.number}}. Jira: {{create-eng-task.key}}.'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: splunk
    baseUri: https://splunk.nasdaq.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search-jobs
      path: /search/jobs
      operations:
      - name: search
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://nasdaq.service-now.com/api/now
    authentication:
      type: 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://nasdaq.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → trading-platform-incident-response.yml

Retrieves exchange outage and maintenance records from ServiceNow, returning outage duration, affected systems, and root cause summary.

naftiko: '0.5'
info:
  label: ServiceNow Exchange Outage Tracker
  description: Retrieves exchange outage and maintenance records from ServiceNow, returning outage duration, affected systems, and root cause summary.
  tags:
  - it-service
  - exchange
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: exchange-outages
    port: 8080
    tools:
    - name: get-outage-history
      description: Look up exchange outage records by date range.
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: End date in YYYY-MM-DD format.
      call: servicenow.get-outages
      with:
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://nasdaq.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: outages
      path: /table/incident?sysparm_query=category=exchange^opened_at>={{start_date}}^opened_at<={{end_date}}
      inputParameters:
      - name: start_date
        in: query
      - name: end_date
        in: query
      operations:
      - name: get-outages
        method: GET
Open in Framework → View in Fleet → servicenow-exchange-outage-tracker.yml

Generates market analytics reports by querying trading data from Snowflake, enriching with Bloomberg reference data, refreshing Power BI dashboards, uploading to SharePoint, and notifying the analytics team.

naftiko: '0.5'
info:
  label: Market Analytics Report Pipeline
  description: Generates market analytics reports by querying trading data from Snowflake, enriching with Bloomberg reference data, refreshing Power BI dashboards, uploading to SharePoint, and notifying the analytics team.
  tags:
  - market-data
  - analytics
  - snowflake
  - bloomberg-enterprise-data
  - power-bi
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: market-analytics
    port: 8080
    tools:
    - name: generate-market-analytics
      description: Given a market segment and period, generate comprehensive market analytics.
      inputParameters:
      - name: market_segment
        in: body
        type: string
        description: The market segment (equities, options, fixed_income).
      - name: period
        in: body
        type: string
        description: The analysis period.
      steps:
      - name: query-trading-data
        type: call
        call: snowflake.execute-query
        with:
          segment: '{{market_segment}}'
          period: '{{period}}'
      - name: enrich-with-reference
        type: call
        call: bloomberg.get-pricing
        with:
          identifier: '{{market_segment}}'
          identifier_type: SEGMENT
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: market-analytics-dataset
      - name: upload-report
        type: call
        call: sharepoint.create-folder
        with:
          site_id: analytics_site
          folder_path: MarketAnalytics/{{market_segment}}/{{period}}
      - name: notify-analytics
        type: call
        call: msteams.post-message
        with:
          team_id: analytics-team
          channel_id: market-reports
          message: 'Market analytics for {{market_segment}} ({{period}}) complete. {{query-trading-data.rowCount}} data points. Report: {{upload-report.webUrl}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nasdaq.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: bloomberg
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/datasets
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: pricing
      path: /pricing
      operations:
      - name: get-pricing
        method: GET
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → market-analytics-report-pipeline.yml

Coordinates market trading halts by updating halt status in Snowflake, notifying listed companies via Salesforce, creating a ServiceNow incident for tracking, distributing halt notices via Bloomberg, and alerting all teams via Microsoft Teams.

naftiko: '0.5'
info:
  label: Market Halt Coordination Pipeline
  description: Coordinates market trading halts by updating halt status in Snowflake, notifying listed companies via Salesforce, creating a ServiceNow incident for tracking, distributing halt notices via Bloomberg, and alerting all teams via Microsoft Teams.
  tags:
  - trading
  - market-halt
  - snowflake
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: market-halts
    port: 8080
    tools:
    - name: coordinate-market-halt
      description: Given a ticker and halt reason, coordinate the full market halt process.
      inputParameters:
      - name: ticker
        in: body
        type: string
        description: The ticker to halt.
      - name: halt_reason
        in: body
        type: string
        description: Reason for the halt (news_pending, regulatory, volatility).
      - name: halt_time
        in: body
        type: string
        description: Halt time in ISO 8601 format.
      steps:
      - name: update-halt-status
        type: call
        call: snowflake.execute-query
        with:
          ticker: '{{ticker}}'
          halt_reason: '{{halt_reason}}'
          halt_time: '{{halt_time}}'
      - name: notify-issuer
        type: call
        call: salesforce.create-halt-notification
        with:
          ticker: '{{ticker}}'
          halt_reason: '{{halt_reason}}'
      - name: create-tracking-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Market halt: {{ticker}} - {{halt_reason}}'
          category: market_operations
          priority: '1'
          description: 'Trading halt for {{ticker}} at {{halt_time}}. Reason: {{halt_reason}}.'
      - name: alert-all-teams
        type: call
        call: msteams.post-message
        with:
          team_id: market-ops-team
          channel_id: trading-halts
          message: 'TRADING HALT: {{ticker}} halted at {{halt_time}}. Reason: {{halt_reason}}. Incident: {{create-tracking-incident.number}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nasdaq.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://nasdaq.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: halt-notifications
      path: /sobjects/Halt_Notification__c
      operations:
      - name: create-halt-notification
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://nasdaq.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → market-halt-coordination-pipeline.yml

Reviews listed company compliance by pulling financial data from Snowflake, checking listing standards in Salesforce, creating a compliance review case in ServiceNow, and notifying the listings qualifications team.

naftiko: '0.5'
info:
  label: Listing Compliance Review Pipeline
  description: Reviews listed company compliance by pulling financial data from Snowflake, checking listing standards in Salesforce, creating a compliance review case in ServiceNow, and notifying the listings qualifications team.
  tags:
  - listing
  - compliance
  - snowflake
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: listing-compliance
    port: 8080
    tools:
    - name: review-listing-compliance
      description: Given a listed company ticker, review compliance with listing standards.
      inputParameters:
      - name: ticker
        in: body
        type: string
        description: The listed company ticker.
      - name: review_type
        in: body
        type: string
        description: Type of review (annual, bid_price, market_cap).
      steps:
      - name: pull-financial-data
        type: call
        call: snowflake.execute-query
        with:
          ticker: '{{ticker}}'
          review_type: '{{review_type}}'
      - name: check-listing-standards
        type: call
        call: salesforce.get-listing-record
        with:
          ticker: '{{ticker}}'
      - name: create-review-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Listing compliance: {{ticker}} - {{review_type}}'
          category: listing_compliance
          description: '{{review_type}} review for {{ticker}}. Market cap: {{pull-financial-data.market_cap}}. Bid price: {{pull-financial-data.bid_price}}.'
      - name: notify-qualifications
        type: call
        call: msteams.post-message
        with:
          team_id: listings-team
          channel_id: compliance-reviews
          message: 'Listing compliance review: {{ticker}} ({{review_type}}). Case: {{create-review-case.number}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nasdaq.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://nasdaq.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: listing-records
      path: /query/?q=SELECT+Listing_Status__c,Standards_Met__c+FROM+Listing__c+WHERE+Ticker__c='{{ticker}}'
      inputParameters:
      - name: ticker
        in: query
      operations:
      - name: get-listing-record
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://nasdaq.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → listing-compliance-review-pipeline.yml

Queries trading volume analytics from Snowflake for a security or market segment, returning daily volume, VWAP, and volume distribution by session.

naftiko: '0.5'
info:
  label: Trading Volume Analytics Query
  description: Queries trading volume analytics from Snowflake for a security or market segment, returning daily volume, VWAP, and volume distribution by session.
  tags:
  - trading
  - analytics
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: volume-analytics
    port: 8080
    tools:
    - name: get-volume-analytics
      description: Query trading volume analytics by ticker and date range.
      inputParameters:
      - name: ticker
        in: body
        type: string
        description: The security ticker symbol.
      - name: date_range
        in: body
        type: string
        description: The date range (e.g., 30d, 90d).
      call: snowflake.get-volume-analytics
      with:
        ticker: '{{ticker}}'
        date_range: '{{date_range}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nasdaq.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-volume-analytics
        method: POST
Open in Framework → View in Fleet → trading-volume-analytics-query.yml

Checks the status of a company's listing application in Salesforce, returning application state, review stage, and assigned analyst.

naftiko: '0.5'
info:
  label: Listing Application Status
  description: Checks the status of a company's listing application in Salesforce, returning application state, review stage, and assigned analyst.
  tags:
  - listing
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: listing-services
    port: 8080
    tools:
    - name: get-listing-status
      description: Look up a listing application by application ID.
      inputParameters:
      - name: application_id
        in: body
        type: string
        description: The listing application ID.
      call: salesforce.get-application
      with:
        application_id: '{{application_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.records[0].Application_Status__c
      - name: review_stage
        type: string
        mapping: $.records[0].Review_Stage__c
      - name: assigned_analyst
        type: string
        mapping: $.records[0].Assigned_Analyst__c
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://nasdaq.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: applications
      path: /query/?q=SELECT+Application_Status__c,Review_Stage__c,Assigned_Analyst__c+FROM+Listing_Application__c+WHERE+Application_ID__c='{{application_id}}'
      inputParameters:
      - name: application_id
        in: query
      operations:
      - name: get-application
        method: GET
Open in Framework → View in Fleet → listing-application-status.yml

Retrieves short interest data for a security from Snowflake, returning shares short, days to cover, and short interest ratio.

naftiko: '0.5'
info:
  label: Short Interest Data Lookup
  description: Retrieves short interest data for a security from Snowflake, returning shares short, days to cover, and short interest ratio.
  tags:
  - market-data
  - short-interest
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: short-interest
    port: 8080
    tools:
    - name: get-short-interest
      description: Look up short interest data by ticker.
      inputParameters:
      - name: ticker
        in: body
        type: string
        description: The security ticker symbol.
      call: snowflake.get-short-interest
      with:
        ticker: '{{ticker}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nasdaq.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-short-interest
        method: POST
Open in Framework → View in Fleet → short-interest-data-lookup.yml

Orchestrates a new IPO listing by creating the listing record in Salesforce, provisioning market data feeds in Snowflake, setting up surveillance rules, uploading regulatory docs to SharePoint, and notifying the listings team via Microsoft Teams.

naftiko: '0.5'
info:
  label: IPO Listing Orchestrator
  description: Orchestrates a new IPO listing by creating the listing record in Salesforce, provisioning market data feeds in Snowflake, setting up surveillance rules, uploading regulatory docs to SharePoint, and notifying the listings team via Microsoft Teams.
  tags:
  - listing
  - ipo
  - salesforce
  - snowflake
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ipo-listing
    port: 8080
    tools:
    - name: process-ipo-listing
      description: Given company and listing details, orchestrate the full IPO listing setup.
      inputParameters:
      - name: company_name
        in: body
        type: string
        description: The company name.
      - name: ticker_symbol
        in: body
        type: string
        description: The assigned ticker symbol.
      - name: listing_date
        in: body
        type: string
        description: The listing date in YYYY-MM-DD format.
      - name: offering_price
        in: body
        type: string
        description: The IPO offering price.
      steps:
      - name: create-listing-record
        type: call
        call: salesforce.create-listing
        with:
          company_name: '{{company_name}}'
          ticker: '{{ticker_symbol}}'
          listing_date: '{{listing_date}}'
          price: '{{offering_price}}'
      - name: provision-data-feeds
        type: call
        call: snowflake.execute-query
        with:
          ticker: '{{ticker_symbol}}'
          listing_date: '{{listing_date}}'
      - name: upload-docs
        type: call
        call: sharepoint.create-folder
        with:
          site_id: listings_site
          folder_path: IPOs/{{ticker_symbol}}_{{listing_date}}
      - name: notify-listings-team
        type: call
        call: msteams.post-message
        with:
          team_id: listings-team
          channel_id: new-listings
          message: 'IPO listing processed: {{company_name}} ({{ticker_symbol}}) on {{listing_date}} at ${{offering_price}}. Salesforce: {{create-listing-record.id}}. Docs: {{upload-docs.webUrl}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://nasdaq.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: listings
      path: /sobjects/Listing__c
      operations:
      - name: create-listing
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://nasdaq.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → ipo-listing-orchestrator.yml

Generates a market maker performance report by pulling quoting statistics from Snowflake, creating a Jira review task, and notifying the market quality team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Market Maker Performance Report
  description: Generates a market maker performance report by pulling quoting statistics from Snowflake, creating a Jira review task, and notifying the market quality team via Microsoft Teams.
  tags:
  - market-quality
  - market-maker
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: market-maker-performance
    port: 8080
    tools:
    - name: generate-mm-report
      description: Given a market maker ID and period, generate their performance report.
      inputParameters:
      - name: mm_id
        in: body
        type: string
        description: The market maker identifier.
      - name: period
        in: body
        type: string
        description: The reporting period.
      steps:
      - name: pull-performance-data
        type: call
        call: snowflake.execute-query
        with:
          mm_id: '{{mm_id}}'
          period: '{{period}}'
      - name: create-review-task
        type: call
        call: jira.create-issue
        with:
          project: MKTQUAL
          summary: 'MM performance review: {{mm_id}} ({{period}})'
          issue_type: Task
      - name: notify-team
        type: call
        call: msteams.post-message
        with:
          team_id: market-quality-team
          channel_id: reports
          message: 'Market maker {{mm_id}} performance report ({{period}}): Quoting time {{pull-performance-data.time_at_best_pct}}%. Review: {{create-review-task.key}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nasdaq.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://nasdaq.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → market-maker-performance-report.yml

Retrieves private market deal information from Salesforce by deal ID, returning company name, valuation, deal stage, and investor details.

naftiko: '0.5'
info:
  label: Nasdaq Private Market Deal Lookup
  description: Retrieves private market deal information from Salesforce by deal ID, returning company name, valuation, deal stage, and investor details.
  tags:
  - private-market
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: private-market
    port: 8080
    tools:
    - name: get-private-deal
      description: Look up private market deal by deal ID.
      inputParameters:
      - name: deal_id
        in: body
        type: string
        description: The private market deal ID.
      call: salesforce.get-private-deal
      with:
        deal_id: '{{deal_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://nasdaq.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: private-deals
      path: /query/?q=SELECT+Company_Name__c,Valuation__c,Stage__c,Lead_Investor__c+FROM+Private_Deal__c+WHERE+Deal_ID__c='{{deal_id}}'
      inputParameters:
      - name: deal_id
        in: query
      operations:
      - name: get-private-deal
        method: GET
Open in Framework → View in Fleet → nasdaq-private-market-deal-lookup.yml

Queries ESG data products from Snowflake for a company, returning ESG scores, controversy flags, and carbon disclosure metrics.

naftiko: '0.5'
info:
  label: Nasdaq ESG Data Product Query
  description: Queries ESG data products from Snowflake for a company, returning ESG scores, controversy flags, and carbon disclosure metrics.
  tags:
  - esg
  - data-product
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: esg-data
    port: 8080
    tools:
    - name: get-esg-data
      description: Retrieve ESG data product scores by company ticker.
      inputParameters:
      - name: ticker
        in: body
        type: string
        description: The company ticker symbol.
      call: snowflake.get-esg-scores
      with:
        ticker: '{{ticker}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nasdaq.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-esg-scores
        method: POST
Open in Framework → View in Fleet → nasdaq-esg-data-product-query.yml

Triggers a refresh of the market analytics Power BI dataset and returns the refresh job status.

naftiko: '0.5'
info:
  label: Power BI Market Analytics Refresh
  description: Triggers a refresh of the market analytics Power BI dataset and returns the refresh job status.
  tags:
  - analytics
  - dashboard
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: market-analytics-dashboard
    port: 8080
    tools:
    - name: refresh-market-analytics
      description: Trigger a Power BI market analytics dataset refresh.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID.
      call: powerbi.refresh-market-dataset
      with:
        dataset_id: '{{dataset_id}}'
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-market-dataset
        method: POST
Open in Framework → View in Fleet → power-bi-market-analytics-refresh.yml

Retrieves operational data for Nasdaq capital-markets workflows.

naftiko: '0.5'
info:
  label: Nasdaq Data Lookup 1
  description: Retrieves operational data for Nasdaq capital-markets workflows.
  tags:
  - capital-markets
  - operations
capability:
  exposes:
  - type: mcp
    namespace: nasdaq-data
    port: 8080
    tools:
    - name: get-data-1
      description: Retrieves operational data for Nasdaq capital-markets workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: nasdaq-data.get-data-1
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: nasdaq-data
    baseUri: https://api.nasdaq.com/data/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: data-1
      path: /data-1/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-1
        method: GET
Open in Framework → View in Fleet → nasdaq-data-lookup-1.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 15
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - slack
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-15
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-ops.run-workflow-15
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#capital-markets'
          text: 'Completed workflow 15: {{process.summary}}'
  consumes:
  - type: http
    namespace: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-15
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-15.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 29
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-29
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-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: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-29
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-29.yml

Triggers a deployment pipeline for the exchange platform in Azure DevOps and returns the deployment run status.

naftiko: '0.5'
info:
  label: Azure DevOps Exchange Platform Deployment
  description: Triggers a deployment pipeline for the exchange platform in Azure DevOps and returns the deployment run status.
  tags:
  - ci-cd
  - exchange
  - azure-devops
capability:
  exposes:
  - type: mcp
    namespace: exchange-deployment
    port: 8080
    tools:
    - name: trigger-exchange-deploy
      description: Trigger exchange platform deployment pipeline.
      inputParameters:
      - name: pipeline_id
        in: body
        type: string
        description: The Azure DevOps pipeline ID.
      - name: environment
        in: body
        type: string
        description: The target environment (staging, production).
      call: azuredevops.run-pipeline
      with:
        pipeline_id: '{{pipeline_id}}'
        environment: '{{environment}}'
  consumes:
  - type: http
    namespace: azuredevops
    baseUri: https://dev.azure.com/nasdaq
    authentication:
      type: bearer
      token: $secrets.azuredevops_token
    resources:
    - name: pipelines
      path: /exchange/_apis/pipelines/{{pipeline_id}}/runs?api-version=7.0
      inputParameters:
      - name: pipeline_id
        in: path
      operations:
      - name: run-pipeline
        method: POST
Open in Framework → View in Fleet → azure-devops-exchange-platform-deployment.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 4
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-4
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-ops.run-workflow-4
        with:
          identifier: '{{identifier}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space: CAPITA
          title: Report 4
          content: '{{process.report}}'
  consumes:
  - type: http
    namespace: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-4
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://nasdaq.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-4.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 5
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-5
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-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: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-5
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-5.yml

Retrieves trading system latency metrics from Datadog, returning P50, P95, and P99 latencies for the matching engine and gateway.

naftiko: '0.5'
info:
  label: Datadog Trading Latency Monitoring
  description: Retrieves trading system latency metrics from Datadog, returning P50, P95, and P99 latencies for the matching engine and gateway.
  tags:
  - monitoring
  - trading
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: trading-latency
    port: 8080
    tools:
    - name: get-trading-latency
      description: Retrieve trading latency metrics from Datadog by service.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The trading service name.
      call: datadog.get-latency
      with:
        service_name: '{{service_name}}'
  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?query=avg:trace.http.request.duration{service:{{service_name}}}
      inputParameters:
      - name: service_name
        in: query
      operations:
      - name: get-latency
        method: GET
Open in Framework → View in Fleet → datadog-trading-latency-monitoring.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 28
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-28
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-ops.run-workflow-28
        with:
          identifier: '{{identifier}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space: CAPITA
          title: Report 28
          content: '{{process.report}}'
  consumes:
  - type: http
    namespace: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-28
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://nasdaq.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-28.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 14
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-14
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-ops.run-workflow-14
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-14
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://nasdaq.service-now.com/api/now/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-14.yml

Analyzes fintech SaaS client usage by querying usage data from Snowflake, pulling subscription data from Salesforce, refreshing Power BI dashboards, and notifying account managers via Microsoft Teams.

naftiko: '0.5'
info:
  label: Fintech SaaS Client Usage Analytics
  description: Analyzes fintech SaaS client usage by querying usage data from Snowflake, pulling subscription data from Salesforce, refreshing Power BI dashboards, and notifying account managers via Microsoft Teams.
  tags:
  - market-data
  - analytics
  - snowflake
  - salesforce
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: client-usage
    port: 8080
    tools:
    - name: analyze-client-usage
      description: Given a client ID and period, analyze their SaaS product usage.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The client account ID.
      - name: period
        in: body
        type: string
        description: The analysis period.
      steps:
      - name: query-usage
        type: call
        call: snowflake.execute-query
        with:
          client_id: '{{client_id}}'
          period: '{{period}}'
      - name: get-subscription
        type: call
        call: salesforce.get-subscription
        with:
          client_id: '{{client_id}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: client-usage-dataset
      - name: notify-account-mgr
        type: call
        call: msteams.post-message
        with:
          team_id: account-management
          channel_id: usage-reports
          message: 'Client {{client_id}} usage report ({{period}}): {{query-usage.api_calls}} API calls. Subscription: {{get-subscription.Product__c}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nasdaq.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://nasdaq.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: subscriptions
      path: /query/?q=SELECT+Product__c,Tier__c+FROM+Subscription__c+WHERE+Account_ID__c='{{client_id}}'
      inputParameters:
      - name: client_id
        in: query
      operations:
      - name: get-subscription
        method: GET
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → fintech-saas-client-usage-analytics.yml

Retrieves operational data for Nasdaq capital-markets workflows.

naftiko: '0.5'
info:
  label: Nasdaq Data Lookup 2
  description: Retrieves operational data for Nasdaq capital-markets workflows.
  tags:
  - capital-markets
  - operations
capability:
  exposes:
  - type: mcp
    namespace: nasdaq-data
    port: 8080
    tools:
    - name: get-data-2
      description: Retrieves operational data for Nasdaq capital-markets workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: nasdaq-data.get-data-2
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: nasdaq-data
    baseUri: https://api.nasdaq.com/data/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: data-2
      path: /data-2/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-2
        method: GET
Open in Framework → View in Fleet → nasdaq-data-lookup-2.yml

Calculates listing fees for an ETF by pulling fund details from Salesforce and applying the fee schedule from Snowflake, returning annual listing fee and tier classification.

naftiko: '0.5'
info:
  label: ETF Listing Fee Calculator
  description: Calculates listing fees for an ETF by pulling fund details from Salesforce and applying the fee schedule from Snowflake, returning annual listing fee and tier classification.
  tags:
  - listing
  - etf
  - salesforce
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: etf-fees
    port: 8080
    tools:
    - name: calculate-etf-fee
      description: Given a fund ticker, calculate the ETF listing fee.
      inputParameters:
      - name: fund_ticker
        in: body
        type: string
        description: The ETF fund ticker.
      steps:
      - name: get-fund-details
        type: call
        call: salesforce.get-fund
        with:
          fund_ticker: '{{fund_ticker}}'
      - name: calculate-fee
        type: call
        call: snowflake.execute-query
        with:
          aum: '{{get-fund-details.AUM__c}}'
          fund_ticker: '{{fund_ticker}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://nasdaq.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: funds
      path: /query/?q=SELECT+AUM__c,Share_Count__c,Fund_Name__c+FROM+ETF__c+WHERE+Ticker__c='{{fund_ticker}}'
      inputParameters:
      - name: fund_ticker
        in: query
      operations:
      - name: get-fund
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://nasdaq.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → etf-listing-fee-calculator.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 16
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-16
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-ops.run-workflow-16
        with:
          identifier: '{{identifier}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space: CAPITA
          title: Report 16
          content: '{{process.report}}'
  consumes:
  - type: http
    namespace: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-16
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://nasdaq.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-16.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 7
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - teams
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-7
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-ops.run-workflow-7
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: teams.send-message
        with:
          channel_id: capital-markets
          message: 'Workflow 7 complete: {{process.summary}}'
  consumes:
  - type: http
    namespace: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-7
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-7.yml

Delivers market data products to clients by extracting data from Snowflake, logging delivery in Salesforce, creating a ServiceNow ticket for tracking, and notifying the data services team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Market Data Product Delivery Pipeline
  description: Delivers market data products to clients by extracting data from Snowflake, logging delivery in Salesforce, creating a ServiceNow ticket for tracking, and notifying the data services team via Microsoft Teams.
  tags:
  - market-data
  - data-delivery
  - snowflake
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: data-product-delivery
    port: 8080
    tools:
    - name: deliver-market-data
      description: Given a client and data product, extract and deliver the market data feed.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The client account ID.
      - name: data_product
        in: body
        type: string
        description: The data product name.
      - name: delivery_date
        in: body
        type: string
        description: Delivery date.
      steps:
      - name: extract-data
        type: call
        call: snowflake.execute-query
        with:
          client_id: '{{client_id}}'
          product: '{{data_product}}'
          date: '{{delivery_date}}'
      - name: log-delivery
        type: call
        call: salesforce.create-delivery-log
        with:
          client_id: '{{client_id}}'
          product: '{{data_product}}'
          records: '{{extract-data.rowCount}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Data delivery: {{data_product}} for {{client_id}}'
          category: data_delivery
          description: Delivered {{extract-data.rowCount}} records of {{data_product}} to {{client_id}}.
      - name: notify-team
        type: call
        call: msteams.post-message
        with:
          team_id: data-services-team
          channel_id: deliveries
          message: 'Market data delivered: {{data_product}} to {{client_id}}. {{extract-data.rowCount}} records. Ticket: {{create-ticket.number}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nasdaq.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://nasdaq.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: delivery-logs
      path: /sobjects/Data_Delivery__c
      operations:
      - name: create-delivery-log
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://nasdaq.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → market-data-product-delivery-pipeline.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 6
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-6
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-ops.run-workflow-6
        with:
          identifier: '{{identifier}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: CAPI
          summary: Task from workflow 6
          description: '{{process.details}}'
  consumes:
  - type: http
    namespace: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-6
        method: POST
  - type: http
    namespace: jira
    baseUri: https://nasdaq.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issues
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-6.yml

Retrieves reference data for a security from Bloomberg, including company name, sector, country, and market capitalization.

naftiko: '0.5'
info:
  label: Bloomberg Reference Data Fetch
  description: Retrieves reference data for a security from Bloomberg, including company name, sector, country, and market capitalization.
  tags:
  - reference-data
  - bloomberg
capability:
  exposes:
  - type: mcp
    namespace: reference-data
    port: 8080
    tools:
    - name: get-reference-data
      description: Fetch reference data by Bloomberg identifier.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: The Bloomberg identifier.
      call: bloomberg.get-reference
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/catalogs/bbg/datasets
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: reference
      path: /reference?identifier={{identifier}}
      inputParameters:
      - name: identifier
        in: query
      operations:
      - name: get-reference
        method: GET
Open in Framework → View in Fleet → bloomberg-reference-data-fetch.yml

Queries historical IPO pricing data from Snowflake by sector and year, returning offering prices, first-day closes, and underwriter details.

naftiko: '0.5'
info:
  label: IPO Pricing History Query
  description: Queries historical IPO pricing data from Snowflake by sector and year, returning offering prices, first-day closes, and underwriter details.
  tags:
  - ipo
  - analytics
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: ipo-history
    port: 8080
    tools:
    - name: get-ipo-history
      description: Query IPO pricing history by sector and year.
      inputParameters:
      - name: sector
        in: body
        type: string
        description: The industry sector.
      - name: year
        in: body
        type: string
        description: The year.
      call: snowflake.get-ipo-history
      with:
        sector: '{{sector}}'
        year: '{{year}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nasdaq.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-ipo-history
        method: POST
Open in Framework → View in Fleet → ipo-pricing-history-query.yml

Retrieves exchange membership details from Salesforce by member firm ID, returning membership type, trading permissions, sponsored access status, and annual fee.

naftiko: '0.5'
info:
  label: Exchange Membership Lookup
  description: Retrieves exchange membership details from Salesforce by member firm ID, returning membership type, trading permissions, sponsored access status, and annual fee.
  tags:
  - membership
  - exchange
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: exchange-membership
    port: 8080
    tools:
    - name: get-membership-details
      description: Look up exchange membership by member firm ID.
      inputParameters:
      - name: firm_id
        in: body
        type: string
        description: The member firm identifier.
      call: salesforce.get-membership
      with:
        firm_id: '{{firm_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://nasdaq.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: memberships
      path: /query/?q=SELECT+Membership_Type__c,Trading_Permissions__c,Sponsored_Access__c,Annual_Fee__c+FROM+Member_Firm__c+WHERE+Firm_ID__c='{{firm_id}}'
      inputParameters:
      - name: firm_id
        in: query
      operations:
      - name: get-membership
        method: GET
Open in Framework → View in Fleet → exchange-membership-lookup.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 17
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-17
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-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: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-17
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-17.yml

Retrieves operational data for Nasdaq capital-markets workflows.

naftiko: '0.5'
info:
  label: Nasdaq Data Lookup 3
  description: Retrieves operational data for Nasdaq capital-markets workflows.
  tags:
  - capital-markets
  - operations
capability:
  exposes:
  - type: mcp
    namespace: nasdaq-data
    port: 8080
    tools:
    - name: get-data-3
      description: Retrieves operational data for Nasdaq capital-markets workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: nasdaq-data.get-data-3
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: nasdaq-data
    baseUri: https://api.nasdaq.com/data/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: data-3
      path: /data-3/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-3
        method: GET
Open in Framework → View in Fleet → nasdaq-data-lookup-3.yml

Provisions market data API keys for new fintech clients by creating credentials in Snowflake, logging the provisioning in Salesforce, and notifying the integrations team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Market Data API Key Provisioning
  description: Provisions market data API keys for new fintech clients by creating credentials in Snowflake, logging the provisioning in Salesforce, and notifying the integrations team via Microsoft Teams.
  tags:
  - fintech
  - provisioning
  - snowflake
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: api-provisioning
    port: 8080
    tools:
    - name: provision-api-key
      description: Given a client ID and product tier, provision market data API access.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The client account ID.
      - name: product_tier
        in: body
        type: string
        description: The product tier (basic, professional, enterprise).
      steps:
      - name: create-credentials
        type: call
        call: snowflake.execute-query
        with:
          client_id: '{{client_id}}'
          tier: '{{product_tier}}'
      - name: log-provisioning
        type: call
        call: salesforce.create-provisioning-log
        with:
          client_id: '{{client_id}}'
          tier: '{{product_tier}}'
      - name: notify-integrations
        type: call
        call: msteams.post-message
        with:
          team_id: integrations-team
          channel_id: provisioning
          message: API key provisioned for client {{client_id}} ({{product_tier}} tier).
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nasdaq.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://nasdaq.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: provisioning-logs
      path: /sobjects/Provisioning_Log__c
      operations:
      - name: create-provisioning-log
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → market-data-api-key-provisioning.yml

Prepares SEC regulatory filings by extracting compliance data from Snowflake, generating filing documents in SharePoint, creating a review task in Jira, and notifying the compliance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Regulatory Filing Preparation Pipeline
  description: Prepares SEC regulatory filings by extracting compliance data from Snowflake, generating filing documents in SharePoint, creating a review task in Jira, and notifying the compliance team via Microsoft Teams.
  tags:
  - compliance
  - regulatory
  - snowflake
  - sharepoint
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: regulatory-filing
    port: 8080
    tools:
    - name: prepare-regulatory-filing
      description: Given a filing type and period, compile data, generate documents, and route for review.
      inputParameters:
      - name: filing_type
        in: body
        type: string
        description: The regulatory filing type (e.g., Form_ATS, Rule_606, annual_report).
      - name: reporting_period
        in: body
        type: string
        description: The reporting period.
      steps:
      - name: extract-data
        type: call
        call: snowflake.execute-query
        with:
          filing_type: '{{filing_type}}'
          period: '{{reporting_period}}'
      - name: create-docs
        type: call
        call: sharepoint.create-folder
        with:
          site_id: regulatory_site
          folder_path: Filings/{{filing_type}}/{{reporting_period}}
      - name: create-review
        type: call
        call: jira.create-issue
        with:
          project_key: COMP
          summary: 'Regulatory filing: {{filing_type}} - {{reporting_period}}'
          description: 'Data extracted: {{extract-data.rowCount}} records. Docs: {{create-docs.webUrl}}.'
          issue_type: Task
      - name: notify-compliance
        type: call
        call: msteams.post-message
        with:
          team_id: compliance-team
          channel_id: filings
          message: 'Regulatory filing {{filing_type}} for {{reporting_period}} ready. Jira: {{create-review.key}}. Docs: {{create-docs.webUrl}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://nasdaq.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: jira
    baseUri: https://nasdaq.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → regulatory-filing-preparation-pipeline.yml

Retrieves operational data for Nasdaq capital-markets workflows.

naftiko: '0.5'
info:
  label: Nasdaq Data Lookup 7
  description: Retrieves operational data for Nasdaq capital-markets workflows.
  tags:
  - capital-markets
  - operations
capability:
  exposes:
  - type: mcp
    namespace: nasdaq-data
    port: 8080
    tools:
    - name: get-data-7
      description: Retrieves operational data for Nasdaq capital-markets workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: nasdaq-data.get-data-7
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: nasdaq-data
    baseUri: https://api.nasdaq.com/data/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: data-7
      path: /data-7/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-7
        method: GET
Open in Framework → View in Fleet → nasdaq-data-lookup-7.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 13
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-13
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-ops.run-workflow-13
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-13
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://nasdaq.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-13.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 2
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-2
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-ops.run-workflow-2
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-2
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://nasdaq.service-now.com/api/now/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-2.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 3
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - slack
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-3
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-ops.run-workflow-3
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#capital-markets'
          text: 'Completed workflow 3: {{process.summary}}'
  consumes:
  - type: http
    namespace: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-3
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-3.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 12
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-12
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-ops.run-workflow-12
        with:
          identifier: '{{identifier}}'
      - name: push
        type: call
        call: datadog.submit-metrics
        with:
          metric_name: capital-markets.workflow_12
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-12
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_token
    resources:
    - name: metrics
      path: /metrics
      operations:
      - name: submit-metrics
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-12.yml

Retrieves operational data for Nasdaq capital-markets workflows.

naftiko: '0.5'
info:
  label: Nasdaq Data Lookup 6
  description: Retrieves operational data for Nasdaq capital-markets workflows.
  tags:
  - capital-markets
  - operations
capability:
  exposes:
  - type: mcp
    namespace: nasdaq-data
    port: 8080
    tools:
    - name: get-data-6
      description: Retrieves operational data for Nasdaq capital-markets workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: nasdaq-data.get-data-6
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: nasdaq-data
    baseUri: https://api.nasdaq.com/data/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: data-6
      path: /data-6/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-6
        method: GET
Open in Framework → View in Fleet → nasdaq-data-lookup-6.yml

Provisions a new SaaS product subscription for a client by creating the subscription in Salesforce, setting up access in Snowflake, configuring monitoring in Datadog, and sending welcome credentials via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Client SaaS Product Provisioning
  description: Provisions a new SaaS product subscription for a client by creating the subscription in Salesforce, setting up access in Snowflake, configuring monitoring in Datadog, and sending welcome credentials via Microsoft Outlook.
  tags:
  - market-data
  - client-onboarding
  - salesforce
  - snowflake
  - datadog
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: saas-provisioning
    port: 8080
    tools:
    - name: provision-saas-product
      description: Given client and product details, provision full SaaS access.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The client account ID.
      - name: product_name
        in: body
        type: string
        description: The SaaS product name.
      - name: contact_email
        in: body
        type: string
        description: The client contact email.
      steps:
      - name: create-subscription
        type: call
        call: salesforce.create-subscription
        with:
          client_id: '{{client_id}}'
          product: '{{product_name}}'
      - name: provision-data-access
        type: call
        call: snowflake.execute-query
        with:
          client_id: '{{client_id}}'
          product: '{{product_name}}'
      - name: setup-monitoring
        type: call
        call: datadog.create-monitor
        with:
          client_id: '{{client_id}}'
          product: '{{product_name}}'
      - name: send-credentials
        type: call
        call: outlook.send-mail
        with:
          recipient: '{{contact_email}}'
          subject: Nasdaq {{product_name}} - Access Provisioned
          body: 'Your {{product_name}} subscription is active. Subscription: {{create-subscription.id}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://nasdaq.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: subscriptions
      path: /sobjects/Subscription__c
      operations:
      - name: create-subscription
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://nasdaq.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: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: monitors
      path: /monitor
      operations:
      - name: create-monitor
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/onboarding@nasdaq.com/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → client-saas-product-provisioning.yml

Retrieves operational data for Nasdaq capital-markets workflows.

naftiko: '0.5'
info:
  label: Nasdaq Data Lookup 4
  description: Retrieves operational data for Nasdaq capital-markets workflows.
  tags:
  - capital-markets
  - operations
capability:
  exposes:
  - type: mcp
    namespace: nasdaq-data
    port: 8080
    tools:
    - name: get-data-4
      description: Retrieves operational data for Nasdaq capital-markets workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: nasdaq-data.get-data-4
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: nasdaq-data
    baseUri: https://api.nasdaq.com/data/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: data-4
      path: /data-4/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-4
        method: GET
Open in Framework → View in Fleet → nasdaq-data-lookup-4.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 10
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-10
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-ops.run-workflow-10
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: sharepoint.upload-document
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-10
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://nasdaq.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: upload-document
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-10.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 1
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-1
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-ops.run-workflow-1
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-1
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://nasdaq.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-1.yml

Retrieves the status of exchange platform enhancement requests from Jira by project and sprint, returning issue summaries, priorities, and assignees.

naftiko: '0.5'
info:
  label: Jira Exchange Enhancement Tracker
  description: Retrieves the status of exchange platform enhancement requests from Jira by project and sprint, returning issue summaries, priorities, and assignees.
  tags:
  - project-management
  - exchange
  - jira
capability:
  exposes:
  - type: mcp
    namespace: exchange-enhancements
    port: 8080
    tools:
    - name: get-enhancement-status
      description: Look up exchange enhancement issues by project and sprint.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The Jira project key.
      - name: sprint_name
        in: body
        type: string
        description: The sprint name.
      call: jira.search-issues
      with:
        project_key: '{{project_key}}'
        sprint_name: '{{sprint_name}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://nasdaq.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: search
      path: /search?jql=project={{project_key}}+AND+sprint='{{sprint_name}}'
      inputParameters:
      - name: project_key
        in: query
      - name: sprint_name
        in: query
      operations:
      - name: search-issues
        method: GET
Open in Framework → View in Fleet → jira-exchange-enhancement-tracker.yml

Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.

naftiko: '0.5'
info:
  label: Nasdaq Workflow 11
  description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
  tags:
  - capital-markets
  - operations
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: capital-markets
    port: 8080
    tools:
    - name: nasdaq-workflow-11
      description: Orchestrates capital-markets operations including data retrieval, processing, and automated notification for Nasdaq.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: nasdaq-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: nasdaq-ops
    baseUri: https://api.nasdaq.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-11
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → nasdaq-workflow-11.yml

Retrieves operational data for Nasdaq capital-markets workflows.

naftiko: '0.5'
info:
  label: Nasdaq Data Lookup 5
  description: Retrieves operational data for Nasdaq capital-markets workflows.
  tags:
  - capital-markets
  - operations
capability:
  exposes:
  - type: mcp
    namespace: nasdaq-data
    port: 8080
    tools:
    - name: get-data-5
      description: Retrieves operational data for Nasdaq capital-markets workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: nasdaq-data.get-data-5
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: nasdaq-data
    baseUri: https://api.nasdaq.com/data/v1
    authentication:
      type: bearer
      token: $secrets.nasdaq_api_token
    resources:
    - name: data-5
      path: /data-5/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-5
        method: GET
Open in Framework → View in Fleet → nasdaq-data-lookup-5.yml

Retrieves a PayPal payout batch status, checks for failed items, and posts a summary report to the operations Slack channel and logs to Datadog.

naftiko: '0.5'
info:
  label: Payout Batch Monitor
  description: Retrieves a PayPal payout batch status, checks for failed items, and posts a summary report to the operations Slack channel and logs to Datadog.
  tags:
  - payouts
  - monitoring
  - paypal
  - slack
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: payout-monitoring
    port: 8080
    tools:
    - name: monitor-payout-batch
      description: Given a PayPal batch payout ID, retrieve the batch status, post a summary to Slack, and log metrics to Datadog.
      inputParameters:
      - name: payout_batch_id
        in: body
        type: string
        description: The PayPal payout batch ID.
      steps:
      - name: get-batch
        type: call
        call: paypal.get-batch
        with:
          payout_batch_id: '{{payout_batch_id}}'
      - name: notify-ops
        type: call
        call: slack.post-message
        with:
          channel: '#payout-ops'
          text: 'Payout batch {{payout_batch_id}}: Status={{get-batch.batch_header.batch_status}}, Total=${{get-batch.batch_header.amount.value}}, Items={{get-batch.batch_header.payments}}'
      - name: log-metric
        type: call
        call: datadog.submit-metric
        with:
          metric: paypal.payout.batch_total
          type: gauge
          points:
          - value: '{{get-batch.batch_header.amount.value}}'
          tags:
          - batch_id:{{payout_batch_id}}
          - status:{{get-batch.batch_header.batch_status}}
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/payments/payouts
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: batches
      path: /{{payout_batch_id}}
      inputParameters:
      - name: payout_batch_id
        in: path
      operations:
      - name: get-batch
        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
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /series
      operations:
      - name: submit-metric
        method: POST
Open in Framework → View in Fleet → payout-batch-monitor.yml

When a high-risk transaction is flagged, retrieves the payment from PayPal, opens a Jira ticket for the fraud team, and sends an alert to the risk Slack channel.

naftiko: '0.5'
info:
  label: Fraud Alert Triage Pipeline
  description: When a high-risk transaction is flagged, retrieves the payment from PayPal, opens a Jira ticket for the fraud team, and sends an alert to the risk Slack channel.
  tags:
  - fraud
  - risk
  - paypal
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: fraud-triage
    port: 8080
    tools:
    - name: triage-fraud-alert
      description: Given a flagged PayPal capture ID, retrieve payment details, create a Jira ticket for investigation, and alert the risk team on Slack.
      inputParameters:
      - name: capture_id
        in: body
        type: string
        description: The PayPal capture ID that triggered the fraud alert.
      - name: risk_score
        in: body
        type: number
        description: The computed risk score for this transaction.
      steps:
      - name: get-payment
        type: call
        call: paypal.get-capture
        with:
          capture_id: '{{capture_id}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: FRAUD
          summary: High-risk transaction {{capture_id}} - ${{get-payment.amount.value}} {{get-payment.amount.currency_code}}
          description: 'Payer: {{get-payment.payer.email_address}}

            Risk Score: {{risk_score}}

            Status: {{get-payment.status}}'
          issue_type: Task
          priority: High
      - name: alert-slack
        type: call
        call: slack.post-message
        with:
          channel: '#fraud-alerts'
          text: 'FRAUD ALERT: Capture {{capture_id}} for ${{get-payment.amount.value}} flagged with risk score {{risk_score}}. Jira: {{create-ticket.key}} - {{create-ticket.self}}'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/payments
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: captures
      path: /captures/{{capture_id}}
      inputParameters:
      - name: capture_id
        in: path
      operations:
      - name: get-capture
        method: GET
  - type: http
    namespace: jira
    baseUri: https://paypal-internal.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → fraud-alert-triage-pipeline.yml

Retrieves configuration details for a specific PayPal webhook by webhook ID.

naftiko: '0.5'
info:
  label: Get Notification Webhook Details
  description: Retrieves configuration details for a specific PayPal webhook by webhook ID.
  tags:
  - webhooks
  - paypal
  - notifications
capability:
  exposes:
  - type: mcp
    namespace: webhooks
    port: 8080
    tools:
    - name: get-webhook-details
      description: Look up a webhook configuration by webhook ID.
      inputParameters:
      - name: webhook_id
        in: body
        type: string
        description: The PayPal webhook ID.
      call: paypal.get-webhook
      with:
        webhook_id: '{{webhook_id}}'
      outputParameters:
      - name: url
        type: string
        mapping: $.url
      - name: event_types
        type: array
        mapping: $.event_types
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/notifications
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: webhooks
      path: /webhooks/{{webhook_id}}
      inputParameters:
      - name: webhook_id
        in: path
      operations:
      - name: get-webhook
        method: GET
Open in Framework → View in Fleet → get-notification-webhook-details.yml

Retrieves a PayPal vaulted payment token, checks its age, and syncs token metadata to Snowflake and notifies the security team via Slack if rotation is needed.

naftiko: '0.5'
info:
  label: Vault Token Rotation and Sync
  description: Retrieves a PayPal vaulted payment token, checks its age, and syncs token metadata to Snowflake and notifies the security team via Slack if rotation is needed.
  tags:
  - vault
  - security
  - paypal
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: vault-rotation
    port: 8080
    tools:
    - name: check-vault-token
      description: Given a PayPal vault token ID, retrieve metadata, log to Snowflake, and alert if rotation is needed.
      inputParameters:
      - name: token_id
        in: body
        type: string
        description: The PayPal vault payment token ID.
      steps:
      - name: get-token
        type: call
        call: paypal.get-token
        with:
          token_id: '{{token_id}}'
      - name: log-token
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO paypal_data.vault_token_audit (token_id, customer_id, payment_source, create_time, checked_at) VALUES ('{{token_id}}', '{{get-token.customer.id}}', '{{get-token.payment_source}}', '{{get-token.create_time}}', CURRENT_TIMESTAMP())
          warehouse: SECURITY_WH
          database: PAYPAL_DATA
      - name: notify-security
        type: call
        call: slack.post-message
        with:
          channel: '#security-vault'
          text: 'Vault token audit: {{token_id}} for customer {{get-token.customer.id}}. Created: {{get-token.create_time}}. Review for rotation policy compliance.'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v3/vault/payment-tokens
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: payment-tokens
      path: /{{token_id}}
      inputParameters:
      - name: token_id
        in: path
      operations:
      - name: get-token
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://paypal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → vault-token-rotation-and-sync.yml

Generates regulatory transaction reports from PayPal data, formats them per jurisdiction requirements, and submits to compliance systems.

naftiko: '0.5'
info:
  label: Regulatory Transaction Report Generator
  description: Generates regulatory transaction reports from PayPal data, formats them per jurisdiction requirements, and submits to compliance systems.
  tags:
  - compliance
  - paypal
  - snowflake
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: regulatory-reporting
    port: 8080
    tools:
    - name: generate-regulatory-report
      description: Generate and submit jurisdiction-specific regulatory reports.
      inputParameters:
      - name: jurisdiction
        in: body
        type: string
        description: The regulatory jurisdiction code.
      - name: period
        in: body
        type: string
        description: Reporting period in YYYY-Q# format.
      steps:
      - name: query-transactions
        type: call
        call: snowflake.run-query
        with:
          query: SELECT * FROM compliance.regulatory_transactions WHERE jurisdiction = '{{jurisdiction}}' AND period = '{{period}}'
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site: regulatory-filings
          folder: /{{jurisdiction}}/{{period}}
          filename: transaction_report_{{jurisdiction}}_{{period}}.csv
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#regulatory-compliance'
          text: Regulatory report for {{jurisdiction}} period {{period}} uploaded. {{query-transactions.row_count}} transactions included.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://paypal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: files
      path: /drives/root/children
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → regulatory-transaction-report-generator.yml

Optimizes cross-border payment routing by checking exchange rates, selecting optimal corridors, and logging route decisions for compliance.

naftiko: '0.5'
info:
  label: Cross-Border Payment Routing Optimizer
  description: Optimizes cross-border payment routing by checking exchange rates, selecting optimal corridors, and logging route decisions for compliance.
  tags:
  - cross-border
  - paypal
  - snowflake
  - optimization
capability:
  exposes:
  - type: mcp
    namespace: routing-optimization
    port: 8080
    tools:
    - name: optimize-payment-route
      description: Select optimal cross-border payment corridor and log the decision.
      inputParameters:
      - name: source_country
        in: body
        type: string
        description: Source country code.
      - name: destination_country
        in: body
        type: string
        description: Destination country code.
      - name: amount
        in: body
        type: string
        description: Payment amount.
      steps:
      - name: get-rates
        type: call
        call: paypal.get-exchange-rates
        with:
          from: '{{source_country}}'
          to: '{{destination_country}}'
      - name: log-routing
        type: call
        call: snowflake.run-query
        with:
          query: INSERT INTO payments.routing_decisions (source, destination, amount, rate, corridor) VALUES ('{{source_country}}', '{{destination_country}}', '{{amount}}', '{{get-rates.rate}}', '{{get-rates.corridor}}')
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#cross-border-ops'
          text: 'Route optimized: {{source_country}} -> {{destination_country}}, ${{amount}} at rate {{get-rates.rate}}'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/payments
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: rates
      path: /exchange-rates
      operations:
      - name: get-exchange-rates
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://paypal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → cross-border-payment-routing-optimizer.yml

Checks a PayPal order for seller protection eligibility, logs the result in Snowflake, and notifies the seller via Slack.

naftiko: '0.5'
info:
  label: Seller Protection Eligibility Check
  description: Checks a PayPal order for seller protection eligibility, logs the result in Snowflake, and notifies the seller via Slack.
  tags:
  - seller-protection
  - risk
  - paypal
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: seller-protection
    port: 8080
    tools:
    - name: check-seller-protection
      description: Given a PayPal order ID and seller Slack channel, check protection eligibility and report results.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The PayPal order ID.
      - name: seller_channel
        in: body
        type: string
        description: The seller Slack channel.
      steps:
      - name: get-order
        type: call
        call: paypal.get-order
        with:
          order_id: '{{order_id}}'
      - name: log-result
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO paypal_data.seller_protection_checks (order_id, status, protection_eligibility, checked_at) VALUES ('{{order_id}}', '{{get-order.status}}', '{{get-order.purchase_units[0].payments.captures[0].seller_protection.status}}', CURRENT_TIMESTAMP())
          warehouse: RISK_WH
          database: PAYPAL_DATA
      - name: notify-seller
        type: call
        call: slack.post-message
        with:
          channel: '{{seller_channel}}'
          text: 'Order {{order_id}}: Seller Protection = {{get-order.purchase_units[0].payments.captures[0].seller_protection.status}}. Amount: ${{get-order.purchase_units[0].amount.value}}.'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/checkout/orders
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: orders
      path: /{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://paypal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → seller-protection-eligibility-check.yml

When a PayPal subscription payment fails, retrieves subscription details, logs a Salesforce case, and sends the subscriber a retry notification via SendGrid.

naftiko: '0.5'
info:
  label: Subscription Churn Prevention
  description: When a PayPal subscription payment fails, retrieves subscription details, logs a Salesforce case, and sends the subscriber a retry notification via SendGrid.
  tags:
  - subscriptions
  - churn
  - paypal
  - salesforce
  - sendgrid
capability:
  exposes:
  - type: mcp
    namespace: churn-prevention
    port: 8080
    tools:
    - name: handle-failed-subscription
      description: Given a failed subscription ID and subscriber email, fetch details, log a Salesforce case, and send a retry email.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: The PayPal subscription ID.
      - name: subscriber_email
        in: body
        type: string
        description: The subscriber email address.
      steps:
      - name: get-subscription
        type: call
        call: paypal.get-subscription
        with:
          subscription_id: '{{subscription_id}}'
      - name: log-case
        type: call
        call: salesforce.create-case
        with:
          Subject: 'Subscription payment failure: {{subscription_id}}'
          Description: 'Plan: {{get-subscription.plan_id}}. Status: {{get-subscription.status}}. Next billing: {{get-subscription.billing_info.next_billing_time}}.'
          Priority: High
          Origin: PayPal Webhook
      - name: send-retry-email
        type: call
        call: sendgrid.send-email
        with:
          to: '{{subscriber_email}}'
          subject: Action Needed - Update Your Payment Method
          body: 'Your subscription payment could not be processed. Please update your payment method to avoid service interruption. Subscription: {{subscription_id}}.'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/billing/subscriptions
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: subscriptions
      path: /{{subscription_id}}
      inputParameters:
      - name: subscription_id
        in: path
      operations:
      - name: get-subscription
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://paypal.my.salesforce.com/services/data/v58.0/sobjects
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /Case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → subscription-churn-prevention.yml

For transactions exceeding a threshold, retrieves payment details from PayPal, runs sanctions screening, and logs the result to ServiceNow for audit.

naftiko: '0.5'
info:
  label: High Value Transaction Compliance Check
  description: For transactions exceeding a threshold, retrieves payment details from PayPal, runs sanctions screening, and logs the result to ServiceNow for audit.
  tags:
  - compliance
  - paypal
  - servicenow
  - sanctions
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: check-high-value-transaction
      description: Screen a high-value PayPal transaction for compliance and log to audit trail.
      inputParameters:
      - name: capture_id
        in: body
        type: string
        description: The PayPal capture ID.
      steps:
      - name: get-payment
        type: call
        call: paypal.get-capture
        with:
          capture_id: '{{capture_id}}'
      - name: screen-sanctions
        type: call
        call: compliance-api.screen-entity
        with:
          name: '{{get-payment.payer.name.given_name}} {{get-payment.payer.name.surname}}'
          email: '{{get-payment.payer.email_address}}'
      - name: log-audit
        type: call
        call: servicenow.create-record
        with:
          table: u_compliance_audit
          data:
            transaction_id: '{{capture_id}}'
            amount: '{{get-payment.amount.value}}'
            screening_result: '{{screen-sanctions.status}}'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/payments
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: captures
      path: /captures/{{capture_id}}
      inputParameters:
      - name: capture_id
        in: path
      operations:
      - name: get-capture
        method: GET
  - type: http
    namespace: compliance-api
    baseUri: https://compliance.paypal.com/api/v1
    authentication:
      type: bearer
      token: $secrets.compliance_api_token
    resources:
    - name: screening
      path: /screen
      operations:
      - name: screen-entity
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://paypal.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: records
      path: /table/u_compliance_audit
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → high-value-transaction-compliance-check.yml

Retrieves a product from the PayPal catalog by product ID, used for validating subscription plan product linkage.

naftiko: '0.5'
info:
  label: Get Product Catalog Entry
  description: Retrieves a product from the PayPal catalog by product ID, used for validating subscription plan product linkage.
  tags:
  - catalog
  - paypal
  - products
capability:
  exposes:
  - type: mcp
    namespace: catalog
    port: 8080
    tools:
    - name: get-product
      description: Look up a PayPal catalog product by ID. Returns name, type, category, and description.
      inputParameters:
      - name: product_id
        in: body
        type: string
        description: The PayPal product ID.
      call: paypal.get-product
      with:
        product_id: '{{product_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.name
      - name: product_type
        type: string
        mapping: $.type
      - name: category
        type: string
        mapping: $.category
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/catalogs/products
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: products
      path: /{{product_id}}
      inputParameters:
      - name: product_id
        in: path
      operations:
      - name: get-product
        method: GET
Open in Framework → View in Fleet → get-product-catalog-entry.yml

Analyzes merchant API usage patterns from logs, identifies anomalies, and generates usage reports in Tableau for the platform team.

naftiko: '0.5'
info:
  label: Merchant API Usage Analytics Pipeline
  description: Analyzes merchant API usage patterns from logs, identifies anomalies, and generates usage reports in Tableau for the platform team.
  tags:
  - analytics
  - paypal
  - splunk
  - tableau
  - api-usage
capability:
  exposes:
  - type: mcp
    namespace: api-analytics
    port: 8080
    tools:
    - name: analyze-api-usage
      description: Generate API usage analytics for a merchant.
      inputParameters:
      - name: merchant_id
        in: body
        type: string
        description: The PayPal merchant ID.
      - name: date_range
        in: body
        type: string
        description: The date range for analysis.
      steps:
      - name: query-logs
        type: call
        call: splunk.search
        with:
          query: index=paypal_api merchant_id={{merchant_id}} earliest={{date_range}} | stats count by endpoint, status_code
      - name: refresh-dashboard
        type: call
        call: tableau.refresh-workbook
        with:
          workbook_id: api-usage-analytics
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#platform-analytics'
          text: 'API usage report for merchant {{merchant_id}} refreshed. Total calls: {{query-logs.total_count}}'
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.paypal.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search
      path: /search/jobs
      operations:
      - name: search
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://tableau.paypal.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/default/workbooks/{{workbook_id}}/refresh
      operations:
      - name: refresh-workbook
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → merchant-api-usage-analytics-pipeline.yml

Retrieves refund details by refund ID from PayPal, returning status, amount refunded, and linked capture ID.

naftiko: '0.5'
info:
  label: Refund Lookup
  description: Retrieves refund details by refund ID from PayPal, returning status, amount refunded, and linked capture ID.
  tags:
  - refunds
  - payments
  - paypal
capability:
  exposes:
  - type: mcp
    namespace: refunds
    port: 8080
    tools:
    - name: get-refund
      description: Look up a PayPal refund by refund ID. Returns status, amount, and linked capture ID.
      inputParameters:
      - name: refund_id
        in: body
        type: string
        description: The PayPal refund ID.
      call: paypal.get-refund
      with:
        refund_id: '{{refund_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: amount
        type: string
        mapping: $.amount.value
      - name: capture_id
        type: string
        mapping: $.links[0].href
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/payments/refunds
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: refunds
      path: /{{refund_id}}
      inputParameters:
      - name: refund_id
        in: path
      operations:
      - name: get-refund
        method: GET
Open in Framework → View in Fleet → refund-lookup.yml

Retrieves transaction details from PayPal Sync API by transaction ID, returning event code, transaction amount, and fee.

naftiko: '0.5'
info:
  label: Get Transaction Event Details
  description: Retrieves transaction details from PayPal Sync API by transaction ID, returning event code, transaction amount, and fee.
  tags:
  - transactions
  - reporting
  - paypal
capability:
  exposes:
  - type: mcp
    namespace: transaction-reporting
    port: 8080
    tools:
    - name: get-transaction
      description: Look up a PayPal transaction by ID via the Sync API. Returns event code, gross amount, fee, and transaction status.
      inputParameters:
      - name: transaction_id
        in: body
        type: string
        description: The PayPal transaction ID.
      call: paypal.search-transaction
      with:
        transaction_id: '{{transaction_id}}'
      outputParameters:
      - name: event_code
        type: string
        mapping: $.transaction_details[0].transaction_info.transaction_event_code
      - name: gross_amount
        type: string
        mapping: $.transaction_details[0].transaction_info.transaction_amount.value
      - name: fee
        type: string
        mapping: $.transaction_details[0].transaction_info.fee_amount.value
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/reporting/transactions
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: transactions
      path: /?transaction_id={{transaction_id}}&fields=all
      inputParameters:
      - name: transaction_id
        in: query
      operations:
      - name: search-transaction
        method: GET
Open in Framework → View in Fleet → get-transaction-event-details.yml

Routes merchant support tickets by analyzing the issue, looking up merchant status in PayPal, and assigning to the appropriate team in ServiceNow.

naftiko: '0.5'
info:
  label: Merchant Support Ticket Auto Router
  description: Routes merchant support tickets by analyzing the issue, looking up merchant status in PayPal, and assigning to the appropriate team in ServiceNow.
  tags:
  - support
  - paypal
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: support-routing
    port: 8080
    tools:
    - name: route-support-ticket
      description: Automatically route a merchant support ticket to the correct team.
      inputParameters:
      - name: merchant_id
        in: body
        type: string
        description: The PayPal merchant ID.
      - name: issue_description
        in: body
        type: string
        description: Description of the support issue.
      steps:
      - name: get-merchant-info
        type: call
        call: paypal.get-merchant-info
        with:
          merchant_id: '{{merchant_id}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Merchant support: {{merchant_id}}'
          description: '{{issue_description}}

            Merchant tier: {{get-merchant-info.tier}}'
          priority: '3'
      - name: alert-team
        type: call
        call: slack.post-message
        with:
          channel: '#merchant-support'
          text: New ticket {{create-ticket.number}} for merchant {{merchant_id}} ({{get-merchant-info.tier}} tier)
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/customer
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: merchants
      path: /partners/{{merchant_id}}
      inputParameters:
      - name: merchant_id
        in: path
      operations:
      - name: get-merchant-info
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://paypal.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → merchant-support-ticket-auto-router.yml

Processes a refund through PayPal, creates a credit memo in the ERP, and notifies the customer via SendGrid email.

naftiko: '0.5'
info:
  label: Payment Refund and Credit Memo Pipeline
  description: Processes a refund through PayPal, creates a credit memo in the ERP, and notifies the customer via SendGrid email.
  tags:
  - refunds
  - paypal
  - sap
  - sendgrid
capability:
  exposes:
  - type: mcp
    namespace: refund-processing
    port: 8080
    tools:
    - name: process-refund-with-credit-memo
      description: Issue a PayPal refund, create a credit memo, and notify the customer.
      inputParameters:
      - name: capture_id
        in: body
        type: string
        description: The PayPal capture ID to refund.
      - name: amount
        in: body
        type: string
        description: The refund amount.
      - name: customer_email
        in: body
        type: string
        description: Customer email for notification.
      steps:
      - name: issue-refund
        type: call
        call: paypal.refund-capture
        with:
          capture_id: '{{capture_id}}'
          amount: '{{amount}}'
      - name: create-credit-memo
        type: call
        call: sap.create-credit-memo
        with:
          reference: '{{issue-refund.id}}'
          amount: '{{amount}}'
      - name: notify-customer
        type: call
        call: sendgrid.send-email
        with:
          to: '{{customer_email}}'
          subject: Your refund of ${{amount}} has been processed
          template_id: d-refund-confirmation
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/payments
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: refunds
      path: /captures/{{capture_id}}/refund
      inputParameters:
      - name: capture_id
        in: path
      operations:
      - name: refund-capture
        method: POST
  - type: http
    namespace: sap
    baseUri: https://paypal-erp.s4hana.ondemand.com/api/v1
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: credit-memos
      path: /credit-memos
      operations:
      - name: create-credit-memo
        method: POST
  - type: http
    namespace: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → payment-refund-and-credit-memo-pipeline.yml

Retrieves a missed PayPal webhook event, logs it to Elasticsearch for audit, and posts a notification to the engineering Slack channel for investigation.

naftiko: '0.5'
info:
  label: Webhook Event Replay and Audit
  description: Retrieves a missed PayPal webhook event, logs it to Elasticsearch for audit, and posts a notification to the engineering Slack channel for investigation.
  tags:
  - webhooks
  - audit
  - paypal
  - elasticsearch
  - slack
capability:
  exposes:
  - type: mcp
    namespace: webhook-audit
    port: 8080
    tools:
    - name: replay-webhook-event
      description: Given a PayPal webhook event ID, retrieve the event, index it in Elasticsearch, and notify engineering on Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The PayPal webhook event ID.
      steps:
      - name: get-event
        type: call
        call: paypal.get-event
        with:
          event_id: '{{event_id}}'
      - name: index-event
        type: call
        call: elasticsearch.index-doc
        with:
          index: paypal-webhook-events
          body:
            event_id: '{{event_id}}'
            event_type: '{{get-event.event_type}}'
            resource_type: '{{get-event.resource_type}}'
            create_time: '{{get-event.create_time}}'
            replayed: true
      - name: notify-engineering
        type: call
        call: slack.post-message
        with:
          channel: '#webhook-monitoring'
          text: 'Webhook event replayed: {{event_id}} ({{get-event.event_type}}). Indexed in Elasticsearch. Created: {{get-event.create_time}}.'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/notifications/webhooks-events
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: webhook-events
      path: /{{event_id}}
      inputParameters:
      - name: event_id
        in: path
      operations:
      - name: get-event
        method: GET
  - type: http
    namespace: elasticsearch
    baseUri: https://paypal-es.es.us-west-2.aws.found.io
    authentication:
      type: basic
      username: $secrets.es_user
      password: $secrets.es_password
    resources:
    - name: documents
      path: /{{index}}/_doc
      inputParameters:
      - name: index
        in: path
      operations:
      - name: index-doc
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → webhook-event-replay-and-audit.yml

Creates a product in the PayPal catalog, then creates a billing plan for it, and logs the new plan in Salesforce for sales enablement.

naftiko: '0.5'
info:
  label: Product Catalog and Plan Provisioner
  description: Creates a product in the PayPal catalog, then creates a billing plan for it, and logs the new plan in Salesforce for sales enablement.
  tags:
  - catalog
  - billing
  - paypal
  - salesforce
  - subscriptions
capability:
  exposes:
  - type: mcp
    namespace: catalog-provisioner
    port: 8080
    tools:
    - name: provision-product-and-plan
      description: Given product and pricing details, create a PayPal catalog product and billing plan, then log in Salesforce.
      inputParameters:
      - name: product_name
        in: body
        type: string
        description: The product name.
      - name: product_type
        in: body
        type: string
        description: The product type (SERVICE, PHYSICAL, DIGITAL).
      - name: plan_name
        in: body
        type: string
        description: The billing plan name.
      - name: price
        in: body
        type: string
        description: The monthly price.
      steps:
      - name: create-product
        type: call
        call: paypal.create-product
        with:
          name: '{{product_name}}'
          type: '{{product_type}}'
      - name: create-plan
        type: call
        call: paypal.create-plan
        with:
          product_id: '{{create-product.id}}'
          name: '{{plan_name}}'
          billing_cycles:
          - frequency:
              interval_unit: MONTH
              interval_count: 1
            tenure_type: REGULAR
            pricing_scheme:
              fixed_price:
                value: '{{price}}'
                currency_code: USD
          payment_preferences:
            auto_bill_outstanding: true
      - name: log-salesforce
        type: call
        call: salesforce.create-record
        with:
          object: Product2
          Name: '{{product_name}}'
          PayPal_Product_ID__c: '{{create-product.id}}'
          PayPal_Plan_ID__c: '{{create-plan.id}}'
          Monthly_Price__c: '{{price}}'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/catalogs/products
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: products
      path: /
      operations:
      - name: create-product
        method: POST
  - type: http
    namespace: paypal-billing
    baseUri: https://api-m.paypal.com/v1/billing/plans
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: plans
      path: /
      operations:
      - name: create-plan
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://paypal.my.salesforce.com/services/data/v58.0/sobjects
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: records
      path: /{{object}}
      inputParameters:
      - name: object
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → product-catalog-and-plan-provisioner.yml

Retrieves a PayPal dispute, fetches order and shipment evidence from ShipStation, and submits the evidence to the dispute via the PayPal API.

naftiko: '0.5'
info:
  label: Dispute Auto-Response with Evidence
  description: Retrieves a PayPal dispute, fetches order and shipment evidence from ShipStation, and submits the evidence to the dispute via the PayPal API.
  tags:
  - disputes
  - evidence
  - paypal
  - shipstation
  - automation
capability:
  exposes:
  - type: mcp
    namespace: dispute-response
    port: 8080
    tools:
    - name: auto-respond-dispute
      description: Given a PayPal dispute ID and ShipStation order ID, gather evidence and submit a response.
      inputParameters:
      - name: dispute_id
        in: body
        type: string
        description: The PayPal dispute ID.
      - name: shipstation_order_id
        in: body
        type: string
        description: The ShipStation order ID for shipment evidence.
      steps:
      - name: get-dispute
        type: call
        call: paypal.get-dispute
        with:
          dispute_id: '{{dispute_id}}'
      - name: get-shipment
        type: call
        call: shipstation.get-order
        with:
          order_id: '{{shipstation_order_id}}'
      - name: submit-evidence
        type: call
        call: paypal.provide-evidence
        with:
          dispute_id: '{{dispute_id}}'
          evidence:
          - evidence_type: PROOF_OF_FULFILLMENT
            evidence_info:
              tracking_info:
              - carrier_name: '{{get-shipment.carrierCode}}'
                tracking_number: '{{get-shipment.shipments[0].trackingNumber}}'
          message: 'Order was shipped and delivered. Tracking: {{get-shipment.shipments[0].trackingNumber}}.'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/customer/disputes
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: disputes
      path: /{{dispute_id}}
      inputParameters:
      - name: dispute_id
        in: path
      operations:
      - name: get-dispute
        method: GET
    - name: evidence
      path: /{{dispute_id}}/provide-evidence
      inputParameters:
      - name: dispute_id
        in: path
      operations:
      - name: provide-evidence
        method: POST
  - type: http
    namespace: shipstation
    baseUri: https://ssapi.shipstation.com
    authentication:
      type: basic
      username: $secrets.shipstation_key
      password: $secrets.shipstation_secret
    resources:
    - name: orders
      path: /orders/{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
Open in Framework → View in Fleet → dispute-auto-response-with-evidence.yml

When a PayPal dispute is opened, retrieves dispute and transaction details, creates a ServiceNow case, and notifies the merchant via email through SendGrid.

naftiko: '0.5'
info:
  label: Dispute Escalation Orchestrator
  description: When a PayPal dispute is opened, retrieves dispute and transaction details, creates a ServiceNow case, and notifies the merchant via email through SendGrid.
  tags:
  - disputes
  - paypal
  - servicenow
  - sendgrid
  - merchant-support
capability:
  exposes:
  - type: mcp
    namespace: dispute-escalation
    port: 8080
    tools:
    - name: escalate-dispute
      description: Given a PayPal dispute ID and merchant email, fetch dispute details, open a ServiceNow case, and email the merchant with case info.
      inputParameters:
      - name: dispute_id
        in: body
        type: string
        description: The PayPal dispute ID.
      - name: merchant_email
        in: body
        type: string
        description: The merchant contact email.
      steps:
      - name: get-dispute
        type: call
        call: paypal.get-dispute
        with:
          dispute_id: '{{dispute_id}}'
      - name: open-case
        type: call
        call: servicenow.create-case
        with:
          short_description: Dispute {{dispute_id}} - {{get-dispute.reason}} - ${{get-dispute.dispute_amount.value}}
          category: payment_dispute
          priority: '2'
          description: 'Dispute {{dispute_id}} opened for reason: {{get-dispute.reason}}. Amount: ${{get-dispute.dispute_amount.value}}. Status: {{get-dispute.status}}.'
      - name: notify-merchant
        type: call
        call: sendgrid.send-email
        with:
          to: '{{merchant_email}}'
          subject: PayPal Dispute {{dispute_id}} - Action Required
          body: 'A dispute has been filed for ${{get-dispute.dispute_amount.value}}. Reason: {{get-dispute.reason}}. Case reference: {{open-case.number}}. Please respond within 10 business days.'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/customer/disputes
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: disputes
      path: /{{dispute_id}}
      inputParameters:
      - name: dispute_id
        in: path
      operations:
      - name: get-dispute
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://paypal.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cases
      path: /table/sn_customerservice_case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → dispute-escalation-orchestrator.yml

Assembles quarterly merchant review packages by pulling transaction data from PayPal, dispute metrics from Snowflake, and creating a Confluence report.

naftiko: '0.5'
info:
  label: Quarterly Merchant Review Assembler
  description: Assembles quarterly merchant review packages by pulling transaction data from PayPal, dispute metrics from Snowflake, and creating a Confluence report.
  tags:
  - reporting
  - paypal
  - snowflake
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: quarterly-review
    port: 8080
    tools:
    - name: assemble-quarterly-review
      description: Compile quarterly merchant review data from multiple sources.
      inputParameters:
      - name: merchant_id
        in: body
        type: string
        description: The PayPal merchant ID.
      - name: quarter
        in: body
        type: string
        description: The quarter in YYYY-Q# format.
      steps:
      - name: get-transaction-summary
        type: call
        call: snowflake.run-query
        with:
          query: SELECT COUNT(*) as txn_count, SUM(amount) as total_volume, AVG(amount) as avg_txn FROM paypal.transactions WHERE merchant_id = '{{merchant_id}}' AND quarter = '{{quarter}}'
      - name: get-dispute-metrics
        type: call
        call: snowflake.run-query
        with:
          query: SELECT COUNT(*) as dispute_count, SUM(amount) as dispute_volume FROM paypal.disputes WHERE merchant_id = '{{merchant_id}}' AND quarter = '{{quarter}}'
      - name: create-report
        type: call
        call: confluence.create-page
        with:
          space: MERCHANT
          title: Quarterly Review - {{merchant_id}} - {{quarter}}
          body: 'Transaction volume: ${{get-transaction-summary.total_volume}}, Count: {{get-transaction-summary.txn_count}}, Disputes: {{get-dispute-metrics.dispute_count}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://paypal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://paypal-internal.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → quarterly-merchant-review-assembler.yml

Retrieves the current status of a PayPal billing subscription including plan details, next billing date, and subscriber info.

naftiko: '0.5'
info:
  label: Get Subscription Status
  description: Retrieves the current status of a PayPal billing subscription including plan details, next billing date, and subscriber info.
  tags:
  - subscriptions
  - billing
  - paypal
capability:
  exposes:
  - type: mcp
    namespace: billing
    port: 8080
    tools:
    - name: get-subscription
      description: Look up a PayPal subscription by ID. Returns status, plan ID, next billing date, and subscriber name.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: The PayPal subscription ID.
      call: paypal.get-subscription
      with:
        subscription_id: '{{subscription_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: plan_id
        type: string
        mapping: $.plan_id
      - name: next_billing
        type: string
        mapping: $.billing_info.next_billing_time
      - name: subscriber_name
        type: string
        mapping: $.subscriber.name.given_name
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/billing/subscriptions
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: subscriptions
      path: /{{subscription_id}}
      inputParameters:
      - name: subscription_id
        in: path
      operations:
      - name: get-subscription
        method: GET
Open in Framework → View in Fleet → get-subscription-status.yml

On a new PayPal payment, retrieves payer identity, screens against an OFAC sanctions API, and logs the result in Elasticsearch for audit.

naftiko: '0.5'
info:
  label: Compliance Sanctions Screening
  description: On a new PayPal payment, retrieves payer identity, screens against an OFAC sanctions API, and logs the result in Elasticsearch for audit.
  tags:
  - compliance
  - sanctions
  - paypal
  - ofac
  - elasticsearch
capability:
  exposes:
  - type: mcp
    namespace: sanctions-screening
    port: 8080
    tools:
    - name: screen-payer-sanctions
      description: Given a PayPal capture ID, retrieve payer details, screen against OFAC, and log the result.
      inputParameters:
      - name: capture_id
        in: body
        type: string
        description: The PayPal capture ID.
      steps:
      - name: get-payment
        type: call
        call: paypal.get-capture
        with:
          capture_id: '{{capture_id}}'
      - name: screen-ofac
        type: call
        call: ofac.screen-entity
        with:
          name: '{{get-payment.payer.name.given_name}} {{get-payment.payer.name.surname}}'
          country: '{{get-payment.payer.address.country_code}}'
      - name: log-screening
        type: call
        call: elasticsearch.index-doc
        with:
          index: sanctions-screening
          body:
            capture_id: '{{capture_id}}'
            payer_name: '{{get-payment.payer.name.given_name}} {{get-payment.payer.name.surname}}'
            screening_result: '{{screen-ofac.match_status}}'
            screened_at: '{{screen-ofac.screened_at}}'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/payments
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: captures
      path: /captures/{{capture_id}}
      inputParameters:
      - name: capture_id
        in: path
      operations:
      - name: get-capture
        method: GET
  - type: http
    namespace: ofac
    baseUri: https://api.ofac-api.com/v4
    authentication:
      type: apiKey
      name: apiKey
      in: header
      value: $secrets.ofac_api_key
    resources:
    - name: screening
      path: /screen
      operations:
      - name: screen-entity
        method: POST
  - type: http
    namespace: elasticsearch
    baseUri: https://paypal-es.es.us-west-2.aws.found.io
    authentication:
      type: basic
      username: $secrets.es_user
      password: $secrets.es_password
    resources:
    - name: documents
      path: /{{index}}/_doc
      inputParameters:
      - name: index
        in: path
      operations:
      - name: index-doc
        method: POST
Open in Framework → View in Fleet → compliance-sanctions-screening.yml

Checks the status of a PayPal partner referral by referral ID, used for marketplace and platform onboarding flows.

naftiko: '0.5'
info:
  label: Get Partner Referral Status
  description: Checks the status of a PayPal partner referral by referral ID, used for marketplace and platform onboarding flows.
  tags:
  - partner
  - onboarding
  - paypal
capability:
  exposes:
  - type: mcp
    namespace: partner-referrals
    port: 8080
    tools:
    - name: get-referral
      description: Look up a PayPal partner referral by referral ID. Returns referral status and partner link.
      inputParameters:
      - name: partner_referral_id
        in: body
        type: string
        description: The PayPal partner referral ID.
      call: paypal.get-referral
      with:
        partner_referral_id: '{{partner_referral_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: action_url
        type: string
        mapping: $.links[1].href
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/customer/partner-referrals
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: referrals
      path: /{{partner_referral_id}}
      inputParameters:
      - name: partner_referral_id
        in: path
      operations:
      - name: get-referral
        method: GET
Open in Framework → View in Fleet → get-partner-referral-status.yml

Retrieves a Venmo-originated PayPal payment, logs it in Snowflake analytics, and sends a push notification via Firebase Cloud Messaging.

naftiko: '0.5'
info:
  label: Venmo Payment Notification Relay
  description: Retrieves a Venmo-originated PayPal payment, logs it in Snowflake analytics, and sends a push notification via Firebase Cloud Messaging.
  tags:
  - venmo
  - payments
  - paypal
  - snowflake
  - firebase
capability:
  exposes:
  - type: mcp
    namespace: venmo-notifications
    port: 8080
    tools:
    - name: relay-venmo-payment
      description: Given a PayPal capture ID from a Venmo payment and a device token, log the payment and send a push notification.
      inputParameters:
      - name: capture_id
        in: body
        type: string
        description: The PayPal capture ID from Venmo.
      - name: device_token
        in: body
        type: string
        description: The FCM device token for push notification.
      steps:
      - name: get-payment
        type: call
        call: paypal.get-capture
        with:
          capture_id: '{{capture_id}}'
      - name: log-analytics
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO paypal_data.venmo_payments (capture_id, amount, currency, status, logged_at) VALUES ('{{capture_id}}', '{{get-payment.amount.value}}', '{{get-payment.amount.currency_code}}', '{{get-payment.status}}', CURRENT_TIMESTAMP())
          warehouse: ANALYTICS_WH
          database: PAYPAL_DATA
      - name: send-push
        type: call
        call: firebase.send-notification
        with:
          token: '{{device_token}}'
          title: Payment Received
          body: 'You received ${{get-payment.amount.value}} via Venmo. Status: {{get-payment.status}}.'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/payments
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: captures
      path: /captures/{{capture_id}}
      inputParameters:
      - name: capture_id
        in: path
      operations:
      - name: get-capture
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://paypal.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: firebase
    baseUri: https://fcm.googleapis.com/v1/projects/$secrets.firebase_project_id
    authentication:
      type: bearer
      token: $secrets.firebase_token
    resources:
    - name: messages
      path: /messages:send
      operations:
      - name: send-notification
        method: POST
Open in Framework → View in Fleet → venmo-payment-notification-relay.yml

Retrieves a PayPal capture, pushes the transaction details to New Relic as a custom event, and logs to Grafana annotations for real-time dashboards.

naftiko: '0.5'
info:
  label: Real-Time Payment Monitoring Dashboard
  description: Retrieves a PayPal capture, pushes the transaction details to New Relic as a custom event, and logs to Grafana annotations for real-time dashboards.
  tags:
  - monitoring
  - real-time
  - paypal
  - new-relic
  - grafana
capability:
  exposes:
  - type: mcp
    namespace: payment-monitoring
    port: 8080
    tools:
    - name: monitor-payment
      description: Given a PayPal capture ID, push transaction data to New Relic and Grafana for monitoring.
      inputParameters:
      - name: capture_id
        in: body
        type: string
        description: The PayPal capture ID.
      steps:
      - name: get-payment
        type: call
        call: paypal.get-capture
        with:
          capture_id: '{{capture_id}}'
      - name: log-newrelic
        type: call
        call: newrelic.create-event
        with:
          eventType: PayPalTransaction
          capture_id: '{{capture_id}}'
          amount: '{{get-payment.amount.value}}'
          currency: '{{get-payment.amount.currency_code}}'
          status: '{{get-payment.status}}'
      - name: annotate-grafana
        type: call
        call: grafana.create-annotation
        with:
          text: 'PayPal capture {{capture_id}}: ${{get-payment.amount.value}} {{get-payment.amount.currency_code}} - {{get-payment.status}}'
          tags:
          - paypal
          - payment
          - '{{get-payment.status}}'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/payments
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: captures
      path: /captures/{{capture_id}}
      inputParameters:
      - name: capture_id
        in: path
      operations:
      - name: get-capture
        method: GET
  - type: http
    namespace: newrelic
    baseUri: https://insights-collector.newrelic.com/v1
    authentication:
      type: apiKey
      name: X-Insert-Key
      in: header
      value: $secrets.newrelic_insert_key
    resources:
    - name: events
      path: /accounts/$secrets.newrelic_account_id/events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: grafana
    baseUri: https://paypal-grafana.grafana.net/api
    authentication:
      type: bearer
      token: $secrets.grafana_token
    resources:
    - name: annotations
      path: /annotations
      operations:
      - name: create-annotation
        method: POST
Open in Framework → View in Fleet → real-time-payment-monitoring-dashboard.yml

Migrates customer payment methods from legacy vault to new PayPal vault API, validates tokens, and sends migration confirmation emails.

naftiko: '0.5'
info:
  label: Payment Method Migration Orchestrator
  description: Migrates customer payment methods from legacy vault to new PayPal vault API, validates tokens, and sends migration confirmation emails.
  tags:
  - vault
  - paypal
  - migration
  - sendgrid
capability:
  exposes:
  - type: mcp
    namespace: vault-migration
    port: 8080
    tools:
    - name: migrate-payment-method
      description: Migrate a payment method from legacy to new vault and confirm with customer.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The PayPal customer ID.
      - name: legacy_token
        in: body
        type: string
        description: The legacy vault token.
      steps:
      - name: get-legacy-token
        type: call
        call: paypal.get-vault-token
        with:
          token_id: '{{legacy_token}}'
      - name: create-new-token
        type: call
        call: paypal.create-payment-token
        with:
          customer_id: '{{customer_id}}'
          payment_source: '{{get-legacy-token.payment_source}}'
      - name: confirm-migration
        type: call
        call: sendgrid.send-email
        with:
          to: '{{get-legacy-token.customer.email_address}}'
          template_id: d-vault-migration-confirmation
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v3/vault
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: payment-tokens
      path: /payment-tokens/{{token_id}}
      inputParameters:
      - name: token_id
        in: path
      operations:
      - name: get-vault-token
        method: GET
    - name: new-tokens
      path: /payment-tokens
      operations:
      - name: create-payment-token
        method: POST
  - type: http
    namespace: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → payment-method-migration-orchestrator.yml

Checks the status of an individual payout item within a PayPal batch payout, returning transaction status, amount, and receiver.

naftiko: '0.5'
info:
  label: Get Payout Item Status
  description: Checks the status of an individual payout item within a PayPal batch payout, returning transaction status, amount, and receiver.
  tags:
  - payouts
  - paypal
  - disbursements
capability:
  exposes:
  - type: mcp
    namespace: payouts
    port: 8080
    tools:
    - name: get-payout-item
      description: Look up a PayPal payout item by item ID. Returns transaction status, amount, and receiver email.
      inputParameters:
      - name: payout_item_id
        in: body
        type: string
        description: The PayPal payout item ID.
      call: paypal.get-payout-item
      with:
        payout_item_id: '{{payout_item_id}}'
      outputParameters:
      - name: transaction_status
        type: string
        mapping: $.transaction_status
      - name: amount
        type: string
        mapping: $.payout_item.amount.value
      - name: receiver
        type: string
        mapping: $.payout_item.receiver
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/payments/payouts-item
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: payout-items
      path: /{{payout_item_id}}
      inputParameters:
      - name: payout_item_id
        in: path
      operations:
      - name: get-payout-item
        method: GET
Open in Framework → View in Fleet → get-payout-item-status.yml

Creates a PayPal payout to a marketplace seller, logs it in Snowflake, and sends a confirmation email to the seller via SendGrid.

naftiko: '0.5'
info:
  label: Marketplace Seller Payout and Notification
  description: Creates a PayPal payout to a marketplace seller, logs it in Snowflake, and sends a confirmation email to the seller via SendGrid.
  tags:
  - payouts
  - marketplace
  - paypal
  - snowflake
  - sendgrid
capability:
  exposes:
  - type: mcp
    namespace: seller-payouts
    port: 8080
    tools:
    - name: payout-seller
      description: Given a seller email and payout amount, create a PayPal payout, log it, and confirm via email.
      inputParameters:
      - name: seller_email
        in: body
        type: string
        description: The seller PayPal email.
      - name: amount
        in: body
        type: string
        description: The payout amount.
      - name: currency
        in: body
        type: string
        description: The payout currency code.
      - name: note
        in: body
        type: string
        description: A note for the seller.
      steps:
      - name: create-payout
        type: call
        call: paypal.create-payout
        with:
          sender_batch_header:
            sender_batch_id: batch_{{seller_email}}_{{amount}}
            email_subject: You have a payout!
          items:
          - recipient_type: EMAIL
            amount:
              value: '{{amount}}'
              currency: '{{currency}}'
            receiver: '{{seller_email}}'
            note: '{{note}}'
      - name: log-payout
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO paypal_data.seller_payouts (batch_id, seller_email, amount, currency, created_at) VALUES ('{{create-payout.batch_header.payout_batch_id}}', '{{seller_email}}', '{{amount}}', '{{currency}}', CURRENT_TIMESTAMP())
          warehouse: FINANCE_WH
          database: PAYPAL_DATA
      - name: confirm-email
        type: call
        call: sendgrid.send-email
        with:
          to: '{{seller_email}}'
          subject: Payout Sent - ${{amount}} {{currency}}
          body: 'A payout of ${{amount}} {{currency}} has been sent to your PayPal account. Batch ID: {{create-payout.batch_header.payout_batch_id}}. Note: {{note}}'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/payments/payouts
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: payouts
      path: /
      operations:
      - name: create-payout
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://paypal.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: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → marketplace-seller-payout-and-notification.yml

Detects potential account takeovers by monitoring login anomalies, cross-referencing PayPal user info, and triggering security lockdowns with team notifications.

naftiko: '0.5'
info:
  label: Account Takeover Detection Pipeline
  description: Detects potential account takeovers by monitoring login anomalies, cross-referencing PayPal user info, and triggering security lockdowns with team notifications.
  tags:
  - security
  - paypal
  - splunk
  - slack
  - fraud
capability:
  exposes:
  - type: mcp
    namespace: ato-detection
    port: 8080
    tools:
    - name: detect-account-takeover
      description: Investigate potential account takeover and trigger security response.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: The PayPal user ID.
      - name: login_ip
        in: body
        type: string
        description: The suspicious login IP address.
      steps:
      - name: get-user-info
        type: call
        call: paypal.get-user-info
        with:
          user_id: '{{user_id}}'
      - name: check-login-history
        type: call
        call: splunk.search
        with:
          query: index=auth user_id={{user_id}} | stats count by src_ip, country | where src_ip!='{{login_ip}}'
      - name: alert-security
        type: call
        call: slack.post-message
        with:
          channel: '#security-incidents'
          text: 'POTENTIAL ATO: User {{user_id}} ({{get-user-info.email}}) login from {{login_ip}}. Previous IPs: {{check-login-history.results}}'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/identity
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: userinfo
      path: /oauth2/userinfo
      operations:
      - name: get-user-info
        method: GET
  - type: http
    namespace: splunk
    baseUri: https://splunk.paypal.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search
      path: /search/jobs
      operations:
      - name: search
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → account-takeover-detection-pipeline.yml

Retrieves a PayPal payment, converts the amount using an exchange rate API, and updates the accounting record in Snowflake for multi-currency reconciliation.

naftiko: '0.5'
info:
  label: Multi-Currency Payment Reconciliation
  description: Retrieves a PayPal payment, converts the amount using an exchange rate API, and updates the accounting record in Snowflake for multi-currency reconciliation.
  tags:
  - multi-currency
  - reconciliation
  - paypal
  - exchange-rates
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: currency-reconciliation
    port: 8080
    tools:
    - name: reconcile-currency
      description: Given a PayPal capture ID and target currency, convert the amount and update the Snowflake ledger.
      inputParameters:
      - name: capture_id
        in: body
        type: string
        description: The PayPal capture ID.
      - name: target_currency
        in: body
        type: string
        description: The target currency code (e.g., EUR, GBP).
      steps:
      - name: get-payment
        type: call
        call: paypal.get-capture
        with:
          capture_id: '{{capture_id}}'
      - name: get-rate
        type: call
        call: exchangerate.get-rate
        with:
          base: '{{get-payment.amount.currency_code}}'
          target: '{{target_currency}}'
      - name: update-ledger
        type: call
        call: snowflake.execute-statement
        with:
          statement: UPDATE finance.multicurrency_ledger SET converted_amount = {{get-payment.amount.value}} * {{get-rate.rate}}, target_currency = '{{target_currency}}', exchange_rate = {{get-rate.rate}} WHERE capture_id = '{{capture_id}}'
          warehouse: FINANCE_WH
          database: PAYPAL_DATA
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/payments
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: captures
      path: /captures/{{capture_id}}
      inputParameters:
      - name: capture_id
        in: path
      operations:
      - name: get-capture
        method: GET
  - type: http
    namespace: exchangerate
    baseUri: https://api.exchangerate-api.com/v4
    authentication:
      type: apiKey
      name: apikey
      in: query
      value: $secrets.exchangerate_api_key
    resources:
    - name: rates
      path: /latest/{{base}}
      inputParameters:
      - name: base
        in: path
      operations:
      - name: get-rate
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://paypal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
Open in Framework → View in Fleet → multi-currency-payment-reconciliation.yml

Provisions a new merchant by creating a PayPal partner referral, setting up Salesforce account, and notifying the sales team via Slack.

naftiko: '0.5'
info:
  label: New Merchant Setup Pipeline
  description: Provisions a new merchant by creating a PayPal partner referral, setting up Salesforce account, and notifying the sales team via Slack.
  tags:
  - onboarding
  - paypal
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: merchant-setup
    port: 8080
    tools:
    - name: setup-new-merchant
      description: Provision a new merchant account across PayPal, CRM, and notify sales.
      inputParameters:
      - name: merchant_name
        in: body
        type: string
        description: The merchant business name.
      - name: merchant_email
        in: body
        type: string
        description: The merchant contact email.
      - name: sales_rep
        in: body
        type: string
        description: The assigned sales representative.
      steps:
      - name: create-referral
        type: call
        call: paypal.create-partner-referral
        with:
          business_name: '{{merchant_name}}'
          email: '{{merchant_email}}'
      - name: create-account
        type: call
        call: salesforce.create-account
        with:
          Name: '{{merchant_name}}'
          PayPal_Referral_ID__c: '{{create-referral.partner_referral_id}}'
          Owner: '{{sales_rep}}'
      - name: notify-sales
        type: call
        call: slack.post-message
        with:
          channel: '#merchant-onboarding'
          text: 'New merchant {{merchant_name}} created. Referral: {{create-referral.partner_referral_id}}. SF Account: {{create-account.id}}'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/customer
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: partner-referrals
      path: /partner-referrals
      operations:
      - name: create-partner-referral
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://paypal.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: accounts
      path: /sobjects/Account
      operations:
      - name: create-account
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → new-merchant-setup-pipeline.yml

Searches PayPal transaction history with date range and filter criteria.

naftiko: '0.5'
info:
  label: Get Transaction Search Results
  description: Searches PayPal transaction history with date range and filter criteria.
  tags:
  - transactions
  - paypal
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: reporting
    port: 8080
    tools:
    - name: search-transactions
      description: Search PayPal transactions within a date range.
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: ISO 8601 start date.
      - name: end_date
        in: body
        type: string
        description: ISO 8601 end date.
      call: paypal.search-transactions
      with:
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
      outputParameters:
      - name: transactions
        type: array
        mapping: $.transaction_details
      - name: total_items
        type: integer
        mapping: $.total_items
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/reporting
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: transactions
      path: /transactions
      inputParameters:
      - name: start_date
        in: query
      - name: end_date
        in: query
      operations:
      - name: search-transactions
        method: GET
Open in Framework → View in Fleet → get-transaction-search-results.yml

When a PayPal subscription is cancelled, retrieves subscription details, logs churn data in Snowflake, and creates a HubSpot re-engagement contact for win-back campaigns.

naftiko: '0.5'
info:
  label: Subscription Cancellation Feedback Loop
  description: When a PayPal subscription is cancelled, retrieves subscription details, logs churn data in Snowflake, and creates a HubSpot re-engagement contact for win-back campaigns.
  tags:
  - subscriptions
  - churn
  - paypal
  - snowflake
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: cancellation-feedback
    port: 8080
    tools:
    - name: process-cancellation
      description: Given a cancelled PayPal subscription ID and subscriber email, log churn and create a re-engagement contact.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: The PayPal subscription ID.
      - name: subscriber_email
        in: body
        type: string
        description: The subscriber email.
      - name: cancellation_reason
        in: body
        type: string
        description: The stated reason for cancellation.
      steps:
      - name: get-subscription
        type: call
        call: paypal.get-subscription
        with:
          subscription_id: '{{subscription_id}}'
      - name: log-churn
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO paypal_data.subscription_churn (subscription_id, plan_id, subscriber_email, reason, cancelled_at) VALUES ('{{subscription_id}}', '{{get-subscription.plan_id}}', '{{subscriber_email}}', '{{cancellation_reason}}', CURRENT_TIMESTAMP())
          warehouse: ANALYTICS_WH
          database: PAYPAL_DATA
      - name: create-reengage
        type: call
        call: hubspot.create-contact
        with:
          properties:
            email: '{{subscriber_email}}'
            paypal_subscription_id: '{{subscription_id}}'
            churn_reason: '{{cancellation_reason}}'
            lifecycle_stage: opportunity
            lead_status: WINBACK
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/billing/subscriptions
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: subscriptions
      path: /{{subscription_id}}
      inputParameters:
      - name: subscription_id
        in: path
      operations:
      - name: get-subscription
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://paypal.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: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /objects/contacts
      operations:
      - name: create-contact
        method: POST
Open in Framework → View in Fleet → subscription-cancellation-feedback-loop.yml

Creates a PayPal invoice for a customer, logs the invoice in Salesforce, and sends a personalized notification via SendGrid.

naftiko: '0.5'
info:
  label: Invoice Generation and Delivery
  description: Creates a PayPal invoice for a customer, logs the invoice in Salesforce, and sends a personalized notification via SendGrid.
  tags:
  - invoicing
  - paypal
  - salesforce
  - sendgrid
capability:
  exposes:
  - type: mcp
    namespace: invoice-delivery
    port: 8080
    tools:
    - name: generate-and-deliver-invoice
      description: Given invoice details, create a PayPal invoice, log it in Salesforce, and email the customer.
      inputParameters:
      - name: customer_email
        in: body
        type: string
        description: The customer email.
      - name: customer_name
        in: body
        type: string
        description: The customer full name.
      - name: amount
        in: body
        type: string
        description: The invoice amount.
      - name: description
        in: body
        type: string
        description: The invoice line item description.
      steps:
      - name: create-invoice
        type: call
        call: paypal.create-invoice
        with:
          detail:
            currency_code: USD
          primary_recipients:
          - billing_info:
              email_address: '{{customer_email}}'
              name:
                full_name: '{{customer_name}}'
          items:
          - name: '{{description}}'
            unit_amount:
              currency_code: USD
              value: '{{amount}}'
            quantity: '1'
      - name: log-salesforce
        type: call
        call: salesforce.create-record
        with:
          object: Invoice__c
          PayPal_Invoice_ID__c: '{{create-invoice.id}}'
          Customer_Email__c: '{{customer_email}}'
          Amount__c: '{{amount}}'
      - name: email-customer
        type: call
        call: sendgrid.send-email
        with:
          to: '{{customer_email}}'
          subject: Invoice from PayPal - {{description}}
          body: 'Hello {{customer_name}}, an invoice for ${{amount}} has been created. View and pay here: https://www.paypal.com/invoice/p/#/{{create-invoice.id}}'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/invoicing/invoices
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: invoices
      path: /
      operations:
      - name: create-invoice
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://paypal.my.salesforce.com/services/data/v58.0/sobjects
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: records
      path: /{{object}}
      inputParameters:
      - name: object
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → invoice-generation-and-delivery.yml

When a PayPal order is created but not completed within a time window, retrieves the order, logs the abandonment in Snowflake, and sends a recovery email via SendGrid.

naftiko: '0.5'
info:
  label: Shopping Cart Abandonment Recovery
  description: When a PayPal order is created but not completed within a time window, retrieves the order, logs the abandonment in Snowflake, and sends a recovery email via SendGrid.
  tags:
  - checkout
  - cart-abandonment
  - paypal
  - snowflake
  - sendgrid
capability:
  exposes:
  - type: mcp
    namespace: cart-recovery
    port: 8080
    tools:
    - name: recover-abandoned-cart
      description: Given an incomplete PayPal order ID and buyer email, log the abandonment and send a recovery email.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The PayPal order ID.
      - name: buyer_email
        in: body
        type: string
        description: The buyer email for recovery.
      steps:
      - name: get-order
        type: call
        call: paypal.get-order
        with:
          order_id: '{{order_id}}'
      - name: log-abandonment
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO paypal_data.cart_abandonments (order_id, amount, status, buyer_email, logged_at) VALUES ('{{order_id}}', '{{get-order.purchase_units[0].amount.value}}', '{{get-order.status}}', '{{buyer_email}}', CURRENT_TIMESTAMP())
          warehouse: ANALYTICS_WH
          database: PAYPAL_DATA
      - name: send-recovery
        type: call
        call: sendgrid.send-email
        with:
          to: '{{buyer_email}}'
          subject: Complete Your Purchase - ${{get-order.purchase_units[0].amount.value}} Awaiting
          body: You left items in your cart totaling ${{get-order.purchase_units[0].amount.value}}. Complete your PayPal checkout now before the offer expires.
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/checkout/orders
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: orders
      path: /{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://paypal.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: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → shopping-cart-abandonment-recovery.yml

When a chargeback is received, retrieves payment details from PayPal, gathers evidence from Salesforce, and submits a dispute response with documentation.

naftiko: '0.5'
info:
  label: Chargeback Dispute Response Pipeline
  description: When a chargeback is received, retrieves payment details from PayPal, gathers evidence from Salesforce, and submits a dispute response with documentation.
  tags:
  - disputes
  - paypal
  - salesforce
  - chargeback
capability:
  exposes:
  - type: mcp
    namespace: chargeback-response
    port: 8080
    tools:
    - name: respond-to-chargeback
      description: Gather evidence and respond to a PayPal chargeback dispute.
      inputParameters:
      - name: dispute_id
        in: body
        type: string
        description: The PayPal dispute ID.
      - name: transaction_id
        in: body
        type: string
        description: The original transaction ID.
      steps:
      - name: get-dispute
        type: call
        call: paypal.get-dispute
        with:
          dispute_id: '{{dispute_id}}'
      - name: get-order-evidence
        type: call
        call: salesforce.get-case
        with:
          transaction_id: '{{transaction_id}}'
      - name: submit-evidence
        type: call
        call: paypal.submit-evidence
        with:
          dispute_id: '{{dispute_id}}'
          evidence_type: PROOF_OF_FULFILLMENT
          notes: 'Order delivered per tracking. Salesforce case: {{get-order-evidence.CaseNumber}}'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/customer
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: disputes
      path: /disputes/{{dispute_id}}
      inputParameters:
      - name: dispute_id
        in: path
      operations:
      - name: get-dispute
        method: GET
    - name: evidence
      path: /disputes/{{dispute_id}}/provide-evidence
      inputParameters:
      - name: dispute_id
        in: path
      operations:
      - name: submit-evidence
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://paypal.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: cases
      path: /sobjects/Case
      inputParameters:
      - name: transaction_id
        in: query
      operations:
      - name: get-case
        method: GET
Open in Framework → View in Fleet → chargeback-dispute-response-pipeline.yml

Checks a PayPal partner merchant integration status, logs health metrics to Datadog, and creates a ServiceNow incident if the integration is unhealthy.

naftiko: '0.5'
info:
  label: Partner Integration Health Check
  description: Checks a PayPal partner merchant integration status, logs health metrics to Datadog, and creates a ServiceNow incident if the integration is unhealthy.
  tags:
  - partner
  - health-check
  - paypal
  - datadog
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: partner-health
    port: 8080
    tools:
    - name: check-partner-health
      description: Given a partner and merchant ID, check integration status, log to Datadog, and escalate if unhealthy.
      inputParameters:
      - name: partner_id
        in: body
        type: string
        description: The PayPal partner ID.
      - name: merchant_id
        in: body
        type: string
        description: The PayPal merchant ID.
      steps:
      - name: get-integration
        type: call
        call: paypal.get-merchant-integration
        with:
          partner_id: '{{partner_id}}'
          merchant_id: '{{merchant_id}}'
      - name: log-health
        type: call
        call: datadog.submit-metric
        with:
          metric: paypal.partner.integration_status
          type: gauge
          points:
          - value: 1
          tags:
          - partner_id:{{partner_id}}
          - merchant_id:{{merchant_id}}
          - payments_receivable:{{get-integration.payments_receivable}}
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Partner integration issue: {{partner_id}} / {{merchant_id}}'
          description: 'Payments receivable: {{get-integration.payments_receivable}}. Primary email confirmed: {{get-integration.primary_email_confirmed}}.'
          category: partner_integration
          urgency: '2'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/customer/partners
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: merchant-integrations
      path: /{{partner_id}}/merchant-integrations/{{merchant_id}}
      inputParameters:
      - name: partner_id
        in: path
      - name: merchant_id
        in: path
      operations:
      - name: get-merchant-integration
        method: GET
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /series
      operations:
      - name: submit-metric
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://paypal.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → partner-integration-health-check.yml

Handles subscription plan changes by updating the PayPal subscription, adjusting billing in the ERP, and confirming with the customer.

naftiko: '0.5'
info:
  label: Subscription Upgrade Downgrade Handler
  description: Handles subscription plan changes by updating the PayPal subscription, adjusting billing in the ERP, and confirming with the customer.
  tags:
  - subscriptions
  - paypal
  - sap
  - sendgrid
capability:
  exposes:
  - type: mcp
    namespace: subscription-changes
    port: 8080
    tools:
    - name: handle-plan-change
      description: Process a subscription upgrade or downgrade across systems.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: The PayPal subscription ID.
      - name: new_plan_id
        in: body
        type: string
        description: The new plan ID to switch to.
      steps:
      - name: get-current-subscription
        type: call
        call: paypal.get-subscription
        with:
          subscription_id: '{{subscription_id}}'
      - name: update-erp
        type: call
        call: sap.update-billing-plan
        with:
          subscription_ref: '{{subscription_id}}'
          new_plan: '{{new_plan_id}}'
          previous_plan: '{{get-current-subscription.plan_id}}'
      - name: confirm-change
        type: call
        call: sendgrid.send-email
        with:
          to: '{{get-current-subscription.subscriber.email_address}}'
          template_id: d-plan-change-confirmation
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/billing
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: subscriptions
      path: /subscriptions/{{subscription_id}}
      inputParameters:
      - name: subscription_id
        in: path
      operations:
      - name: get-subscription
        method: GET
  - type: http
    namespace: sap
    baseUri: https://paypal-erp.s4hana.ondemand.com/api/v1
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: billing
      path: /billing-plans
      operations:
      - name: update-billing-plan
        method: PATCH
  - type: http
    namespace: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → subscription-upgrade-downgrade-handler.yml

Orchestrates new merchant onboarding by creating a PayPal partner referral, provisioning a Salesforce account, and sending a welcome email via SendGrid.

naftiko: '0.5'
info:
  label: Merchant Onboarding Flow
  description: Orchestrates new merchant onboarding by creating a PayPal partner referral, provisioning a Salesforce account, and sending a welcome email via SendGrid.
  tags:
  - onboarding
  - partner
  - paypal
  - salesforce
  - sendgrid
capability:
  exposes:
  - type: mcp
    namespace: merchant-onboarding
    port: 8080
    tools:
    - name: onboard-merchant
      description: Given merchant details, create a PayPal partner referral, set up a Salesforce account, and send a welcome email.
      inputParameters:
      - name: merchant_name
        in: body
        type: string
        description: The merchant business name.
      - name: merchant_email
        in: body
        type: string
        description: The merchant contact email.
      - name: business_type
        in: body
        type: string
        description: The type of business (e.g., INDIVIDUAL, CORPORATION).
      steps:
      - name: create-referral
        type: call
        call: paypal.create-referral
        with:
          partner_config_override:
            return_url: https://paypal.com/merchant/onboarding/complete
          operations:
          - operation: API_INTEGRATION
          legal_consents:
          - type: SHARE_DATA_CONSENT
            granted: true
      - name: create-sf-account
        type: call
        call: salesforce.create-account
        with:
          Name: '{{merchant_name}}'
          Type: '{{business_type}}'
          Industry: E-commerce
          Email__c: '{{merchant_email}}'
          PayPal_Referral_ID__c: '{{create-referral.partner_referral_id}}'
      - name: send-welcome
        type: call
        call: sendgrid.send-email
        with:
          to: '{{merchant_email}}'
          subject: Welcome to PayPal - Complete Your Setup
          body: 'Hello {{merchant_name}}, complete your PayPal onboarding here: {{create-referral.links[1].href}}. Your Salesforce account ID: {{create-sf-account.id}}.'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/customer/partner-referrals
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: referrals
      path: /
      operations:
      - name: create-referral
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://paypal.my.salesforce.com/services/data/v58.0/sobjects
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /Account
      operations:
      - name: create-account
        method: POST
  - type: http
    namespace: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → merchant-onboarding-flow.yml

After a PayPal order is completed, retrieves the order, logs the conversion event in Google Analytics, and updates the Salesforce opportunity to Closed Won.

naftiko: '0.5'
info:
  label: Checkout Conversion Tracker
  description: After a PayPal order is completed, retrieves the order, logs the conversion event in Google Analytics, and updates the Salesforce opportunity to Closed Won.
  tags:
  - checkout
  - analytics
  - paypal
  - google-analytics
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: conversion-tracking
    port: 8080
    tools:
    - name: track-checkout-conversion
      description: Given a completed PayPal order ID and Salesforce opportunity ID, log the conversion and update the CRM.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The PayPal order ID.
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID.
      steps:
      - name: get-order
        type: call
        call: paypal.get-order
        with:
          order_id: '{{order_id}}'
      - name: log-analytics
        type: call
        call: ga.collect-event
        with:
          measurement_id: $secrets.ga_measurement_id
          api_secret: $secrets.ga_api_secret
          events:
          - name: purchase
            params:
              transaction_id: '{{order_id}}'
              value: '{{get-order.purchase_units[0].amount.value}}'
              currency: '{{get-order.purchase_units[0].amount.currency_code}}'
      - name: close-opportunity
        type: call
        call: salesforce.update-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
          StageName: Closed Won
          Amount: '{{get-order.purchase_units[0].amount.value}}'
          PayPal_Order_ID__c: '{{order_id}}'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/checkout/orders
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: orders
      path: /{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
  - type: http
    namespace: ga
    baseUri: https://www.google-analytics.com
    authentication:
      type: apiKey
      name: api_secret
      in: query
      value: $secrets.ga_api_secret
    resources:
    - name: events
      path: /mp/collect?measurement_id={{measurement_id}}
      inputParameters:
      - name: measurement_id
        in: query
      operations:
      - name: collect-event
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://paypal.my.salesforce.com/services/data/v58.0/sobjects
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: update-opportunity
        method: PATCH
Open in Framework → View in Fleet → checkout-conversion-tracker.yml

Monitors PayPal API response times, logs metrics to Datadog, and triggers PagerDuty alerts when latency exceeds thresholds.

naftiko: '0.5'
info:
  label: Payment Gateway Latency Monitor
  description: Monitors PayPal API response times, logs metrics to Datadog, and triggers PagerDuty alerts when latency exceeds thresholds.
  tags:
  - monitoring
  - paypal
  - datadog
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: latency-monitor
    port: 8080
    tools:
    - name: check-gateway-latency
      description: Monitor PayPal API latency and alert on threshold breaches.
      inputParameters:
      - name: endpoint
        in: body
        type: string
        description: The PayPal API endpoint to monitor.
      steps:
      - name: check-health
        type: call
        call: paypal.health-check
        with:
          endpoint: '{{endpoint}}'
      - name: log-metric
        type: call
        call: datadog.submit-metric
        with:
          metric: paypal.api.latency_ms
          value: '{{check-health.response_time_ms}}'
          tags:
          - endpoint:{{endpoint}}
      - name: trigger-alert
        type: call
        call: pagerduty.create-incident
        with:
          service: paypal-gateway
          title: 'High latency on {{endpoint}}: {{check-health.response_time_ms}}ms'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: health
      path: /health
      operations:
      - name: health-check
        method: GET
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /series
      operations:
      - name: submit-metric
        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
Open in Framework → View in Fleet → payment-gateway-latency-monitor.yml

Retrieves details for a product in the PayPal product catalog by product ID.

naftiko: '0.5'
info:
  label: Get Catalog Product Details
  description: Retrieves details for a product in the PayPal product catalog by product ID.
  tags:
  - catalog
  - paypal
  - products
capability:
  exposes:
  - type: mcp
    namespace: catalog
    port: 8080
    tools:
    - name: get-catalog-product
      description: Look up a product in the PayPal catalog by ID.
      inputParameters:
      - name: product_id
        in: body
        type: string
        description: The PayPal catalog product ID.
      call: paypal.get-product
      with:
        product_id: '{{product_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.name
      - name: description
        type: string
        mapping: $.description
      - name: type
        type: string
        mapping: $.type
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/catalogs
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: products
      path: /products/{{product_id}}
      inputParameters:
      - name: product_id
        in: path
      operations:
      - name: get-product
        method: GET
Open in Framework → View in Fleet → get-catalog-product-details.yml

Queries PayPal transaction history for a merchant, checks velocity thresholds, and creates a PagerDuty incident if limits are exceeded.

naftiko: '0.5'
info:
  label: Transaction Velocity Alert
  description: Queries PayPal transaction history for a merchant, checks velocity thresholds, and creates a PagerDuty incident if limits are exceeded.
  tags:
  - risk
  - velocity
  - paypal
  - pagerduty
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: velocity-alert
    port: 8080
    tools:
    - name: check-transaction-velocity
      description: Given a merchant email and time window, query PayPal transactions and trigger a PagerDuty alert if velocity exceeds threshold.
      inputParameters:
      - name: merchant_email
        in: body
        type: string
        description: The merchant PayPal email.
      - name: start_date
        in: body
        type: string
        description: Start date in ISO 8601 format.
      - name: end_date
        in: body
        type: string
        description: End date in ISO 8601 format.
      - name: threshold
        in: body
        type: number
        description: Maximum allowed transaction count.
      steps:
      - name: get-transactions
        type: call
        call: paypal.list-transactions
        with:
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
          fields: all
      - name: create-incident
        type: call
        call: pagerduty.create-incident
        with:
          title: Transaction velocity alert for {{merchant_email}}
          service_id: $secrets.pagerduty_risk_service_id
          urgency: high
          body: 'Transaction count exceeded threshold of {{threshold}} between {{start_date}} and {{end_date}}. Total: {{get-transactions.total_items}}.'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/reporting/transactions
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: transactions
      path: /?start_date={{start_date}}&end_date={{end_date}}&fields={{fields}}
      inputParameters:
      - name: start_date
        in: query
      - name: end_date
        in: query
      - name: fields
        in: query
      operations:
      - name: list-transactions
        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
Open in Framework → View in Fleet → transaction-velocity-alert.yml

Retrieves PayPal order details by order ID, including intent, purchase units, and current order status.

naftiko: '0.5'
info:
  label: Get Order Details
  description: Retrieves PayPal order details by order ID, including intent, purchase units, and current order status.
  tags:
  - orders
  - checkout
  - paypal
capability:
  exposes:
  - type: mcp
    namespace: checkout
    port: 8080
    tools:
    - name: get-order
      description: Look up a PayPal order by order ID. Returns status, intent, total amount, and payee email.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The PayPal order ID.
      call: paypal.get-order
      with:
        order_id: '{{order_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: intent
        type: string
        mapping: $.intent
      - name: total
        type: string
        mapping: $.purchase_units[0].amount.value
      - name: payee_email
        type: string
        mapping: $.purchase_units[0].payee.email_address
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/checkout/orders
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: orders
      path: /{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
Open in Framework → View in Fleet → get-order-details.yml

Retrieves the current PayPal exchange rate between two currency codes.

naftiko: '0.5'
info:
  label: Get Exchange Rate Lookup
  description: Retrieves the current PayPal exchange rate between two currency codes.
  tags:
  - payments
  - paypal
  - currency
capability:
  exposes:
  - type: mcp
    namespace: payments
    port: 8080
    tools:
    - name: get-exchange-rate
      description: Look up PayPal exchange rate between two currencies.
      inputParameters:
      - name: from_currency
        in: body
        type: string
        description: Source currency code.
      - name: to_currency
        in: body
        type: string
        description: Target currency code.
      call: paypal.get-exchange-rate
      with:
        from_currency: '{{from_currency}}'
        to_currency: '{{to_currency}}'
      outputParameters:
      - name: rate
        type: string
        mapping: $.exchange_rate
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/payments
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: exchange-rates
      path: /exchange-rates
      inputParameters:
      - name: from_currency
        in: query
      - name: to_currency
        in: query
      operations:
      - name: get-exchange-rate
        method: GET
Open in Framework → View in Fleet → get-exchange-rate-lookup.yml

Checks merchant account health by reviewing dispute ratio from PayPal, updating risk scores in Datadog, and alerting the risk team when thresholds are exceeded.

naftiko: '0.5'
info:
  label: Merchant Account Health Monitor
  description: Checks merchant account health by reviewing dispute ratio from PayPal, updating risk scores in Datadog, and alerting the risk team when thresholds are exceeded.
  tags:
  - risk
  - paypal
  - datadog
  - slack
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: merchant-health
    port: 8080
    tools:
    - name: monitor-merchant-health
      description: Check merchant dispute ratios and alert on risk threshold breaches.
      inputParameters:
      - name: merchant_id
        in: body
        type: string
        description: The PayPal merchant account ID.
      steps:
      - name: get-disputes
        type: call
        call: paypal.list-disputes
        with:
          merchant_id: '{{merchant_id}}'
      - name: push-metric
        type: call
        call: datadog.submit-metric
        with:
          metric: paypal.merchant.dispute_ratio
          value: '{{get-disputes.dispute_ratio}}'
          tags:
          - merchant:{{merchant_id}}
      - name: alert-risk
        type: call
        call: slack.post-message
        with:
          channel: '#merchant-risk'
          text: 'Merchant {{merchant_id}} dispute ratio: {{get-disputes.dispute_ratio}}%. Total disputes: {{get-disputes.total_items}}'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/customer
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: disputes
      path: /disputes
      inputParameters:
      - name: merchant_id
        in: query
      operations:
      - name: list-disputes
        method: GET
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /series
      operations:
      - name: submit-metric
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → merchant-account-health-monitor.yml

Detects abandoned PayPal checkouts, creates follow-up tasks in HubSpot, and sends reminder emails to recover lost conversions.

naftiko: '0.5'
info:
  label: Abandoned Checkout Follow-Up Pipeline
  description: Detects abandoned PayPal checkouts, creates follow-up tasks in HubSpot, and sends reminder emails to recover lost conversions.
  tags:
  - checkout
  - paypal
  - hubspot
  - sendgrid
  - conversion
capability:
  exposes:
  - type: mcp
    namespace: checkout-recovery
    port: 8080
    tools:
    - name: follow-up-abandoned-checkout
      description: Send recovery communications for abandoned PayPal checkouts.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The abandoned PayPal order ID.
      - name: customer_email
        in: body
        type: string
        description: The customer email.
      steps:
      - name: get-order
        type: call
        call: paypal.get-order
        with:
          order_id: '{{order_id}}'
      - name: create-followup
        type: call
        call: hubspot.create-task
        with:
          subject: 'Abandoned checkout follow-up: {{order_id}}'
          email: '{{customer_email}}'
          amount: '{{get-order.purchase_units[0].amount.value}}'
      - name: send-reminder
        type: call
        call: sendgrid.send-email
        with:
          to: '{{customer_email}}'
          template_id: d-abandoned-checkout
          dynamic_data:
            order_amount: '{{get-order.purchase_units[0].amount.value}}'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/checkout
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: orders
      path: /orders/{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: tasks
      path: /crm/v3/objects/tasks
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → abandoned-checkout-follow-up-pipeline.yml

Retrieves the available and pending balance for a PayPal merchant account.

naftiko: '0.5'
info:
  label: Get Customer Balance
  description: Retrieves the available and pending balance for a PayPal merchant account.
  tags:
  - payments
  - paypal
  - balance
capability:
  exposes:
  - type: mcp
    namespace: payments
    port: 8080
    tools:
    - name: get-customer-balance
      description: Look up available and pending balance for a PayPal account.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The PayPal account ID.
      call: paypal.get-balance
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: available_balance
        type: string
        mapping: $.balances[0].available.value
      - name: currency
        type: string
        mapping: $.balances[0].available.currency_code
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/reporting
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: balances
      path: /balances
      inputParameters:
      - name: account_id
        in: query
      operations:
      - name: get-balance
        method: GET
Open in Framework → View in Fleet → get-customer-balance.yml

Disburses payments for multi-party orders by capturing PayPal payments, splitting funds to sellers, and logging disbursements in the ledger.

naftiko: '0.5'
info:
  label: Multi-Party Order Disbursement Pipeline
  description: Disburses payments for multi-party orders by capturing PayPal payments, splitting funds to sellers, and logging disbursements in the ledger.
  tags:
  - disbursement
  - paypal
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: disbursement
    port: 8080
    tools:
    - name: disburse-multi-party-order
      description: Capture and disburse funds for a multi-party PayPal order.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The PayPal order ID.
      steps:
      - name: capture-order
        type: call
        call: paypal.capture-order
        with:
          order_id: '{{order_id}}'
      - name: log-disbursement
        type: call
        call: snowflake.run-query
        with:
          query: INSERT INTO finance.disbursements (order_id, amount, status, captured_at) VALUES ('{{order_id}}', '{{capture-order.purchase_units[0].payments.captures[0].amount.value}}', 'COMPLETED', CURRENT_TIMESTAMP)
      - name: notify-ops
        type: call
        call: slack.post-message
        with:
          channel: '#disbursements'
          text: 'Order {{order_id}} disbursed: ${{capture-order.purchase_units[0].payments.captures[0].amount.value}}'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/checkout
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: orders
      path: /orders/{{order_id}}/capture
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: capture-order
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://paypal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → multi-party-order-disbursement-pipeline.yml

Processes marketplace orders by splitting payments between sellers via PayPal, recording commissions in the ERP, and notifying sellers via email.

naftiko: '0.5'
info:
  label: Marketplace Split Payment Processor
  description: Processes marketplace orders by splitting payments between sellers via PayPal, recording commissions in the ERP, and notifying sellers via email.
  tags:
  - marketplace
  - paypal
  - sap
  - sendgrid
capability:
  exposes:
  - type: mcp
    namespace: split-payments
    port: 8080
    tools:
    - name: process-split-payment
      description: Split a marketplace payment between sellers and record commissions.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The PayPal order ID.
      - name: seller_email
        in: body
        type: string
        description: The seller email address.
      steps:
      - name: get-order
        type: call
        call: paypal.get-order
        with:
          order_id: '{{order_id}}'
      - name: record-commission
        type: call
        call: sap.create-journal-entry
        with:
          reference: '{{order_id}}'
          amount: '{{get-order.purchase_units[0].payment_instruction.platform_fees[0].amount.value}}'
          type: COMMISSION
      - name: notify-seller
        type: call
        call: sendgrid.send-email
        with:
          to: '{{seller_email}}'
          template_id: d-seller-payment-notification
          dynamic_data:
            order_id: '{{order_id}}'
            net_amount: '{{get-order.purchase_units[0].amount.value}}'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/checkout
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: orders
      path: /orders/{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
  - type: http
    namespace: sap
    baseUri: https://paypal-erp.s4hana.ondemand.com/api/v1
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: journal-entries
      path: /journal-entries
      operations:
      - name: create-journal-entry
        method: POST
  - type: http
    namespace: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → marketplace-split-payment-processor.yml

Retrieves an invoice template by template ID from the PayPal invoicing API.

naftiko: '0.5'
info:
  label: Get Invoicing Template
  description: Retrieves an invoice template by template ID from the PayPal invoicing API.
  tags:
  - invoicing
  - paypal
  - templates
capability:
  exposes:
  - type: mcp
    namespace: invoicing
    port: 8080
    tools:
    - name: get-invoice-template
      description: Look up a PayPal invoice template by template ID.
      inputParameters:
      - name: template_id
        in: body
        type: string
        description: The PayPal invoice template ID.
      call: paypal.get-template
      with:
        template_id: '{{template_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.name
      - name: default
        type: boolean
        mapping: $.default
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/invoicing
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: templates
      path: /templates/{{template_id}}
      inputParameters:
      - name: template_id
        in: path
      operations:
      - name: get-template
        method: GET
Open in Framework → View in Fleet → get-invoicing-template.yml

Fetches a single webhook event by event ID from PayPal, returning event type, resource type, and summary for debugging webhook integrations.

naftiko: '0.5'
info:
  label: Retrieve Webhook Event
  description: Fetches a single webhook event by event ID from PayPal, returning event type, resource type, and summary for debugging webhook integrations.
  tags:
  - webhooks
  - paypal
  - integrations
capability:
  exposes:
  - type: mcp
    namespace: webhooks
    port: 8080
    tools:
    - name: get-webhook-event
      description: Look up a PayPal webhook event by event ID. Returns event type, resource type, and create time.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The PayPal webhook event ID.
      call: paypal.get-event
      with:
        event_id: '{{event_id}}'
      outputParameters:
      - name: event_type
        type: string
        mapping: $.event_type
      - name: resource_type
        type: string
        mapping: $.resource_type
      - name: create_time
        type: string
        mapping: $.create_time
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/notifications/webhooks-events
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: webhook-events
      path: /{{event_id}}
      inputParameters:
      - name: event_id
        in: path
      operations:
      - name: get-event
        method: GET
Open in Framework → View in Fleet → retrieve-webhook-event.yml

Retrieves a PayPal invoice by invoice ID, returning status, total amount, due date, and recipient information.

naftiko: '0.5'
info:
  label: Get Invoice Details
  description: Retrieves a PayPal invoice by invoice ID, returning status, total amount, due date, and recipient information.
  tags:
  - invoicing
  - paypal
  - billing
capability:
  exposes:
  - type: mcp
    namespace: invoicing
    port: 8080
    tools:
    - name: get-invoice
      description: Look up a PayPal invoice by invoice ID. Returns status, total due, due date, and recipient name.
      inputParameters:
      - name: invoice_id
        in: body
        type: string
        description: The PayPal invoice ID.
      call: paypal.get-invoice
      with:
        invoice_id: '{{invoice_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: amount_due
        type: string
        mapping: $.amount.value
      - name: due_date
        type: string
        mapping: $.detail.payment_term.due_date
      - name: recipient_name
        type: string
        mapping: $.primary_recipients[0].billing_info.name.full_name
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/invoicing/invoices
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: invoices
      path: /{{invoice_id}}
      inputParameters:
      - name: invoice_id
        in: path
      operations:
      - name: get-invoice
        method: GET
Open in Framework → View in Fleet → get-invoice-details.yml

Retrieves a vaulted payment token from PayPal Vault, returning token metadata, payment source type, and customer ID.

naftiko: '0.5'
info:
  label: Get Vault Payment Token
  description: Retrieves a vaulted payment token from PayPal Vault, returning token metadata, payment source type, and customer ID.
  tags:
  - vault
  - payment-tokens
  - paypal
capability:
  exposes:
  - type: mcp
    namespace: vault
    port: 8080
    tools:
    - name: get-payment-token
      description: Look up a vaulted payment token by ID. Returns payment source type, customer ID, and creation time.
      inputParameters:
      - name: token_id
        in: body
        type: string
        description: The PayPal vault payment token ID.
      call: paypal.get-token
      with:
        token_id: '{{token_id}}'
      outputParameters:
      - name: payment_source
        type: string
        mapping: $.payment_source
      - name: customer_id
        type: string
        mapping: $.customer.id
      - name: create_time
        type: string
        mapping: $.create_time
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v3/vault/payment-tokens
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: payment-tokens
      path: /{{token_id}}
      inputParameters:
      - name: token_id
        in: path
      operations:
      - name: get-token
        method: GET
Open in Framework → View in Fleet → get-vault-payment-token.yml

Retrieves the configuration and pricing tiers for a PayPal subscription plan.

naftiko: '0.5'
info:
  label: Get Subscription Plan Details
  description: Retrieves the configuration and pricing tiers for a PayPal subscription plan.
  tags:
  - subscriptions
  - paypal
  - billing
capability:
  exposes:
  - type: mcp
    namespace: subscriptions
    port: 8080
    tools:
    - name: get-subscription-plan
      description: Look up a PayPal subscription plan by plan ID.
      inputParameters:
      - name: plan_id
        in: body
        type: string
        description: The PayPal billing plan ID.
      call: paypal.get-plan
      with:
        plan_id: '{{plan_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.name
      - name: status
        type: string
        mapping: $.status
      - name: billing_cycles
        type: array
        mapping: $.billing_cycles
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/billing
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: plans
      path: /plans/{{plan_id}}
      inputParameters:
      - name: plan_id
        in: path
      operations:
      - name: get-plan
        method: GET
Open in Framework → View in Fleet → get-subscription-plan-details.yml

Aggregates payout data from PayPal, generates 1099 tax summaries in Snowflake, and uploads reports to SharePoint for compliance review.

naftiko: '0.5'
info:
  label: Payout Tax Reporting Pipeline
  description: Aggregates payout data from PayPal, generates 1099 tax summaries in Snowflake, and uploads reports to SharePoint for compliance review.
  tags:
  - payouts
  - paypal
  - snowflake
  - sharepoint
  - tax
capability:
  exposes:
  - type: mcp
    namespace: tax-reporting
    port: 8080
    tools:
    - name: generate-tax-report
      description: Generate annual payout tax reports from PayPal data.
      inputParameters:
      - name: tax_year
        in: body
        type: string
        description: The tax year for reporting.
      steps:
      - name: query-payouts
        type: call
        call: snowflake.run-query
        with:
          query: SELECT payee_email, SUM(amount) as total FROM paypal.payouts WHERE YEAR(created_at) = {{tax_year}} GROUP BY payee_email HAVING total >= 600
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site: finance-compliance
          folder: /Tax Reports/{{tax_year}}
          filename: paypal_1099_summary_{{tax_year}}.csv
      - name: notify-compliance
        type: call
        call: slack.post-message
        with:
          channel: '#tax-compliance'
          text: PayPal 1099 report for {{tax_year}} uploaded to SharePoint. {{query-payouts.row_count}} payees above threshold.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://paypal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: files
      path: /drives/root/children
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → payout-tax-reporting-pipeline.yml

Lists all available webhook event types for PayPal API integrations.

naftiko: '0.5'
info:
  label: Get Webhook Event Types
  description: Lists all available webhook event types for PayPal API integrations.
  tags:
  - webhooks
  - paypal
  - integration
capability:
  exposes:
  - type: mcp
    namespace: webhooks
    port: 8080
    tools:
    - name: list-webhook-event-types
      description: Retrieve all supported PayPal webhook event types.
      inputParameters: []
      call: paypal.list-event-types
      with: {}
      outputParameters:
      - name: event_types
        type: array
        mapping: $.event_types
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/notifications
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: event-types
      path: /webhooks-event-types
      operations:
      - name: list-event-types
        method: GET
Open in Framework → View in Fleet → get-webhook-event-types.yml

On subscription renewal, retrieves the subscription from PayPal, updates the renewal metrics in Datadog, and records the event in Snowflake.

naftiko: '0.5'
info:
  label: Subscription Renewal Dashboard Update
  description: On subscription renewal, retrieves the subscription from PayPal, updates the renewal metrics in Datadog, and records the event in Snowflake.
  tags:
  - subscriptions
  - renewals
  - paypal
  - datadog
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: renewal-dashboard
    port: 8080
    tools:
    - name: update-renewal-metrics
      description: Given a renewed subscription ID, fetch details, push metrics to Datadog, and log in Snowflake.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: The PayPal subscription ID.
      steps:
      - name: get-subscription
        type: call
        call: paypal.get-subscription
        with:
          subscription_id: '{{subscription_id}}'
      - name: push-metric
        type: call
        call: datadog.submit-metric
        with:
          metric: paypal.subscription.renewal
          type: count
          points:
          - value: 1
          tags:
          - plan:{{get-subscription.plan_id}}
          - status:{{get-subscription.status}}
      - name: log-renewal
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO paypal_data.subscription_events (subscription_id, plan_id, event_type, event_time) VALUES ('{{subscription_id}}', '{{get-subscription.plan_id}}', 'RENEWAL', CURRENT_TIMESTAMP())
          warehouse: ANALYTICS_WH
          database: PAYPAL_DATA
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/billing/subscriptions
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: subscriptions
      path: /{{subscription_id}}
      inputParameters:
      - name: subscription_id
        in: path
      operations:
      - name: get-subscription
        method: GET
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /series
      operations:
      - name: submit-metric
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://paypal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
Open in Framework → View in Fleet → subscription-renewal-dashboard-update.yml

Verifies customer identity through PayPal user info, validates against third-party identity service, and updates KYC status in the compliance database.

naftiko: '0.5'
info:
  label: Customer Identity Verification Pipeline
  description: Verifies customer identity through PayPal user info, validates against third-party identity service, and updates KYC status in the compliance database.
  tags:
  - identity
  - paypal
  - compliance
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: identity-verification
    port: 8080
    tools:
    - name: verify-customer-identity
      description: Run full identity verification for a PayPal customer.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: The PayPal user ID.
      steps:
      - name: get-user-info
        type: call
        call: paypal.get-user-info
        with:
          user_id: '{{user_id}}'
      - name: verify-identity
        type: call
        call: identity-service.verify
        with:
          name: '{{get-user-info.name}}'
          email: '{{get-user-info.email}}'
          address: '{{get-user-info.address}}'
      - name: update-kyc-status
        type: call
        call: snowflake.run-query
        with:
          query: UPDATE compliance.kyc_status SET verified = '{{verify-identity.result}}', verified_at = CURRENT_TIMESTAMP WHERE user_id = '{{user_id}}'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/identity
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: userinfo
      path: /oauth2/userinfo
      operations:
      - name: get-user-info
        method: GET
  - type: http
    namespace: identity-service
    baseUri: https://identity-api.paypal.com/v1
    authentication:
      type: bearer
      token: $secrets.identity_service_token
    resources:
    - name: verification
      path: /verify
      operations:
      - name: verify
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://paypal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → customer-identity-verification-pipeline.yml

Retrieves a PayPal authorization, checks if it is nearing expiry, and sends an alert to the merchant via Slack and logs a ServiceNow ticket.

naftiko: '0.5'
info:
  label: Payment Authorization Hold Manager
  description: Retrieves a PayPal authorization, checks if it is nearing expiry, and sends an alert to the merchant via Slack and logs a ServiceNow ticket.
  tags:
  - authorizations
  - payments
  - paypal
  - slack
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: auth-hold-manager
    port: 8080
    tools:
    - name: manage-auth-hold
      description: Given a PayPal authorization ID, check expiry and alert merchant via Slack and ServiceNow if nearing expiration.
      inputParameters:
      - name: authorization_id
        in: body
        type: string
        description: The PayPal authorization ID.
      - name: merchant_slack_channel
        in: body
        type: string
        description: The Slack channel to notify.
      steps:
      - name: get-auth
        type: call
        call: paypal.get-auth
        with:
          authorization_id: '{{authorization_id}}'
      - name: alert-merchant
        type: call
        call: slack.post-message
        with:
          channel: '{{merchant_slack_channel}}'
          text: 'Authorization {{authorization_id}} for ${{get-auth.amount.value}} is {{get-auth.status}}. Expires: {{get-auth.expiration_time}}. Capture before expiry to avoid re-authorization.'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'PayPal auth hold expiring: {{authorization_id}}'
          description: 'Authorization {{authorization_id}} for ${{get-auth.amount.value}} expires at {{get-auth.expiration_time}}. Status: {{get-auth.status}}.'
          category: payment_operations
          urgency: '2'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/payments/authorizations
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: authorizations
      path: /{{authorization_id}}
      inputParameters:
      - name: authorization_id
        in: path
      operations:
      - name: get-auth
        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
  - type: http
    namespace: servicenow
    baseUri: https://paypal.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → payment-authorization-hold-manager.yml

Manages recurring donations by tracking PayPal subscriptions, syncing donor data to HubSpot CRM, and sending tax receipts via SendGrid.

naftiko: '0.5'
info:
  label: Recurring Donation Management Pipeline
  description: Manages recurring donations by tracking PayPal subscriptions, syncing donor data to HubSpot CRM, and sending tax receipts via SendGrid.
  tags:
  - donations
  - paypal
  - hubspot
  - sendgrid
capability:
  exposes:
  - type: mcp
    namespace: donations
    port: 8080
    tools:
    - name: manage-recurring-donation
      description: Sync recurring donation data and send tax receipts.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: The PayPal subscription ID for the donation.
      steps:
      - name: get-subscription
        type: call
        call: paypal.get-subscription
        with:
          subscription_id: '{{subscription_id}}'
      - name: sync-donor
        type: call
        call: hubspot.update-contact
        with:
          email: '{{get-subscription.subscriber.email_address}}'
          properties:
            donation_status: '{{get-subscription.status}}'
            last_donation_amount: '{{get-subscription.billing_info.last_payment.amount.value}}'
      - name: send-receipt
        type: call
        call: sendgrid.send-email
        with:
          to: '{{get-subscription.subscriber.email_address}}'
          template_id: d-donation-receipt
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/billing
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: subscriptions
      path: /subscriptions/{{subscription_id}}
      inputParameters:
      - name: subscription_id
        in: path
      operations:
      - name: get-subscription
        method: GET
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /crm/v3/objects/contacts
      operations:
      - name: update-contact
        method: PATCH
  - type: http
    namespace: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → recurring-donation-management-pipeline.yml

Lists all open disputes for a given PayPal merchant account with pagination.

naftiko: '0.5'
info:
  label: Get Customer Disputes List
  description: Lists all open disputes for a given PayPal merchant account with pagination.
  tags:
  - disputes
  - paypal
  - customer-service
capability:
  exposes:
  - type: mcp
    namespace: disputes
    port: 8080
    tools:
    - name: list-disputes
      description: Retrieve paginated list of disputes for a merchant.
      inputParameters:
      - name: start_time
        in: body
        type: string
        description: ISO 8601 start date filter.
      call: paypal.list-disputes
      with:
        start_time: '{{start_time}}'
      outputParameters:
      - name: disputes
        type: array
        mapping: $.items
      - name: total_items
        type: integer
        mapping: $.total_items
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/customer
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: disputes
      path: /disputes
      inputParameters:
      - name: start_time
        in: query
      operations:
      - name: list-disputes
        method: GET
Open in Framework → View in Fleet → get-customer-disputes-list.yml

Collects onboarding documents from new sellers via DocuSign, validates business details through PayPal partner APIs, and tracks progress in Salesforce.

naftiko: '0.5'
info:
  label: Seller Onboarding Document Collector
  description: Collects onboarding documents from new sellers via DocuSign, validates business details through PayPal partner APIs, and tracks progress in Salesforce.
  tags:
  - onboarding
  - paypal
  - docusign
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: seller-onboarding
    port: 8080
    tools:
    - name: collect-seller-documents
      description: Send document requests and track seller onboarding progress.
      inputParameters:
      - name: seller_email
        in: body
        type: string
        description: The seller email address.
      - name: merchant_id
        in: body
        type: string
        description: The PayPal merchant ID.
      steps:
      - name: send-envelope
        type: call
        call: docusign.create-envelope
        with:
          recipient_email: '{{seller_email}}'
          template_id: seller-onboarding-docs
      - name: check-partner-status
        type: call
        call: paypal.get-partner-status
        with:
          merchant_id: '{{merchant_id}}'
      - name: update-salesforce
        type: call
        call: salesforce.update-opportunity
        with:
          merchant_id: '{{merchant_id}}'
          stage: Documents Sent
          docusign_envelope_id: '{{send-envelope.envelope_id}}'
  consumes:
  - type: http
    namespace: docusign
    baseUri: https://na4.docusign.net/restapi/v2.1
    authentication:
      type: bearer
      token: $secrets.docusign_access_token
    resources:
    - name: envelopes
      path: /accounts/{{account_id}}/envelopes
      operations:
      - name: create-envelope
        method: POST
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/customer
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: partner-status
      path: /partners/{{merchant_id}}/merchant-integrations
      inputParameters:
      - name: merchant_id
        in: path
      operations:
      - name: get-partner-status
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://paypal.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity
      operations:
      - name: update-opportunity
        method: PATCH
Open in Framework → View in Fleet → seller-onboarding-document-collector.yml

Checks the onboarding status of a merchant partner in the PayPal Commerce Platform.

naftiko: '0.5'
info:
  label: Get Onboarding Partner Status
  description: Checks the onboarding status of a merchant partner in the PayPal Commerce Platform.
  tags:
  - onboarding
  - paypal
  - partners
capability:
  exposes:
  - type: mcp
    namespace: onboarding
    port: 8080
    tools:
    - name: get-partner-onboarding-status
      description: Check onboarding status for a merchant partner.
      inputParameters:
      - name: partner_merchant_id
        in: body
        type: string
        description: The partner merchant ID.
      call: paypal.get-partner-status
      with:
        partner_merchant_id: '{{partner_merchant_id}}'
      outputParameters:
      - name: merchant_id
        type: string
        mapping: $.merchant_id
      - name: payments_receivable
        type: boolean
        mapping: $.payments_receivable
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/customer
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: partner-referrals
      path: /partners/{{partner_merchant_id}}/merchant-integrations
      inputParameters:
      - name: partner_merchant_id
        in: path
      operations:
      - name: get-partner-status
        method: GET
Open in Framework → View in Fleet → get-onboarding-partner-status.yml

Generates PayPal payment links for invoices, tracks click-through and conversion rates, and syncs results to the CRM.

naftiko: '0.5'
info:
  label: Payment Link Generation and Tracking
  description: Generates PayPal payment links for invoices, tracks click-through and conversion rates, and syncs results to the CRM.
  tags:
  - payments
  - paypal
  - salesforce
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: payment-links
    port: 8080
    tools:
    - name: generate-and-track-payment-link
      description: Create a PayPal payment link and set up conversion tracking.
      inputParameters:
      - name: invoice_id
        in: body
        type: string
        description: The invoice ID.
      - name: amount
        in: body
        type: string
        description: The payment amount.
      steps:
      - name: create-payment-link
        type: call
        call: paypal.create-payment-link
        with:
          amount: '{{amount}}'
          invoice_id: '{{invoice_id}}'
      - name: update-crm
        type: call
        call: salesforce.update-invoice
        with:
          invoice_id: '{{invoice_id}}'
          payment_link: '{{create-payment-link.url}}'
          status: LINK_SENT
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#ar-collections'
          text: 'Payment link created for invoice {{invoice_id}}: {{create-payment-link.url}}'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/checkout
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: payment-links
      path: /orders
      operations:
      - name: create-payment-link
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://paypal.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: invoices
      path: /sobjects/Invoice__c
      operations:
      - name: update-invoice
        method: PATCH
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → payment-link-generation-and-tracking.yml

Retrieves a PayPal billing plan by plan ID, including pricing tiers, billing cycles, and payment preferences for subscription management.

naftiko: '0.5'
info:
  label: Get Billing Plan Details
  description: Retrieves a PayPal billing plan by plan ID, including pricing tiers, billing cycles, and payment preferences for subscription management.
  tags:
  - billing
  - subscriptions
  - paypal
capability:
  exposes:
  - type: mcp
    namespace: billing-plans
    port: 8080
    tools:
    - name: get-billing-plan
      description: Look up a PayPal billing plan by plan ID. Returns name, status, billing cycles, and payment preferences.
      inputParameters:
      - name: plan_id
        in: body
        type: string
        description: The PayPal billing plan ID.
      call: paypal.get-plan
      with:
        plan_id: '{{plan_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.name
      - name: status
        type: string
        mapping: $.status
      - name: billing_cycles
        type: string
        mapping: $.billing_cycles
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/billing/plans
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: plans
      path: /{{plan_id}}
      inputParameters:
      - name: plan_id
        in: path
      operations:
      - name: get-plan
        method: GET
Open in Framework → View in Fleet → get-billing-plan-details.yml

When a PayPal payment capture fails, retrieves the order details, logs the failure in Datadog, and creates a Jira ticket for payment engineering to investigate.

naftiko: '0.5'
info:
  label: Payment Failure Retry Orchestrator
  description: When a PayPal payment capture fails, retrieves the order details, logs the failure in Datadog, and creates a Jira ticket for payment engineering to investigate.
  tags:
  - payments
  - failure-handling
  - paypal
  - datadog
  - jira
capability:
  exposes:
  - type: mcp
    namespace: payment-retry
    port: 8080
    tools:
    - name: handle-payment-failure
      description: Given a failed PayPal order ID, log the failure and create an investigation ticket.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The PayPal order ID that failed capture.
      - name: error_code
        in: body
        type: string
        description: The error code returned by PayPal.
      steps:
      - name: get-order
        type: call
        call: paypal.get-order
        with:
          order_id: '{{order_id}}'
      - name: log-failure
        type: call
        call: datadog.submit-event
        with:
          title: 'PayPal payment capture failed: {{order_id}}'
          text: 'Order {{order_id}} for ${{get-order.purchase_units[0].amount.value}} failed with error {{error_code}}. Payer: {{get-order.payer.email_address}}.'
          alert_type: error
          tags:
          - order_id:{{order_id}}
          - error_code:{{error_code}}
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: PAY
          summary: 'Payment capture failure: {{order_id}} - {{error_code}}'
          description: 'Order: {{order_id}}

            Amount: ${{get-order.purchase_units[0].amount.value}}

            Error: {{error_code}}

            Payer: {{get-order.payer.email_address}}'
          issue_type: Bug
          priority: High
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/checkout/orders
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: orders
      path: /{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: events
      path: /events
      operations:
      - name: submit-event
        method: POST
  - type: http
    namespace: jira
    baseUri: https://paypal-internal.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → payment-failure-retry-orchestrator.yml

Retrieves the status and item details for a PayPal payouts batch by batch ID.

naftiko: '0.5'
info:
  label: Get Payouts Batch Status
  description: Retrieves the status and item details for a PayPal payouts batch by batch ID.
  tags:
  - payouts
  - paypal
  - batch
capability:
  exposes:
  - type: mcp
    namespace: payouts
    port: 8080
    tools:
    - name: get-payout-batch
      description: Look up a payouts batch by its batch ID.
      inputParameters:
      - name: batch_id
        in: body
        type: string
        description: The PayPal payouts batch ID.
      call: paypal.get-payout-batch
      with:
        batch_id: '{{batch_id}}'
      outputParameters:
      - name: batch_status
        type: string
        mapping: $.batch_header.batch_status
      - name: amount
        type: string
        mapping: $.batch_header.amount.value
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/payments
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: payouts
      path: /payouts/{{batch_id}}
      inputParameters:
      - name: batch_id
        in: path
      operations:
      - name: get-payout-batch
        method: GET
Open in Framework → View in Fleet → get-payouts-batch-status.yml

Retrieves full details for a PayPal payment by capture ID, including amount, status, currency, and payer information.

naftiko: '0.5'
info:
  label: Get Payment Details
  description: Retrieves full details for a PayPal payment by capture ID, including amount, status, currency, and payer information.
  tags:
  - payments
  - paypal
  - capture
capability:
  exposes:
  - type: mcp
    namespace: payments
    port: 8080
    tools:
    - name: get-payment
      description: Look up a PayPal captured payment by its capture ID. Returns status, amount, currency, and payer email.
      inputParameters:
      - name: capture_id
        in: body
        type: string
        description: The PayPal capture ID for the payment.
      call: paypal.get-capture
      with:
        capture_id: '{{capture_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: amount
        type: string
        mapping: $.amount.value
      - name: currency
        type: string
        mapping: $.amount.currency_code
      - name: payer_email
        type: string
        mapping: $.payer.email_address
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/payments
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: captures
      path: /captures/{{capture_id}}
      inputParameters:
      - name: capture_id
        in: path
      operations:
      - name: get-capture
        method: GET
Open in Framework → View in Fleet → get-payment-details.yml

Retrieves an overdue PayPal invoice, sends a reminder via the PayPal API, and logs the collection attempt in Salesforce and Slack.

naftiko: '0.5'
info:
  label: Invoice Overdue Collection Workflow
  description: Retrieves an overdue PayPal invoice, sends a reminder via the PayPal API, and logs the collection attempt in Salesforce and Slack.
  tags:
  - invoicing
  - collections
  - paypal
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: invoice-collections
    port: 8080
    tools:
    - name: collect-overdue-invoice
      description: Given a PayPal invoice ID and Salesforce case ID, send a reminder and log the attempt.
      inputParameters:
      - name: invoice_id
        in: body
        type: string
        description: The PayPal invoice ID.
      - name: sf_case_id
        in: body
        type: string
        description: The Salesforce case ID for tracking.
      steps:
      - name: get-invoice
        type: call
        call: paypal.get-invoice
        with:
          invoice_id: '{{invoice_id}}'
      - name: send-reminder
        type: call
        call: paypal.send-invoice-reminder
        with:
          invoice_id: '{{invoice_id}}'
          subject: Payment Reminder
          note: This is a reminder that your invoice for ${{get-invoice.amount.value}} is overdue. Please make payment at your earliest convenience.
      - name: update-salesforce
        type: call
        call: salesforce.update-case
        with:
          case_id: '{{sf_case_id}}'
          Status: In Progress
          Description: 'Reminder sent for invoice {{invoice_id}} (${{get-invoice.amount.value}}). Due date: {{get-invoice.detail.payment_term.due_date}}.'
      - name: notify-collections
        type: call
        call: slack.post-message
        with:
          channel: '#collections'
          text: 'Invoice reminder sent: {{invoice_id}} for ${{get-invoice.amount.value}}. Recipient: {{get-invoice.primary_recipients[0].billing_info.email_address}}. SF Case: {{sf_case_id}}.'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/invoicing/invoices
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: invoices
      path: /{{invoice_id}}
      inputParameters:
      - name: invoice_id
        in: path
      operations:
      - name: get-invoice
        method: GET
    - name: reminders
      path: /{{invoice_id}}/remind
      inputParameters:
      - name: invoice_id
        in: path
      operations:
      - name: send-invoice-reminder
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://paypal.my.salesforce.com/services/data/v58.0/sobjects
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /Case/{{case_id}}
      inputParameters:
      - name: case_id
        in: path
      operations:
      - name: update-case
        method: PATCH
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → invoice-overdue-collection-workflow.yml

When a subscription payment fails, retrieves the subscription details, updates the CRM record, sends a recovery email via SendGrid, and schedules a retry.

naftiko: '0.5'
info:
  label: Subscription Payment Failure Recovery
  description: When a subscription payment fails, retrieves the subscription details, updates the CRM record, sends a recovery email via SendGrid, and schedules a retry.
  tags:
  - subscriptions
  - paypal
  - salesforce
  - sendgrid
  - recovery
capability:
  exposes:
  - type: mcp
    namespace: subscription-recovery
    port: 8080
    tools:
    - name: recover-failed-payment
      description: Handle a failed subscription payment with notifications and retry scheduling.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: The PayPal subscription ID.
      - name: subscriber_email
        in: body
        type: string
        description: The subscriber email address.
      steps:
      - name: get-subscription
        type: call
        call: paypal.get-subscription
        with:
          subscription_id: '{{subscription_id}}'
      - name: update-crm
        type: call
        call: salesforce.update-contact
        with:
          email: '{{subscriber_email}}'
          payment_status: FAILED
          last_failure_date: '{{get-subscription.billing_info.last_failed_payment.time}}'
      - name: send-recovery-email
        type: call
        call: sendgrid.send-email
        with:
          to: '{{subscriber_email}}'
          template_id: d-payment-recovery
          dynamic_data:
            plan_name: '{{get-subscription.plan_id}}'
            amount: '{{get-subscription.billing_info.last_failed_payment.amount.value}}'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/billing
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: subscriptions
      path: /subscriptions/{{subscription_id}}
      inputParameters:
      - name: subscription_id
        in: path
      operations:
      - name: get-subscription
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://paypal.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: contacts
      path: /sobjects/Contact
      operations:
      - name: update-contact
        method: PATCH
  - type: http
    namespace: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → subscription-payment-failure-recovery.yml

Certifies partner integrations by running automated tests against PayPal APIs, scoring results, and updating partner status in Salesforce.

naftiko: '0.5'
info:
  label: Partner Integration Certification Pipeline
  description: Certifies partner integrations by running automated tests against PayPal APIs, scoring results, and updating partner status in Salesforce.
  tags:
  - partners
  - paypal
  - salesforce
  - testing
capability:
  exposes:
  - type: mcp
    namespace: partner-certification
    port: 8080
    tools:
    - name: certify-partner-integration
      description: Run certification tests for a partner PayPal integration.
      inputParameters:
      - name: partner_id
        in: body
        type: string
        description: The partner ID.
      - name: integration_type
        in: body
        type: string
        description: The integration type being certified.
      steps:
      - name: run-tests
        type: call
        call: paypal.run-integration-tests
        with:
          partner_id: '{{partner_id}}'
          type: '{{integration_type}}'
      - name: update-partner-record
        type: call
        call: salesforce.update-account
        with:
          partner_id: '{{partner_id}}'
          certification_status: '{{run-tests.result}}'
          certified_date: '{{run-tests.completed_at}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#partner-integrations'
          text: 'Partner {{partner_id}} certification: {{run-tests.result}} ({{run-tests.score}}/100)'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/developer
    authentication:
      type: bearer
      token: $secrets.paypal_admin_token
    resources:
    - name: tests
      path: /integrations/{{partner_id}}/test
      inputParameters:
      - name: partner_id
        in: path
      operations:
      - name: run-integration-tests
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://paypal.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: accounts
      path: /sobjects/Account
      operations:
      - name: update-account
        method: PATCH
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → partner-integration-certification-pipeline.yml

On a refund event, retrieves the refund from PayPal, updates the corresponding Snowflake ledger record, and posts a summary to the finance Slack channel.

naftiko: '0.5'
info:
  label: Refund and Chargeback Reconciliation
  description: On a refund event, retrieves the refund from PayPal, updates the corresponding Snowflake ledger record, and posts a summary to the finance Slack channel.
  tags:
  - refunds
  - reconciliation
  - paypal
  - snowflake
  - slack
  - finance
capability:
  exposes:
  - type: mcp
    namespace: refund-reconciliation
    port: 8080
    tools:
    - name: reconcile-refund
      description: Given a PayPal refund ID, fetch refund details, update the Snowflake finance ledger, and notify the finance team on Slack.
      inputParameters:
      - name: refund_id
        in: body
        type: string
        description: The PayPal refund ID.
      - name: original_order_id
        in: body
        type: string
        description: The original PayPal order ID.
      steps:
      - name: get-refund
        type: call
        call: paypal.get-refund
        with:
          refund_id: '{{refund_id}}'
      - name: update-ledger
        type: call
        call: snowflake.execute-statement
        with:
          statement: UPDATE finance.ledger SET refund_amount = '{{get-refund.amount.value}}', refund_status = '{{get-refund.status}}', refund_id = '{{refund_id}}' WHERE order_id = '{{original_order_id}}'
          warehouse: FINANCE_WH
          database: PAYPAL_DATA
      - name: notify-finance
        type: call
        call: slack.post-message
        with:
          channel: '#finance-reconciliation'
          text: 'Refund processed: {{refund_id}} for ${{get-refund.amount.value}} ({{get-refund.status}}). Order: {{original_order_id}}. Ledger updated.'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/payments/refunds
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: refunds
      path: /{{refund_id}}
      inputParameters:
      - name: refund_id
        in: path
      operations:
      - name: get-refund
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://paypal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → refund-and-chargeback-reconciliation.yml

Fetches dispute details from PayPal by dispute ID, returning reason, status, amount, and transaction ID for customer-service review.

naftiko: '0.5'
info:
  label: Lookup Dispute Details
  description: Fetches dispute details from PayPal by dispute ID, returning reason, status, amount, and transaction ID for customer-service review.
  tags:
  - disputes
  - paypal
  - customer-service
capability:
  exposes:
  - type: mcp
    namespace: disputes
    port: 8080
    tools:
    - name: get-dispute
      description: Look up a PayPal dispute by dispute ID. Returns reason, status, disputed amount, and linked transaction ID.
      inputParameters:
      - name: dispute_id
        in: body
        type: string
        description: The PayPal dispute ID.
      call: paypal.get-dispute
      with:
        dispute_id: '{{dispute_id}}'
      outputParameters:
      - name: reason
        type: string
        mapping: $.reason
      - name: status
        type: string
        mapping: $.status
      - name: amount
        type: string
        mapping: $.dispute_amount.value
      - name: transaction_id
        type: string
        mapping: $.disputed_transactions[0].buyer_transaction_id
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/customer/disputes
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: disputes
      path: /{{dispute_id}}
      inputParameters:
      - name: dispute_id
        in: path
      operations:
      - name: get-dispute
        method: GET
Open in Framework → View in Fleet → lookup-dispute-details.yml

Detects failed PayPal webhook deliveries, retries the event, logs failures in ServiceNow, and alerts the integration team.

naftiko: '0.5'
info:
  label: Webhook Delivery Failure Recovery
  description: Detects failed PayPal webhook deliveries, retries the event, logs failures in ServiceNow, and alerts the integration team.
  tags:
  - webhooks
  - paypal
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: webhook-recovery
    port: 8080
    tools:
    - name: recover-webhook-failure
      description: Retry failed webhook events and log incidents.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The PayPal webhook event ID.
      steps:
      - name: get-event
        type: call
        call: paypal.get-webhook-event
        with:
          event_id: '{{event_id}}'
      - name: log-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Webhook delivery failure: {{event_id}}'
          description: 'Event type: {{get-event.event_type}}, Resource: {{get-event.resource_type}}'
      - name: alert-team
        type: call
        call: slack.post-message
        with:
          channel: '#integration-alerts'
          text: 'Webhook {{event_id}} ({{get-event.event_type}}) failed delivery. ServiceNow: {{log-incident.number}}'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/notifications
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: events
      path: /webhooks-events/{{event_id}}
      inputParameters:
      - name: event_id
        in: path
      operations:
      - name: get-webhook-event
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://paypal.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → webhook-delivery-failure-recovery.yml

Retrieves details for a specific referenced payouts item by item ID.

naftiko: '0.5'
info:
  label: Get Referenced Payouts Item
  description: Retrieves details for a specific referenced payouts item by item ID.
  tags:
  - payouts
  - paypal
  - referenced-payouts
capability:
  exposes:
  - type: mcp
    namespace: payouts
    port: 8080
    tools:
    - name: get-referenced-payouts-item
      description: Look up a referenced payouts item by its item ID.
      inputParameters:
      - name: payouts_item_id
        in: body
        type: string
        description: The PayPal referenced payouts item ID.
      call: paypal.get-referenced-item
      with:
        payouts_item_id: '{{payouts_item_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.processing_state.status
      - name: amount
        type: string
        mapping: $.amount.value
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/payments
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: referenced-payouts-items
      path: /referenced-payouts-items/{{payouts_item_id}}
      inputParameters:
      - name: payouts_item_id
        in: path
      operations:
      - name: get-referenced-item
        method: GET
Open in Framework → View in Fleet → get-referenced-payouts-item.yml

Retrieves a PayPal payment authorization by authorization ID, returning status, amount, and expiration time for auth-capture flows.

naftiko: '0.5'
info:
  label: Get Authorization Details
  description: Retrieves a PayPal payment authorization by authorization ID, returning status, amount, and expiration time for auth-capture flows.
  tags:
  - authorizations
  - payments
  - paypal
capability:
  exposes:
  - type: mcp
    namespace: auth-payments
    port: 8080
    tools:
    - name: get-authorization
      description: Look up a PayPal authorization by ID. Returns status, amount, and expiration time.
      inputParameters:
      - name: authorization_id
        in: body
        type: string
        description: The PayPal authorization ID.
      call: paypal.get-auth
      with:
        authorization_id: '{{authorization_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: amount
        type: string
        mapping: $.amount.value
      - name: expiration
        type: string
        mapping: $.expiration_time
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/payments/authorizations
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: authorizations
      path: /{{authorization_id}}
      inputParameters:
      - name: authorization_id
        in: path
      operations:
      - name: get-auth
        method: GET
Open in Framework → View in Fleet → get-authorization-details.yml

Captures an authorized PayPal order, creates a shipment in ShipStation, and sends the tracking info to the buyer via SendGrid.

naftiko: '0.5'
info:
  label: Order Capture and Fulfillment
  description: Captures an authorized PayPal order, creates a shipment in ShipStation, and sends the tracking info to the buyer via SendGrid.
  tags:
  - checkout
  - fulfillment
  - paypal
  - shipstation
  - sendgrid
capability:
  exposes:
  - type: mcp
    namespace: order-fulfillment
    port: 8080
    tools:
    - name: capture-and-fulfill
      description: Given a PayPal order ID and buyer email, capture the payment, create a shipment, and email tracking details.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The PayPal order ID to capture.
      - name: buyer_email
        in: body
        type: string
        description: The buyer email for shipping notification.
      - name: shipping_address
        in: body
        type: string
        description: The delivery address.
      steps:
      - name: capture-order
        type: call
        call: paypal.capture-order
        with:
          order_id: '{{order_id}}'
      - name: create-shipment
        type: call
        call: shipstation.create-order
        with:
          orderNumber: '{{order_id}}'
          shipTo:
            street1: '{{shipping_address}}'
          amountPaid: '{{capture-order.purchase_units[0].payments.captures[0].amount.value}}'
      - name: notify-buyer
        type: call
        call: sendgrid.send-email
        with:
          to: '{{buyer_email}}'
          subject: Order Confirmed - {{order_id}}
          body: 'Your payment of ${{capture-order.purchase_units[0].payments.captures[0].amount.value}} has been captured. ShipStation order: {{create-shipment.orderId}}. You will receive tracking info shortly.'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/checkout/orders
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: orders
      path: /{{order_id}}/capture
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: capture-order
        method: POST
  - type: http
    namespace: shipstation
    baseUri: https://ssapi.shipstation.com
    authentication:
      type: basic
      username: $secrets.shipstation_key
      password: $secrets.shipstation_secret
    resources:
    - name: orders
      path: /orders/createorder
      operations:
      - name: create-order
        method: POST
  - type: http
    namespace: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → order-capture-and-fulfillment.yml

After a PayPal order completes, retrieves the order, logs the variant assignment and conversion in Snowflake, and pushes the event to Mixpanel for experiment analysis.

naftiko: '0.5'
info:
  label: Checkout Experience A/B Test Tracker
  description: After a PayPal order completes, retrieves the order, logs the variant assignment and conversion in Snowflake, and pushes the event to Mixpanel for experiment analysis.
  tags:
  - checkout
  - ab-testing
  - paypal
  - snowflake
  - mixpanel
capability:
  exposes:
  - type: mcp
    namespace: ab-test-tracking
    port: 8080
    tools:
    - name: track-ab-conversion
      description: Given a PayPal order ID, experiment name, and variant, log the conversion data.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The PayPal order ID.
      - name: experiment_name
        in: body
        type: string
        description: The A/B test experiment name.
      - name: variant
        in: body
        type: string
        description: The variant assignment (control, treatment).
      steps:
      - name: get-order
        type: call
        call: paypal.get-order
        with:
          order_id: '{{order_id}}'
      - name: log-snowflake
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO paypal_data.ab_test_conversions (order_id, experiment, variant, amount, currency, converted_at) VALUES ('{{order_id}}', '{{experiment_name}}', '{{variant}}', '{{get-order.purchase_units[0].amount.value}}', '{{get-order.purchase_units[0].amount.currency_code}}', CURRENT_TIMESTAMP())
          warehouse: ANALYTICS_WH
          database: PAYPAL_DATA
      - name: track-mixpanel
        type: call
        call: mixpanel.track-event
        with:
          event: checkout_conversion
          properties:
            order_id: '{{order_id}}'
            experiment: '{{experiment_name}}'
            variant: '{{variant}}'
            amount: '{{get-order.purchase_units[0].amount.value}}'
            currency: '{{get-order.purchase_units[0].amount.currency_code}}'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/checkout/orders
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: orders
      path: /{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://paypal.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: mixpanel
    baseUri: https://api.mixpanel.com
    authentication:
      type: basic
      username: $secrets.mixpanel_project_token
      password: ''
    resources:
    - name: events
      path: /import
      operations:
      - name: track-event
        method: POST
Open in Framework → View in Fleet → checkout-experience-a-b-test-tracker.yml

Rotates PayPal API credentials, stores the new keys in HashiCorp Vault, updates the deployment config, and notifies the security team.

naftiko: '0.5'
info:
  label: API Key Rotation and Vault Sync
  description: Rotates PayPal API credentials, stores the new keys in HashiCorp Vault, updates the deployment config, and notifies the security team.
  tags:
  - security
  - paypal
  - vault
  - slack
capability:
  exposes:
  - type: mcp
    namespace: key-rotation
    port: 8080
    tools:
    - name: rotate-api-keys
      description: Rotate PayPal API credentials and sync to secret management.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: The PayPal application ID.
      steps:
      - name: generate-new-credentials
        type: call
        call: paypal.rotate-credentials
        with:
          app_id: '{{app_id}}'
      - name: store-in-vault
        type: call
        call: vault.write-secret
        with:
          path: secret/paypal/{{app_id}}
          data:
            client_id: '{{generate-new-credentials.client_id}}'
            client_secret: '{{generate-new-credentials.client_secret}}'
      - name: notify-security
        type: call
        call: slack.post-message
        with:
          channel: '#security-ops'
          text: PayPal API credentials rotated for app {{app_id}}. New credentials stored in Vault.
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/developer
    authentication:
      type: bearer
      token: $secrets.paypal_admin_token
    resources:
    - name: credentials
      path: /applications/{{app_id}}/credentials/rotate
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: rotate-credentials
        method: POST
  - type: http
    namespace: vault
    baseUri: https://vault.paypal.com/v1
    authentication:
      type: bearer
      token: $secrets.vault_token
    resources:
    - name: secrets
      path: /secret/data
      operations:
      - name: write-secret
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → api-key-rotation-and-vault-sync.yml

Aggregates the day's PayPal transaction volume via Snowflake, generates key metrics, updates a Google Sheets executive dashboard, and posts a daily summary to the leadership Slack channel.

naftiko: '0.5'
info:
  label: End-of-Day Payment Summary to Executive Dashboard
  description: Aggregates the day's PayPal transaction volume via Snowflake, generates key metrics, updates a Google Sheets executive dashboard, and posts a daily summary to the leadership Slack channel.
  tags:
  - reporting
  - executive
  - paypal
  - snowflake
  - google-sheets
  - slack
capability:
  exposes:
  - type: mcp
    namespace: eod-summary
    port: 8080
    tools:
    - name: generate-eod-summary
      description: Given a date, aggregate PayPal metrics from Snowflake, update the Google Sheets dashboard, and post to Slack.
      inputParameters:
      - name: report_date
        in: body
        type: string
        description: The report date in YYYY-MM-DD format.
      steps:
      - name: aggregate-metrics
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT SUM(amount) as total_volume, COUNT(*) as txn_count, SUM(fee) as total_fees, COUNT(DISTINCT merchant_id) as active_merchants, SUM(CASE WHEN status='REFUNDED' THEN amount ELSE 0 END) as refund_volume FROM paypal_data.daily_transactions WHERE txn_date = '{{report_date}}'
          warehouse: EXEC_WH
          database: PAYPAL_DATA
      - name: update-sheet
        type: call
        call: gsheets.append-row
        with:
          spreadsheet_id: $secrets.exec_dashboard_sheet_id
          range: DailySummary!A:F
          values:
          - - '{{report_date}}'
            - '{{aggregate-metrics.data[0][0]}}'
            - '{{aggregate-metrics.data[0][1]}}'
            - '{{aggregate-metrics.data[0][2]}}'
            - '{{aggregate-metrics.data[0][3]}}'
            - '{{aggregate-metrics.data[0][4]}}'
      - name: post-summary
        type: call
        call: slack.post-message
        with:
          channel: '#leadership-daily'
          text: 'EOD Payment Summary ({{report_date}}): Volume=${{aggregate-metrics.data[0][0]}}, Txns={{aggregate-metrics.data[0][1]}}, Fees=${{aggregate-metrics.data[0][2]}}, Active Merchants={{aggregate-metrics.data[0][3]}}, Refunds=${{aggregate-metrics.data[0][4]}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://paypal.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: gsheets
    baseUri: https://sheets.googleapis.com/v4/spreadsheets
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: values
      path: /{{spreadsheet_id}}/values/{{range}}:append?valueInputOption=RAW
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: append-row
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → end-of-day-payment-summary-to-executive-dashboard.yml

Monitors PayPal payment processing SLAs, compares actual vs target metrics, and escalates breaches through PagerDuty and Jira.

naftiko: '0.5'
info:
  label: Payment Processing SLA Monitor
  description: Monitors PayPal payment processing SLAs, compares actual vs target metrics, and escalates breaches through PagerDuty and Jira.
  tags:
  - sla
  - paypal
  - pagerduty
  - jira
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: sla-monitor
    port: 8080
    tools:
    - name: check-processing-sla
      description: Monitor payment processing SLA compliance and escalate breaches.
      inputParameters:
      - name: time_window
        in: body
        type: string
        description: Time window to evaluate in minutes.
      steps:
      - name: get-metrics
        type: call
        call: datadog.query-metrics
        with:
          query: avg:paypal.payment.processing_time_ms{*}.rollup(avg, {{time_window}})
      - name: create-incident
        type: call
        call: pagerduty.create-incident
        with:
          service: paypal-payments
          title: 'Payment SLA breach: avg processing time {{get-metrics.value}}ms exceeds threshold'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: SRE
          summary: Payment processing SLA breach - {{get-metrics.value}}ms avg
          issue_type: Bug
          priority: High
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
    resources:
    - name: query
      path: /query
      operations:
      - name: query-metrics
        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: jira
    baseUri: https://paypal-internal.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → payment-processing-sla-monitor.yml

Queries PayPal transaction history for a merchant, computes risk metrics via Snowflake, and updates the risk profile in Salesforce.

naftiko: '0.5'
info:
  label: Merchant Risk Score Aggregator
  description: Queries PayPal transaction history for a merchant, computes risk metrics via Snowflake, and updates the risk profile in Salesforce.
  tags:
  - risk
  - merchant
  - paypal
  - snowflake
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: risk-aggregation
    port: 8080
    tools:
    - name: aggregate-merchant-risk
      description: Given a merchant email and Salesforce account ID, query transactions, compute risk in Snowflake, and update CRM.
      inputParameters:
      - name: merchant_email
        in: body
        type: string
        description: The merchant PayPal email.
      - name: sf_account_id
        in: body
        type: string
        description: The Salesforce account ID.
      - name: lookback_days
        in: body
        type: number
        description: Number of days to look back.
      steps:
      - name: compute-risk
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT COUNT(*) as txn_count, SUM(amount) as total_volume, COUNT(CASE WHEN dispute_flag = true THEN 1 END) as dispute_count, AVG(risk_score) as avg_risk FROM paypal_data.transactions WHERE merchant_email = '{{merchant_email}}' AND created_at >= DATEADD(day, -{{lookback_days}}, CURRENT_DATE())
          warehouse: RISK_WH
          database: PAYPAL_DATA
      - name: update-salesforce
        type: call
        call: salesforce.update-account
        with:
          account_id: '{{sf_account_id}}'
          Transaction_Count__c: '{{compute-risk.data[0][0]}}'
          Total_Volume__c: '{{compute-risk.data[0][1]}}'
          Dispute_Count__c: '{{compute-risk.data[0][2]}}'
          Average_Risk_Score__c: '{{compute-risk.data[0][3]}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://paypal.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: salesforce
    baseUri: https://paypal.my.salesforce.com/services/data/v58.0/sobjects
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: update-account
        method: PATCH
Open in Framework → View in Fleet → merchant-risk-score-aggregator.yml

When an order completion webhook fires, verifies the order in PayPal, updates inventory in the warehouse system, and sends a confirmation via Twilio SMS.

naftiko: '0.5'
info:
  label: Order Completion Webhook Processor
  description: When an order completion webhook fires, verifies the order in PayPal, updates inventory in the warehouse system, and sends a confirmation via Twilio SMS.
  tags:
  - orders
  - paypal
  - twilio
  - warehouse
capability:
  exposes:
  - type: mcp
    namespace: order-completion
    port: 8080
    tools:
    - name: process-order-completion
      description: Verify a completed PayPal order, update inventory, and send SMS confirmation.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The PayPal order ID.
      - name: customer_phone
        in: body
        type: string
        description: Customer phone number for SMS.
      steps:
      - name: verify-order
        type: call
        call: paypal.get-order
        with:
          order_id: '{{order_id}}'
      - name: update-inventory
        type: call
        call: warehouse.decrement-stock
        with:
          sku: '{{verify-order.purchase_units[0].items[0].sku}}'
          quantity: '{{verify-order.purchase_units[0].items[0].quantity}}'
      - name: send-sms
        type: call
        call: twilio.send-message
        with:
          to: '{{customer_phone}}'
          body: Your PayPal order {{order_id}} for ${{verify-order.purchase_units[0].amount.value}} is confirmed!
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/checkout
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: orders
      path: /orders/{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
  - type: http
    namespace: warehouse
    baseUri: https://wms.paypal.com/api/v1
    authentication:
      type: bearer
      token: $secrets.wms_token
    resources:
    - name: inventory
      path: /inventory/adjust
      operations:
      - name: decrement-stock
        method: POST
  - type: http
    namespace: twilio
    baseUri: https://api.twilio.com/2010-04-01
    authentication:
      type: basic
      username: $secrets.twilio_account_sid
      password: $secrets.twilio_auth_token
    resources:
    - name: messages
      path: /Accounts/{{twilio_account_sid}}/Messages.json
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → order-completion-webhook-processor.yml

When a crypto purchase occurs, retrieves the transaction from PayPal, logs it in Elasticsearch for compliance, and posts to the compliance Slack channel.

naftiko: '0.5'
info:
  label: Crypto Purchase Audit Trail
  description: When a crypto purchase occurs, retrieves the transaction from PayPal, logs it in Elasticsearch for compliance, and posts to the compliance Slack channel.
  tags:
  - crypto
  - audit
  - paypal
  - elasticsearch
  - slack
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: crypto-audit
    port: 8080
    tools:
    - name: audit-crypto-purchase
      description: Given a PayPal transaction ID for a crypto purchase, retrieve details, index in Elasticsearch, and notify compliance.
      inputParameters:
      - name: transaction_id
        in: body
        type: string
        description: The PayPal transaction ID for the crypto purchase.
      steps:
      - name: get-transaction
        type: call
        call: paypal.search-transaction
        with:
          transaction_id: '{{transaction_id}}'
      - name: index-audit
        type: call
        call: elasticsearch.index-doc
        with:
          index: crypto-transactions
          body:
            transaction_id: '{{transaction_id}}'
            amount: '{{get-transaction.transaction_details[0].transaction_info.transaction_amount.value}}'
            event_code: '{{get-transaction.transaction_details[0].transaction_info.transaction_event_code}}'
            timestamp: '{{get-transaction.transaction_details[0].transaction_info.transaction_initiation_date}}'
      - name: notify-compliance
        type: call
        call: slack.post-message
        with:
          channel: '#compliance-crypto'
          text: 'Crypto transaction logged: {{transaction_id}} for ${{get-transaction.transaction_details[0].transaction_info.transaction_amount.value}}. Indexed in Elasticsearch.'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/reporting/transactions
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: transactions
      path: /?transaction_id={{transaction_id}}&fields=all
      inputParameters:
      - name: transaction_id
        in: query
      operations:
      - name: search-transaction
        method: GET
  - type: http
    namespace: elasticsearch
    baseUri: https://paypal-es.es.us-west-2.aws.found.io
    authentication:
      type: basic
      username: $secrets.es_user
      password: $secrets.es_password
    resources:
    - name: documents
      path: /{{index}}/_doc
      inputParameters:
      - name: index
        in: path
      operations:
      - name: index-doc
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → crypto-purchase-audit-trail.yml

Retrieves PayPal merchant account details, runs identity verification through a compliance API, and updates the merchant status in Salesforce.

naftiko: '0.5'
info:
  label: Merchant KYC Verification Pipeline
  description: Retrieves PayPal merchant account details, runs identity verification through a compliance API, and updates the merchant status in Salesforce.
  tags:
  - kyc
  - compliance
  - paypal
  - salesforce
  - onboarding
capability:
  exposes:
  - type: mcp
    namespace: merchant-kyc
    port: 8080
    tools:
    - name: verify-merchant-kyc
      description: Given a PayPal merchant ID and Salesforce account ID, verify merchant identity and update CRM status.
      inputParameters:
      - name: merchant_id
        in: body
        type: string
        description: The PayPal merchant account ID.
      - name: sf_account_id
        in: body
        type: string
        description: The Salesforce account ID.
      steps:
      - name: get-merchant
        type: call
        call: paypal.get-merchant-status
        with:
          merchant_id: '{{merchant_id}}'
      - name: check-identity
        type: call
        call: compliance.verify-identity
        with:
          legal_name: '{{get-merchant.legal_name}}'
          country: '{{get-merchant.country}}'
          merchant_id: '{{merchant_id}}'
      - name: update-salesforce
        type: call
        call: salesforce.update-account
        with:
          account_id: '{{sf_account_id}}'
          KYC_Status__c: '{{check-identity.verification_status}}'
          KYC_Verified_Date__c: '{{check-identity.verified_at}}'
          PayPal_Merchant_ID__c: '{{merchant_id}}'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/customer/partners
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: merchant-integrations
      path: /{{partner_id}}/merchant-integrations/{{merchant_id}}
      inputParameters:
      - name: merchant_id
        in: path
      operations:
      - name: get-merchant-status
        method: GET
  - type: http
    namespace: compliance
    baseUri: https://compliance-api.paypal.com/v1
    authentication:
      type: bearer
      token: $secrets.compliance_api_token
    resources:
    - name: identity
      path: /identity/verify
      operations:
      - name: verify-identity
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://paypal.my.salesforce.com/services/data/v58.0/sobjects
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: update-account
        method: PATCH
Open in Framework → View in Fleet → merchant-kyc-verification-pipeline.yml

Reconciles Venmo payouts against PayPal records, flags discrepancies in Jira, and updates the finance dashboard in Tableau.

naftiko: '0.5'
info:
  label: Venmo Payout Reconciliation Pipeline
  description: Reconciles Venmo payouts against PayPal records, flags discrepancies in Jira, and updates the finance dashboard in Tableau.
  tags:
  - venmo
  - paypal
  - jira
  - tableau
  - reconciliation
capability:
  exposes:
  - type: mcp
    namespace: venmo-recon
    port: 8080
    tools:
    - name: reconcile-venmo-payouts
      description: Reconcile Venmo payout records and flag discrepancies.
      inputParameters:
      - name: date
        in: body
        type: string
        description: The date to reconcile in YYYY-MM-DD format.
      steps:
      - name: get-paypal-records
        type: call
        call: paypal.search-transactions
        with:
          start_date: '{{date}}T00:00:00Z'
          end_date: '{{date}}T23:59:59Z'
          channel: VENMO
      - name: flag-discrepancy
        type: call
        call: jira.create-issue
        with:
          project: FIN
          summary: Venmo reconciliation discrepancy for {{date}}
          issue_type: Task
      - name: refresh-dashboard
        type: call
        call: tableau.refresh-workbook
        with:
          workbook_id: venmo-finance-dashboard
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/reporting
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: transactions
      path: /transactions
      operations:
      - name: search-transactions
        method: GET
  - type: http
    namespace: jira
    baseUri: https://paypal-internal.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: tableau
    baseUri: https://tableau.paypal.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/default/workbooks/{{workbook_id}}/refresh
      operations:
      - name: refresh-workbook
        method: POST
Open in Framework → View in Fleet → venmo-payout-reconciliation-pipeline.yml

Lists all vaulted payment method tokens for a customer in PayPal.

naftiko: '0.5'
info:
  label: Get Payment Method Tokens List
  description: Lists all vaulted payment method tokens for a customer in PayPal.
  tags:
  - vault
  - paypal
  - tokens
capability:
  exposes:
  - type: mcp
    namespace: vault
    port: 8080
    tools:
    - name: list-payment-tokens
      description: Retrieve all vaulted payment tokens for a customer.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The PayPal customer ID.
      call: paypal.list-payment-tokens
      with:
        customer_id: '{{customer_id}}'
      outputParameters:
      - name: payment_tokens
        type: array
        mapping: $.payment_tokens
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v3/vault
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: payment-tokens
      path: /payment-tokens
      inputParameters:
      - name: customer_id
        in: query
      operations:
      - name: list-payment-tokens
        method: GET
Open in Framework → View in Fleet → get-payment-method-tokens-list.yml

Analyzes merchant transaction fees from PayPal data, computes fee breakdowns in Snowflake, and publishes a Power BI dashboard refresh.

naftiko: '0.5'
info:
  label: Merchant Fee Analysis Report
  description: Analyzes merchant transaction fees from PayPal data, computes fee breakdowns in Snowflake, and publishes a Power BI dashboard refresh.
  tags:
  - fees
  - paypal
  - snowflake
  - power-bi
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: fee-analysis
    port: 8080
    tools:
    - name: analyze-merchant-fees
      description: Generate fee analysis report for a merchant.
      inputParameters:
      - name: merchant_id
        in: body
        type: string
        description: The PayPal merchant ID.
      - name: period
        in: body
        type: string
        description: The reporting period in YYYY-MM format.
      steps:
      - name: get-fee-data
        type: call
        call: snowflake.run-query
        with:
          query: SELECT fee_type, SUM(fee_amount) as total FROM paypal.transaction_fees WHERE merchant_id = '{{merchant_id}}' AND period = '{{period}}' GROUP BY fee_type
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: merchant-fee-analysis
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#merchant-analytics'
          text: Fee analysis for merchant {{merchant_id}} period {{period}} completed. Dashboard refreshed.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://paypal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → merchant-fee-analysis-report.yml

Fetches the authenticated PayPal user profile, including name, email, and account verification status.

naftiko: '0.5'
info:
  label: Retrieve Identity User Info
  description: Fetches the authenticated PayPal user profile, including name, email, and account verification status.
  tags:
  - identity
  - paypal
  - user-profile
capability:
  exposes:
  - type: mcp
    namespace: identity
    port: 8080
    tools:
    - name: get-user-info
      description: Retrieve the authenticated PayPal user profile. Returns name, email, and verified status.
      inputParameters: []
      call: paypal.get-userinfo
      with: {}
      outputParameters:
      - name: name
        type: string
        mapping: $.name
      - name: email
        type: string
        mapping: $.emails[0].value
      - name: verified
        type: string
        mapping: $.verified_account
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/identity
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: user-info
      path: /openidconnect/userinfo/?schema=openid
      operations:
      - name: get-userinfo
        method: GET
Open in Framework → View in Fleet → retrieve-identity-user-info.yml

Retrieves shipment tracking details associated with a PayPal transaction.

naftiko: '0.5'
info:
  label: Get Tracking Information
  description: Retrieves shipment tracking details associated with a PayPal transaction.
  tags:
  - shipping
  - paypal
  - tracking
capability:
  exposes:
  - type: mcp
    namespace: shipping
    port: 8080
    tools:
    - name: get-tracking
      description: Look up tracking information for a PayPal transaction.
      inputParameters:
      - name: transaction_id
        in: body
        type: string
        description: The PayPal transaction ID.
      call: paypal.get-tracking
      with:
        transaction_id: '{{transaction_id}}'
      outputParameters:
      - name: tracking_number
        type: string
        mapping: $.tracking_number
      - name: carrier
        type: string
        mapping: $.carrier
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/shipping
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: trackers
      path: /trackers/{{transaction_id}}
      inputParameters:
      - name: transaction_id
        in: path
      operations:
      - name: get-tracking
        method: GET
Open in Framework → View in Fleet → get-tracking-information.yml

Verifies merchant PCI compliance status from PayPal, checks attestation documents in SharePoint, and creates remediation tasks in ServiceNow if non-compliant.

naftiko: '0.5'
info:
  label: Merchant PCI Compliance Verifier
  description: Verifies merchant PCI compliance status from PayPal, checks attestation documents in SharePoint, and creates remediation tasks in ServiceNow if non-compliant.
  tags:
  - compliance
  - paypal
  - sharepoint
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: pci-compliance
    port: 8080
    tools:
    - name: verify-pci-compliance
      description: Verify PCI compliance for a merchant and create remediation if needed.
      inputParameters:
      - name: merchant_id
        in: body
        type: string
        description: The PayPal merchant ID.
      steps:
      - name: get-merchant-status
        type: call
        call: paypal.get-merchant-compliance
        with:
          merchant_id: '{{merchant_id}}'
      - name: check-attestation
        type: call
        call: sharepoint.search-document
        with:
          query: PCI attestation {{merchant_id}}
          site: compliance-docs
      - name: create-remediation
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'PCI non-compliance: merchant {{merchant_id}}'
          category: Compliance
          priority: '2'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/customer
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: compliance
      path: /partners/{{merchant_id}}/compliance
      inputParameters:
      - name: merchant_id
        in: path
      operations:
      - name: get-merchant-compliance
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: search
      path: /search/query
      operations:
      - name: search-document
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://paypal.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → merchant-pci-compliance-verifier.yml

Processes buyer protection claims by retrieving PayPal dispute details, checking shipping evidence, and issuing conditional refunds.

naftiko: '0.5'
info:
  label: Buyer Protection Claim Processor
  description: Processes buyer protection claims by retrieving PayPal dispute details, checking shipping evidence, and issuing conditional refunds.
  tags:
  - disputes
  - paypal
  - jira
  - refunds
capability:
  exposes:
  - type: mcp
    namespace: buyer-protection
    port: 8080
    tools:
    - name: process-buyer-claim
      description: Review and process a buyer protection claim with evidence check.
      inputParameters:
      - name: dispute_id
        in: body
        type: string
        description: The PayPal dispute ID.
      steps:
      - name: get-dispute
        type: call
        call: paypal.get-dispute
        with:
          dispute_id: '{{dispute_id}}'
      - name: create-review-ticket
        type: call
        call: jira.create-issue
        with:
          project: CLAIMS
          summary: Buyer protection claim {{dispute_id}} - ${{get-dispute.dispute_amount.value}}
          description: 'Reason: {{get-dispute.reason}}

            Seller: {{get-dispute.dispute_life_cycle_stage}}'
          issue_type: Task
      - name: notify-claims
        type: call
        call: slack.post-message
        with:
          channel: '#claims-team'
          text: 'New buyer protection claim {{dispute_id}} for ${{get-dispute.dispute_amount.value}}. Jira: {{create-review-ticket.key}}'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/customer
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: disputes
      path: /disputes/{{dispute_id}}
      inputParameters:
      - name: dispute_id
        in: path
      operations:
      - name: get-dispute
        method: GET
  - type: http
    namespace: jira
    baseUri: https://paypal-internal.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → buyer-protection-claim-processor.yml

Retrieves details for a PayPal billing agreement including status, payer, and plan info.

naftiko: '0.5'
info:
  label: Get Billing Agreement Details
  description: Retrieves details for a PayPal billing agreement including status, payer, and plan info.
  tags:
  - billing
  - paypal
  - agreements
capability:
  exposes:
  - type: mcp
    namespace: billing
    port: 8080
    tools:
    - name: get-billing-agreement
      description: Look up a PayPal billing agreement by agreement ID.
      inputParameters:
      - name: agreement_id
        in: body
        type: string
        description: The PayPal billing agreement ID.
      call: paypal.get-agreement
      with:
        agreement_id: '{{agreement_id}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.state
      - name: payer_email
        type: string
        mapping: $.payer.payer_info.email
      - name: plan_name
        type: string
        mapping: $.plan.name
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/payments
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: billing-agreements
      path: /billing-agreements/{{agreement_id}}
      inputParameters:
      - name: agreement_id
        in: path
      operations:
      - name: get-agreement
        method: GET
Open in Framework → View in Fleet → get-billing-agreement-details.yml

Retrieves a PayPal billing agreement, syncs the agreement details into Salesforce, and updates HubSpot contact properties for marketing alignment.

naftiko: '0.5'
info:
  label: Billing Agreement Sync to CRM
  description: Retrieves a PayPal billing agreement, syncs the agreement details into Salesforce, and updates HubSpot contact properties for marketing alignment.
  tags:
  - billing
  - crm
  - paypal
  - salesforce
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: billing-crm-sync
    port: 8080
    tools:
    - name: sync-billing-agreement
      description: Given a PayPal billing agreement ID, sync details to Salesforce and HubSpot.
      inputParameters:
      - name: agreement_id
        in: body
        type: string
        description: The PayPal billing agreement ID.
      - name: hubspot_contact_id
        in: body
        type: string
        description: The HubSpot contact ID.
      - name: sf_account_id
        in: body
        type: string
        description: The Salesforce account ID.
      steps:
      - name: get-agreement
        type: call
        call: paypal.get-agreement
        with:
          agreement_id: '{{agreement_id}}'
      - name: update-salesforce
        type: call
        call: salesforce.update-account
        with:
          account_id: '{{sf_account_id}}'
          PayPal_Agreement_ID__c: '{{agreement_id}}'
          Agreement_Status__c: '{{get-agreement.state}}'
          Agreement_Description__c: '{{get-agreement.description}}'
      - name: update-hubspot
        type: call
        call: hubspot.update-contact
        with:
          contact_id: '{{hubspot_contact_id}}'
          properties:
            paypal_agreement_id: '{{agreement_id}}'
            paypal_agreement_status: '{{get-agreement.state}}'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/payments/billing-agreements
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: agreements
      path: /{{agreement_id}}
      inputParameters:
      - name: agreement_id
        in: path
      operations:
      - name: get-agreement
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://paypal.my.salesforce.com/services/data/v58.0/sobjects
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: update-account
        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/{{contact_id}}
      inputParameters:
      - name: contact_id
        in: path
      operations:
      - name: update-contact
        method: PATCH
Open in Framework → View in Fleet → billing-agreement-sync-to-crm.yml

Forecasts merchant revenue by analyzing PayPal transaction trends in Snowflake, running ML predictions, and publishing forecasts to Power BI.

naftiko: '0.5'
info:
  label: Merchant Revenue Forecast Pipeline
  description: Forecasts merchant revenue by analyzing PayPal transaction trends in Snowflake, running ML predictions, and publishing forecasts to Power BI.
  tags:
  - analytics
  - paypal
  - snowflake
  - power-bi
  - forecasting
capability:
  exposes:
  - type: mcp
    namespace: revenue-forecast
    port: 8080
    tools:
    - name: forecast-merchant-revenue
      description: Generate revenue forecasts based on PayPal transaction history.
      inputParameters:
      - name: merchant_id
        in: body
        type: string
        description: The PayPal merchant ID.
      - name: forecast_months
        in: body
        type: integer
        description: Number of months to forecast.
      steps:
      - name: get-historical-data
        type: call
        call: snowflake.run-query
        with:
          query: SELECT month, SUM(amount) as revenue FROM paypal.transactions WHERE merchant_id = '{{merchant_id}}' GROUP BY month ORDER BY month
      - name: refresh-forecast-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: merchant-revenue-forecasts
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#merchant-analytics'
          text: Revenue forecast for merchant {{merchant_id}} updated for next {{forecast_months}} months.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://paypal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → merchant-revenue-forecast-pipeline.yml

Generates batch invoices from PayPal billing data, creates PDF invoices, and delivers them via SendGrid email to merchants.

naftiko: '0.5'
info:
  label: Invoice Batch Generation and Delivery
  description: Generates batch invoices from PayPal billing data, creates PDF invoices, and delivers them via SendGrid email to merchants.
  tags:
  - invoicing
  - paypal
  - sendgrid
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: invoice-batch
    port: 8080
    tools:
    - name: generate-batch-invoices
      description: Generate and deliver batch invoices to merchants.
      inputParameters:
      - name: billing_period
        in: body
        type: string
        description: The billing period in YYYY-MM format.
      steps:
      - name: get-billing-data
        type: call
        call: snowflake.run-query
        with:
          query: SELECT merchant_id, total_fees FROM billing.monthly_summary WHERE period = '{{billing_period}}'
      - name: create-invoice
        type: call
        call: paypal.create-invoice
        with:
          billing_period: '{{billing_period}}'
          items: '{{get-billing-data.results}}'
      - name: send-invoice
        type: call
        call: sendgrid.send-email
        with:
          template_id: d-monthly-invoice
          subject: Your PayPal invoice for {{billing_period}}
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://paypal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/invoicing
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: invoices
      path: /invoices
      operations:
      - name: create-invoice
        method: POST
  - type: http
    namespace: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → invoice-batch-generation-and-delivery.yml

Queries PayPal transaction data for the day, aggregates totals via Snowflake, and posts the daily settlement summary to the finance Slack channel.

naftiko: '0.5'
info:
  label: Daily Settlement Report
  description: Queries PayPal transaction data for the day, aggregates totals via Snowflake, and posts the daily settlement summary to the finance Slack channel.
  tags:
  - settlement
  - reporting
  - paypal
  - snowflake
  - slack
  - finance
capability:
  exposes:
  - type: mcp
    namespace: settlement-reporting
    port: 8080
    tools:
    - name: generate-settlement-report
      description: Given a date range, query PayPal transactions, run Snowflake aggregation, and post settlement summary to Slack.
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: Start date in ISO 8601.
      - name: end_date
        in: body
        type: string
        description: End date in ISO 8601.
      steps:
      - name: get-transactions
        type: call
        call: paypal.list-transactions
        with:
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: aggregate-totals
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT SUM(amount) as total_volume, COUNT(*) as txn_count, SUM(fee) as total_fees FROM paypal_data.transactions WHERE created_at BETWEEN '{{start_date}}' AND '{{end_date}}'
          warehouse: FINANCE_WH
          database: PAYPAL_DATA
      - name: post-summary
        type: call
        call: slack.post-message
        with:
          channel: '#finance-daily'
          text: 'Daily Settlement ({{start_date}} to {{end_date}}): Volume=${{aggregate-totals.data[0][0]}}, Transactions={{aggregate-totals.data[0][1]}}, Fees=${{aggregate-totals.data[0][2]}}'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v1/reporting/transactions
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: transactions
      path: /?start_date={{start_date}}&end_date={{end_date}}&fields=all
      inputParameters:
      - name: start_date
        in: query
      - name: end_date
        in: query
      operations:
      - name: list-transactions
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://paypal.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → daily-settlement-report.yml

Retrieves a PayPal international payment, checks the recipient country against a restricted list, and logs the compliance check in Elasticsearch and notifies legal via Slack.

naftiko: '0.5'
info:
  label: Cross-Border Payment Compliance Logger
  description: Retrieves a PayPal international payment, checks the recipient country against a restricted list, and logs the compliance check in Elasticsearch and notifies legal via Slack.
  tags:
  - cross-border
  - compliance
  - paypal
  - elasticsearch
  - slack
  - legal
capability:
  exposes:
  - type: mcp
    namespace: cross-border-compliance
    port: 8080
    tools:
    - name: log-cross-border-payment
      description: Given a PayPal capture ID, verify cross-border compliance, log in Elasticsearch, and notify legal.
      inputParameters:
      - name: capture_id
        in: body
        type: string
        description: The PayPal capture ID.
      steps:
      - name: get-payment
        type: call
        call: paypal.get-capture
        with:
          capture_id: '{{capture_id}}'
      - name: index-compliance
        type: call
        call: elasticsearch.index-doc
        with:
          index: cross-border-payments
          body:
            capture_id: '{{capture_id}}'
            amount: '{{get-payment.amount.value}}'
            currency: '{{get-payment.amount.currency_code}}'
            payer_country: '{{get-payment.payer.address.country_code}}'
            status: '{{get-payment.status}}'
      - name: notify-legal
        type: call
        call: slack.post-message
        with:
          channel: '#legal-compliance'
          text: 'Cross-border payment: {{capture_id}} for ${{get-payment.amount.value}} {{get-payment.amount.currency_code}}. Payer country: {{get-payment.payer.address.country_code}}. Indexed for compliance review.'
  consumes:
  - type: http
    namespace: paypal
    baseUri: https://api-m.paypal.com/v2/payments
    authentication:
      type: bearer
      token: $secrets.paypal_access_token
    resources:
    - name: captures
      path: /captures/{{capture_id}}
      inputParameters:
      - name: capture_id
        in: path
      operations:
      - name: get-capture
        method: GET
  - type: http
    namespace: elasticsearch
    baseUri: https://paypal-es.es.us-west-2.aws.found.io
    authentication:
      type: basic
      username: $secrets.es_user
      password: $secrets.es_password
    resources:
    - name: documents
      path: /{{index}}/_doc
      inputParameters:
      - name: index
        in: path
      operations:
      - name: index-doc
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → cross-border-payment-compliance-logger.yml

Retrieves customer financial data from the core banking API via MuleSoft, runs a risk scoring model in Azure Machine Learning, and updates the risk rating in Salesforce.

naftiko: '0.5'
info:
  label: Risk Score Calculation Pipeline
  description: Retrieves customer financial data from the core banking API via MuleSoft, runs a risk scoring model in Azure Machine Learning, and updates the risk rating in Salesforce.
  tags:
  - risk
  - machine-learning
  - mulesoft
  - azure-machine-learning
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: risk-scoring
    port: 8080
    tools:
    - name: calculate-risk-score
      description: Given a customer ID, fetch financial data, run risk model, and update Salesforce.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The customer ID.
      steps:
      - name: get-financial-data
        type: call
        call: mulesoft.get-customer-financials
        with:
          customer_id: '{{customer_id}}'
      - name: run-risk-model
        type: call
        call: azureml.score
        with:
          income: '{{get-financial-data.annual_income}}'
          balance: '{{get-financial-data.total_balance}}'
          credit_utilization: '{{get-financial-data.credit_utilization}}'
      - name: update-risk-rating
        type: call
        call: salesforce.update-customer
        with:
          customer_id: '{{customer_id}}'
          risk_score: '{{run-risk-model.risk_score}}'
          risk_category: '{{run-risk-model.risk_category}}'
  consumes:
  - type: http
    namespace: mulesoft
    baseUri: https://api.scotiabank.com/mulesoft/v1
    authentication:
      type: bearer
      token: $secrets.mulesoft_token
    resources:
    - name: customer-financials
      path: /core-banking/customers/{{customer_id}}/financials
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: get-customer-financials
        method: GET
  - type: http
    namespace: azureml
    baseUri: https://scotiabank-risk.canadacentral.inference.ml.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_ml_token
    resources:
    - name: scoring
      path: /score
      operations:
      - name: score
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://scotiabank.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: customers
      path: /sobjects/Account/{{customer_id}}
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: update-customer
        method: PATCH
Open in Framework → View in Fleet → risk-score-calculation-pipeline.yml

Orchestrates digital lending decisioning pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Digital Lending Decisioning Pipeline
  description: Orchestrates digital lending decisioning pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - digital
  - scotiabank
  - salesforce
  - servicenow
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: digital
    port: 8080
    tools:
    - name: digital-lending-decisioning-pipeline
      description: Orchestrates digital lending decisioning pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: salesforce.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: servicenow.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: snowflake.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://scotiabank.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/digital
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://scotiabank.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/digital
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://scotiabank.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/digital
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → digital-lending-decisioning-pipeline.yml

Queries Datadog for infrastructure host health.

naftiko: '0.5'
info:
  label: Datadog Infrastructure Monitor
  description: Queries Datadog for infrastructure host health.
  tags:
  - monitoring
  - infrastructure
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: infra-monitoring
    port: 8080
    tools:
    - name: get-host-health
      description: Query Datadog for host health.
      inputParameters:
      - name: host_name
        in: body
        type: string
        description: The host name.
      call: datadog.get-host
      with:
        host_name: '{{host_name}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
    resources:
    - name: hosts
      path: /hosts?filter={{host_name}}
      inputParameters:
      - name: host_name
        in: path
      operations:
      - name: get-host
        method: GET
Open in Framework → View in Fleet → datadog-infrastructure-monitor.yml

Orchestrates atm cash management pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Atm Cash Management Pipeline
  description: Orchestrates atm cash management pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - atm
  - scotiabank
  - slack
  - jira
  - teams
capability:
  exposes:
  - type: mcp
    namespace: atm
    port: 8080
    tools:
    - name: atm-cash-management-pipeline
      description: Orchestrates atm cash management pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: slack.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: jira.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: teams.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/atm
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: jira
    baseUri: https://scotiabank.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/atm
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/atm
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → atm-cash-management-pipeline.yml

Retrieves scotia rewards catalog lookup data from the Scotiabank banking and financial services systems.

naftiko: '0.5'
info:
  label: Scotia Rewards Catalog Lookup
  description: Retrieves scotia rewards catalog lookup data from the Scotiabank banking and financial services systems.
  tags:
  - scotia
  - scotiabank
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: scotia
    port: 8080
    tools:
    - name: scotia-rewards-catalog-lookup
      description: Retrieves scotia rewards catalog lookup data from the Scotiabank banking and financial services systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: scotiabank.scotia-rewards-catalog-lookup
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: scotiabank
    baseUri: https://api.scotiabank.com/v2
    authentication:
      type: bearer
      token: $secrets.scotiabank_api_token
    resources:
    - name: resource
      path: /scotia/rewards/catalog/lookup/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: scotia-rewards-catalog-lookup
        method: GET
Open in Framework → View in Fleet → scotia-rewards-catalog-lookup.yml

Retrieves LinkedIn job posting status.

naftiko: '0.5'
info:
  label: LinkedIn Recruitment Status
  description: Retrieves LinkedIn job posting status.
  tags:
  - recruitment
  - linkedin
capability:
  exposes:
  - type: mcp
    namespace: recruitment
    port: 8080
    tools:
    - name: get-job-posting-status
      description: Look up a LinkedIn job posting.
      inputParameters:
      - name: job_posting_id
        in: body
        type: string
        description: The LinkedIn job posting ID.
      call: linkedin.get-job-posting
      with:
        job_posting_id: '{{job_posting_id}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: job-postings
      path: /jobPostings/{{job_posting_id}}
      inputParameters:
      - name: job_posting_id
        in: path
      operations:
      - name: get-job-posting
        method: GET
Open in Framework → View in Fleet → linkedin-recruitment-status.yml

Orchestrates customer cross sell pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Customer Cross Sell Pipeline
  description: Orchestrates customer cross sell pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - customer
  - scotiabank
  - teams
  - splunk
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: customer
    port: 8080
    tools:
    - name: customer-cross-sell-pipeline
      description: Orchestrates customer cross sell pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: teams.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: splunk.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: confluence.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/customer
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: splunk
    baseUri: https://splunk.scotiabank.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: splunk-resource
      path: /api/customer
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://scotiabank.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/customer
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → customer-cross-sell-pipeline.yml

Generates release notes from Jira issues and publishes to Confluence.

naftiko: '0.5'
info:
  label: Jira to Confluence Release Notes
  description: Generates release notes from Jira issues and publishes to Confluence.
  tags:
  - engineering
  - release-management
  - jira
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: release-mgmt
    port: 8080
    tools:
    - name: generate-release-notes
      description: Fetch completed Jira issues and publish release notes.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: Jira project key.
      - name: version_name
        in: body
        type: string
        description: Release version.
      steps:
      - name: get-issues
        type: call
        call: jira.search-issues
        with:
          jql: project = {{project_key}} AND fixVersion = '{{version_name}}' AND status = Done
      - name: create-notes
        type: call
        call: confluence.create-page
        with:
          space_key: ENG
          title: 'Release Notes: {{project_key}} {{version_name}}'
          body: 'Release {{version_name}}. Issues: {{get-issues.total}}.'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: engineering_releases
          text: 'Release notes: {{project_key}} {{version_name}}. URL: {{create-notes.url}}.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://scotiabank.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: search
      path: /search?jql={{jql}}
      inputParameters:
      - name: jql
        in: path
      operations:
      - name: search-issues
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://scotiabank.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → jira-to-confluence-release-notes.yml

Retrieves DocuSign envelope status for loan agreements.

naftiko: '0.5'
info:
  label: DocuSign Agreement Status
  description: Retrieves DocuSign envelope status for loan agreements.
  tags:
  - lending
  - document-signing
  - docusign
capability:
  exposes:
  - type: mcp
    namespace: doc-signing
    port: 8080
    tools:
    - name: get-envelope-status
      description: Look up a DocuSign envelope status.
      inputParameters:
      - name: envelope_id
        in: body
        type: string
        description: The DocuSign envelope ID.
      call: docusign.get-envelope
      with:
        envelope_id: '{{envelope_id}}'
  consumes:
  - type: http
    namespace: docusign
    baseUri: https://na4.docusign.net/restapi/v2.1/accounts/$secrets.docusign_account_id
    authentication:
      type: bearer
      token: $secrets.docusign_token
    resources:
    - name: envelopes
      path: /envelopes/{{envelope_id}}
      inputParameters:
      - name: envelope_id
        in: path
      operations:
      - name: get-envelope
        method: GET
Open in Framework → View in Fleet → docusign-agreement-status.yml

Retrieves mortgage rate schedule lookup data from the Scotiabank banking and financial services systems.

naftiko: '0.5'
info:
  label: Mortgage Rate Schedule Lookup
  description: Retrieves mortgage rate schedule lookup data from the Scotiabank banking and financial services systems.
  tags:
  - mortgage
  - scotiabank
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: mortgage
    port: 8080
    tools:
    - name: mortgage-rate-schedule-lookup
      description: Retrieves mortgage rate schedule lookup data from the Scotiabank banking and financial services systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: scotiabank.mortgage-rate-schedule-lookup
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: scotiabank
    baseUri: https://api.scotiabank.com/v2
    authentication:
      type: bearer
      token: $secrets.scotiabank_api_token
    resources:
    - name: resource
      path: /mortgage/rate/schedule/lookup/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: mortgage-rate-schedule-lookup
        method: GET
Open in Framework → View in Fleet → mortgage-rate-schedule-lookup.yml

Retrieves business account cash flow summary data from the Scotiabank banking and financial services systems.

naftiko: '0.5'
info:
  label: Business Account Cash Flow Summary
  description: Retrieves business account cash flow summary data from the Scotiabank banking and financial services systems.
  tags:
  - business
  - scotiabank
  - summary
capability:
  exposes:
  - type: mcp
    namespace: business
    port: 8080
    tools:
    - name: business-account-cash-flow-summary
      description: Retrieves business account cash flow summary data from the Scotiabank banking and financial services systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: scotiabank.business-account-cash-flow-summary
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: scotiabank
    baseUri: https://api.scotiabank.com/v2
    authentication:
      type: bearer
      token: $secrets.scotiabank_api_token
    resources:
    - name: resource
      path: /business/account/cash/flow/summary/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: business-account-cash-flow-summary
        method: GET
Open in Framework → View in Fleet → business-account-cash-flow-summary.yml

Retrieves Figma file metadata for design assets.

naftiko: '0.5'
info:
  label: Figma Design File Viewer
  description: Retrieves Figma file metadata for design assets.
  tags:
  - design
  - ux
  - figma
capability:
  exposes:
  - type: mcp
    namespace: design
    port: 8080
    tools:
    - name: get-figma-file
      description: Retrieve Figma file metadata.
      inputParameters:
      - name: file_key
        in: body
        type: string
        description: Figma file key.
      call: figma.get-file
      with:
        file_key: '{{file_key}}'
  consumes:
  - type: http
    namespace: figma
    baseUri: https://api.figma.com/v1
    authentication:
      type: bearer
      token: $secrets.figma_token
    resources:
    - name: files
      path: /files/{{file_key}}
      inputParameters:
      - name: file_key
        in: path
      operations:
      - name: get-file
        method: GET
Open in Framework → View in Fleet → figma-design-file-viewer.yml

Retrieves digital banking funnel analytics from Google Analytics.

naftiko: '0.5'
info:
  label: Google Analytics Digital Banking Funnel
  description: Retrieves digital banking funnel analytics from Google Analytics.
  tags:
  - marketing
  - analytics
  - google-analytics
capability:
  exposes:
  - type: mcp
    namespace: web-analytics
    port: 8080
    tools:
    - name: get-banking-funnel
      description: Retrieve digital banking funnel metrics.
      inputParameters:
      - name: property_id
        in: body
        type: string
        description: Google Analytics property ID.
      - name: start_date
        in: body
        type: string
        description: Start date.
      - name: end_date
        in: body
        type: string
        description: End date.
      call: ga.run-report
      with:
        property_id: '{{property_id}}'
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
  consumes:
  - type: http
    namespace: ga
    baseUri: https://analyticsdata.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: reports
      path: /properties/{{property_id}}:runReport
      inputParameters:
      - name: property_id
        in: path
      operations:
      - name: run-report
        method: POST
Open in Framework → View in Fleet → google-analytics-digital-banking-funnel.yml

Orchestrates payment modernization pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Payment Modernization Pipeline
  description: Orchestrates payment modernization pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - payment
  - scotiabank
  - confluence
  - bloomberg
  - scotiabank
capability:
  exposes:
  - type: mcp
    namespace: payment
    port: 8080
    tools:
    - name: payment-modernization-pipeline
      description: Orchestrates payment modernization pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: confluence.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: bloomberg.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: scotiabank.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://scotiabank.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/payment
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: bloomberg-resource
      path: /api/payment
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: scotiabank
    baseUri: https://api.scotiabank.com/v2
    authentication:
      type: bearer
      token: $secrets.scotiabank_api_token
    resources:
    - name: scotiabank-resource
      path: /api/payment
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → payment-modernization-pipeline.yml

Queries Datadog for ATM device health metrics by branch and alerts the operations team via Microsoft Teams when issues are detected.

naftiko: '0.5'
info:
  label: Branch ATM Health Monitor
  description: Queries Datadog for ATM device health metrics by branch and alerts the operations team via Microsoft Teams when issues are detected.
  tags:
  - operations
  - atm
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: atm-monitoring
    port: 8080
    tools:
    - name: check-atm-health
      description: Given a branch code, check ATM health in Datadog and alert if issues.
      inputParameters:
      - name: branch_code
        in: body
        type: string
        description: The branch code.
      steps:
      - name: get-atm-metrics
        type: call
        call: datadog.get-hosts
        with:
          filter: branch:{{branch_code}},device:atm
      - name: notify-ops
        type: call
        call: msteams.send-message
        with:
          channel_id: atm_operations
          text: 'ATM Health Check — Branch {{branch_code}}: {{get-atm-metrics.total_matching}} ATMs monitored. Check Datadog for details.'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
    resources:
    - name: hosts
      path: /hosts?filter={{filter}}
      inputParameters:
      - name: filter
        in: path
      operations:
      - name: get-hosts
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → branch-atm-health-monitor.yml

Orchestrates esg portfolio screening pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Esg Portfolio Screening Pipeline
  description: Orchestrates esg portfolio screening pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - esg
  - scotiabank
  - bloomberg
  - scotiabank
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: esg
    port: 8080
    tools:
    - name: esg-portfolio-screening-pipeline
      description: Orchestrates esg portfolio screening pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: bloomberg.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: scotiabank.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: salesforce.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: bloomberg-resource
      path: /api/esg
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: scotiabank
    baseUri: https://api.scotiabank.com/v2
    authentication:
      type: bearer
      token: $secrets.scotiabank_api_token
    resources:
    - name: scotiabank-resource
      path: /api/esg
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://scotiabank.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/esg
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → esg-portfolio-screening-pipeline.yml

Orchestrates real time payment monitoring pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Real Time Payment Monitoring Pipeline
  description: Orchestrates real time payment monitoring pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - real
  - scotiabank
  - snowflake
  - slack
  - jira
capability:
  exposes:
  - type: mcp
    namespace: real
    port: 8080
    tools:
    - name: real-time-payment-monitoring-pipeline
      description: Orchestrates real time payment monitoring pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: snowflake.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: slack.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: jira.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://scotiabank.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/real
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/real
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: jira
    baseUri: https://scotiabank.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/real
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → real-time-payment-monitoring-pipeline.yml

Triggers a Power BI dataset refresh for the enterprise risk dashboard.

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

Orchestrates mortgage application decisioning pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Mortgage Application Decisioning Pipeline
  description: Orchestrates mortgage application decisioning pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - mortgage
  - scotiabank
  - scotiabank
  - salesforce
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: mortgage
    port: 8080
    tools:
    - name: mortgage-application-decisioning-pipeline
      description: Orchestrates mortgage application decisioning pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: scotiabank.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: salesforce.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: servicenow.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: scotiabank
    baseUri: https://api.scotiabank.com/v2
    authentication:
      type: bearer
      token: $secrets.scotiabank_api_token
    resources:
    - name: scotiabank-resource
      path: /api/mortgage
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://scotiabank.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/mortgage
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://scotiabank.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/mortgage
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → mortgage-application-decisioning-pipeline.yml

Fetches active sprint details from Jira.

naftiko: '0.5'
info:
  label: Jira Sprint Tracker
  description: Fetches active sprint details from Jira.
  tags:
  - engineering
  - project-management
  - jira
capability:
  exposes:
  - type: mcp
    namespace: engineering-pm
    port: 8080
    tools:
    - name: get-sprint-status
      description: Retrieve active sprint details for a Jira board.
      inputParameters:
      - name: board_id
        in: body
        type: string
        description: The Jira board ID.
      call: jira.get-active-sprint
      with:
        board_id: '{{board_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://scotiabank.atlassian.net/rest/agile/1.0
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: sprints
      path: /board/{{board_id}}/sprint?state=active
      inputParameters:
      - name: board_id
        in: path
      operations:
      - name: get-active-sprint
        method: GET
Open in Framework → View in Fleet → jira-sprint-tracker.yml

Orchestrates treasury liquidity management pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Treasury Liquidity Management Pipeline
  description: Orchestrates treasury liquidity management pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - treasury
  - scotiabank
  - teams
  - splunk
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: treasury
    port: 8080
    tools:
    - name: treasury-liquidity-management-pipeline
      description: Orchestrates treasury liquidity management pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: teams.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: splunk.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: confluence.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/treasury
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: splunk
    baseUri: https://splunk.scotiabank.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: splunk-resource
      path: /api/treasury
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://scotiabank.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/treasury
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → treasury-liquidity-management-pipeline.yml

Orchestrates branch performance analytics pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Branch Performance Analytics Pipeline
  description: Orchestrates branch performance analytics pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - branch
  - scotiabank
  - jira
  - teams
  - splunk
capability:
  exposes:
  - type: mcp
    namespace: branch
    port: 8080
    tools:
    - name: branch-performance-analytics-pipeline
      description: Orchestrates branch performance analytics pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: jira.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: teams.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: splunk.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://scotiabank.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/branch
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/branch
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: splunk
    baseUri: https://splunk.scotiabank.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: splunk-resource
      path: /api/branch
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → branch-performance-analytics-pipeline.yml

Checks the status of an Interac e-Transfer via the payments API.

naftiko: '0.5'
info:
  label: Interac e-Transfer Status
  description: Checks the status of an Interac e-Transfer via the payments API.
  tags:
  - payments
  - interac
  - mulesoft
capability:
  exposes:
  - type: mcp
    namespace: etransfer
    port: 8080
    tools:
    - name: get-etransfer-status
      description: Look up an Interac e-Transfer by reference.
      inputParameters:
      - name: transfer_reference
        in: body
        type: string
        description: The e-Transfer reference number.
      call: mulesoft.get-etransfer
      with:
        reference: '{{transfer_reference}}'
  consumes:
  - type: http
    namespace: mulesoft
    baseUri: https://api.scotiabank.com/mulesoft/v1
    authentication:
      type: bearer
      token: $secrets.mulesoft_token
    resources:
    - name: etransfers
      path: /payments/interac/{{reference}}
      inputParameters:
      - name: reference
        in: path
      operations:
      - name: get-etransfer
        method: GET
Open in Framework → View in Fleet → interac-e-transfer-status.yml

Retrieves auto loan payment schedule data from the Scotiabank banking and financial services systems.

naftiko: '0.5'
info:
  label: Auto Loan Payment Schedule
  description: Retrieves auto loan payment schedule data from the Scotiabank banking and financial services systems.
  tags:
  - auto
  - scotiabank
  - schedule
capability:
  exposes:
  - type: mcp
    namespace: auto
    port: 8080
    tools:
    - name: auto-loan-payment-schedule
      description: Retrieves auto loan payment schedule data from the Scotiabank banking and financial services systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: scotiabank.auto-loan-payment-schedule
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: scotiabank
    baseUri: https://api.scotiabank.com/v2
    authentication:
      type: bearer
      token: $secrets.scotiabank_api_token
    resources:
    - name: resource
      path: /auto/loan/payment/schedule/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: auto-loan-payment-schedule
        method: GET
Open in Framework → View in Fleet → auto-loan-payment-schedule.yml

Orchestrates customer complaint management pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Customer Complaint Management Pipeline
  description: Orchestrates customer complaint management pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - customer
  - scotiabank
  - splunk
  - confluence
  - bloomberg
capability:
  exposes:
  - type: mcp
    namespace: customer
    port: 8080
    tools:
    - name: customer-complaint-management-pipeline
      description: Orchestrates customer complaint management pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: splunk.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: confluence.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: bloomberg.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.scotiabank.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: splunk-resource
      path: /api/customer
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://scotiabank.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/customer
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: bloomberg-resource
      path: /api/customer
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → customer-complaint-management-pipeline.yml

Retrieves a Tableau view for risk analytics and posts to Microsoft Teams.

naftiko: '0.5'
info:
  label: Tableau Risk Analytics Dashboard
  description: Retrieves a Tableau view for risk analytics and posts to Microsoft Teams.
  tags:
  - risk
  - analytics
  - tableau
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: risk-dashboards
    port: 8080
    tools:
    - name: share-risk-dashboard
      description: Fetch a Tableau risk view and share to Teams.
      inputParameters:
      - name: workbook_id
        in: body
        type: string
        description: Tableau workbook ID.
      - name: view_id
        in: body
        type: string
        description: Tableau view ID.
      steps:
      - name: get-view
        type: call
        call: tableau.get-view
        with:
          workbook_id: '{{workbook_id}}'
          view_id: '{{view_id}}'
      - name: post-to-teams
        type: call
        call: msteams.send-message
        with:
          channel_id: risk_management
          text: 'Risk Dashboard: {{get-view.url}}'
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://tableau.scotiabank.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: views
      path: /sites/$secrets.tableau_site_id/workbooks/{{workbook_id}}/views/{{view_id}}
      inputParameters:
      - name: workbook_id
        in: path
      - name: view_id
        in: path
      operations:
      - name: get-view
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → tableau-risk-analytics-dashboard.yml

Orchestrates anti fraud transaction monitoring pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Anti Fraud Transaction Monitoring Pipeline
  description: Orchestrates anti fraud transaction monitoring pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - anti
  - scotiabank
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: anti
    port: 8080
    tools:
    - name: anti-fraud-transaction-monitoring-pipeline
      description: Orchestrates anti fraud transaction monitoring pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: servicenow.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: snowflake.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: slack.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://scotiabank.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/anti
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://scotiabank.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/anti
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/anti
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → anti-fraud-transaction-monitoring-pipeline.yml

Retrieves investment portfolio allocation data from the Scotiabank banking and financial services systems.

naftiko: '0.5'
info:
  label: Investment Portfolio Allocation
  description: Retrieves investment portfolio allocation data from the Scotiabank banking and financial services systems.
  tags:
  - investment
  - scotiabank
  - allocation
capability:
  exposes:
  - type: mcp
    namespace: investment
    port: 8080
    tools:
    - name: investment-portfolio-allocation
      description: Retrieves investment portfolio allocation data from the Scotiabank banking and financial services systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: scotiabank.investment-portfolio-allocation
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: scotiabank
    baseUri: https://api.scotiabank.com/v2
    authentication:
      type: bearer
      token: $secrets.scotiabank_api_token
    resources:
    - name: resource
      path: /investment/portfolio/allocation/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: investment-portfolio-allocation
        method: GET
Open in Framework → View in Fleet → investment-portfolio-allocation.yml

Retrieves firewall rule configurations from Palo Alto Networks for security auditing.

naftiko: '0.5'
info:
  label: Palo Alto Firewall Rule Audit
  description: Retrieves firewall rule configurations from Palo Alto Networks for security auditing.
  tags:
  - security
  - firewall
  - palo-alto-networks
capability:
  exposes:
  - type: mcp
    namespace: security-audit
    port: 8080
    tools:
    - name: audit-firewall-rules
      description: Query Palo Alto for firewall rule statistics.
      inputParameters:
      - name: device_group
        in: body
        type: string
        description: The device group name.
      call: paloalto.get-security-rules
      with:
        device_group: '{{device_group}}'
  consumes:
  - type: http
    namespace: paloalto
    baseUri: https://panorama.scotiabank.com/restapi/v10.2
    authentication:
      type: apiKey
      key: $secrets.paloalto_api_key
    resources:
    - name: security-rules
      path: /Policies/SecurityRules?location=device-group&device-group={{device_group}}
      inputParameters:
      - name: device_group
        in: path
      operations:
      - name: get-security-rules
        method: GET
Open in Framework → View in Fleet → palo-alto-firewall-rule-audit.yml

Orchestrates market risk var calculation pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Market Risk Var Calculation Pipeline
  description: Orchestrates market risk var calculation pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - market
  - scotiabank
  - slack
  - jira
  - teams
capability:
  exposes:
  - type: mcp
    namespace: market
    port: 8080
    tools:
    - name: market-risk-var-calculation-pipeline
      description: Orchestrates market risk var calculation pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: slack.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: jira.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: teams.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/market
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: jira
    baseUri: https://scotiabank.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/market
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/market
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → market-risk-var-calculation-pipeline.yml

Orchestrates correspondent banking compliance pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Correspondent Banking Compliance Pipeline
  description: Orchestrates correspondent banking compliance pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - correspondent
  - scotiabank
  - scotiabank
  - salesforce
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: correspondent
    port: 8080
    tools:
    - name: correspondent-banking-compliance-pipeline
      description: Orchestrates correspondent banking compliance pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: scotiabank.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: salesforce.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: servicenow.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: scotiabank
    baseUri: https://api.scotiabank.com/v2
    authentication:
      type: bearer
      token: $secrets.scotiabank_api_token
    resources:
    - name: scotiabank-resource
      path: /api/correspondent
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://scotiabank.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/correspondent
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://scotiabank.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/correspondent
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → correspondent-banking-compliance-pipeline.yml

Orchestrates stress testing scenario pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Stress Testing Scenario Pipeline
  description: Orchestrates stress testing scenario pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - stress
  - scotiabank
  - scotiabank
  - salesforce
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: stress
    port: 8080
    tools:
    - name: stress-testing-scenario-pipeline
      description: Orchestrates stress testing scenario pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: scotiabank.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: salesforce.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: servicenow.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: scotiabank
    baseUri: https://api.scotiabank.com/v2
    authentication:
      type: bearer
      token: $secrets.scotiabank_api_token
    resources:
    - name: scotiabank-resource
      path: /api/stress
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://scotiabank.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/stress
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://scotiabank.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/stress
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → stress-testing-scenario-pipeline.yml

Orchestrates regulatory reporting automation pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Regulatory Reporting Automation Pipeline
  description: Orchestrates regulatory reporting automation pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - regulatory
  - scotiabank
  - snowflake
  - slack
  - jira
capability:
  exposes:
  - type: mcp
    namespace: regulatory
    port: 8080
    tools:
    - name: regulatory-reporting-automation-pipeline
      description: Orchestrates regulatory reporting automation pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: snowflake.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: slack.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: jira.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://scotiabank.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/regulatory
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/regulatory
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: jira
    baseUri: https://scotiabank.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/regulatory
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → regulatory-reporting-automation-pipeline.yml

Orchestrates customer accessibility compliance pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Customer Accessibility Compliance Pipeline
  description: Orchestrates customer accessibility compliance pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - customer
  - scotiabank
  - jira
  - teams
  - splunk
capability:
  exposes:
  - type: mcp
    namespace: customer
    port: 8080
    tools:
    - name: customer-accessibility-compliance-pipeline
      description: Orchestrates customer accessibility compliance pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: jira.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: teams.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: splunk.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://scotiabank.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/customer
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/customer
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: splunk
    baseUri: https://splunk.scotiabank.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: splunk-resource
      path: /api/customer
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → customer-accessibility-compliance-pipeline.yml

Orchestrates customer retention intervention pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Customer Retention Intervention Pipeline
  description: Orchestrates customer retention intervention pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - customer
  - scotiabank
  - scotiabank
  - salesforce
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: customer
    port: 8080
    tools:
    - name: customer-retention-intervention-pipeline
      description: Orchestrates customer retention intervention pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: scotiabank.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: salesforce.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: servicenow.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: scotiabank
    baseUri: https://api.scotiabank.com/v2
    authentication:
      type: bearer
      token: $secrets.scotiabank_api_token
    resources:
    - name: scotiabank-resource
      path: /api/customer
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://scotiabank.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/customer
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://scotiabank.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/customer
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → customer-retention-intervention-pipeline.yml

Retrieves line of credit utilization data from the Scotiabank banking and financial services systems.

naftiko: '0.5'
info:
  label: Line Of Credit Utilization
  description: Retrieves line of credit utilization data from the Scotiabank banking and financial services systems.
  tags:
  - line
  - scotiabank
  - utilization
capability:
  exposes:
  - type: mcp
    namespace: line
    port: 8080
    tools:
    - name: line-of-credit-utilization
      description: Retrieves line of credit utilization data from the Scotiabank banking and financial services systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: scotiabank.line-of-credit-utilization
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: scotiabank
    baseUri: https://api.scotiabank.com/v2
    authentication:
      type: bearer
      token: $secrets.scotiabank_api_token
    resources:
    - name: resource
      path: /line/of/credit/utilization/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: line-of-credit-utilization
        method: GET
Open in Framework → View in Fleet → line-of-credit-utilization.yml

Responds to mobile banking incidents by triaging severity, alerting engineering, and communicating with affected customers.

naftiko: '0.5'
info:
  label: Mobile Banking Incident Pipeline
  description: Responds to mobile banking incidents by triaging severity, alerting engineering, and communicating with affected customers.
  tags:
  - mobile
  - scotiabank
  - datadog
  - jira
capability:
  exposes:
  - type: mcp
    namespace: mobile
    port: 8080
    tools:
    - name: mobile-banking-incident-pipeline
      description: Responds to mobile banking incidents by triaging severity, alerting engineering, and communicating with affected customers.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: triage-incident
        type: call
        call: datadog.query-metrics
        with:
          input: '{{input_id}}'
      - name: alert-team
        type: call
        call: slack.post-message
        with:
          input: '{{input_id}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: datadog-resource
      path: /query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
  - type: http
    namespace: jira
    baseUri: https://scotiabank.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → mobile-banking-incident-pipeline.yml

Retrieves wealth advisor availability data from the Scotiabank banking and financial services systems.

naftiko: '0.5'
info:
  label: Wealth Advisor Availability
  description: Retrieves wealth advisor availability data from the Scotiabank banking and financial services systems.
  tags:
  - wealth
  - scotiabank
  - availability
capability:
  exposes:
  - type: mcp
    namespace: wealth
    port: 8080
    tools:
    - name: wealth-advisor-availability
      description: Retrieves wealth advisor availability data from the Scotiabank banking and financial services systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: scotiabank.wealth-advisor-availability
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: scotiabank
    baseUri: https://api.scotiabank.com/v2
    authentication:
      type: bearer
      token: $secrets.scotiabank_api_token
    resources:
    - name: resource
      path: /wealth/advisor/availability/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: wealth-advisor-availability
        method: GET
Open in Framework → View in Fleet → wealth-advisor-availability.yml

Checks Informatica data integration job status.

naftiko: '0.5'
info:
  label: Informatica Data Integration Monitor
  description: Checks Informatica data integration job status.
  tags:
  - data-engineering
  - etl
  - informatica
capability:
  exposes:
  - type: mcp
    namespace: data-integration
    port: 8080
    tools:
    - name: get-job-status
      description: Check Informatica job status.
      inputParameters:
      - name: job_id
        in: body
        type: string
        description: Informatica job ID.
      call: informatica.get-job
      with:
        job_id: '{{job_id}}'
  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/{{job_id}}
      inputParameters:
      - name: job_id
        in: path
      operations:
      - name: get-job
        method: GET
Open in Framework → View in Fleet → informatica-data-integration-monitor.yml

Sends a formatted message to a Microsoft Teams channel.

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

Retrieves a Looker dashboard for risk analytics.

naftiko: '0.5'
info:
  label: Looker Risk Analytics Dashboard
  description: Retrieves a Looker dashboard for risk analytics.
  tags:
  - risk
  - analytics
  - looker
capability:
  exposes:
  - type: mcp
    namespace: looker-analytics
    port: 8080
    tools:
    - name: get-risk-dashboard
      description: Retrieve a Looker risk dashboard.
      inputParameters:
      - name: dashboard_id
        in: body
        type: string
        description: Looker dashboard ID.
      call: looker.get-dashboard
      with:
        dashboard_id: '{{dashboard_id}}'
  consumes:
  - type: http
    namespace: looker
    baseUri: https://scotiabank.looker.com/api/4.0
    authentication:
      type: bearer
      token: $secrets.looker_token
    resources:
    - name: dashboards
      path: /dashboards/{{dashboard_id}}
      inputParameters:
      - name: dashboard_id
        in: path
      operations:
      - name: get-dashboard
        method: GET
Open in Framework → View in Fleet → looker-risk-analytics-dashboard.yml

Orchestrates digital banking feature rollout pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Digital Banking Feature Rollout Pipeline
  description: Orchestrates digital banking feature rollout pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - digital
  - scotiabank
  - salesforce
  - servicenow
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: digital
    port: 8080
    tools:
    - name: digital-banking-feature-rollout-pipeline
      description: Orchestrates digital banking feature rollout pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: salesforce.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: servicenow.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: snowflake.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://scotiabank.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/digital
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://scotiabank.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/digital
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://scotiabank.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/digital
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → digital-banking-feature-rollout-pipeline.yml

Orchestrates wealth management rebalancing pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Wealth Management Rebalancing Pipeline
  description: Orchestrates wealth management rebalancing pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - wealth
  - scotiabank
  - salesforce
  - servicenow
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: wealth
    port: 8080
    tools:
    - name: wealth-management-rebalancing-pipeline
      description: Orchestrates wealth management rebalancing pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: salesforce.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: servicenow.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: snowflake.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://scotiabank.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/wealth
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://scotiabank.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/wealth
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://scotiabank.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/wealth
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → wealth-management-rebalancing-pipeline.yml

Orchestrates customer onboarding digital pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Customer Onboarding Digital Pipeline
  description: Orchestrates customer onboarding digital pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - customer
  - scotiabank
  - snowflake
  - slack
  - jira
capability:
  exposes:
  - type: mcp
    namespace: customer
    port: 8080
    tools:
    - name: customer-onboarding-digital-pipeline
      description: Orchestrates customer onboarding digital pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: snowflake.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: slack.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: jira.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://scotiabank.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/customer
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/customer
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: jira
    baseUri: https://scotiabank.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/customer
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → customer-onboarding-digital-pipeline.yml

Searches Confluence for policy and operations documentation.

naftiko: '0.5'
info:
  label: Confluence Documentation Search
  description: Searches Confluence for policy and operations documentation.
  tags:
  - documentation
  - knowledge-management
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: knowledge
    port: 8080
    tools:
    - name: search-docs
      description: Search Confluence for documentation.
      inputParameters:
      - name: query
        in: body
        type: string
        description: The search keyword.
      call: confluence.search
      with:
        query: '{{query}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://scotiabank.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: search
      path: /search?cql=type=page AND text~"{{query}}"
      inputParameters:
      - name: query
        in: path
      operations:
      - name: search
        method: GET
Open in Framework → View in Fleet → confluence-documentation-search.yml

Retrieves the latest build status for an Azure DevOps pipeline.

naftiko: '0.5'
info:
  label: Azure DevOps Build Status
  description: Retrieves the latest build status for an Azure DevOps pipeline.
  tags:
  - ci-cd
  - engineering
  - azure-devops
capability:
  exposes:
  - type: mcp
    namespace: devops-ci
    port: 8080
    tools:
    - name: get-build-status
      description: Look up latest build for an Azure DevOps pipeline.
      inputParameters:
      - name: project
        in: body
        type: string
        description: The project name.
      - name: pipeline_id
        in: body
        type: string
        description: The pipeline ID.
      call: azdevops.get-latest-build
      with:
        project: '{{project}}'
        pipeline_id: '{{pipeline_id}}'
  consumes:
  - type: http
    namespace: azdevops
    baseUri: https://dev.azure.com/scotiabank
    authentication:
      type: basic
      username: $secrets.azdevops_user
      password: $secrets.azdevops_pat
    resources:
    - name: builds
      path: /{{project}}/_apis/build/builds?definitions={{pipeline_id}}&$top=1&api-version=7.0
      inputParameters:
      - name: project
        in: path
      - name: pipeline_id
        in: path
      operations:
      - name: get-latest-build
        method: GET
Open in Framework → View in Fleet → azure-devops-build-status.yml

Triggers Postman API collection test runs.

naftiko: '0.5'
info:
  label: Postman API Test Runner
  description: Triggers Postman API collection test runs.
  tags:
  - engineering
  - testing
  - postman
capability:
  exposes:
  - type: mcp
    namespace: api-testing
    port: 8080
    tools:
    - name: run-api-tests
      description: Trigger a Postman collection run.
      inputParameters:
      - name: collection_id
        in: body
        type: string
        description: Postman collection ID.
      call: postman.run-collection
      with:
        collection_id: '{{collection_id}}'
  consumes:
  - type: http
    namespace: postman
    baseUri: https://api.getpostman.com
    authentication:
      type: apiKey
      key: $secrets.postman_api_key
    resources:
    - name: monitors
      path: /monitors/{{collection_id}}/run
      inputParameters:
      - name: collection_id
        in: path
      operations:
      - name: run-collection
        method: POST
Open in Framework → View in Fleet → postman-api-test-runner.yml

Retrieves customer segment classification data from the Scotiabank banking and financial services systems.

naftiko: '0.5'
info:
  label: Customer Segment Classification
  description: Retrieves customer segment classification data from the Scotiabank banking and financial services systems.
  tags:
  - customer
  - scotiabank
  - classification
capability:
  exposes:
  - type: mcp
    namespace: customer
    port: 8080
    tools:
    - name: customer-segment-classification
      description: Retrieves customer segment classification data from the Scotiabank banking and financial services systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: scotiabank.customer-segment-classification
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: scotiabank
    baseUri: https://api.scotiabank.com/v2
    authentication:
      type: bearer
      token: $secrets.scotiabank_api_token
    resources:
    - name: resource
      path: /customer/segment/classification/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: customer-segment-classification
        method: GET
Open in Framework → View in Fleet → customer-segment-classification.yml

Creates a Zoom meeting and notifies via Microsoft Teams.

naftiko: '0.5'
info:
  label: Zoom Meeting Scheduler
  description: Creates a Zoom meeting and notifies via Microsoft Teams.
  tags:
  - collaboration
  - meetings
  - zoom
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: collaboration
    port: 8080
    tools:
    - name: schedule-zoom-meeting
      description: Create a Zoom meeting and notify via Teams.
      inputParameters:
      - name: topic
        in: body
        type: string
        description: Meeting topic.
      - name: start_time
        in: body
        type: string
        description: Start time ISO 8601.
      - name: duration
        in: body
        type: number
        description: Duration in minutes.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel.
      steps:
      - name: create-meeting
        type: call
        call: zoom.create-meeting
        with:
          topic: '{{topic}}'
          start_time: '{{start_time}}'
          duration: '{{duration}}'
      - name: notify-teams
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Zoom meeting scheduled: {{topic}} at {{start_time}}. Join: {{create-meeting.join_url}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_token
    resources:
    - name: meetings
      path: /users/me/meetings
      operations:
      - name: create-meeting
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → zoom-meeting-scheduler.yml

Retrieves a Salesforce customer profile by ID, returning name, segment, relationship manager, and total assets under management.

naftiko: '0.5'
info:
  label: Salesforce Customer Profile Lookup
  description: Retrieves a Salesforce customer profile by ID, returning name, segment, relationship manager, and total assets under management.
  tags:
  - banking
  - crm
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: customer-crm
    port: 8080
    tools:
    - name: get-customer-profile
      description: Look up a Salesforce customer profile by ID.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The Salesforce customer record ID.
      call: salesforce.get-customer
      with:
        customer_id: '{{customer_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.Name
      - name: segment
        type: string
        mapping: $.Client_Segment__c
      - name: relationship_manager
        type: string
        mapping: $.Owner.Name
      - name: total_assets
        type: number
        mapping: $.Total_Assets__c
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://scotiabank.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: customers
      path: /sobjects/Account/{{customer_id}}
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: get-customer
        method: GET
Open in Framework → View in Fleet → salesforce-customer-profile-lookup.yml

Retrieves expense reports from SAP Concur, validates against Workday cost center, and opens a ServiceNow task.

naftiko: '0.5'
info:
  label: Expense Report Review Pipeline
  description: Retrieves expense reports from SAP Concur, validates against Workday cost center, and opens a ServiceNow task.
  tags:
  - finance
  - expense
  - sap-concur
  - workday
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: expense-review
    port: 8080
    tools:
    - name: review-expense-report
      description: Validate an expense report and flag exceptions.
      inputParameters:
      - name: expense_report_id
        in: body
        type: string
        description: Concur report ID.
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      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 review: {{get-expense-report.report_name}} — {{get-employee.full_name}}'
          assigned_group: Finance_Audit
  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://scotiabank.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → expense-report-review-pipeline.yml

Triggers a SailPoint identity access review, collects results, and creates ServiceNow tasks for any access violations found.

naftiko: '0.5'
info:
  label: SailPoint Access Review Pipeline
  description: Triggers a SailPoint identity access review, collects results, and creates ServiceNow tasks for any access violations found.
  tags:
  - security
  - identity
  - sailpoint
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: access-review
    port: 8080
    tools:
    - name: run-access-review
      description: Given a campaign name, trigger SailPoint review and create tasks for violations.
      inputParameters:
      - name: campaign_name
        in: body
        type: string
        description: The SailPoint certification campaign name.
      steps:
      - name: trigger-campaign
        type: call
        call: sailpoint.create-campaign
        with:
          name: '{{campaign_name}}'
      - name: create-violation-tasks
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Access review violations: {{campaign_name}}'
          assigned_group: Identity_Access_Management
          description: 'SailPoint campaign {{campaign_name}} — Campaign ID: {{trigger-campaign.campaign_id}}. Review pending violations.'
  consumes:
  - type: http
    namespace: sailpoint
    baseUri: https://scotiabank.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://scotiabank.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → sailpoint-access-review-pipeline.yml

Retrieves mobile deposit limit check data from the Scotiabank banking and financial services systems.

naftiko: '0.5'
info:
  label: Mobile Deposit Limit Check
  description: Retrieves mobile deposit limit check data from the Scotiabank banking and financial services systems.
  tags:
  - mobile
  - scotiabank
  - check
capability:
  exposes:
  - type: mcp
    namespace: mobile
    port: 8080
    tools:
    - name: mobile-deposit-limit-check
      description: Retrieves mobile deposit limit check data from the Scotiabank banking and financial services systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: scotiabank.mobile-deposit-limit-check
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: scotiabank
    baseUri: https://api.scotiabank.com/v2
    authentication:
      type: bearer
      token: $secrets.scotiabank_api_token
    resources:
    - name: resource
      path: /mobile/deposit/limit/check/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: mobile-deposit-limit-check
        method: GET
Open in Framework → View in Fleet → mobile-deposit-limit-check.yml

Queries Cloudflare CDN performance metrics for Scotiabank digital properties.

naftiko: '0.5'
info:
  label: Cloudflare CDN Performance
  description: Queries Cloudflare CDN performance metrics for Scotiabank digital properties.
  tags:
  - infrastructure
  - cdn
  - cloudflare
capability:
  exposes:
  - type: mcp
    namespace: cdn
    port: 8080
    tools:
    - name: get-cdn-performance
      description: Retrieve Cloudflare zone analytics.
      inputParameters:
      - name: zone_id
        in: body
        type: string
        description: Cloudflare zone ID.
      call: cloudflare.get-zone-analytics
      with:
        zone_id: '{{zone_id}}'
  consumes:
  - type: http
    namespace: cloudflare
    baseUri: https://api.cloudflare.com/client/v4
    authentication:
      type: bearer
      token: $secrets.cloudflare_token
    resources:
    - name: analytics
      path: /zones/{{zone_id}}/analytics/dashboard
      inputParameters:
      - name: zone_id
        in: path
      operations:
      - name: get-zone-analytics
        method: GET
Open in Framework → View in Fleet → cloudflare-cdn-performance.yml

Queries SolarWinds for network node health at branch locations.

naftiko: '0.5'
info:
  label: SolarWinds Network Health
  description: Queries SolarWinds for network node health at branch locations.
  tags:
  - networking
  - infrastructure
  - solarwinds
capability:
  exposes:
  - type: mcp
    namespace: network-health
    port: 8080
    tools:
    - name: get-network-health
      description: Query SolarWinds network nodes.
      inputParameters:
      - name: branch_code
        in: body
        type: string
        description: Branch code.
      call: solarwinds.query-nodes
      with:
        branch_code: '{{branch_code}}'
  consumes:
  - type: http
    namespace: solarwinds
    baseUri: https://solarwinds.scotiabank.com:17778/SolarWinds/InformationService/v3/Json
    authentication:
      type: basic
      username: $secrets.solarwinds_user
      password: $secrets.solarwinds_password
    resources:
    - name: nodes
      path: /Query?query=SELECT+NodeID,Caption,Status+FROM+Orion.Nodes+WHERE+Location='{{branch_code}}'
      inputParameters:
      - name: branch_code
        in: path
      operations:
      - name: query-nodes
        method: GET
Open in Framework → View in Fleet → solarwinds-network-health.yml

Queries New Relic for banking application performance.

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

Retrieves credit card rewards balance data from the Scotiabank banking and financial services systems.

naftiko: '0.5'
info:
  label: Credit Card Rewards Balance
  description: Retrieves credit card rewards balance data from the Scotiabank banking and financial services systems.
  tags:
  - credit
  - scotiabank
  - balance
capability:
  exposes:
  - type: mcp
    namespace: credit
    port: 8080
    tools:
    - name: credit-card-rewards-balance
      description: Retrieves credit card rewards balance data from the Scotiabank banking and financial services systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: scotiabank.credit-card-rewards-balance
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: scotiabank
    baseUri: https://api.scotiabank.com/v2
    authentication:
      type: bearer
      token: $secrets.scotiabank_api_token
    resources:
    - name: resource
      path: /credit/card/rewards/balance/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: credit-card-rewards-balance
        method: GET
Open in Framework → View in Fleet → credit-card-rewards-balance.yml

When a customer complaint is escalated, creates a ServiceNow priority case, pulls customer relationship data from Salesforce, and notifies the branch manager and ombudsman via Microsoft Teams.

naftiko: '0.5'
info:
  label: Customer Complaint Escalation Pipeline
  description: When a customer complaint is escalated, creates a ServiceNow priority case, pulls customer relationship data from Salesforce, and notifies the branch manager and ombudsman via Microsoft Teams.
  tags:
  - customer-service
  - complaints
  - servicenow
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: complaint-escalation
    port: 8080
    tools:
    - name: escalate-complaint
      description: Given a customer ID and complaint details, create a priority case and notify relevant parties.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The Salesforce customer ID.
      - name: complaint_summary
        in: body
        type: string
        description: Summary of the complaint.
      - name: branch_code
        in: body
        type: string
        description: The originating branch code.
      steps:
      - name: get-customer
        type: call
        call: salesforce.get-customer
        with:
          customer_id: '{{customer_id}}'
      - name: create-case
        type: call
        call: servicenow.create-case
        with:
          short_description: 'Escalated Complaint: {{get-customer.name}} — Branch {{branch_code}}'
          category: customer_complaint
          urgency: high
          assigned_group: Customer_Relations
          description: 'Customer: {{get-customer.name}} ({{get-customer.segment}}). Branch: {{branch_code}}. Complaint: {{complaint_summary}}.'
      - name: notify-branch-manager
        type: call
        call: msteams.send-message
        with:
          channel_id: branch_{{branch_code}}
          text: 'Complaint Escalated: {{get-customer.name}} ({{get-customer.segment}}). Case: {{create-case.number}}. Summary: {{complaint_summary}}.'
      - name: notify-ombudsman
        type: call
        call: msteams.send-message
        with:
          channel_id: customer_relations
          text: 'Escalated Complaint: {{get-customer.name}} — Branch {{branch_code}}. Case: {{create-case.number}}. Segment: {{get-customer.segment}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://scotiabank.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: customers
      path: /sobjects/Account/{{customer_id}}
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: get-customer
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://scotiabank.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cases
      path: /table/sn_customerservice_case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → customer-complaint-escalation-pipeline.yml

Retrieves the status of a payment transaction via the MuleSoft payments API, returning transaction ID, status, amount, and timestamp.

naftiko: '0.5'
info:
  label: Payment Transaction Status Lookup
  description: Retrieves the status of a payment transaction via the MuleSoft payments API, returning transaction ID, status, amount, and timestamp.
  tags:
  - payments
  - banking
  - mulesoft
capability:
  exposes:
  - type: mcp
    namespace: payments
    port: 8080
    tools:
    - name: get-transaction-status
      description: Look up a payment transaction by ID.
      inputParameters:
      - name: transaction_id
        in: body
        type: string
        description: The payment transaction ID.
      call: mulesoft.get-transaction
      with:
        transaction_id: '{{transaction_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: amount
        type: number
        mapping: $.amount
      - name: currency
        type: string
        mapping: $.currency
      - name: timestamp
        type: string
        mapping: $.created_at
  consumes:
  - type: http
    namespace: mulesoft
    baseUri: https://api.scotiabank.com/mulesoft/v1
    authentication:
      type: bearer
      token: $secrets.mulesoft_token
    resources:
    - name: transactions
      path: /payments/transactions/{{transaction_id}}
      inputParameters:
      - name: transaction_id
        in: path
      operations:
      - name: get-transaction
        method: GET
Open in Framework → View in Fleet → payment-transaction-status-lookup.yml

Orchestrates operational risk incident pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Operational Risk Incident Pipeline
  description: Orchestrates operational risk incident pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - operational
  - scotiabank
  - splunk
  - confluence
  - bloomberg
capability:
  exposes:
  - type: mcp
    namespace: operational
    port: 8080
    tools:
    - name: operational-risk-incident-pipeline
      description: Orchestrates operational risk incident pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: splunk.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: confluence.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: bloomberg.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.scotiabank.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: splunk-resource
      path: /api/operational
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://scotiabank.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/operational
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: bloomberg-resource
      path: /api/operational
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → operational-risk-incident-pipeline.yml

Retrieves customer digital engagement score data from the Scotiabank banking and financial services systems.

naftiko: '0.5'
info:
  label: Customer Digital Engagement Score
  description: Retrieves customer digital engagement score data from the Scotiabank banking and financial services systems.
  tags:
  - customer
  - scotiabank
  - score
capability:
  exposes:
  - type: mcp
    namespace: customer
    port: 8080
    tools:
    - name: customer-digital-engagement-score
      description: Retrieves customer digital engagement score data from the Scotiabank banking and financial services systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: scotiabank.customer-digital-engagement-score
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: scotiabank
    baseUri: https://api.scotiabank.com/v2
    authentication:
      type: bearer
      token: $secrets.scotiabank_api_token
    resources:
    - name: resource
      path: /customer/digital/engagement/score/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: customer-digital-engagement-score
        method: GET
Open in Framework → View in Fleet → customer-digital-engagement-score.yml

Orchestrates investment trade settlement pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Investment Trade Settlement Pipeline
  description: Orchestrates investment trade settlement pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - investment
  - scotiabank
  - bloomberg
  - scotiabank
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: investment
    port: 8080
    tools:
    - name: investment-trade-settlement-pipeline
      description: Orchestrates investment trade settlement pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: bloomberg.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: scotiabank.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: salesforce.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: bloomberg-resource
      path: /api/investment
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: scotiabank
    baseUri: https://api.scotiabank.com/v2
    authentication:
      type: bearer
      token: $secrets.scotiabank_api_token
    resources:
    - name: scotiabank-resource
      path: /api/investment
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://scotiabank.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/investment
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → investment-trade-settlement-pipeline.yml

Orchestrates credit risk monitoring pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Credit Risk Monitoring Pipeline
  description: Orchestrates credit risk monitoring pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - credit
  - scotiabank
  - slack
  - jira
  - teams
capability:
  exposes:
  - type: mcp
    namespace: credit
    port: 8080
    tools:
    - name: credit-risk-monitoring-pipeline
      description: Orchestrates credit risk monitoring pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: slack.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: jira.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: teams.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/credit
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: jira
    baseUri: https://scotiabank.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/credit
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/credit
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → credit-risk-monitoring-pipeline.yml

Orchestrates cybersecurity threat intelligence pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Cybersecurity Threat Intelligence Pipeline
  description: Orchestrates cybersecurity threat intelligence pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - cybersecurity
  - scotiabank
  - splunk
  - confluence
  - bloomberg
capability:
  exposes:
  - type: mcp
    namespace: cybersecurity
    port: 8080
    tools:
    - name: cybersecurity-threat-intelligence-pipeline
      description: Orchestrates cybersecurity threat intelligence pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: splunk.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: confluence.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: bloomberg.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.scotiabank.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: splunk-resource
      path: /api/cybersecurity
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://scotiabank.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/cybersecurity
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: bloomberg-resource
      path: /api/cybersecurity
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → cybersecurity-threat-intelligence-pipeline.yml

Retrieves a SAP Concur expense report by ID.

naftiko: '0.5'
info:
  label: SAP Concur Expense Report Lookup
  description: Retrieves a SAP Concur expense report by ID.
  tags:
  - finance
  - expense
  - sap-concur
capability:
  exposes:
  - type: mcp
    namespace: finance-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 expense report ID.
      call: concur.get-expense-report
      with:
        report_id: '{{report_id}}'
  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
Open in Framework → View in Fleet → sap-concur-expense-report-lookup.yml

Initiates a wire transfer via MuleSoft, logs the transaction to Splunk for compliance, creates a ServiceNow tracking ticket, and notifies the treasury operations team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Wire Transfer Processing Pipeline
  description: Initiates a wire transfer via MuleSoft, logs the transaction to Splunk for compliance, creates a ServiceNow tracking ticket, and notifies the treasury operations team via Microsoft Teams.
  tags:
  - payments
  - wire-transfer
  - mulesoft
  - splunk
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: wire-transfers
    port: 8080
    tools:
    - name: process-wire-transfer
      description: Given transfer details, initiate wire, log to Splunk, create tracking ticket, and notify treasury.
      inputParameters:
      - name: from_account
        in: body
        type: string
        description: The source account number.
      - name: to_account
        in: body
        type: string
        description: The destination account number.
      - name: amount
        in: body
        type: number
        description: The transfer amount.
      - name: currency
        in: body
        type: string
        description: The currency code.
      - name: beneficiary_bank
        in: body
        type: string
        description: The beneficiary bank SWIFT code.
      steps:
      - name: initiate-transfer
        type: call
        call: mulesoft.initiate-wire
        with:
          from_account: '{{from_account}}'
          to_account: '{{to_account}}'
          amount: '{{amount}}'
          currency: '{{currency}}'
          swift_code: '{{beneficiary_bank}}'
      - name: log-transaction
        type: call
        call: splunk.create-event
        with:
          index: wire_transfers
          event: 'Wire transfer {{initiate-transfer.reference}}. From: {{from_account}}. To: {{to_account}}. Amount: {{amount}} {{currency}}.'
      - name: create-ticket
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Wire Transfer: {{initiate-transfer.reference}} — {{amount}} {{currency}}'
          assigned_group: Treasury_Operations
          description: 'Wire ref: {{initiate-transfer.reference}}. From: {{from_account}}. To: {{to_account}} ({{beneficiary_bank}}). Amount: {{amount}} {{currency}}.'
      - name: notify-treasury
        type: call
        call: msteams.send-message
        with:
          channel_id: treasury_operations
          text: 'Wire Transfer Initiated: {{initiate-transfer.reference}} — {{amount}} {{currency}} to {{beneficiary_bank}}. Ticket: {{create-ticket.number}}.'
  consumes:
  - type: http
    namespace: mulesoft
    baseUri: https://api.scotiabank.com/mulesoft/v1
    authentication:
      type: bearer
      token: $secrets.mulesoft_token
    resources:
    - name: wire-transfers
      path: /payments/wire-transfers
      operations:
      - name: initiate-wire
        method: POST
  - type: http
    namespace: splunk
    baseUri: https://splunk.scotiabank.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: events
      path: /collectors/event
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://scotiabank.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → wire-transfer-processing-pipeline.yml

Retrieves customer product eligibility data from the Scotiabank banking and financial services systems.

naftiko: '0.5'
info:
  label: Customer Product Eligibility
  description: Retrieves customer product eligibility data from the Scotiabank banking and financial services systems.
  tags:
  - customer
  - scotiabank
  - eligibility
capability:
  exposes:
  - type: mcp
    namespace: customer
    port: 8080
    tools:
    - name: customer-product-eligibility
      description: Retrieves customer product eligibility data from the Scotiabank banking and financial services systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: scotiabank.customer-product-eligibility
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: scotiabank
    baseUri: https://api.scotiabank.com/v2
    authentication:
      type: bearer
      token: $secrets.scotiabank_api_token
    resources:
    - name: resource
      path: /customer/product/eligibility/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: customer-product-eligibility
        method: GET
Open in Framework → View in Fleet → customer-product-eligibility.yml

Searches SharePoint for compliance and policy documents.

naftiko: '0.5'
info:
  label: SharePoint Document Search
  description: Searches SharePoint for compliance and policy documents.
  tags:
  - documentation
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: doc-search
    port: 8080
    tools:
    - name: search-documents
      description: Search SharePoint for documents.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: The SharePoint site ID.
      - name: query
        in: body
        type: string
        description: The search keyword.
      call: sharepoint.search
      with:
        site_id: '{{site_id}}'
        query: '{{query}}'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: search
      path: /{{site_id}}/drive/root/search(q='{{query}}')
      inputParameters:
      - name: site_id
        in: path
      - name: query
        in: path
      operations:
      - name: search
        method: GET
Open in Framework → View in Fleet → sharepoint-document-search.yml

Orchestrates regulatory capital calculation pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Regulatory Capital Calculation Pipeline
  description: Orchestrates regulatory capital calculation pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - regulatory
  - scotiabank
  - confluence
  - bloomberg
  - scotiabank
capability:
  exposes:
  - type: mcp
    namespace: regulatory
    port: 8080
    tools:
    - name: regulatory-capital-calculation-pipeline
      description: Orchestrates regulatory capital calculation pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: confluence.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: bloomberg.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: scotiabank.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://scotiabank.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/regulatory
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: bloomberg-resource
      path: /api/regulatory
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: scotiabank
    baseUri: https://api.scotiabank.com/v2
    authentication:
      type: bearer
      token: $secrets.scotiabank_api_token
    resources:
    - name: scotiabank-resource
      path: /api/regulatory
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → regulatory-capital-calculation-pipeline.yml

Executes a SQL query against Snowflake.

naftiko: '0.5'
info:
  label: Snowflake Data Warehouse Query
  description: Executes a SQL query against Snowflake.
  tags:
  - data-management
  - analytics
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: data-warehouse
    port: 8080
    tools:
    - name: execute-snowflake-query
      description: Execute a SQL statement against Snowflake.
      inputParameters:
      - name: warehouse
        in: body
        type: string
        description: Warehouse name.
      - name: database
        in: body
        type: string
        description: Database name.
      - name: sql_statement
        in: body
        type: string
        description: SQL statement.
      call: snowflake.execute-sql
      with:
        warehouse: '{{warehouse}}'
        database: '{{database}}'
        statement: '{{sql_statement}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://scotiabank.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-sql
        method: POST
Open in Framework → View in Fleet → snowflake-data-warehouse-query.yml

Coordinates annual wealth client reviews by assembling portfolio data, generating reports, and scheduling advisor meetings.

naftiko: '0.5'
info:
  label: Wealth Client Review Pipeline
  description: Coordinates annual wealth client reviews by assembling portfolio data, generating reports, and scheduling advisor meetings.
  tags:
  - wealth
  - scotiabank
  - salesforce
  - teams
capability:
  exposes:
  - type: mcp
    namespace: wealth
    port: 8080
    tools:
    - name: wealth-client-review-pipeline
      description: Coordinates annual wealth client reviews by assembling portfolio data, generating reports, and scheduling advisor meetings.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: get-portfolio
        type: call
        call: snowflake.run-query
        with:
          input: '{{input_id}}'
      - name: update-crm
        type: call
        call: salesforce.update-contact
        with:
          input: '{{input_id}}'
      - name: schedule-meeting
        type: call
        call: teams.create-event
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://scotiabank.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://scotiabank.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /sobjects/Contact
      operations:
      - name: update-contact
        method: PATCH
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /users/events
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → wealth-client-review-pipeline.yml

Retrieves a lending application status from the Salesforce lending module, returning application stage, credit decision, and next steps.

naftiko: '0.5'
info:
  label: Lending Application Status
  description: Retrieves a lending application status from the Salesforce lending module, returning application stage, credit decision, and next steps.
  tags:
  - lending
  - credit
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: lending
    port: 8080
    tools:
    - name: get-lending-application
      description: Look up a lending application by ID.
      inputParameters:
      - name: application_id
        in: body
        type: string
        description: The Salesforce lending application ID.
      call: salesforce.get-application
      with:
        application_id: '{{application_id}}'
      outputParameters:
      - name: stage
        type: string
        mapping: $.Stage__c
      - name: credit_decision
        type: string
        mapping: $.Credit_Decision__c
      - name: amount_requested
        type: number
        mapping: $.Amount_Requested__c
      - name: applicant_name
        type: string
        mapping: $.Applicant_Name__c
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://scotiabank.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: applications
      path: /sobjects/Lending_Application__c/{{application_id}}
      inputParameters:
      - name: application_id
        in: path
      operations:
      - name: get-application
        method: GET
Open in Framework → View in Fleet → lending-application-status.yml

Queries Snowflake warehouse credit consumption metrics.

naftiko: '0.5'
info:
  label: Snowflake Data Warehouse Usage
  description: Queries Snowflake warehouse credit consumption metrics.
  tags:
  - data-management
  - cost-management
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: finops
    port: 8080
    tools:
    - name: get-warehouse-usage
      description: Query Snowflake warehouse credits.
      inputParameters:
      - name: warehouse_name
        in: body
        type: string
        description: Warehouse name.
      call: snowflake.execute-sql
      with:
        statement: SELECT sum(credits_used) FROM snowflake.account_usage.warehouse_metering_history WHERE warehouse_name = '{{warehouse_name}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://scotiabank.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-sql
        method: POST
Open in Framework → View in Fleet → snowflake-data-warehouse-usage.yml

Orchestrates customer data quality pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Customer Data Quality Pipeline
  description: Orchestrates customer data quality pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - customer
  - scotiabank
  - confluence
  - bloomberg
  - scotiabank
capability:
  exposes:
  - type: mcp
    namespace: customer
    port: 8080
    tools:
    - name: customer-data-quality-pipeline
      description: Orchestrates customer data quality pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: confluence.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: bloomberg.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: scotiabank.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://scotiabank.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/customer
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: bloomberg-resource
      path: /api/customer
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: scotiabank
    baseUri: https://api.scotiabank.com/v2
    authentication:
      type: bearer
      token: $secrets.scotiabank_api_token
    resources:
    - name: scotiabank-resource
      path: /api/customer
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → customer-data-quality-pipeline.yml

Retrieves gic rate comparison data from the Scotiabank banking and financial services systems.

naftiko: '0.5'
info:
  label: Gic Rate Comparison
  description: Retrieves gic rate comparison data from the Scotiabank banking and financial services systems.
  tags:
  - gic
  - scotiabank
  - comparison
capability:
  exposes:
  - type: mcp
    namespace: gic
    port: 8080
    tools:
    - name: gic-rate-comparison
      description: Retrieves gic rate comparison data from the Scotiabank banking and financial services systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: scotiabank.gic-rate-comparison
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: scotiabank
    baseUri: https://api.scotiabank.com/v2
    authentication:
      type: bearer
      token: $secrets.scotiabank_api_token
    resources:
    - name: resource
      path: /gic/rate/comparison/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: gic-rate-comparison
        method: GET
Open in Framework → View in Fleet → gic-rate-comparison.yml

Orchestrates open banking api pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Open Banking Api Pipeline
  description: Orchestrates open banking api pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - open
  - scotiabank
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: open
    port: 8080
    tools:
    - name: open-banking-api-pipeline
      description: Orchestrates open banking api pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: servicenow.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: snowflake.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: slack.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://scotiabank.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/open
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://scotiabank.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/open
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/open
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → open-banking-api-pipeline.yml

Orchestrates customer financial wellness pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Customer Financial Wellness Pipeline
  description: Orchestrates customer financial wellness pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - customer
  - scotiabank
  - snowflake
  - slack
  - jira
capability:
  exposes:
  - type: mcp
    namespace: customer
    port: 8080
    tools:
    - name: customer-financial-wellness-pipeline
      description: Orchestrates customer financial wellness pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: snowflake.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: slack.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: jira.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://scotiabank.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/customer
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/customer
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: jira
    baseUri: https://scotiabank.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/customer
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → customer-financial-wellness-pipeline.yml

Retrieves a wealth management client's portfolio summary from the investment platform via MuleSoft, returning asset allocation, total value, and performance metrics.

naftiko: '0.5'
info:
  label: Wealth Management Portfolio Summary
  description: Retrieves a wealth management client's portfolio summary from the investment platform via MuleSoft, returning asset allocation, total value, and performance metrics.
  tags:
  - wealth
  - portfolio
  - mulesoft
capability:
  exposes:
  - type: mcp
    namespace: wealth-mgmt
    port: 8080
    tools:
    - name: get-portfolio-summary
      description: Look up a client portfolio summary.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The wealth management client ID.
      call: mulesoft.get-portfolio
      with:
        client_id: '{{client_id}}'
      outputParameters:
      - name: total_value
        type: number
        mapping: $.total_market_value
      - name: ytd_return
        type: number
        mapping: $.ytd_return_pct
      - name: asset_allocation
        type: object
        mapping: $.asset_allocation
  consumes:
  - type: http
    namespace: mulesoft
    baseUri: https://api.scotiabank.com/mulesoft/v1
    authentication:
      type: bearer
      token: $secrets.mulesoft_token
    resources:
    - name: portfolios
      path: /wealth/clients/{{client_id}}/portfolio
      inputParameters:
      - name: client_id
        in: path
      operations:
      - name: get-portfolio
        method: GET
Open in Framework → View in Fleet → wealth-management-portfolio-summary.yml

When a fraud alert is triggered, enriches with customer data from Salesforce, creates a ServiceNow security incident, blocks the account via MuleSoft, and notifies the fraud operations team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Fraud Alert Investigation Pipeline
  description: When a fraud alert is triggered, enriches with customer data from Salesforce, creates a ServiceNow security incident, blocks the account via MuleSoft, and notifies the fraud operations team via Microsoft Teams.
  tags:
  - fraud-detection
  - risk
  - salesforce
  - servicenow
  - mulesoft
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: fraud-ops
    port: 8080
    tools:
    - name: investigate-fraud-alert
      description: Given a customer ID and alert details, enrich, create incident, block account, and notify fraud ops.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The Salesforce customer ID.
      - name: alert_type
        in: body
        type: string
        description: The fraud alert type.
      - name: transaction_id
        in: body
        type: string
        description: The suspicious transaction ID.
      - name: alert_score
        in: body
        type: number
        description: The fraud risk score.
      steps:
      - name: get-customer
        type: call
        call: salesforce.get-customer
        with:
          customer_id: '{{customer_id}}'
      - name: create-security-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Fraud Alert: {{alert_type}} — {{get-customer.name}}'
          category: fraud
          urgency: critical
          assigned_group: Fraud_Operations
          description: 'Customer: {{get-customer.name}}. Transaction: {{transaction_id}}. Alert type: {{alert_type}}. Score: {{alert_score}}.'
      - name: block-account
        type: call
        call: mulesoft.block-account
        with:
          customer_id: '{{customer_id}}'
          reason: fraud_alert_{{alert_type}}
      - name: notify-fraud-ops
        type: call
        call: msteams.send-message
        with:
          channel_id: fraud_operations
          text: 'FRAUD ALERT: {{alert_type}} for {{get-customer.name}}. Score: {{alert_score}}. Transaction: {{transaction_id}}. Account blocked. Incident: {{create-security-incident.number}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://scotiabank.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: customers
      path: /sobjects/Account/{{customer_id}}
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: get-customer
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://scotiabank.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: mulesoft
    baseUri: https://api.scotiabank.com/mulesoft/v1
    authentication:
      type: bearer
      token: $secrets.mulesoft_token
    resources:
    - name: account-actions
      path: /core-banking/accounts/{{customer_id}}/block
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: block-account
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → fraud-alert-investigation-pipeline.yml

Retrieves trade execution status data from the Scotiabank banking and financial services systems.

naftiko: '0.5'
info:
  label: Trade Execution Status
  description: Retrieves trade execution status data from the Scotiabank banking and financial services systems.
  tags:
  - trade
  - scotiabank
  - status
capability:
  exposes:
  - type: mcp
    namespace: trade
    port: 8080
    tools:
    - name: trade-execution-status
      description: Retrieves trade execution status data from the Scotiabank banking and financial services systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: scotiabank.trade-execution-status
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: scotiabank
    baseUri: https://api.scotiabank.com/v2
    authentication:
      type: bearer
      token: $secrets.scotiabank_api_token
    resources:
    - name: resource
      path: /trade/execution/status/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: trade-execution-status
        method: GET
Open in Framework → View in Fleet → trade-execution-status.yml

Orchestrates customer feedback action pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Customer Feedback Action Pipeline
  description: Orchestrates customer feedback action pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - customer
  - scotiabank
  - salesforce
  - servicenow
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: customer
    port: 8080
    tools:
    - name: customer-feedback-action-pipeline
      description: Orchestrates customer feedback action pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: salesforce.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: servicenow.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: snowflake.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://scotiabank.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/customer
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://scotiabank.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/customer
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://scotiabank.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/customer
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → customer-feedback-action-pipeline.yml

When a trade is executed on the wealth management platform, logs the trade in Splunk, updates the client record in Salesforce, and notifies the investment advisor via Microsoft Teams.

naftiko: '0.5'
info:
  label: Investment Trade Execution Notifier
  description: When a trade is executed on the wealth management platform, logs the trade in Splunk, updates the client record in Salesforce, and notifies the investment advisor via Microsoft Teams.
  tags:
  - wealth
  - trading
  - splunk
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: trade-execution
    port: 8080
    tools:
    - name: notify-trade-execution
      description: Given trade details, log to Splunk, update Salesforce, and notify the advisor.
      inputParameters:
      - name: trade_id
        in: body
        type: string
        description: The trade execution ID.
      - name: client_id
        in: body
        type: string
        description: The Salesforce client ID.
      - name: symbol
        in: body
        type: string
        description: The traded security symbol.
      - name: quantity
        in: body
        type: number
        description: The quantity traded.
      - name: price
        in: body
        type: number
        description: The execution price.
      - name: side
        in: body
        type: string
        description: Buy or Sell.
      steps:
      - name: log-trade
        type: call
        call: splunk.create-event
        with:
          index: trade_executions
          event: 'Trade {{trade_id}}: {{side}} {{quantity}} {{symbol}} at {{price}}. Client: {{client_id}}.'
      - name: update-client
        type: call
        call: salesforce.update-activity
        with:
          client_id: '{{client_id}}'
          activity_type: trade_execution
          description: '{{side}} {{quantity}} {{symbol}} at {{price}}. Trade: {{trade_id}}.'
      - name: notify-advisor
        type: call
        call: msteams.send-message
        with:
          channel_id: wealth_advisors
          text: 'Trade Executed: {{side}} {{quantity}} {{symbol}} at ${{price}} for client {{client_id}}. Trade ID: {{trade_id}}.'
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.scotiabank.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: events
      path: /collectors/event
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://scotiabank.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: activities
      path: /sobjects/Task
      operations:
      - name: update-activity
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → investment-trade-execution-notifier.yml

Orchestrates business loan origination pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Business Loan Origination Pipeline
  description: Orchestrates business loan origination pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - business
  - scotiabank
  - teams
  - splunk
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: business
    port: 8080
    tools:
    - name: business-loan-origination-pipeline
      description: Orchestrates business loan origination pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: teams.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: splunk.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: confluence.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/business
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: splunk
    baseUri: https://splunk.scotiabank.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: splunk-resource
      path: /api/business
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://scotiabank.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/business
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → business-loan-origination-pipeline.yml

Retrieves compensation data from Workday and sends a review package to the manager via Outlook.

naftiko: '0.5'
info:
  label: Workday Compensation Review
  description: Retrieves compensation data from Workday and sends a review package to the manager via Outlook.
  tags:
  - hr
  - compensation
  - workday
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: hr-compensation
    port: 8080
    tools:
    - name: generate-comp-review
      description: Generate a compensation review for an employee.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      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}}'
      - name: send-review
        type: call
        call: outlook.send-mail
        with:
          recipient: '{{get-employee.manager_email}}'
          subject: 'Compensation Review: {{get-employee.full_name}}'
          body: 'Employee: {{get-employee.full_name}}. Base: {{get-compensation.base_pay}}. Performance: {{get-compensation.performance_rating}}.'
  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}}/compensation
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-compensation
        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-mail
        method: POST
Open in Framework → View in Fleet → workday-compensation-review.yml

Orchestrates customer journey analytics pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Customer Journey Analytics Pipeline
  description: Orchestrates customer journey analytics pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - customer
  - scotiabank
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: customer
    port: 8080
    tools:
    - name: customer-journey-analytics-pipeline
      description: Orchestrates customer journey analytics pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: servicenow.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: snowflake.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: slack.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://scotiabank.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/customer
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://scotiabank.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/customer
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/customer
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → customer-journey-analytics-pipeline.yml

Orchestrates aml case investigation pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Aml Case Investigation Pipeline
  description: Orchestrates aml case investigation pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
  tags:
  - aml
  - scotiabank
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: aml
    port: 8080
    tools:
    - name: aml-case-investigation-pipeline
      description: Orchestrates aml case investigation pipeline across banking and financial services systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: servicenow.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: snowflake.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: slack.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://scotiabank.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/aml
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://scotiabank.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/aml
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/aml
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → aml-case-investigation-pipeline.yml

Retrieves the internal credit risk score and rating for a corporate or retail customer from the risk management system.

naftiko: '0.5'
info:
  label: Credit Risk Score Lookup
  description: Retrieves the internal credit risk score and rating for a corporate or retail customer from the risk management system.
  tags:
  - risk
  - credit
  - banking
capability:
  exposes:
  - type: mcp
    namespace: credit-risk
    port: 8080
    tools:
    - name: get-credit-risk-score
      description: Look up a customer's credit risk score and internal rating.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The customer identifier.
      call: risk-api.get-credit-score
      with:
        id: '{{customer_id}}'
  consumes:
  - type: http
    namespace: risk-api
    baseUri: https://api.sc.com/risk/v1
    authentication:
      type: bearer
      token: $secrets.sc_risk_token
    resources:
    - name: credit-scores
      path: /customers/{{id}}/credit-score
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-credit-score
        method: GET
Open in Framework → View in Fleet → credit-risk-score-lookup.yml

Triggers a refresh of a Power BI dataset to update banking dashboards with the latest data.

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

Searches for a client's relationship manager in Salesforce CRM by customer name or account number.

naftiko: '0.5'
info:
  label: Salesforce Relationship Manager Lookup
  description: Searches for a client's relationship manager in Salesforce CRM by customer name or account number.
  tags:
  - crm
  - salesforce
  - relationship-management
capability:
  exposes:
  - type: mcp
    namespace: crm
    port: 8080
    tools:
    - name: find-relationship-manager
      description: Look up the relationship manager for a client in Salesforce.
      inputParameters:
      - name: client_name
        in: body
        type: string
        description: The client name or account number.
      call: salesforce.search-accounts
      with:
        query: '{{client_name}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://sc.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/search?q={{query}}
      inputParameters:
      - name: query
        in: query
      operations:
      - name: search-accounts
        method: GET
Open in Framework → View in Fleet → salesforce-relationship-manager-lookup.yml

Orchestrates payment fraud prevention pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Payment Fraud Prevention Pipeline
  description: Orchestrates payment fraud prevention pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - payment
  - standard-chartered
  - snowflake
  - slack
  - jira
capability:
  exposes:
  - type: mcp
    namespace: payment
    port: 8080
    tools:
    - name: payment-fraud-prevention-pipeline
      description: Orchestrates payment fraud prevention pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: snowflake.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: slack.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: jira.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://sc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/payment
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/payment
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: jira
    baseUri: https://sc.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/payment
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → payment-fraud-prevention-pipeline.yml

Reconciles trade settlements by comparing Murex trade records with the core banking settlement records, flagging discrepancies, and creating a Jira ticket for any breaks.

naftiko: '0.5'
info:
  label: Trade Settlement Reconciliation Orchestrator
  description: Reconciles trade settlements by comparing Murex trade records with the core banking settlement records, flagging discrepancies, and creating a Jira ticket for any breaks.
  tags:
  - trading
  - settlements
  - murex
  - jira
capability:
  exposes:
  - type: mcp
    namespace: trade-reconciliation
    port: 8080
    tools:
    - name: reconcile-settlements
      description: Reconcile trade settlements between Murex and core banking, flagging any breaks.
      inputParameters:
      - name: settlement_date
        in: body
        type: string
        description: The settlement date in YYYY-MM-DD format.
      - name: desk
        in: body
        type: string
        description: The trading desk identifier.
      steps:
      - name: get-murex-settlements
        type: call
        call: murex.get-settlements
        with:
          desk: '{{desk}}'
          date: '{{settlement_date}}'
      - name: get-banking-settlements
        type: call
        call: core-banking.get-settlements
        with:
          date: '{{settlement_date}}'
      - name: create-break-ticket
        type: call
        call: jira.create-issue
        with:
          project: RECON
          summary: Settlement breaks for {{desk}} on {{settlement_date}}
          description: 'Murex count: {{get-murex-settlements.count}}. Banking count: {{get-banking-settlements.count}}.'
          issuetype: Bug
  consumes:
  - type: http
    namespace: murex
    baseUri: https://murex.sc.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sc_murex_token
    resources:
    - name: settlements
      path: /settlements?desk={{desk}}&date={{date}}
      inputParameters:
      - name: desk
        in: query
      - name: date
        in: query
      operations:
      - name: get-settlements
        method: GET
  - type: http
    namespace: core-banking
    baseUri: https://api.sc.com/core-banking/v1
    authentication:
      type: bearer
      token: $secrets.sc_core_banking_token
    resources:
    - name: settlements
      path: /settlements?date={{date}}
      inputParameters:
      - name: date
        in: query
      operations:
      - name: get-settlements
        method: GET
  - type: http
    namespace: jira
    baseUri: https://sc.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → trade-settlement-reconciliation-orchestrator.yml

Orchestrates treasury risk management pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Treasury Risk Management Pipeline
  description: Orchestrates treasury risk management pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - treasury
  - standard-chartered
  - salesforce
  - servicenow
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: treasury
    port: 8080
    tools:
    - name: treasury-risk-management-pipeline
      description: Orchestrates treasury risk management pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: salesforce.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: servicenow.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: snowflake.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://sc.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/treasury
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://sc.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/treasury
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://sc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/treasury
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → treasury-risk-management-pipeline.yml

Queries Dynatrace for active performance problems on Standard Chartered banking applications.

naftiko: '0.5'
info:
  label: Dynatrace Application Performance
  description: Queries Dynatrace for active performance problems on Standard Chartered banking applications.
  tags:
  - monitoring
  - dynatrace
  - performance
capability:
  exposes:
  - type: mcp
    namespace: app-monitoring
    port: 8080
    tools:
    - name: get-app-problems
      description: Get active Dynatrace problems for banking applications.
      inputParameters:
      - name: severity
        in: body
        type: string
        description: Minimum severity level.
      call: dynatrace.get-problems
      with:
        severity: '{{severity}}'
  consumes:
  - type: http
    namespace: dynatrace
    baseUri: https://sc.live.dynatrace.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: problems
      path: /problems?problemSelector=status("OPEN")&severityLevel={{severity}}
      inputParameters:
      - name: severity
        in: query
      operations:
      - name: get-problems
        method: GET
Open in Framework → View in Fleet → dynatrace-application-performance.yml

Verifies trade finance documents by extracting data from uploaded documents in Box, validating against the LC terms, and updating the trade case in ServiceNow.

naftiko: '0.5'
info:
  label: Trade Document Verification Orchestrator
  description: Verifies trade finance documents by extracting data from uploaded documents in Box, validating against the LC terms, and updating the trade case in ServiceNow.
  tags:
  - trade-finance
  - documents
  - box
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: trade-docs
    port: 8080
    tools:
    - name: verify-trade-documents
      description: Extract data from trade documents, validate against LC terms, and update the trade case.
      inputParameters:
      - name: lc_number
        in: body
        type: string
        description: The letter of credit number.
      - name: document_folder_id
        in: body
        type: string
        description: The Box folder ID containing the trade documents.
      steps:
      - name: get-documents
        type: call
        call: box.get-folder-items
        with:
          folder_id: '{{document_folder_id}}'
      - name: get-lc-terms
        type: call
        call: trade-api.get-lc
        with:
          lc_number: '{{lc_number}}'
      - name: update-case
        type: call
        call: servicenow.update-request
        with:
          lc_number: '{{lc_number}}'
          document_count: '{{get-documents.item_count}}'
          status: documents_received
  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: get-folder-items
        method: GET
  - type: http
    namespace: trade-api
    baseUri: https://api.sc.com/trade-finance/v1
    authentication:
      type: bearer
      token: $secrets.sc_trade_finance_token
    resources:
    - name: letters-of-credit
      path: /letters-of-credit/{{lc_number}}
      inputParameters:
      - name: lc_number
        in: path
      operations:
      - name: get-lc
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://sc.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-request
        method: PATCH
Open in Framework → View in Fleet → trade-document-verification-orchestrator.yml

Orchestrates client experience optimization pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Client Experience Optimization Pipeline
  description: Orchestrates client experience optimization pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - client
  - standard-chartered
  - slack
  - jira
  - teams
capability:
  exposes:
  - type: mcp
    namespace: client
    port: 8080
    tools:
    - name: client-experience-optimization-pipeline
      description: Orchestrates client experience optimization pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: slack.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: jira.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: teams.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/client
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: jira
    baseUri: https://sc.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/client
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/client
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → client-experience-optimization-pipeline.yml

Orchestrates cash management optimization pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Cash Management Optimization Pipeline
  description: Orchestrates cash management optimization pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - cash
  - standard-chartered
  - splunk
  - bloomberg
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: cash
    port: 8080
    tools:
    - name: cash-management-optimization-pipeline
      description: Orchestrates cash management optimization pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: splunk.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: bloomberg.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: confluence.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.sc.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: splunk-resource
      path: /api/cash
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: bloomberg-resource
      path: /api/cash
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://sc.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/cash
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → cash-management-optimization-pipeline.yml

When a customer complaint is received in Salesforce, creates a ServiceNow case, checks customer segment from the CRM, and notifies the branch manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: Customer Complaint Orchestrator
  description: When a customer complaint is received in Salesforce, creates a ServiceNow case, checks customer segment from the CRM, and notifies the branch manager via Microsoft Teams.
  tags:
  - customer-service
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: complaints
    port: 8080
    tools:
    - name: process-complaint
      description: Process a customer complaint from intake through case creation and manager notification.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: The Salesforce case ID.
      steps:
      - name: get-case
        type: call
        call: salesforce.get-case
        with:
          case_id: '{{case_id}}'
      - name: get-customer
        type: call
        call: core-banking.get-customer
        with:
          customer_id: '{{get-case.customer_id}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Customer complaint: {{get-case.subject}}'
          category: customer_complaint
          priority: '{{get-customer.segment_priority}}'
          description: 'Complaint from {{get-customer.customer_name}} (Segment: {{get-customer.segment}}). {{get-case.description}}'
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-customer.relationship_manager_email}}'
          text: 'Customer complaint from {{get-customer.customer_name}} ({{get-customer.segment}}). Case: {{case_id}}, Incident: {{create-ticket.number}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://sc.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: core-banking
    baseUri: https://api.sc.com/core-banking/v1
    authentication:
      type: bearer
      token: $secrets.sc_core_banking_token
    resources:
    - name: customers
      path: /customers/{{customer_id}}
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: get-customer
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://sc.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → customer-complaint-orchestrator.yml

Orchestrates structured product lifecycle pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Structured Product Lifecycle Pipeline
  description: Orchestrates structured product lifecycle pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - structured
  - standard-chartered
  - splunk
  - bloomberg
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: structured
    port: 8080
    tools:
    - name: structured-product-lifecycle-pipeline
      description: Orchestrates structured product lifecycle pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: splunk.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: bloomberg.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: confluence.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.sc.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: splunk-resource
      path: /api/structured
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: bloomberg-resource
      path: /api/structured
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://sc.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/structured
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → structured-product-lifecycle-pipeline.yml

Retrieves benchmark interest rate data from Bloomberg and builds a yield curve for a specified currency and date.

naftiko: '0.5'
info:
  label: Interest Rate Curve Builder
  description: Retrieves benchmark interest rate data from Bloomberg and builds a yield curve for a specified currency and date.
  tags:
  - treasury
  - bloomberg-enterprise-data
  - interest-rates
capability:
  exposes:
  - type: mcp
    namespace: yield-curves
    port: 8080
    tools:
    - name: build-yield-curve
      description: Build a yield curve from Bloomberg interest rate data for a currency and date.
      inputParameters:
      - name: currency
        in: body
        type: string
        description: The currency code.
      - name: curve_date
        in: body
        type: string
        description: The curve date in YYYY-MM-DD format.
      steps:
      - name: get-rates
        type: call
        call: bloomberg.get-rates
        with:
          currency: '{{currency}}'
          date: '{{curve_date}}'
      - name: build-curve
        type: call
        call: treasury-api.build-curve
        with:
          currency: '{{currency}}'
          date: '{{curve_date}}'
          rates: '{{get-rates.rate_data}}'
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/eap/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: rates
      path: /data/rates?currency={{currency}}&date={{date}}
      inputParameters:
      - name: currency
        in: query
      - name: date
        in: query
      operations:
      - name: get-rates
        method: GET
  - type: http
    namespace: treasury-api
    baseUri: https://api.sc.com/treasury/v1
    authentication:
      type: bearer
      token: $secrets.sc_treasury_token
    resources:
    - name: curves
      path: /yield-curves
      operations:
      - name: build-curve
        method: POST
Open in Framework → View in Fleet → interest-rate-curve-builder.yml

Orchestrates vendor risk management pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Vendor Risk Management Pipeline
  description: Orchestrates vendor risk management pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - vendor
  - standard-chartered
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: vendor
    port: 8080
    tools:
    - name: vendor-risk-management-pipeline
      description: Orchestrates vendor risk management pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: servicenow.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: snowflake.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: slack.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://sc.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/vendor
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://sc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/vendor
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/vendor
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → vendor-risk-management-pipeline.yml

Retrieves a travel expense report from SAP Concur by report ID.

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

Orchestrates corporate client onboarding pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Corporate Client Onboarding Pipeline
  description: Orchestrates corporate client onboarding pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - corporate
  - standard-chartered
  - standard-chartered
  - salesforce
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: corporate
    port: 8080
    tools:
    - name: corporate-client-onboarding-pipeline
      description: Orchestrates corporate client onboarding pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: standard-chartered.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: salesforce.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: servicenow.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: standard-chartered
    baseUri: https://api.sc.com/v2
    authentication:
      type: bearer
      token: $secrets.sc_api_token
    resources:
    - name: standard-chartered-resource
      path: /api/corporate
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://sc.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/corporate
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://sc.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/corporate
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → corporate-client-onboarding-pipeline.yml

Checks the runtime status of a MuleSoft integration application deployed on CloudHub.

naftiko: '0.5'
info:
  label: MuleSoft Integration Status Check
  description: Checks the runtime status of a MuleSoft integration application deployed on CloudHub.
  tags:
  - integration
  - mulesoft
  - api-management
capability:
  exposes:
  - type: mcp
    namespace: integration
    port: 8080
    tools:
    - name: get-mulesoft-app-status
      description: Check the runtime status of a MuleSoft CloudHub application.
      inputParameters:
      - name: app_name
        in: body
        type: string
        description: The MuleSoft application name.
      call: mulesoft.get-app-status
      with:
        app: '{{app_name}}'
  consumes:
  - type: http
    namespace: mulesoft
    baseUri: https://anypoint.mulesoft.com/cloudhub/api/v2
    authentication:
      type: bearer
      token: $secrets.mulesoft_token
    resources:
    - name: applications
      path: /applications/{{app}}
      inputParameters:
      - name: app
        in: path
      operations:
      - name: get-app-status
        method: GET
Open in Framework → View in Fleet → mulesoft-integration-status-check.yml

Initiates a SWIFT cross-border payment by validating the beneficiary, submitting the payment instruction, and returning the payment reference.

naftiko: '0.5'
info:
  label: SWIFT Payment Initiation
  description: Initiates a SWIFT cross-border payment by validating the beneficiary, submitting the payment instruction, and returning the payment reference.
  tags:
  - payments
  - swift
  - cross-border
capability:
  exposes:
  - type: mcp
    namespace: payments
    port: 8080
    tools:
    - name: initiate-swift-payment
      description: Submit a SWIFT cross-border payment instruction.
      inputParameters:
      - name: debit_account
        in: body
        type: string
        description: The debit account number.
      - name: beneficiary_account
        in: body
        type: string
        description: The beneficiary account number.
      - name: beneficiary_bank_bic
        in: body
        type: string
        description: The beneficiary bank SWIFT BIC code.
      - name: amount
        in: body
        type: string
        description: The payment amount.
      - name: currency
        in: body
        type: string
        description: The currency code.
      - name: payment_reference
        in: body
        type: string
        description: The payment reference or description.
      steps:
      - name: validate-beneficiary
        type: call
        call: payments-api.validate-beneficiary
        with:
          account: '{{beneficiary_account}}'
          bic: '{{beneficiary_bank_bic}}'
      - name: submit-payment
        type: call
        call: payments-api.create-payment
        with:
          debit_account: '{{debit_account}}'
          credit_account: '{{beneficiary_account}}'
          credit_bic: '{{beneficiary_bank_bic}}'
          amount: '{{amount}}'
          currency: '{{currency}}'
          reference: '{{payment_reference}}'
  consumes:
  - type: http
    namespace: payments-api
    baseUri: https://api.sc.com/payments/v1
    authentication:
      type: bearer
      token: $secrets.sc_payments_token
    resources:
    - name: validation
      path: /beneficiaries/validate
      operations:
      - name: validate-beneficiary
        method: POST
    - name: payments
      path: /payments/swift
      operations:
      - name: create-payment
        method: POST
Open in Framework → View in Fleet → swift-payment-initiation.yml

Processes a new letter of credit request by validating the applicant in the core banking system, creating the LC in the trade finance platform, and notifying the trade operations team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Trade Finance Letter of Credit Orchestrator
  description: Processes a new letter of credit request by validating the applicant in the core banking system, creating the LC in the trade finance platform, and notifying the trade operations team via Microsoft Teams.
  tags:
  - trade-finance
  - banking
  - microsoft-teams
  - letters-of-credit
capability:
  exposes:
  - type: mcp
    namespace: trade-finance
    port: 8080
    tools:
    - name: process-letter-of-credit
      description: Process a new letter of credit from applicant validation through LC creation and team notification.
      inputParameters:
      - name: applicant_id
        in: body
        type: string
        description: The applicant customer ID.
      - name: beneficiary_name
        in: body
        type: string
        description: The beneficiary name.
      - name: amount
        in: body
        type: string
        description: The LC amount.
      - name: currency
        in: body
        type: string
        description: The currency code (e.g., USD, GBP, SGD).
      - name: expiry_date
        in: body
        type: string
        description: The LC expiry date in YYYY-MM-DD format.
      steps:
      - name: validate-customer
        type: call
        call: core-banking.get-customer
        with:
          customer_id: '{{applicant_id}}'
      - name: create-lc
        type: call
        call: trade-api.create-letter-of-credit
        with:
          applicant: '{{validate-customer.customer_name}}'
          applicant_id: '{{applicant_id}}'
          beneficiary: '{{beneficiary_name}}'
          amount: '{{amount}}'
          currency: '{{currency}}'
          expiry: '{{expiry_date}}'
      - name: notify-ops
        type: call
        call: msteams.send-channel-message
        with:
          team_id: trade_operations
          channel_id: lc_processing
          text: 'New LC created: {{create-lc.lc_number}}. Applicant: {{validate-customer.customer_name}}. Amount: {{currency}} {{amount}}. Expiry: {{expiry_date}}.'
  consumes:
  - type: http
    namespace: core-banking
    baseUri: https://api.sc.com/core-banking/v1
    authentication:
      type: bearer
      token: $secrets.sc_core_banking_token
    resources:
    - name: customers
      path: /customers/{{customer_id}}
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: get-customer
        method: GET
  - type: http
    namespace: trade-api
    baseUri: https://api.sc.com/trade-finance/v1
    authentication:
      type: bearer
      token: $secrets.sc_trade_finance_token
    resources:
    - name: letters-of-credit
      path: /letters-of-credit
      operations:
      - name: create-letter-of-credit
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → trade-finance-letter-of-credit-orchestrator.yml

Creates a new Jira issue in a specified project with given summary, description, and type.

naftiko: '0.5'
info:
  label: Jira Issue Creator
  description: Creates a new Jira issue in a specified project with given summary, description, and type.
  tags:
  - project-management
  - jira
capability:
  exposes:
  - type: mcp
    namespace: project-mgmt
    port: 8080
    tools:
    - name: create-jira-issue
      description: Create a new issue in Jira.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The Jira project key.
      - name: summary
        in: body
        type: string
        description: The issue summary.
      - name: description
        in: body
        type: string
        description: The issue description.
      - name: issue_type
        in: body
        type: string
        description: The issue type (Bug, Task, Story).
      call: jira.create-issue
      with:
        project: '{{project_key}}'
        summary: '{{summary}}'
        description: '{{description}}'
        issuetype: '{{issue_type}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://sc.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → jira-issue-creator.yml

Orchestrates cross border payment pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Cross Border Payment Pipeline
  description: Orchestrates cross border payment pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - cross
  - standard-chartered
  - salesforce
  - servicenow
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: cross
    port: 8080
    tools:
    - name: cross-border-payment-pipeline
      description: Orchestrates cross border payment pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: salesforce.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: servicenow.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: snowflake.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://sc.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/cross
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://sc.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/cross
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://sc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/cross
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → cross-border-payment-pipeline.yml

Retrieves digital banking channel analytics data from the Standard Chartered international banking systems.

naftiko: '0.5'
info:
  label: Digital Banking Channel Analytics
  description: Retrieves digital banking channel analytics data from the Standard Chartered international banking systems.
  tags:
  - digital
  - standard-chartered
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: digital
    port: 8080
    tools:
    - name: digital-banking-channel-analytics
      description: Retrieves digital banking channel analytics data from the Standard Chartered international banking systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: standard-chartered.digital-banking-channel-analytics
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: standard-chartered
    baseUri: https://api.sc.com/v2
    authentication:
      type: bearer
      token: $secrets.sc_api_token
    resources:
    - name: resource
      path: /digital/banking/channel/analytics/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: digital-banking-channel-analytics
        method: GET
Open in Framework → View in Fleet → digital-banking-channel-analytics.yml

Retrieves corporate loan facility lookup data from the Standard Chartered international banking systems.

naftiko: '0.5'
info:
  label: Corporate Loan Facility Lookup
  description: Retrieves corporate loan facility lookup data from the Standard Chartered international banking systems.
  tags:
  - corporate
  - standard-chartered
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: corporate
    port: 8080
    tools:
    - name: corporate-loan-facility-lookup
      description: Retrieves corporate loan facility lookup data from the Standard Chartered international banking systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: standard-chartered.corporate-loan-facility-lookup
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: standard-chartered
    baseUri: https://api.sc.com/v2
    authentication:
      type: bearer
      token: $secrets.sc_api_token
    resources:
    - name: resource
      path: /corporate/loan/facility/lookup/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: corporate-loan-facility-lookup
        method: GET
Open in Framework → View in Fleet → corporate-loan-facility-lookup.yml

Retrieves the status of a bank guarantee from the trade finance system by guarantee number.

naftiko: '0.5'
info:
  label: Trade Finance Guarantee Status
  description: Retrieves the status of a bank guarantee from the trade finance system by guarantee number.
  tags:
  - trade-finance
  - guarantees
  - banking
capability:
  exposes:
  - type: mcp
    namespace: guarantees
    port: 8080
    tools:
    - name: get-guarantee-status
      description: Look up a bank guarantee by number.
      inputParameters:
      - name: guarantee_number
        in: body
        type: string
        description: The bank guarantee number.
      call: trade-api.get-guarantee
      with:
        number: '{{guarantee_number}}'
  consumes:
  - type: http
    namespace: trade-api
    baseUri: https://api.sc.com/trade-finance/v1
    authentication:
      type: bearer
      token: $secrets.sc_trade_finance_token
    resources:
    - name: guarantees
      path: /guarantees/{{number}}
      inputParameters:
      - name: number
        in: path
      operations:
      - name: get-guarantee
        method: GET
Open in Framework → View in Fleet → trade-finance-guarantee-status.yml

Retrieves islamic banking product lookup data from the Standard Chartered international banking systems.

naftiko: '0.5'
info:
  label: Islamic Banking Product Lookup
  description: Retrieves islamic banking product lookup data from the Standard Chartered international banking systems.
  tags:
  - islamic
  - standard-chartered
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: islamic
    port: 8080
    tools:
    - name: islamic-banking-product-lookup
      description: Retrieves islamic banking product lookup data from the Standard Chartered international banking systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: standard-chartered.islamic-banking-product-lookup
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: standard-chartered
    baseUri: https://api.sc.com/v2
    authentication:
      type: bearer
      token: $secrets.sc_api_token
    resources:
    - name: resource
      path: /islamic/banking/product/lookup/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: islamic-banking-product-lookup
        method: GET
Open in Framework → View in Fleet → islamic-banking-product-lookup.yml

Retrieves application performance metrics from New Relic for Standard Chartered digital banking services.

naftiko: '0.5'
info:
  label: New Relic Application Monitor
  description: Retrieves application performance metrics from New Relic for Standard Chartered digital banking services.
  tags:
  - monitoring
  - new-relic
  - performance
capability:
  exposes:
  - type: mcp
    namespace: apm
    port: 8080
    tools:
    - name: get-app-performance
      description: Get performance metrics for a banking application from New Relic.
      inputParameters:
      - name: app_name
        in: body
        type: string
        description: The application name in New Relic.
      call: newrelic.get-app-summary
      with:
        app: '{{app_name}}'
  consumes:
  - type: http
    namespace: newrelic
    baseUri: https://api.newrelic.com/v2
    authentication:
      type: apiKey
      key: $secrets.newrelic_api_key
    resources:
    - name: applications
      path: /applications.json?filter[name]={{app}}
      inputParameters:
      - name: app
        in: query
      operations:
      - name: get-app-summary
        method: GET
Open in Framework → View in Fleet → new-relic-application-monitor.yml

Retrieves a compliance policy document from the SharePoint policy library.

naftiko: '0.5'
info:
  label: SharePoint Policy Document Retrieval
  description: Retrieves a compliance policy document from the SharePoint policy library.
  tags:
  - compliance
  - sharepoint
  - documents
capability:
  exposes:
  - type: mcp
    namespace: policy-library
    port: 8080
    tools:
    - name: get-policy-document
      description: Retrieve a policy document from SharePoint.
      inputParameters:
      - name: document_name
        in: body
        type: string
        description: The policy document name.
      call: sharepoint.get-document
      with:
        site_id: compliance_policies
        file_path: Policies/{{document_name}}
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{file_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: get-document
        method: GET
Open in Framework → View in Fleet → sharepoint-policy-document-retrieval.yml

Calculates the current liquidity position by pulling account balances across multiple currencies and aggregating positions from the core banking system.

naftiko: '0.5'
info:
  label: Liquidity Position Calculator
  description: Calculates the current liquidity position by pulling account balances across multiple currencies and aggregating positions from the core banking system.
  tags:
  - treasury
  - liquidity
  - banking
capability:
  exposes:
  - type: mcp
    namespace: liquidity
    port: 8080
    tools:
    - name: calculate-liquidity-position
      description: Calculate the aggregate liquidity position across currencies.
      inputParameters:
      - name: entity_code
        in: body
        type: string
        description: The legal entity code.
      - name: position_date
        in: body
        type: string
        description: The position date in YYYY-MM-DD format.
      steps:
      - name: get-positions
        type: call
        call: core-banking.get-liquidity
        with:
          entity: '{{entity_code}}'
          date: '{{position_date}}'
      - name: get-fx-rates
        type: call
        call: treasury-api.get-closing-rates
        with:
          date: '{{position_date}}'
  consumes:
  - type: http
    namespace: core-banking
    baseUri: https://api.sc.com/core-banking/v1
    authentication:
      type: bearer
      token: $secrets.sc_core_banking_token
    resources:
    - name: liquidity
      path: /liquidity?entity={{entity}}&date={{date}}
      inputParameters:
      - name: entity
        in: query
      - name: date
        in: query
      operations:
      - name: get-liquidity
        method: GET
  - type: http
    namespace: treasury-api
    baseUri: https://api.sc.com/treasury/v1
    authentication:
      type: bearer
      token: $secrets.sc_treasury_token
    resources:
    - name: closing-rates
      path: /fx/closing-rates?date={{date}}
      inputParameters:
      - name: date
        in: query
      operations:
      - name: get-closing-rates
        method: GET
Open in Framework → View in Fleet → liquidity-position-calculator.yml

Orchestrates client tax reporting pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Client Tax Reporting Pipeline
  description: Orchestrates client tax reporting pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - client
  - standard-chartered
  - confluence
  - standard-chartered
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: client
    port: 8080
    tools:
    - name: client-tax-reporting-pipeline
      description: Orchestrates client tax reporting pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: confluence.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: standard-chartered.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: salesforce.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://sc.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/client
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: standard-chartered
    baseUri: https://api.sc.com/v2
    authentication:
      type: bearer
      token: $secrets.sc_api_token
    resources:
    - name: standard-chartered-resource
      path: /api/client
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://sc.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/client
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → client-tax-reporting-pipeline.yml

Orchestrates market risk reporting pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Market Risk Reporting Pipeline
  description: Orchestrates market risk reporting pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - market
  - standard-chartered
  - jira
  - teams
  - splunk
capability:
  exposes:
  - type: mcp
    namespace: market
    port: 8080
    tools:
    - name: market-risk-reporting-pipeline
      description: Orchestrates market risk reporting pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: jira.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: teams.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: splunk.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://sc.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/market
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/market
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: splunk
    baseUri: https://splunk.sc.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: splunk-resource
      path: /api/market
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → market-risk-reporting-pipeline.yml

Orchestrates cybersecurity threat response pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Cybersecurity Threat Response Pipeline
  description: Orchestrates cybersecurity threat response pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - cybersecurity
  - standard-chartered
  - salesforce
  - servicenow
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: cybersecurity
    port: 8080
    tools:
    - name: cybersecurity-threat-response-pipeline
      description: Orchestrates cybersecurity threat response pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: salesforce.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: servicenow.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: snowflake.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://sc.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/cybersecurity
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://sc.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/cybersecurity
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://sc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/cybersecurity
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → cybersecurity-threat-response-pipeline.yml

Orchestrates aml transaction surveillance pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Aml Transaction Surveillance Pipeline
  description: Orchestrates aml transaction surveillance pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - aml
  - standard-chartered
  - snowflake
  - slack
  - jira
capability:
  exposes:
  - type: mcp
    namespace: aml
    port: 8080
    tools:
    - name: aml-transaction-surveillance-pipeline
      description: Orchestrates aml transaction surveillance pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: snowflake.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: slack.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: jira.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://sc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/aml
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/aml
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: jira
    baseUri: https://sc.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/aml
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → aml-transaction-surveillance-pipeline.yml

When a fraud detection alert fires, retrieves transaction details, freezes the account in the core banking system, creates a fraud case, and notifies the fraud team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Fraud Detection Alert Orchestrator
  description: When a fraud detection alert fires, retrieves transaction details, freezes the account in the core banking system, creates a fraud case, and notifies the fraud team via Microsoft Teams.
  tags:
  - fraud
  - risk
  - banking
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: fraud-detection
    port: 8080
    tools:
    - name: handle-fraud-alert
      description: Process a fraud alert by freezing the account, creating a case, and alerting the fraud team.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The fraud detection alert ID.
      steps:
      - name: get-alert
        type: call
        call: fraud-api.get-alert
        with:
          id: '{{alert_id}}'
      - name: freeze-account
        type: call
        call: core-banking.freeze-account
        with:
          account: '{{get-alert.account_number}}'
          reason: 'Fraud alert: {{get-alert.alert_type}}'
      - name: create-case
        type: call
        call: case-mgmt.create-case
        with:
          alert_id: '{{alert_id}}'
          account: '{{get-alert.account_number}}'
          type: fraud
          description: 'Fraud alert: {{get-alert.alert_type}}. Transaction: {{get-alert.currency}} {{get-alert.amount}}. Account frozen.'
      - name: notify-fraud-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: fraud_operations
          channel_id: alerts
          text: 'FRAUD ALERT {{alert_id}}: {{get-alert.alert_type}} on account {{get-alert.account_number}}. Amount: {{get-alert.currency}} {{get-alert.amount}}. Account frozen. Case: {{create-case.case_number}}.'
  consumes:
  - type: http
    namespace: fraud-api
    baseUri: https://api.sc.com/fraud/v1
    authentication:
      type: bearer
      token: $secrets.sc_fraud_token
    resources:
    - name: alerts
      path: /alerts/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-alert
        method: GET
  - type: http
    namespace: core-banking
    baseUri: https://api.sc.com/core-banking/v1
    authentication:
      type: bearer
      token: $secrets.sc_core_banking_token
    resources:
    - name: accounts
      path: /accounts/{{account}}/freeze
      inputParameters:
      - name: account
        in: path
      operations:
      - name: freeze-account
        method: POST
  - type: http
    namespace: case-mgmt
    baseUri: https://api.sc.com/case-management/v1
    authentication:
      type: bearer
      token: $secrets.sc_case_mgmt_token
    resources:
    - name: cases
      path: /cases
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → fraud-detection-alert-orchestrator.yml

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

naftiko: '0.5'
info:
  label: SAP S/4HANA Purchase Order Status
  description: Looks up a SAP S/4HANA purchase order by number and returns header status, vendor, and total value.
  tags:
  - procurement
  - sap-s4hana
  - finance
capability:
  exposes:
  - type: mcp
    namespace: procurement
    port: 8080
    tools:
    - name: get-purchase-order
      description: Look up a SAP S/4HANA purchase order by PO number.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: The SAP purchase order number.
      call: sap.get-po
      with:
        po_number: '{{po_number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://sap-s4.sc.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: purchase-orders
      path: /A_PurchaseOrder('{{po_number}}')
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-po
        method: GET
Open in Framework → View in Fleet → sap-s-4hana-purchase-order-status.yml

Retrieves supply chain finance program lookup data from the Standard Chartered international banking systems.

naftiko: '0.5'
info:
  label: Supply Chain Finance Program Lookup
  description: Retrieves supply chain finance program lookup data from the Standard Chartered international banking systems.
  tags:
  - supply
  - standard-chartered
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: supply
    port: 8080
    tools:
    - name: supply-chain-finance-program-lookup
      description: Retrieves supply chain finance program lookup data from the Standard Chartered international banking systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: standard-chartered.supply-chain-finance-program-lookup
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: standard-chartered
    baseUri: https://api.sc.com/v2
    authentication:
      type: bearer
      token: $secrets.sc_api_token
    resources:
    - name: resource
      path: /supply/chain/finance/program/lookup/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: supply-chain-finance-program-lookup
        method: GET
Open in Framework → View in Fleet → supply-chain-finance-program-lookup.yml

Orchestrates sustainable finance framework pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Sustainable Finance Framework Pipeline
  description: Orchestrates sustainable finance framework pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - sustainable
  - standard-chartered
  - slack
  - jira
  - teams
capability:
  exposes:
  - type: mcp
    namespace: sustainable
    port: 8080
    tools:
    - name: sustainable-finance-framework-pipeline
      description: Orchestrates sustainable finance framework pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: slack.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: jira.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: teams.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/sustainable
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: jira
    baseUri: https://sc.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/sustainable
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/sustainable
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → sustainable-finance-framework-pipeline.yml

Retrieves wealth management portfolio lookup data from the Standard Chartered international banking systems.

naftiko: '0.5'
info:
  label: Wealth Management Portfolio Lookup
  description: Retrieves wealth management portfolio lookup data from the Standard Chartered international banking systems.
  tags:
  - wealth
  - standard-chartered
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: wealth
    port: 8080
    tools:
    - name: wealth-management-portfolio-lookup
      description: Retrieves wealth management portfolio lookup data from the Standard Chartered international banking systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: standard-chartered.wealth-management-portfolio-lookup
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: standard-chartered
    baseUri: https://api.sc.com/v2
    authentication:
      type: bearer
      token: $secrets.sc_api_token
    resources:
    - name: resource
      path: /wealth/management/portfolio/lookup/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: wealth-management-portfolio-lookup
        method: GET
Open in Framework → View in Fleet → wealth-management-portfolio-lookup.yml

Triggers a risk model execution in Azure Databricks for portfolio risk analysis and stores results in SharePoint.

naftiko: '0.5'
info:
  label: Azure Databricks Risk Model Execution
  description: Triggers a risk model execution in Azure Databricks for portfolio risk analysis and stores results in SharePoint.
  tags:
  - risk
  - azure-databricks
  - analytics
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: risk-modeling
    port: 8080
    tools:
    - name: run-risk-model
      description: Execute a risk model in Azure Databricks and store results.
      inputParameters:
      - name: model_name
        in: body
        type: string
        description: The risk model name.
      - name: portfolio_id
        in: body
        type: string
        description: The portfolio identifier.
      - name: run_date
        in: body
        type: string
        description: The run date in YYYY-MM-DD format.
      steps:
      - name: run-model
        type: call
        call: databricks.run-job
        with:
          job_name: '{{model_name}}'
          parameters:
            portfolio: '{{portfolio_id}}'
            date: '{{run_date}}'
      - name: store-results
        type: call
        call: sharepoint.update-file
        with:
          site_id: risk_models
          file_path: Results/{{model_name}}_{{portfolio_id}}_{{run_date}}.json
          content: '{{run-model.results}}'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://adb-sc.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: 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
Open in Framework → View in Fleet → azure-databricks-risk-model-execution.yml

Retrieves API traffic analytics from the Apigee API gateway for monitoring API usage patterns.

naftiko: '0.5'
info:
  label: Apigee API Gateway Analytics
  description: Retrieves API traffic analytics from the Apigee API gateway for monitoring API usage patterns.
  tags:
  - api-management
  - apigee
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: api-analytics
    port: 8080
    tools:
    - name: get-api-analytics
      description: Get API traffic analytics from Apigee for a specific API proxy.
      inputParameters:
      - name: api_proxy
        in: body
        type: string
        description: The API proxy name.
      - name: time_range
        in: body
        type: string
        description: The time range (e.g., last_hour, last_day, last_week).
      call: apigee.get-stats
      with:
        proxy: '{{api_proxy}}'
        range: '{{time_range}}'
  consumes:
  - type: http
    namespace: apigee
    baseUri: https://apigee.googleapis.com/v1/organizations/sc-org
    authentication:
      type: bearer
      token: $secrets.apigee_token
    resources:
    - name: stats
      path: /environments/prod/stats/apiproxy?select=sum(message_count)&timeRange={{range}}&filter=(apiproxy eq '{{proxy}}')
      inputParameters:
      - name: proxy
        in: query
      - name: range
        in: query
      operations:
      - name: get-stats
        method: GET
Open in Framework → View in Fleet → apigee-api-gateway-analytics.yml

Orchestrates customer due diligence pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Customer Due Diligence Pipeline
  description: Orchestrates customer due diligence pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - customer
  - standard-chartered
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: customer
    port: 8080
    tools:
    - name: customer-due-diligence-pipeline
      description: Orchestrates customer due diligence pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: servicenow.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: snowflake.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: slack.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://sc.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/customer
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://sc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/customer
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/customer
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → customer-due-diligence-pipeline.yml

Retrieves fx forward contract status data from the Standard Chartered international banking systems.

naftiko: '0.5'
info:
  label: Fx Forward Contract Status
  description: Retrieves fx forward contract status data from the Standard Chartered international banking systems.
  tags:
  - fx
  - standard-chartered
  - status
capability:
  exposes:
  - type: mcp
    namespace: fx
    port: 8080
    tools:
    - name: fx-forward-contract-status
      description: Retrieves fx forward contract status data from the Standard Chartered international banking systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: standard-chartered.fx-forward-contract-status
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: standard-chartered
    baseUri: https://api.sc.com/v2
    authentication:
      type: bearer
      token: $secrets.sc_api_token
    resources:
    - name: resource
      path: /fx/forward/contract/status/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: fx-forward-contract-status
        method: GET
Open in Framework → View in Fleet → fx-forward-contract-status.yml

Orchestrates private banking portfolio pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Private Banking Portfolio Pipeline
  description: Orchestrates private banking portfolio pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - private
  - standard-chartered
  - standard-chartered
  - salesforce
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: private
    port: 8080
    tools:
    - name: private-banking-portfolio-pipeline
      description: Orchestrates private banking portfolio pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: standard-chartered.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: salesforce.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: servicenow.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: standard-chartered
    baseUri: https://api.sc.com/v2
    authentication:
      type: bearer
      token: $secrets.sc_api_token
    resources:
    - name: standard-chartered-resource
      path: /api/private
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://sc.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/private
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://sc.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/private
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → private-banking-portfolio-pipeline.yml

Orchestrates sanctions screening enhancement pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Sanctions Screening Enhancement Pipeline
  description: Orchestrates sanctions screening enhancement pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - sanctions
  - standard-chartered
  - teams
  - splunk
  - bloomberg
capability:
  exposes:
  - type: mcp
    namespace: sanctions
    port: 8080
    tools:
    - name: sanctions-screening-enhancement-pipeline
      description: Orchestrates sanctions screening enhancement pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: teams.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: splunk.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: bloomberg.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/sanctions
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: splunk
    baseUri: https://splunk.sc.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: splunk-resource
      path: /api/sanctions
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: bloomberg-resource
      path: /api/sanctions
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → sanctions-screening-enhancement-pipeline.yml

Orchestrates api marketplace governance pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Api Marketplace Governance Pipeline
  description: Orchestrates api marketplace governance pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - api
  - standard-chartered
  - standard-chartered
  - salesforce
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: api
    port: 8080
    tools:
    - name: api-marketplace-governance-pipeline
      description: Orchestrates api marketplace governance pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: standard-chartered.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: salesforce.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: servicenow.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: standard-chartered
    baseUri: https://api.sc.com/v2
    authentication:
      type: bearer
      token: $secrets.sc_api_token
    resources:
    - name: standard-chartered-resource
      path: /api/api
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://sc.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/api
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://sc.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/api
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → api-marketplace-governance-pipeline.yml

Orchestrates fx trading risk monitoring pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Fx Trading Risk Monitoring Pipeline
  description: Orchestrates fx trading risk monitoring pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - fx
  - standard-chartered
  - slack
  - jira
  - teams
capability:
  exposes:
  - type: mcp
    namespace: fx
    port: 8080
    tools:
    - name: fx-trading-risk-monitoring-pipeline
      description: Orchestrates fx trading risk monitoring pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: slack.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: jira.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: teams.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/fx
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: jira
    baseUri: https://sc.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/fx
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/fx
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → fx-trading-risk-monitoring-pipeline.yml

Orchestrates corporate card reconciliation pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Corporate Card Reconciliation Pipeline
  description: Orchestrates corporate card reconciliation pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - corporate
  - standard-chartered
  - jira
  - teams
  - splunk
capability:
  exposes:
  - type: mcp
    namespace: corporate
    port: 8080
    tools:
    - name: corporate-card-reconciliation-pipeline
      description: Orchestrates corporate card reconciliation pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: jira.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: teams.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: splunk.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://sc.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/corporate
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/corporate
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: splunk
    baseUri: https://splunk.sc.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: splunk-resource
      path: /api/corporate
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → corporate-card-reconciliation-pipeline.yml

When an AML alert is triggered, retrieves the transaction details, pulls the customer KYC profile, creates a case in the case management system, and notifies the compliance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: AML Transaction Monitoring Alert Handler
  description: When an AML alert is triggered, retrieves the transaction details, pulls the customer KYC profile, creates a case in the case management system, and notifies the compliance team via Microsoft Teams.
  tags:
  - compliance
  - aml
  - risk
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: aml-monitoring
    port: 8080
    tools:
    - name: handle-aml-alert
      description: Process an AML alert by gathering transaction and customer data, creating a case, and alerting compliance.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The AML monitoring alert ID.
      steps:
      - name: get-alert
        type: call
        call: aml-api.get-alert
        with:
          id: '{{alert_id}}'
      - name: get-kyc
        type: call
        call: kyc-api.get-profile
        with:
          id: '{{get-alert.customer_id}}'
      - name: create-case
        type: call
        call: case-mgmt.create-case
        with:
          alert_id: '{{alert_id}}'
          customer_id: '{{get-alert.customer_id}}'
          customer_risk: '{{get-kyc.risk_rating}}'
          transaction_amount: '{{get-alert.amount}}'
          description: 'AML alert for {{get-kyc.customer_name}}: {{get-alert.alert_type}}. Transaction: {{get-alert.currency}} {{get-alert.amount}}.'
      - name: notify-compliance
        type: call
        call: msteams.send-channel-message
        with:
          team_id: compliance
          channel_id: aml_alerts
          text: 'AML Alert {{alert_id}}: {{get-alert.alert_type}} for {{get-kyc.customer_name}} (Risk: {{get-kyc.risk_rating}}). Case: {{create-case.case_number}}.'
  consumes:
  - type: http
    namespace: aml-api
    baseUri: https://api.sc.com/aml/v1
    authentication:
      type: bearer
      token: $secrets.sc_aml_token
    resources:
    - name: alerts
      path: /alerts/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-alert
        method: GET
  - type: http
    namespace: kyc-api
    baseUri: https://api.sc.com/kyc/v1
    authentication:
      type: bearer
      token: $secrets.sc_kyc_token
    resources:
    - name: profiles
      path: /customers/{{id}}/profile
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-profile
        method: GET
  - type: http
    namespace: case-mgmt
    baseUri: https://api.sc.com/case-management/v1
    authentication:
      type: bearer
      token: $secrets.sc_case_mgmt_token
    resources:
    - name: cases
      path: /cases
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → aml-transaction-monitoring-alert-handler.yml

Orchestrates islamic banking compliance pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Islamic Banking Compliance Pipeline
  description: Orchestrates islamic banking compliance pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - islamic
  - standard-chartered
  - standard-chartered
  - salesforce
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: islamic
    port: 8080
    tools:
    - name: islamic-banking-compliance-pipeline
      description: Orchestrates islamic banking compliance pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: standard-chartered.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: salesforce.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: servicenow.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: standard-chartered
    baseUri: https://api.sc.com/v2
    authentication:
      type: bearer
      token: $secrets.sc_api_token
    resources:
    - name: standard-chartered-resource
      path: /api/islamic
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://sc.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/islamic
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://sc.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/islamic
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → islamic-banking-compliance-pipeline.yml

Publishes corporate updates and thought leadership content on the Standard Chartered LinkedIn company page.

naftiko: '0.5'
info:
  label: LinkedIn Corporate Page Publisher
  description: Publishes corporate updates and thought leadership content on the Standard Chartered LinkedIn company page.
  tags:
  - marketing
  - linkedin
  - social-media
capability:
  exposes:
  - type: mcp
    namespace: social-publishing
    port: 8080
    tools:
    - name: publish-linkedin-update
      description: Post a corporate update on the Standard Chartered LinkedIn page.
      inputParameters:
      - name: post_text
        in: body
        type: string
        description: The post text.
      - name: link_url
        in: body
        type: string
        description: Optional URL to include.
      call: linkedin.create-share
      with:
        text: '{{post_text}}'
        url: '{{link_url}}'
  consumes:
  - 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-share
        method: POST
Open in Framework → View in Fleet → linkedin-corporate-page-publisher.yml

Tracks the status of a payment by payment reference, returning current state, timestamps, and settlement details.

naftiko: '0.5'
info:
  label: Payment Status Tracker
  description: Tracks the status of a payment by payment reference, returning current state, timestamps, and settlement details.
  tags:
  - payments
  - tracking
  - banking
capability:
  exposes:
  - type: mcp
    namespace: payment-tracking
    port: 8080
    tools:
    - name: track-payment
      description: Track the status of a payment by reference number.
      inputParameters:
      - name: payment_reference
        in: body
        type: string
        description: The payment reference number.
      call: payments-api.get-status
      with:
        reference: '{{payment_reference}}'
  consumes:
  - type: http
    namespace: payments-api
    baseUri: https://api.sc.com/payments/v1
    authentication:
      type: bearer
      token: $secrets.sc_payments_token
    resources:
    - name: status
      path: /payments/{{reference}}/status
      inputParameters:
      - name: reference
        in: path
      operations:
      - name: get-status
        method: GET
Open in Framework → View in Fleet → payment-status-tracker.yml

Orchestrates wealth management advisory pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Wealth Management Advisory Pipeline
  description: Orchestrates wealth management advisory pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - wealth
  - standard-chartered
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: wealth
    port: 8080
    tools:
    - name: wealth-management-advisory-pipeline
      description: Orchestrates wealth management advisory pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: servicenow.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: snowflake.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: slack.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://sc.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/wealth
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://sc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/wealth
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/wealth
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → wealth-management-advisory-pipeline.yml

Retrieves nostro account balances and compares them with correspondent bank statements for daily reconciliation.

naftiko: '0.5'
info:
  label: Nostro Account Reconciliation
  description: Retrieves nostro account balances and compares them with correspondent bank statements for daily reconciliation.
  tags:
  - treasury
  - reconciliation
  - correspondent-banking
capability:
  exposes:
  - type: mcp
    namespace: nostro-recon
    port: 8080
    tools:
    - name: reconcile-nostro
      description: Perform nostro account reconciliation for a specified currency and date.
      inputParameters:
      - name: currency
        in: body
        type: string
        description: The nostro account currency.
      - name: recon_date
        in: body
        type: string
        description: The reconciliation date in YYYY-MM-DD format.
      steps:
      - name: get-internal-balance
        type: call
        call: core-banking.get-nostro-balance
        with:
          currency: '{{currency}}'
          date: '{{recon_date}}'
      - name: get-external-statement
        type: call
        call: payments-api.get-correspondent-statement
        with:
          currency: '{{currency}}'
          date: '{{recon_date}}'
  consumes:
  - type: http
    namespace: core-banking
    baseUri: https://api.sc.com/core-banking/v1
    authentication:
      type: bearer
      token: $secrets.sc_core_banking_token
    resources:
    - name: nostro
      path: /nostro/{{currency}}/balance?date={{date}}
      inputParameters:
      - name: currency
        in: path
      - name: date
        in: query
      operations:
      - name: get-nostro-balance
        method: GET
  - type: http
    namespace: payments-api
    baseUri: https://api.sc.com/payments/v1
    authentication:
      type: bearer
      token: $secrets.sc_payments_token
    resources:
    - name: correspondent-statements
      path: /correspondents/statements?currency={{currency}}&date={{date}}
      inputParameters:
      - name: currency
        in: query
      - name: date
        in: query
      operations:
      - name: get-correspondent-statement
        method: GET
Open in Framework → View in Fleet → nostro-account-reconciliation.yml

Orchestrates digital channel enhancement pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Digital Channel Enhancement Pipeline
  description: Orchestrates digital channel enhancement pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - digital
  - standard-chartered
  - splunk
  - bloomberg
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: digital
    port: 8080
    tools:
    - name: digital-channel-enhancement-pipeline
      description: Orchestrates digital channel enhancement pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: splunk.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: bloomberg.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: confluence.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.sc.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: splunk-resource
      path: /api/digital
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: bloomberg-resource
      path: /api/digital
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://sc.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/digital
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → digital-channel-enhancement-pipeline.yml

Orchestrates loan covenant compliance pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Loan Covenant Compliance Pipeline
  description: Orchestrates loan covenant compliance pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - loan
  - standard-chartered
  - teams
  - splunk
  - bloomberg
capability:
  exposes:
  - type: mcp
    namespace: loan
    port: 8080
    tools:
    - name: loan-covenant-compliance-pipeline
      description: Orchestrates loan covenant compliance pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: teams.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: splunk.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: bloomberg.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/loan
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: splunk
    baseUri: https://splunk.sc.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: splunk-resource
      path: /api/loan
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: bloomberg-resource
      path: /api/loan
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → loan-covenant-compliance-pipeline.yml

Searches the correspondent banking directory for a bank by SWIFT BIC code or name.

naftiko: '0.5'
info:
  label: Correspondent Bank Directory Lookup
  description: Searches the correspondent banking directory for a bank by SWIFT BIC code or name.
  tags:
  - payments
  - correspondent-banking
  - directory
capability:
  exposes:
  - type: mcp
    namespace: correspondent-banks
    port: 8080
    tools:
    - name: lookup-correspondent-bank
      description: Search the correspondent banking directory by BIC or bank name.
      inputParameters:
      - name: search_term
        in: body
        type: string
        description: The SWIFT BIC or bank name to search.
      call: payments-api.search-correspondents
      with:
        query: '{{search_term}}'
  consumes:
  - type: http
    namespace: payments-api
    baseUri: https://api.sc.com/payments/v1
    authentication:
      type: bearer
      token: $secrets.sc_payments_token
    resources:
    - name: correspondents
      path: /correspondents/search?q={{query}}
      inputParameters:
      - name: query
        in: query
      operations:
      - name: search-correspondents
        method: GET
Open in Framework → View in Fleet → correspondent-bank-directory-lookup.yml

Sends a WhatsApp notification to a client about their banking transaction or account update.

naftiko: '0.5'
info:
  label: WhatsApp Client Notification Sender
  description: Sends a WhatsApp notification to a client about their banking transaction or account update.
  tags:
  - notifications
  - whatsapp
  - customer-service
capability:
  exposes:
  - type: mcp
    namespace: client-notifications
    port: 8080
    tools:
    - name: send-whatsapp-notification
      description: Send a WhatsApp notification to a client.
      inputParameters:
      - name: phone_number
        in: body
        type: string
        description: The client phone number in international format.
      - name: template_name
        in: body
        type: string
        description: The WhatsApp message template name.
      - name: template_params
        in: body
        type: object
        description: Template parameters.
      call: whatsapp.send-message
      with:
        to: '{{phone_number}}'
        template: '{{template_name}}'
        parameters: '{{template_params}}'
  consumes:
  - type: http
    namespace: whatsapp
    baseUri: https://graph.facebook.com/v17.0
    authentication:
      type: bearer
      token: $secrets.whatsapp_business_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → whatsapp-client-notification-sender.yml

Retrieves service health and alert status from Datadog for Standard Chartered banking platform services.

naftiko: '0.5'
info:
  label: Datadog Service Health Monitor
  description: Retrieves service health and alert status from Datadog for Standard Chartered banking platform services.
  tags:
  - monitoring
  - datadog
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: service-health
    port: 8080
    tools:
    - name: get-service-health
      description: Get health status and active alerts for a banking platform service in Datadog.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The service name.
      call: datadog.get-service-status
      with:
        service: '{{service_name}}'
  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: services
      path: /service_summary?service={{service}}
      inputParameters:
      - name: service
        in: query
      operations:
      - name: get-service-status
        method: GET
Open in Framework → View in Fleet → datadog-service-health-monitor.yml

Retrieves current foreign exchange rates for a currency pair from the treasury system.

naftiko: '0.5'
info:
  label: FX Rate Lookup
  description: Retrieves current foreign exchange rates for a currency pair from the treasury system.
  tags:
  - treasury
  - forex
  - rates
capability:
  exposes:
  - type: mcp
    namespace: fx-rates
    port: 8080
    tools:
    - name: get-fx-rate
      description: Get the current foreign exchange rate for a currency pair.
      inputParameters:
      - name: base_currency
        in: body
        type: string
        description: The base currency code (e.g., USD).
      - name: quote_currency
        in: body
        type: string
        description: The quote currency code (e.g., SGD).
      call: treasury-api.get-rate
      with:
        base: '{{base_currency}}'
        quote: '{{quote_currency}}'
  consumes:
  - type: http
    namespace: treasury-api
    baseUri: https://api.sc.com/treasury/v1
    authentication:
      type: bearer
      token: $secrets.sc_treasury_token
    resources:
    - name: rates
      path: /fx/rates?base={{base}}&quote={{quote}}
      inputParameters:
      - name: base
        in: query
      - name: quote
        in: query
      operations:
      - name: get-rate
        method: GET
Open in Framework → View in Fleet → fx-rate-lookup.yml

Retrieves cash management sweep status data from the Standard Chartered international banking systems.

naftiko: '0.5'
info:
  label: Cash Management Sweep Status
  description: Retrieves cash management sweep status data from the Standard Chartered international banking systems.
  tags:
  - cash
  - standard-chartered
  - status
capability:
  exposes:
  - type: mcp
    namespace: cash
    port: 8080
    tools:
    - name: cash-management-sweep-status
      description: Retrieves cash management sweep status data from the Standard Chartered international banking systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: standard-chartered.cash-management-sweep-status
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: standard-chartered
    baseUri: https://api.sc.com/v2
    authentication:
      type: bearer
      token: $secrets.sc_api_token
    resources:
    - name: resource
      path: /cash/management/sweep/status/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: cash-management-sweep-status
        method: GET
Open in Framework → View in Fleet → cash-management-sweep-status.yml

Retrieves private banking client summary data from the Standard Chartered international banking systems.

naftiko: '0.5'
info:
  label: Private Banking Client Summary
  description: Retrieves private banking client summary data from the Standard Chartered international banking systems.
  tags:
  - private
  - standard-chartered
  - summary
capability:
  exposes:
  - type: mcp
    namespace: private
    port: 8080
    tools:
    - name: private-banking-client-summary
      description: Retrieves private banking client summary data from the Standard Chartered international banking systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: standard-chartered.private-banking-client-summary
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: standard-chartered
    baseUri: https://api.sc.com/v2
    authentication:
      type: bearer
      token: $secrets.sc_api_token
    resources:
    - name: resource
      path: /private/banking/client/summary/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: private-banking-client-summary
        method: GET
Open in Framework → View in Fleet → private-banking-client-summary.yml

Generates the daily profit and loss report by pulling positions from Murex, FX rates from treasury, and posting the consolidated report to the finance Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Daily P&L Report Orchestrator
  description: Generates the daily profit and loss report by pulling positions from Murex, FX rates from treasury, and posting the consolidated report to the finance Microsoft Teams channel.
  tags:
  - finance
  - trading
  - murex
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: daily-pnl
    port: 8080
    tools:
    - name: generate-daily-pnl
      description: Generate and distribute the daily P&L report from Murex positions and treasury rates.
      inputParameters:
      - name: report_date
        in: body
        type: string
        description: The report date in YYYY-MM-DD format.
      - name: desk
        in: body
        type: string
        description: The trading desk identifier.
      steps:
      - name: get-positions
        type: call
        call: murex.get-positions
        with:
          desk: '{{desk}}'
          date: '{{report_date}}'
      - name: get-rates
        type: call
        call: treasury-api.get-closing-rates
        with:
          date: '{{report_date}}'
      - name: post-report
        type: call
        call: msteams.send-channel-message
        with:
          team_id: finance
          channel_id: daily_pnl
          text: 'P&L for {{desk}} on {{report_date}}: Total PnL: {{get-positions.total_pnl}}. Positions: {{get-positions.position_count}}.'
  consumes:
  - type: http
    namespace: murex
    baseUri: https://murex.sc.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sc_murex_token
    resources:
    - name: positions
      path: /positions?desk={{desk}}&date={{date}}
      inputParameters:
      - name: desk
        in: query
      - name: date
        in: query
      operations:
      - name: get-positions
        method: GET
  - type: http
    namespace: treasury-api
    baseUri: https://api.sc.com/treasury/v1
    authentication:
      type: bearer
      token: $secrets.sc_treasury_token
    resources:
    - name: closing-rates
      path: /fx/closing-rates?date={{date}}
      inputParameters:
      - name: date
        in: query
      operations:
      - name: get-closing-rates
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → daily-p-l-report-orchestrator.yml

Retrieves correspondent banking fee lookup data from the Standard Chartered international banking systems.

naftiko: '0.5'
info:
  label: Correspondent Banking Fee Lookup
  description: Retrieves correspondent banking fee lookup data from the Standard Chartered international banking systems.
  tags:
  - correspondent
  - standard-chartered
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: correspondent
    port: 8080
    tools:
    - name: correspondent-banking-fee-lookup
      description: Retrieves correspondent banking fee lookup data from the Standard Chartered international banking systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: standard-chartered.correspondent-banking-fee-lookup
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: standard-chartered
    baseUri: https://api.sc.com/v2
    authentication:
      type: bearer
      token: $secrets.sc_api_token
    resources:
    - name: resource
      path: /correspondent/banking/fee/lookup/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: correspondent-banking-fee-lookup
        method: GET
Open in Framework → View in Fleet → correspondent-banking-fee-lookup.yml

Retrieves a customer's Know Your Customer profile from the KYC system, returning identity verification status, risk rating, and document details.

naftiko: '0.5'
info:
  label: Customer KYC Profile Lookup
  description: Retrieves a customer's Know Your Customer profile from the KYC system, returning identity verification status, risk rating, and document details.
  tags:
  - compliance
  - kyc
  - customer
capability:
  exposes:
  - type: mcp
    namespace: kyc
    port: 8080
    tools:
    - name: get-kyc-profile
      description: Look up a customer's KYC profile by customer ID.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The customer identifier.
      call: kyc-api.get-profile
      with:
        id: '{{customer_id}}'
  consumes:
  - type: http
    namespace: kyc-api
    baseUri: https://api.sc.com/kyc/v1
    authentication:
      type: bearer
      token: $secrets.sc_kyc_token
    resources:
    - name: profiles
      path: /customers/{{id}}/profile
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-profile
        method: GET
Open in Framework → View in Fleet → customer-kyc-profile-lookup.yml

Processes a real-time domestic payment through the instant payments rail, validates the beneficiary, and returns the payment confirmation.

naftiko: '0.5'
info:
  label: Real-Time Payment Processing
  description: Processes a real-time domestic payment through the instant payments rail, validates the beneficiary, and returns the payment confirmation.
  tags:
  - payments
  - real-time
  - banking
capability:
  exposes:
  - type: mcp
    namespace: instant-payments
    port: 8080
    tools:
    - name: process-instant-payment
      description: Submit an instant payment through the real-time payments rail.
      inputParameters:
      - name: debit_account
        in: body
        type: string
        description: The debit account number.
      - name: credit_account
        in: body
        type: string
        description: The credit account number.
      - name: amount
        in: body
        type: string
        description: The payment amount.
      - name: currency
        in: body
        type: string
        description: The currency code.
      - name: reference
        in: body
        type: string
        description: The payment reference.
      steps:
      - name: validate
        type: call
        call: payments-api.validate-instant
        with:
          debit: '{{debit_account}}'
          credit: '{{credit_account}}'
          amount: '{{amount}}'
      - name: submit
        type: call
        call: payments-api.submit-instant
        with:
          debit: '{{debit_account}}'
          credit: '{{credit_account}}'
          amount: '{{amount}}'
          currency: '{{currency}}'
          reference: '{{reference}}'
  consumes:
  - type: http
    namespace: payments-api
    baseUri: https://api.sc.com/payments/v1
    authentication:
      type: bearer
      token: $secrets.sc_payments_token
    resources:
    - name: validation
      path: /instant/validate
      operations:
      - name: validate-instant
        method: POST
    - name: instant-payments
      path: /instant/submit
      operations:
      - name: submit-instant
        method: POST
Open in Framework → View in Fleet → real-time-payment-processing.yml

Queries Tanium for the security compliance status of endpoint devices, returning patch level and vulnerability counts.

naftiko: '0.5'
info:
  label: Tanium Endpoint Security Status
  description: Queries Tanium for the security compliance status of endpoint devices, returning patch level and vulnerability counts.
  tags:
  - security
  - tanium
  - endpoints
capability:
  exposes:
  - type: mcp
    namespace: endpoint-security
    port: 8080
    tools:
    - name: get-endpoint-status
      description: Get the security compliance status of endpoints from Tanium.
      inputParameters:
      - name: computer_group
        in: body
        type: string
        description: The Tanium computer group name.
      call: tanium.get-group-status
      with:
        group: '{{computer_group}}'
  consumes:
  - type: http
    namespace: tanium
    baseUri: https://tanium.sc.com/api/v2
    authentication:
      type: bearer
      token: $secrets.tanium_token
    resources:
    - name: groups
      path: /computer_groups/{{group}}/status
      inputParameters:
      - name: group
        in: path
      operations:
      - name: get-group-status
        method: GET
Open in Framework → View in Fleet → tanium-endpoint-security-status.yml

Orchestrates trade finance digitization pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Trade Finance Digitization Pipeline
  description: Orchestrates trade finance digitization pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - trade
  - standard-chartered
  - salesforce
  - servicenow
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: trade
    port: 8080
    tools:
    - name: trade-finance-digitization-pipeline
      description: Orchestrates trade finance digitization pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: salesforce.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: servicenow.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: snowflake.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://sc.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/trade
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://sc.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/trade
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://sc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/trade
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → trade-finance-digitization-pipeline.yml

Retrieves the current balance and recent transactions for a customer account from the core banking system.

naftiko: '0.5'
info:
  label: Account Balance Inquiry
  description: Retrieves the current balance and recent transactions for a customer account from the core banking system.
  tags:
  - banking
  - accounts
  - core-banking
capability:
  exposes:
  - type: mcp
    namespace: accounts
    port: 8080
    tools:
    - name: get-account-balance
      description: Look up the current balance and recent transactions for a customer account.
      inputParameters:
      - name: account_number
        in: body
        type: string
        description: The customer account number.
      call: core-banking.get-balance
      with:
        account: '{{account_number}}'
  consumes:
  - type: http
    namespace: core-banking
    baseUri: https://api.sc.com/core-banking/v1
    authentication:
      type: bearer
      token: $secrets.sc_core_banking_token
    resources:
    - name: balances
      path: /accounts/{{account}}/balance
      inputParameters:
      - name: account
        in: path
      operations:
      - name: get-balance
        method: GET
Open in Framework → View in Fleet → account-balance-inquiry.yml

Queries Microsoft Sentinel for recent security incidents and threat detections.

naftiko: '0.5'
info:
  label: Microsoft Sentinel Threat Detection
  description: Queries Microsoft Sentinel for recent security incidents and threat detections.
  tags:
  - security
  - microsoft-sentinel
  - threat-detection
capability:
  exposes:
  - type: mcp
    namespace: threat-detection
    port: 8080
    tools:
    - name: get-security-incidents
      description: Get recent security incidents from Microsoft Sentinel.
      inputParameters:
      - name: severity
        in: body
        type: string
        description: Minimum severity filter (High, Medium, Low, Informational).
      - name: time_range
        in: body
        type: string
        description: Time range in hours (e.g., 24, 48, 168).
      call: sentinel.get-incidents
      with:
        severity: '{{severity}}'
        hours: '{{time_range}}'
  consumes:
  - type: http
    namespace: sentinel
    baseUri: https://management.azure.com/subscriptions/$secrets.azure_subscription_id/resourceGroups/$secrets.azure_rg/providers/Microsoft.SecurityInsights
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: incidents
      path: /incidents?api-version=2023-11-01&$filter=properties/severity eq '{{severity}}'
      inputParameters:
      - name: severity
        in: query
      operations:
      - name: get-incidents
        method: GET
Open in Framework → View in Fleet → microsoft-sentinel-threat-detection.yml

Orchestrates operational resilience testing pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Operational Resilience Testing Pipeline
  description: Orchestrates operational resilience testing pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - operational
  - standard-chartered
  - confluence
  - standard-chartered
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: operational
    port: 8080
    tools:
    - name: operational-resilience-testing-pipeline
      description: Orchestrates operational resilience testing pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: confluence.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: standard-chartered.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: salesforce.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://sc.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/operational
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: standard-chartered
    baseUri: https://api.sc.com/v2
    authentication:
      type: bearer
      token: $secrets.sc_api_token
    resources:
    - name: standard-chartered-resource
      path: /api/operational
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://sc.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/operational
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → operational-resilience-testing-pipeline.yml

Processes a corporate loan application by validating credit risk, performing sanctions screening, creating the facility in the core banking system, and logging the application in Salesforce.

naftiko: '0.5'
info:
  label: Corporate Loan Origination Orchestrator
  description: Processes a corporate loan application by validating credit risk, performing sanctions screening, creating the facility in the core banking system, and logging the application in Salesforce.
  tags:
  - banking
  - lending
  - risk
  - salesforce
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: loan-origination
    port: 8080
    tools:
    - name: process-loan-application
      description: Process a corporate loan application through validation, screening, and facility creation.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The corporate customer ID.
      - name: facility_amount
        in: body
        type: string
        description: The requested facility amount.
      - name: currency
        in: body
        type: string
        description: The currency code.
      - name: tenor_months
        in: body
        type: integer
        description: The facility tenor in months.
      steps:
      - name: get-credit-risk
        type: call
        call: risk-api.get-credit-score
        with:
          id: '{{customer_id}}'
      - name: sanctions-check
        type: call
        call: sanctions-api.screen
        with:
          name: '{{get-credit-risk.customer_name}}'
          type: organization
      - name: create-facility
        type: call
        call: core-banking.create-facility
        with:
          customer_id: '{{customer_id}}'
          amount: '{{facility_amount}}'
          currency: '{{currency}}'
          tenor: '{{tenor_months}}'
          risk_rating: '{{get-credit-risk.rating}}'
      - name: log-application
        type: call
        call: salesforce.create-opportunity
        with:
          name: 'Loan: {{get-credit-risk.customer_name}} - {{currency}} {{facility_amount}}'
          amount: '{{facility_amount}}'
          stage: Application
          facility_id: '{{create-facility.facility_id}}'
  consumes:
  - type: http
    namespace: risk-api
    baseUri: https://api.sc.com/risk/v1
    authentication:
      type: bearer
      token: $secrets.sc_risk_token
    resources:
    - name: credit-scores
      path: /customers/{{id}}/credit-score
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-credit-score
        method: GET
  - type: http
    namespace: sanctions-api
    baseUri: https://api.sc.com/compliance/v1
    authentication:
      type: bearer
      token: $secrets.sc_compliance_token
    resources:
    - name: screening
      path: /sanctions/screen
      operations:
      - name: screen
        method: POST
  - type: http
    namespace: core-banking
    baseUri: https://api.sc.com/core-banking/v1
    authentication:
      type: bearer
      token: $secrets.sc_core_banking_token
    resources:
    - name: facilities
      path: /facilities
      operations:
      - name: create-facility
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://sc.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
Open in Framework → View in Fleet → corporate-loan-origination-orchestrator.yml

Retrieves trade receivable discounting status data from the Standard Chartered international banking systems.

naftiko: '0.5'
info:
  label: Trade Receivable Discounting Status
  description: Retrieves trade receivable discounting status data from the Standard Chartered international banking systems.
  tags:
  - trade
  - standard-chartered
  - status
capability:
  exposes:
  - type: mcp
    namespace: trade
    port: 8080
    tools:
    - name: trade-receivable-discounting-status
      description: Retrieves trade receivable discounting status data from the Standard Chartered international banking systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: standard-chartered.trade-receivable-discounting-status
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: standard-chartered
    baseUri: https://api.sc.com/v2
    authentication:
      type: bearer
      token: $secrets.sc_api_token
    resources:
    - name: resource
      path: /trade/receivable/discounting/status/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: trade-receivable-discounting-status
        method: GET
Open in Framework → View in Fleet → trade-receivable-discounting-status.yml

Retrieves treasury cash pool balance data from the Standard Chartered international banking systems.

naftiko: '0.5'
info:
  label: Treasury Cash Pool Balance
  description: Retrieves treasury cash pool balance data from the Standard Chartered international banking systems.
  tags:
  - treasury
  - standard-chartered
  - balance
capability:
  exposes:
  - type: mcp
    namespace: treasury
    port: 8080
    tools:
    - name: treasury-cash-pool-balance
      description: Retrieves treasury cash pool balance data from the Standard Chartered international banking systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: standard-chartered.treasury-cash-pool-balance
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: standard-chartered
    baseUri: https://api.sc.com/v2
    authentication:
      type: bearer
      token: $secrets.sc_api_token
    resources:
    - name: resource
      path: /treasury/cash/pool/balance/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: treasury-cash-pool-balance
        method: GET
Open in Framework → View in Fleet → treasury-cash-pool-balance.yml

Orchestrates correspondent banking review pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Correspondent Banking Review Pipeline
  description: Orchestrates correspondent banking review pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - correspondent
  - standard-chartered
  - teams
  - splunk
  - bloomberg
capability:
  exposes:
  - type: mcp
    namespace: correspondent
    port: 8080
    tools:
    - name: correspondent-banking-review-pipeline
      description: Orchestrates correspondent banking review pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: teams.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: splunk.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: bloomberg.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/correspondent
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: splunk
    baseUri: https://splunk.sc.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: splunk-resource
      path: /api/correspondent
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: bloomberg-resource
      path: /api/correspondent
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → correspondent-banking-review-pipeline.yml

Orchestrates corporate lending origination pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Corporate Lending Origination Pipeline
  description: Orchestrates corporate lending origination pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - corporate
  - standard-chartered
  - jira
  - teams
  - splunk
capability:
  exposes:
  - type: mcp
    namespace: corporate
    port: 8080
    tools:
    - name: corporate-lending-origination-pipeline
      description: Orchestrates corporate lending origination pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: jira.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: teams.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: splunk.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://sc.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/corporate
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/corporate
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: splunk
    baseUri: https://splunk.sc.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: splunk-resource
      path: /api/corporate
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → corporate-lending-origination-pipeline.yml

Orchestrates digital banking migration pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Digital Banking Migration Pipeline
  description: Orchestrates digital banking migration pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - digital
  - standard-chartered
  - slack
  - jira
  - teams
capability:
  exposes:
  - type: mcp
    namespace: digital
    port: 8080
    tools:
    - name: digital-banking-migration-pipeline
      description: Orchestrates digital banking migration pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: slack.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: jira.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: teams.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/digital
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: jira
    baseUri: https://sc.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/digital
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/digital
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → digital-banking-migration-pipeline.yml

Retrieves corporate card program summary data from the Standard Chartered international banking systems.

naftiko: '0.5'
info:
  label: Corporate Card Program Summary
  description: Retrieves corporate card program summary data from the Standard Chartered international banking systems.
  tags:
  - corporate
  - standard-chartered
  - summary
capability:
  exposes:
  - type: mcp
    namespace: corporate
    port: 8080
    tools:
    - name: corporate-card-program-summary
      description: Retrieves corporate card program summary data from the Standard Chartered international banking systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: standard-chartered.corporate-card-program-summary
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: standard-chartered
    baseUri: https://api.sc.com/v2
    authentication:
      type: bearer
      token: $secrets.sc_api_token
    resources:
    - name: resource
      path: /corporate/card/program/summary/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: corporate-card-program-summary
        method: GET
Open in Framework → View in Fleet → corporate-card-program-summary.yml

Orchestrates supply chain finance onboarding pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Supply Chain Finance Onboarding Pipeline
  description: Orchestrates supply chain finance onboarding pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - supply
  - standard-chartered
  - bloomberg
  - confluence
  - standard-chartered
capability:
  exposes:
  - type: mcp
    namespace: supply
    port: 8080
    tools:
    - name: supply-chain-finance-onboarding-pipeline
      description: Orchestrates supply chain finance onboarding pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: bloomberg.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: confluence.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: standard-chartered.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: bloomberg-resource
      path: /api/supply
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://sc.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/supply
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: standard-chartered
    baseUri: https://api.sc.com/v2
    authentication:
      type: bearer
      token: $secrets.sc_api_token
    resources:
    - name: standard-chartered-resource
      path: /api/supply
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → supply-chain-finance-onboarding-pipeline.yml

Orchestrates trade settlement exception pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Trade Settlement Exception Pipeline
  description: Orchestrates trade settlement exception pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - trade
  - standard-chartered
  - snowflake
  - slack
  - jira
capability:
  exposes:
  - type: mcp
    namespace: trade
    port: 8080
    tools:
    - name: trade-settlement-exception-pipeline
      description: Orchestrates trade settlement exception pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: snowflake.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: slack.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: jira.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://sc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/trade
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/trade
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: jira
    baseUri: https://sc.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/trade
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → trade-settlement-exception-pipeline.yml

Retrieves trade finance shipment status data from the Standard Chartered international banking systems.

naftiko: '0.5'
info:
  label: Trade Finance Shipment Status
  description: Retrieves trade finance shipment status data from the Standard Chartered international banking systems.
  tags:
  - trade
  - standard-chartered
  - status
capability:
  exposes:
  - type: mcp
    namespace: trade
    port: 8080
    tools:
    - name: trade-finance-shipment-status
      description: Retrieves trade finance shipment status data from the Standard Chartered international banking systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: standard-chartered.trade-finance-shipment-status
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: standard-chartered
    baseUri: https://api.sc.com/v2
    authentication:
      type: bearer
      token: $secrets.sc_api_token
    resources:
    - name: resource
      path: /trade/finance/shipment/status/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: trade-finance-shipment-status
        method: GET
Open in Framework → View in Fleet → trade-finance-shipment-status.yml

Orchestrates credit portfolio monitoring pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Credit Portfolio Monitoring Pipeline
  description: Orchestrates credit portfolio monitoring pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - credit
  - standard-chartered
  - bloomberg
  - confluence
  - standard-chartered
capability:
  exposes:
  - type: mcp
    namespace: credit
    port: 8080
    tools:
    - name: credit-portfolio-monitoring-pipeline
      description: Orchestrates credit portfolio monitoring pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: bloomberg.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: confluence.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: standard-chartered.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: bloomberg
    baseUri: https://api.bloomberg.com/v1
    authentication:
      type: bearer
      token: $secrets.bloomberg_token
    resources:
    - name: bloomberg-resource
      path: /api/credit
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://sc.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/credit
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: standard-chartered
    baseUri: https://api.sc.com/v2
    authentication:
      type: bearer
      token: $secrets.sc_api_token
    resources:
    - name: standard-chartered-resource
      path: /api/credit
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → credit-portfolio-monitoring-pipeline.yml

Orchestrates data quality governance pipeline across international banking systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Data Quality Governance Pipeline
  description: Orchestrates data quality governance pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
  tags:
  - data
  - standard-chartered
  - snowflake
  - slack
  - jira
capability:
  exposes:
  - type: mcp
    namespace: data
    port: 8080
    tools:
    - name: data-quality-governance-pipeline
      description: Orchestrates data quality governance pipeline across international banking systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: snowflake.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: slack.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: jira.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://sc.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/data
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/data
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: jira
    baseUri: https://sc.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/data
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → data-quality-governance-pipeline.yml

Generates a customer account statement for a specified period from the core banking system and emails it via MailChimp.

naftiko: '0.5'
info:
  label: Account Statement Generator
  description: Generates a customer account statement for a specified period from the core banking system and emails it via MailChimp.
  tags:
  - banking
  - statements
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: statements
    port: 8080
    tools:
    - name: generate-account-statement
      description: Generate and email a customer account statement.
      inputParameters:
      - name: account_number
        in: body
        type: string
        description: The customer account number.
      - name: start_date
        in: body
        type: string
        description: The statement start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: The statement end date in YYYY-MM-DD format.
      steps:
      - name: get-statement
        type: call
        call: core-banking.get-statement
        with:
          account: '{{account_number}}'
          from: '{{start_date}}'
          to: '{{end_date}}'
      - name: email-statement
        type: call
        call: mailchimp.send-transactional
        with:
          template_name: account_statement
          to_email: '{{get-statement.customer_email}}'
          merge_vars:
            customer_name: '{{get-statement.customer_name}}'
            period: '{{start_date}} to {{end_date}}'
            opening_balance: '{{get-statement.opening_balance}}'
            closing_balance: '{{get-statement.closing_balance}}'
  consumes:
  - type: http
    namespace: core-banking
    baseUri: https://api.sc.com/core-banking/v1
    authentication:
      type: bearer
      token: $secrets.sc_core_banking_token
    resources:
    - name: statements
      path: /accounts/{{account}}/statement?from={{from}}&to={{to}}
      inputParameters:
      - name: account
        in: path
      - name: from
        in: query
      - name: to
        in: query
      operations:
      - name: get-statement
        method: GET
  - type: http
    namespace: mailchimp
    baseUri: https://mandrillapp.com/api/1.0
    authentication:
      type: apiKey
      key: $secrets.mailchimp_transactional_key
    resources:
    - name: messages
      path: /messages/send-template
      operations:
      - name: send-transactional
        method: POST
Open in Framework → View in Fleet → account-statement-generator.yml

Retrieves loan syndication participant lookup data from the Standard Chartered international banking systems.

naftiko: '0.5'
info:
  label: Loan Syndication Participant Lookup
  description: Retrieves loan syndication participant lookup data from the Standard Chartered international banking systems.
  tags:
  - loan
  - standard-chartered
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: loan
    port: 8080
    tools:
    - name: loan-syndication-participant-lookup
      description: Retrieves loan syndication participant lookup data from the Standard Chartered international banking systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: standard-chartered.loan-syndication-participant-lookup
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: standard-chartered
    baseUri: https://api.sc.com/v2
    authentication:
      type: bearer
      token: $secrets.sc_api_token
    resources:
    - name: resource
      path: /loan/syndication/participant/lookup/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: loan-syndication-participant-lookup
        method: GET
Open in Framework → View in Fleet → loan-syndication-participant-lookup.yml

Retrieves structured product valuation data from the Standard Chartered international banking systems.

naftiko: '0.5'
info:
  label: Structured Product Valuation
  description: Retrieves structured product valuation data from the Standard Chartered international banking systems.
  tags:
  - structured
  - standard-chartered
  - valuation
capability:
  exposes:
  - type: mcp
    namespace: structured
    port: 8080
    tools:
    - name: structured-product-valuation
      description: Retrieves structured product valuation data from the Standard Chartered international banking systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: standard-chartered.structured-product-valuation
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: standard-chartered
    baseUri: https://api.sc.com/v2
    authentication:
      type: bearer
      token: $secrets.sc_api_token
    resources:
    - name: resource
      path: /structured/product/valuation/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: structured-product-valuation
        method: GET
Open in Framework → View in Fleet → structured-product-valuation.yml

When webhook deliveries fail repeatedly, creates a Jira incident ticket, queries Snowflake for failure patterns, and alerts the integrations team via Slack.

naftiko: '0.5'
info:
  label: Stripe Webhook Failure Handler
  description: When webhook deliveries fail repeatedly, creates a Jira incident ticket, queries Snowflake for failure patterns, and alerts the integrations team via Slack.
  tags:
  - integrations
  - stripe
  - jira
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: webhook-ops
    port: 8080
    tools:
    - name: handle-webhook-failures
      description: Given a webhook endpoint and failure count, investigate, create ticket, and alert.
      inputParameters:
      - name: endpoint_url
        in: body
        type: string
        description: The webhook endpoint URL.
      - name: failure_count
        in: body
        type: number
        description: Number of consecutive failures.
      - name: merchant_id
        in: body
        type: string
        description: The merchant account ID.
      steps:
      - name: query-failure-pattern
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT event_type, status_code, COUNT(*) FROM webhooks.delivery_logs WHERE merchant_id='{{merchant_id}}' AND status_code>=400 AND created_at>=DATEADD(hour, -24, CURRENT_TIMESTAMP()) GROUP BY event_type, status_code
      - name: create-incident
        type: call
        call: jira.create-issue
        with:
          project_key: INT
          issuetype: Bug
          summary: 'Webhook failures: {{merchant_id}} — {{failure_count}} consecutive failures'
          description: 'Endpoint: {{endpoint_url}}

            Failure pattern: {{query-failure-pattern.data}}'
      - name: alert-integrations
        type: call
        call: slack.post-message
        with:
          channel: integrations-alerts
          text: 'Webhook failures: {{merchant_id}} endpoint {{endpoint_url}} — {{failure_count}} failures. Pattern: {{query-failure-pattern.data}}. Ticket: {{create-incident.key}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://stripe.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: jira
    baseUri: https://stripe.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-webhook-failure-handler.yml

Tracks merchants migrating to new payment methods, queries Snowflake for adoption metrics, and posts progress to the payments product Slack channel.

naftiko: '0.5'
info:
  label: Stripe Payment Method Migration Tracker
  description: Tracks merchants migrating to new payment methods, queries Snowflake for adoption metrics, and posts progress to the payments product Slack channel.
  tags:
  - payments
  - stripe
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: pm-migration
    port: 8080
    tools:
    - name: track-pm-migration
      description: Given a payment method type, query adoption metrics and share progress.
      inputParameters:
      - name: payment_method
        in: body
        type: string
        description: Payment method type (e.g., link, apple_pay, google_pay).
      steps:
      - name: query-adoption
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT COUNT(DISTINCT merchant_id) as merchants, SUM(volume) as total_volume FROM payments.pm_adoption WHERE payment_method='{{payment_method}}' AND month=DATE_TRUNC('month', CURRENT_DATE())
      - name: post-progress
        type: call
        call: slack.post-message
        with:
          channel: payments-product
          text: '{{payment_method}} adoption: {{query-adoption.data}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://stripe.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-payment-method-migration-tracker.yml

Lists Stripe products and prices, then upserts matching product records in Salesforce for CRM-level revenue reporting and quoting accuracy.

naftiko: '0.5'
info:
  label: Stripe Product Catalog Sync to Salesforce
  description: Lists Stripe products and prices, then upserts matching product records in Salesforce for CRM-level revenue reporting and quoting accuracy.
  tags:
  - finance
  - stripe
  - salesforce
  - product-catalog
  - sync
capability:
  exposes:
  - type: mcp
    namespace: catalog-ops
    port: 8080
    tools:
    - name: sync-products-to-salesforce
      description: Retrieve the active Stripe product catalog and upsert each product into Salesforce as a Product2 record with the Stripe price. Use weekly or post-product-launch to keep CRM and billing catalogs in sync.
      inputParameters:
      - name: active_only
        in: body
        type: boolean
        description: If true, only sync active Stripe products.
      steps:
      - name: list-stripe-products
        type: call
        call: stripe-products.list-products
        with:
          active: '{{active_only}}'
          limit: 100
      - name: upsert-sf-products
        type: call
        call: salesforce-products.upsert-product
        with:
          Name: '{{list-stripe-products.data}}'
          ExternalId__c: '{{list-stripe-products.id}}'
  consumes:
  - type: http
    namespace: stripe-products
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: products
      path: /products
      inputParameters:
      - name: active
        in: query
      - name: limit
        in: query
      operations:
      - name: list-products
        method: GET
  - type: http
    namespace: salesforce-products
    baseUri: https://stripe.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: product2
      path: /sobjects/Product2
      operations:
      - name: upsert-product
        method: POST
Open in Framework → View in Fleet → stripe-product-catalog-sync-to-salesforce.yml

Before a production deploy, checks Datadog for active incidents, verifies GitHub CI status, and posts a deployment readiness report to Slack.

naftiko: '0.5'
info:
  label: GitHub CI/CD Deployment Gate
  description: Before a production deploy, checks Datadog for active incidents, verifies GitHub CI status, and posts a deployment readiness report to Slack.
  tags:
  - cicd
  - github
  - datadog
  - slack
capability:
  exposes:
  - type: mcp
    namespace: deploy-ops
    port: 8080
    tools:
    - name: check-deploy-readiness
      description: Given a repo and branch, check CI status, verify no active incidents, and report readiness.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: The repository name.
      - name: branch
        in: body
        type: string
        description: The branch to deploy.
      steps:
      - name: check-ci-status
        type: call
        call: github.get-branch-status
        with:
          repo: '{{repo_name}}'
          branch: '{{branch}}'
      - name: post-readiness
        type: call
        call: slack.post-message
        with:
          channel: deployments
          text: 'Deploy readiness for {{repo_name}}:{{branch}}: CI status={{check-ci-status.state}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: branch-status
      path: /repos/stripe/{{repo}}/commits/{{branch}}/status
      inputParameters:
      - name: repo
        in: path
      - name: branch
        in: path
      operations:
      - name: get-branch-status
        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
Open in Framework → View in Fleet → github-ci-cd-deployment-gate.yml

On employee termination in Workday, deactivates the Salesforce user license, closes all open Jira tasks assigned to the employee, and notifies HR in Slack.

naftiko: '0.5'
info:
  label: Workday Employee Offboarding
  description: On employee termination in Workday, deactivates the Salesforce user license, closes all open Jira tasks assigned to the employee, and notifies HR in Slack.
  tags:
  - hr
  - workday
  - salesforce
  - jira
  - slack
  - offboarding
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: offboard-employee
      description: 'Given a Workday worker ID, deactivate the matching Salesforce user, close their open Jira issues, and post an offboarding completion notice to #hr-ops in Slack. Invoke on confirmed employee termination events.'
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: Workday worker ID of the departing employee.
      - name: salesforce_user_id
        in: body
        type: string
        description: Salesforce user ID to deactivate.
      - name: jira_account_id
        in: body
        type: string
        description: Jira account ID to reassign or close open issues for.
      steps:
      - name: deactivate-sf-user
        type: call
        call: salesforce-users.update-user
        with:
          user_id: '{{salesforce_user_id}}'
          IsActive: 'false'
      - name: close-jira-issues
        type: call
        call: jira-offboard.search-issues
        with:
          jql: assignee={{jira_account_id}} AND status!=Done
      - name: notify-hr
        type: call
        call: slack-offboard.post-message
        with:
          channel: hr-ops
          text: Offboarding complete for worker {{worker_id}}. Salesforce user {{salesforce_user_id}} deactivated. Open Jira issues identified for reassignment.
  consumes:
  - type: http
    namespace: salesforce-users
    baseUri: https://stripe.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: user-record
      path: /sobjects/User/{{user_id}}
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: update-user
        method: PATCH
  - type: http
    namespace: jira-offboard
    baseUri: https://stripe.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issue-search
      path: /issue/search
      inputParameters:
      - name: jql
        in: query
      operations:
      - name: search-issues
        method: GET
  - type: http
    namespace: slack-offboard
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → workday-employee-offboarding.yml

When a chargeback dispute is opened on Stripe, gathers transaction metadata and automatically submits evidence to contest the dispute. Reduces manual risk team workload.

naftiko: '0.5'
info:
  label: Stripe Dispute Evidence Submission
  description: When a chargeback dispute is opened on Stripe, gathers transaction metadata and automatically submits evidence to contest the dispute. Reduces manual risk team workload.
  tags:
  - finance
  - payments
  - stripe
  - disputes
  - risk
capability:
  exposes:
  - type: mcp
    namespace: risk-ops
    port: 8080
    tools:
    - name: submit-dispute-evidence
      description: Given a Stripe dispute ID, retrieve the associated charge, build an evidence payload from transaction metadata, and submit it to Stripe dispute evidence API. Use when responding to stripe.charge.dispute.created events.
      inputParameters:
      - name: dispute_id
        in: body
        type: string
        description: Stripe dispute ID (dp_xxxxx) to contest.
      - name: customer_email_evidence
        in: body
        type: string
        description: Customer communication evidence text to include.
      - name: service_date
        in: body
        type: string
        description: Date of service or product delivery (YYYY-MM-DD).
      steps:
      - name: get-dispute
        type: call
        call: stripe-disputes.get-dispute
        with:
          id: '{{dispute_id}}'
      - name: submit-evidence
        type: call
        call: stripe-dispute-evidence.update-evidence
        with:
          id: '{{dispute_id}}'
          customer_email_address: '{{customer_email_evidence}}'
          service_date: '{{service_date}}'
          billing_address: '{{get-dispute.charge}}'
  consumes:
  - type: http
    namespace: stripe-disputes
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: disputes
      path: /disputes/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-dispute
        method: GET
  - type: http
    namespace: stripe-dispute-evidence
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: dispute-evidence
      path: /disputes/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: update-evidence
        method: POST
Open in Framework → View in Fleet → stripe-dispute-evidence-submission.yml

Submits an internal document or support ticket to Anthropic Claude for summarization, returning a concise summary for agent triage or knowledge base ingestion.

naftiko: '0.5'
info:
  label: Anthropic AI Document Summarization
  description: Submits an internal document or support ticket to Anthropic Claude for summarization, returning a concise summary for agent triage or knowledge base ingestion.
  tags:
  - ai
  - anthropic
  - automation
  - summarization
capability:
  exposes:
  - type: mcp
    namespace: ai-ops
    port: 8080
    tools:
    - name: summarize-document
      description: Given document text, send it to Anthropic Claude for a concise summary. Use for support ticket triage, internal document distillation, or pre-processing before knowledge base ingestion.
      inputParameters:
      - name: document_text
        in: body
        type: string
        description: Raw text content of the document or ticket to summarize.
      - name: max_tokens
        in: body
        type: integer
        description: Maximum token length for the summary response.
      call: anthropic-api.create-message
      with:
        model: claude-opus-4-5
        max_tokens: '{{max_tokens}}'
        messages: '[{"role":"user","content":"Summarize the following document concisely:\n\n{{document_text}}"}]'
      outputParameters:
      - name: summary
        type: string
        mapping: $.content[0].text
  consumes:
  - type: http
    namespace: anthropic-api
    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
Open in Framework → View in Fleet → anthropic-ai-document-summarization.yml

When AWS costs spike, creates a Jira finops ticket and alerts the infrastructure team via Slack.

naftiko: '0.5'
info:
  label: AWS Cost Anomaly Detector
  description: When AWS costs spike, creates a Jira finops ticket and alerts the infrastructure team via Slack.
  tags:
  - finops
  - aws
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: finops
    port: 8080
    tools:
    - name: handle-cost-anomaly
      description: Given cost anomaly details, create a finops ticket and alert the team.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: AWS service with cost spike.
      - name: cost_increase_pct
        in: body
        type: number
        description: Percentage increase.
      - name: estimated_daily_cost
        in: body
        type: number
        description: Estimated daily cost in USD.
      steps:
      - name: create-finops-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: FINOPS
          issuetype: Task
          summary: 'Cost anomaly: {{service_name}} up {{cost_increase_pct}}% (${{estimated_daily_cost}}/day)'
      - name: alert-infra
        type: call
        call: slack.post-message
        with:
          channel: infrastructure-costs
          text: 'AWS cost anomaly: {{service_name}} increased {{cost_increase_pct}}% to ${{estimated_daily_cost}}/day. Ticket: {{create-finops-ticket.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://stripe.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → aws-cost-anomaly-detector.yml

When a corporate card spend limit is breached, creates a Jira ticket for the finance team and alerts the cardholder's manager via Slack.

naftiko: '0.5'
info:
  label: Stripe Issuing Spend Controls Manager
  description: When a corporate card spend limit is breached, creates a Jira ticket for the finance team and alerts the cardholder's manager via Slack.
  tags:
  - finance
  - stripe
  - issuing
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: issuing-ops
    port: 8080
    tools:
    - name: handle-spend-limit-breach
      description: Given a card ID and spend details, create finance ticket and alert manager.
      inputParameters:
      - name: card_id
        in: body
        type: string
        description: Stripe Issuing card ID.
      - name: cardholder_name
        in: body
        type: string
        description: Cardholder name.
      - name: spend_amount
        in: body
        type: number
        description: Transaction amount.
      - name: limit_amount
        in: body
        type: number
        description: Configured spend limit.
      steps:
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: FIN
          issuetype: Task
          summary: 'Spend limit breach: {{cardholder_name}} — ${{spend_amount}} (limit: ${{limit_amount}})'
      - name: alert-finance
        type: call
        call: slack.post-message
        with:
          channel: finance-alerts
          text: 'Spend limit breach: {{cardholder_name}} card {{card_id}} — ${{spend_amount}} (limit: ${{limit_amount}}). Ticket: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://stripe.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-issuing-spend-controls-manager.yml

Retrieves a Stripe product by ID including name, description, and active status.

naftiko: '0.5'
info:
  label: Stripe Product Catalog Lookup
  description: Retrieves a Stripe product by ID including name, description, and active status.
  tags:
  - billing
  - stripe
  - catalog
capability:
  exposes:
  - type: mcp
    namespace: catalog
    port: 8080
    tools:
    - name: get-product
      description: Given a Stripe product ID, return its name, description, and status.
      inputParameters:
      - name: product_id
        in: body
        type: string
        description: The Stripe product ID.
      call: stripe-products.get-product
      with:
        id: '{{product_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.name
      - name: active
        type: boolean
        mapping: $.active
  consumes:
  - type: http
    namespace: stripe-products
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: products
      path: /products/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-product
        method: GET
Open in Framework → View in Fleet → stripe-product-catalog-lookup.yml

Retrieves the count of open Dependabot alerts for a given GitHub repository.

naftiko: '0.5'
info:
  label: GitHub Repo Vulnerability Count
  description: Retrieves the count of open Dependabot alerts for a given GitHub repository.
  tags:
  - security
  - github
capability:
  exposes:
  - type: mcp
    namespace: security
    port: 8080
    tools:
    - name: get-vulnerability-count
      description: Given a repo name, return the count of open Dependabot vulnerability alerts.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: The GitHub repository name.
      call: github-alerts.list-alerts
      with:
        repo: '{{repo_name}}'
      outputParameters:
      - name: alert_count
        type: number
        mapping: $.length
  consumes:
  - type: http
    namespace: github-alerts
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: alerts
      path: /repos/stripe/{{repo}}/dependabot/alerts
      inputParameters:
      - name: repo
        in: path
      operations:
      - name: list-alerts
        method: GET
Open in Framework → View in Fleet → github-repo-vulnerability-count.yml

Tracks adoption of Stripe embedded UI components, queries Snowflake for usage metrics, and posts a weekly adoption report to the product Slack channel.

naftiko: '0.5'
info:
  label: Stripe Embedded Components Adoption Tracker
  description: Tracks adoption of Stripe embedded UI components, queries Snowflake for usage metrics, and posts a weekly adoption report to the product Slack channel.
  tags:
  - product
  - stripe
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: embedded-ops
    port: 8080
    tools:
    - name: track-embedded-adoption
      description: Given a component name, pull usage data and post adoption report.
      inputParameters:
      - name: component_name
        in: body
        type: string
        description: Embedded component name (e.g., PaymentElement, ExpressCheckout).
      steps:
      - name: query-adoption
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT week, merchant_count, integration_count, volume FROM product.embedded_adoption WHERE component='{{component_name}}' ORDER BY week DESC LIMIT 4
      - name: post-report
        type: call
        call: slack.post-message
        with:
          channel: embedded-product
          text: '{{component_name}} adoption (last 4 weeks):

            {{query-adoption.data}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://stripe.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-embedded-components-adoption-tracker.yml

Queries Snowflake for metered billing usage, reconciles against Stripe meter records, and posts usage summary to the billing ops Slack channel.

naftiko: '0.5'
info:
  label: Stripe Billing Meter Usage Reporter
  description: Queries Snowflake for metered billing usage, reconciles against Stripe meter records, and posts usage summary to the billing ops Slack channel.
  tags:
  - billing
  - stripe
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: billing-ops
    port: 8080
    tools:
    - name: report-meter-usage
      description: Given a meter ID and period, pull usage data, reconcile, and report.
      inputParameters:
      - name: meter_id
        in: body
        type: string
        description: The Stripe billing meter ID.
      - name: billing_period
        in: body
        type: string
        description: The billing period (e.g., 2026-03).
      steps:
      - name: query-usage
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT customer_id, SUM(quantity) as total_usage FROM billing.meter_events WHERE meter_id='{{meter_id}}' AND period='{{billing_period}}' GROUP BY customer_id ORDER BY total_usage DESC LIMIT 20
      - name: post-report
        type: call
        call: slack.post-message
        with:
          channel: billing-operations
          text: 'Meter usage report for {{meter_id}} ({{billing_period}}): Top 20 customers:

            {{query-usage.data}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://stripe.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-billing-meter-usage-reporter.yml

Creates or updates a Stripe webhook endpoint registration for a given URL and event list, enabling automated webhook infrastructure provisioning for new environments.

naftiko: '0.5'
info:
  label: Stripe Webhook Endpoint Management
  description: Creates or updates a Stripe webhook endpoint registration for a given URL and event list, enabling automated webhook infrastructure provisioning for new environments.
  tags:
  - devops
  - stripe
  - webhooks
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: webhook-infra
    port: 8080
    tools:
    - name: register-webhook-endpoint
      description: Given a target URL and list of Stripe event types, create a new webhook endpoint registration in Stripe. Use during environment provisioning or when adding new event subscriptions.
      inputParameters:
      - name: url
        in: body
        type: string
        description: HTTPS URL that Stripe will deliver webhook events to.
      - name: events
        in: body
        type: string
        description: Comma-separated list of Stripe event types to subscribe (e.g. payment_intent.succeeded,invoice.payment_failed).
      call: stripe-webhooks.create-endpoint
      with:
        url: '{{url}}'
        enabled_events: '{{events}}'
      outputParameters:
      - name: endpoint_id
        type: string
        mapping: $.id
      - name: secret
        type: string
        mapping: $.secret
  consumes:
  - type: http
    namespace: stripe-webhooks
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: webhook-endpoints
      path: /webhook_endpoints
      operations:
      - name: create-endpoint
        method: POST
Open in Framework → View in Fleet → stripe-webhook-endpoint-management.yml

Retrieves a Stripe price object by ID including unit amount, currency, and billing scheme.

naftiko: '0.5'
info:
  label: Stripe Price Lookup
  description: Retrieves a Stripe price object by ID including unit amount, currency, and billing scheme.
  tags:
  - billing
  - stripe
  - pricing
capability:
  exposes:
  - type: mcp
    namespace: billing
    port: 8080
    tools:
    - name: get-price
      description: Given a Stripe price ID, return its unit amount, currency, and type.
      inputParameters:
      - name: price_id
        in: body
        type: string
        description: The Stripe price ID.
      call: stripe-prices.get-price
      with:
        id: '{{price_id}}'
      outputParameters:
      - name: unit_amount
        type: number
        mapping: $.unit_amount
      - name: currency
        type: string
        mapping: $.currency
  consumes:
  - type: http
    namespace: stripe-prices
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: prices
      path: /prices/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-price
        method: GET
Open in Framework → View in Fleet → stripe-price-lookup.yml

Monitors Stripe Terminal device fleet health, creates Jira tickets for offline devices, and alerts the hardware operations team via Slack.

naftiko: '0.5'
info:
  label: Stripe Terminal Device Health Monitor
  description: Monitors Stripe Terminal device fleet health, creates Jira tickets for offline devices, and alerts the hardware operations team via Slack.
  tags:
  - hardware
  - stripe
  - jira
  - slack
  - terminal
capability:
  exposes:
  - type: mcp
    namespace: terminal-ops
    port: 8080
    tools:
    - name: monitor-terminal-health
      description: Given a location ID, check terminal device health and escalate offline devices.
      inputParameters:
      - name: location_id
        in: body
        type: string
        description: The Stripe Terminal location ID.
      - name: merchant_name
        in: body
        type: string
        description: The merchant name.
      steps:
      - name: create-hw-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: HW
          issuetype: Bug
          summary: 'Terminal offline: Location {{location_id}} — {{merchant_name}}'
      - name: alert-hw-ops
        type: call
        call: slack.post-message
        with:
          channel: terminal-operations
          text: 'Terminal device offline at {{merchant_name}} (location: {{location_id}}). Ticket: {{create-hw-ticket.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://stripe.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-terminal-device-health-monitor.yml

When an SLO burn rate alert fires, creates a Jira investigation ticket, pages the owning team, and posts to the SRE Slack channel.

naftiko: '0.5'
info:
  label: Datadog SLO Burn Rate Responder
  description: When an SLO burn rate alert fires, creates a Jira investigation ticket, pages the owning team, and posts to the SRE Slack channel.
  tags:
  - sre
  - datadog
  - jira
  - pagerduty
  - slack
capability:
  exposes:
  - type: mcp
    namespace: slo-ops
    port: 8080
    tools:
    - name: respond-to-slo-burn
      description: Given an SLO name and burn rate, create investigation ticket, page team, and notify SRE.
      inputParameters:
      - name: slo_name
        in: body
        type: string
        description: The SLO name.
      - name: burn_rate
        in: body
        type: number
        description: Current burn rate multiplier.
      - name: owning_team
        in: body
        type: string
        description: The team owning this SLO.
      steps:
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: SRE
          issuetype: Bug
          summary: 'SLO burn: {{slo_name}} at {{burn_rate}}x'
          description: 'Owning team: {{owning_team}}'
      - name: page-team
        type: call
        call: pagerduty.create-incident
        with:
          title: 'SLO burn rate: {{slo_name}} at {{burn_rate}}x'
          service_id: '{{owning_team}}_SRE'
      - name: notify-sre
        type: call
        call: slack.post-message
        with:
          channel: sre-alerts
          text: 'SLO burn: {{slo_name}} at {{burn_rate}}x. Team: {{owning_team}}. Jira: {{create-ticket.key}}. PD: {{page-team.incident.id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://stripe.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → datadog-slo-burn-rate-responder.yml

Queries Snowflake for custom payment analytics, generates a summary with Anthropic AI, and posts the report to the analytics Slack channel.

naftiko: '0.5'
info:
  label: Stripe Sigma Report Generator
  description: Queries Snowflake for custom payment analytics, generates a summary with Anthropic AI, and posts the report to the analytics Slack channel.
  tags:
  - analytics
  - snowflake
  - anthropic
  - slack
  - ai
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: generate-sigma-report
      description: Given a report type and date range, query data, summarize with AI, and share.
      inputParameters:
      - name: report_type
        in: body
        type: string
        description: Type of report (e.g., revenue, disputes, churn).
      - name: date_range
        in: body
        type: string
        description: Date range (e.g., last_30_days).
      steps:
      - name: query-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM analytics.{{report_type}}_summary WHERE period='{{date_range}}'
      - name: summarize
        type: call
        call: anthropic.create-message
        with:
          model: claude-3-5-sonnet-20241022
          max_tokens: 1000
          messages: '[{"role": "user", "content": "Analyze this {{report_type}} data and provide key insights and trends:\n{{query-data.data}}"}]'
      - name: post-report
        type: call
        call: slack.post-message
        with:
          channel: analytics
          text: '{{report_type}} report ({{date_range}}):

            {{summarize.content}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://stripe.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: 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: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-sigma-report-generator.yml

Creates a Stripe coupon and promotion code for a marketing campaign and logs the creation in Salesforce for CRM-level campaign tracking.

naftiko: '0.5'
info:
  label: Stripe Coupon and Promotion Management
  description: Creates a Stripe coupon and promotion code for a marketing campaign and logs the creation in Salesforce for CRM-level campaign tracking.
  tags:
  - finance
  - stripe
  - salesforce
  - marketing
  - promotions
capability:
  exposes:
  - type: mcp
    namespace: promotions-ops
    port: 8080
    tools:
    - name: create-promotion
      description: Given a discount percentage, duration, and campaign name, create a Stripe coupon, generate a promotion code, and log the promotion in Salesforce as a campaign activity. Use when launching a new customer acquisition or retention promotion.
      inputParameters:
      - name: percent_off
        in: body
        type: number
        description: Discount percentage for the coupon (e.g. 20 for 20% off).
      - name: duration
        in: body
        type: string
        description: 'Stripe coupon duration: once, repeating, or forever.'
      - name: campaign_name
        in: body
        type: string
        description: Internal campaign name for tracking in Salesforce.
      - name: promo_code
        in: body
        type: string
        description: Human-readable promotion code string (e.g. SAVE20).
      steps:
      - name: create-coupon
        type: call
        call: stripe-coupons.create-coupon
        with:
          percent_off: '{{percent_off}}'
          duration: '{{duration}}'
          name: '{{campaign_name}}'
      - name: create-promo-code
        type: call
        call: stripe-promo-codes.create-code
        with:
          coupon: '{{create-coupon.id}}'
          code: '{{promo_code}}'
      - name: log-campaign
        type: call
        call: salesforce-campaigns.create-campaign
        with:
          Name: '{{campaign_name}}'
          Stripe_Coupon_ID__c: '{{create-coupon.id}}'
          Promo_Code__c: '{{promo_code}}'
  consumes:
  - type: http
    namespace: stripe-coupons
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: coupons
      path: /coupons
      operations:
      - name: create-coupon
        method: POST
  - type: http
    namespace: stripe-promo-codes
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: promotion-codes
      path: /promotion_codes
      operations:
      - name: create-code
        method: POST
  - type: http
    namespace: salesforce-campaigns
    baseUri: https://stripe.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign
      operations:
      - name: create-campaign
        method: POST
Open in Framework → View in Fleet → stripe-coupon-and-promotion-management.yml

Analyzes cross-border payment success rates from Snowflake, identifies routing optimizations, and posts recommendations to the payments infrastructure Slack channel.

naftiko: '0.5'
info:
  label: Stripe Cross-Border Payment Optimizer
  description: Analyzes cross-border payment success rates from Snowflake, identifies routing optimizations, and posts recommendations to the payments infrastructure Slack channel.
  tags:
  - payments
  - international
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: payments-infra
    port: 8080
    tools:
    - name: optimize-cross-border
      description: Given a corridor, analyze success rates and post optimization recommendations.
      inputParameters:
      - name: source_country
        in: body
        type: string
        description: Source country code.
      - name: destination_country
        in: body
        type: string
        description: Destination country code.
      steps:
      - name: query-corridor-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT payment_method, success_rate, avg_latency_ms, volume FROM payments.cross_border_corridors WHERE source='{{source_country}}' AND destination='{{destination_country}}' ORDER BY success_rate DESC
      - name: post-recommendations
        type: call
        call: slack.post-message
        with:
          channel: payments-infrastructure
          text: 'Cross-border corridor {{source_country}} -> {{destination_country}}:

            {{query-corridor-data.data}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://stripe.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-cross-border-payment-optimizer.yml

Queries Link adoption metrics from Snowflake and posts a weekly adoption report to the product Slack channel.

naftiko: '0.5'
info:
  label: Stripe Link Adoption Dashboard Sync
  description: Queries Link adoption metrics from Snowflake and posts a weekly adoption report to the product Slack channel.
  tags:
  - payments
  - stripe
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: link-ops
    port: 8080
    tools:
    - name: sync-link-adoption
      description: Pull Link adoption data and share weekly summary.
      inputParameters:
      - name: week_start
        in: body
        type: string
        description: Week start date YYYY-MM-DD.
      steps:
      - name: query-link-metrics
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT new_users, returning_users, conversion_rate FROM product.link_metrics WHERE week_start='{{week_start}}'
      - name: post-report
        type: call
        call: slack.post-message
        with:
          channel: link-product
          text: 'Link adoption week of {{week_start}}: {{query-link-metrics.data}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://stripe.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-link-adoption-dashboard-sync.yml

Retrieves the count of open bugs grouped by severity for a given Jira project.

naftiko: '0.5'
info:
  label: Jira Bug Count by Severity
  description: Retrieves the count of open bugs grouped by severity for a given Jira project.
  tags:
  - engineering
  - jira
capability:
  exposes:
  - type: mcp
    namespace: eng-metrics
    port: 8080
    tools:
    - name: get-bug-counts
      description: Given a Jira project key, return the count of open bugs by severity.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The Jira project key.
      call: jira-search.search-issues
      with:
        jql: project={{project_key}} AND issuetype=Bug AND status!=Done
      outputParameters:
      - name: total
        type: number
        mapping: $.total
  consumes:
  - type: http
    namespace: jira-search
    baseUri: https://stripe.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
Open in Framework → View in Fleet → jira-bug-count-by-severity.yml

Queries Snowflake for monthly revenue data, reconciles deferred revenue entries, and posts a revenue recognition summary to the finance Slack channel.

naftiko: '0.5'
info:
  label: Stripe Revenue Recognition Pipeline
  description: Queries Snowflake for monthly revenue data, reconciles deferred revenue entries, and posts a revenue recognition summary to the finance Slack channel.
  tags:
  - finance
  - revenue
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: rev-rec
    port: 8080
    tools:
    - name: run-rev-rec
      description: Given a fiscal month, pull revenue data and post recognition summary.
      inputParameters:
      - name: fiscal_month
        in: body
        type: string
        description: Fiscal month (e.g., 2026-03).
      steps:
      - name: query-revenue
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT revenue_type, SUM(recognized_amount) as recognized, SUM(deferred_amount) as deferred FROM finance.rev_rec WHERE month='{{fiscal_month}}' GROUP BY revenue_type
      - name: post-summary
        type: call
        call: slack.post-message
        with:
          channel: finance-accounting
          text: 'Revenue recognition for {{fiscal_month}}:

            {{query-revenue.data}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://stripe.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-revenue-recognition-pipeline.yml

Retrieves a Stripe invoice by ID including line items, amount due, and payment status.

naftiko: '0.5'
info:
  label: Stripe Invoice Lookup
  description: Retrieves a Stripe invoice by ID including line items, amount due, and payment status.
  tags:
  - finance
  - payments
  - stripe
  - billing
capability:
  exposes:
  - type: mcp
    namespace: billing
    port: 8080
    tools:
    - name: get-invoice
      description: Given a Stripe invoice ID, return its status, amount due, and line items.
      inputParameters:
      - name: invoice_id
        in: body
        type: string
        description: 'The Stripe invoice ID (format: in_xxxxx).'
      call: stripe-invoices.get-invoice
      with:
        id: '{{invoice_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: amount_due
        type: number
        mapping: $.amount_due
      - name: currency
        type: string
        mapping: $.currency
  consumes:
  - type: http
    namespace: stripe-invoices
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: invoices
      path: /invoices/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-invoice
        method: GET
Open in Framework → View in Fleet → stripe-invoice-lookup.yml

When a new employee record is created in Workday, creates a Jira onboarding task, sends a Slack welcome message to the team channel, and registers the employee in the internal identity directory.

naftiko: '0.5'
info:
  label: Workday New Hire Provisioning
  description: When a new employee record is created in Workday, creates a Jira onboarding task, sends a Slack welcome message to the team channel, and registers the employee in the internal identity directory.
  tags:
  - hr
  - workday
  - jira
  - slack
  - onboarding
capability:
  exposes:
  - type: mcp
    namespace: hr-ops
    port: 8080
    tools:
    - name: provision-new-hire
      description: Given a Workday worker ID and start date, fetch employee details, open a Jira onboarding task, and post a Slack welcome message to the employee's team channel. Use when HR confirms a new hire record in Workday.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: Workday worker ID for the new hire.
      - name: start_date
        in: body
        type: string
        description: Employee start date in YYYY-MM-DD format.
      - name: team_channel
        in: body
        type: string
        description: Slack channel for the employee's team.
      steps:
      - name: get-worker
        type: call
        call: workday-workers.get-worker
        with:
          worker_id: '{{worker_id}}'
      - name: create-onboarding-task
        type: call
        call: jira-hr.create-issue
        with:
          project_key: HR
          issuetype: Task
          summary: 'Onboarding: {{get-worker.fullName}} starting {{start_date}}'
          description: 'New hire onboarding for {{get-worker.fullName}}. Worker ID: {{worker_id}}. Start: {{start_date}}. Department: {{get-worker.department}}'
      - name: post-welcome
        type: call
        call: slack-hr.post-message
        with:
          channel: '{{team_channel}}'
          text: 'Please welcome {{get-worker.fullName}} to the team! They start on {{start_date}}. Onboarding task: {{create-onboarding-task.key}}'
  consumes:
  - type: http
    namespace: workday-workers
    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-hr
    baseUri: https://stripe.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-hr
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → workday-new-hire-provisioning.yml

When a production incident is declared, creates a Jira P1 ticket, pages on-call via PagerDuty, opens a Slack incident channel, and posts initial triage data.

naftiko: '0.5'
info:
  label: Production Incident Response Orchestrator
  description: When a production incident is declared, creates a Jira P1 ticket, pages on-call via PagerDuty, opens a Slack incident channel, and posts initial triage data.
  tags:
  - sre
  - incident-response
  - jira
  - pagerduty
  - slack
capability:
  exposes:
  - type: mcp
    namespace: incident-mgmt
    port: 8080
    tools:
    - name: declare-incident
      description: Given incident details, create P1 ticket, page on-call, and open incident channel.
      inputParameters:
      - name: incident_summary
        in: body
        type: string
        description: Brief incident summary.
      - name: affected_service
        in: body
        type: string
        description: The affected service.
      - name: severity
        in: body
        type: string
        description: 'Severity: p1, p2, p3.'
      steps:
      - name: create-incident-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: INC
          issuetype: Bug
          summary: '[{{severity}}] {{incident_summary}} — {{affected_service}}'
          priority: Highest
      - name: page-oncall
        type: call
        call: pagerduty.create-incident
        with:
          title: '[{{severity}}] {{incident_summary}} — {{affected_service}}'
          service_id: '{{affected_service}}_SRE'
      - name: notify-war-room
        type: call
        call: slack.post-message
        with:
          channel: incidents
          text: 'INCIDENT DECLARED [{{severity}}]: {{incident_summary}} | Service: {{affected_service}} | Jira: {{create-incident-ticket.key}} | PD: {{page-oncall.incident.id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://stripe.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → production-incident-response-orchestrator.yml

When a Snowflake data pipeline fails, creates a PagerDuty incident, opens a Jira ticket, and alerts the data engineering Slack channel.

naftiko: '0.5'
info:
  label: Stripe Data Pipeline Failure Alert
  description: When a Snowflake data pipeline fails, creates a PagerDuty incident, opens a Jira ticket, and alerts the data engineering Slack channel.
  tags:
  - data-engineering
  - snowflake
  - pagerduty
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: data-ops
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a pipeline name and error, page on-call, create ticket, and alert.
      inputParameters:
      - name: pipeline_name
        in: body
        type: string
        description: Failed pipeline name.
      - name: error_message
        in: body
        type: string
        description: Error message.
      steps:
      - name: page-data-oncall
        type: call
        call: pagerduty.create-incident
        with:
          title: 'Pipeline failure: {{pipeline_name}}'
          service_id: DATA_ENG
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: DATA
          issuetype: Bug
          summary: 'Pipeline failure: {{pipeline_name}}'
          description: 'Error: {{error_message}}'
      - name: alert-data-eng
        type: call
        call: slack.post-message
        with:
          channel: data-engineering
          text: 'Pipeline failure: {{pipeline_name}}. Error: {{error_message}}. PD: {{page-data-oncall.incident.id}}. Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: jira
    baseUri: https://stripe.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-data-pipeline-failure-alert.yml

When a subscription is about to cancel, queries usage data from Snowflake, generates a retention offer with AI, and notifies the customer success team via Slack.

naftiko: '0.5'
info:
  label: Stripe Subscription Churn Prevention
  description: When a subscription is about to cancel, queries usage data from Snowflake, generates a retention offer with AI, and notifies the customer success team via Slack.
  tags:
  - subscriptions
  - stripe
  - snowflake
  - anthropic
  - slack
  - ai
capability:
  exposes:
  - type: mcp
    namespace: retention
    port: 8080
    tools:
    - name: prevent-subscription-churn
      description: Given a subscription ID, analyze usage, generate retention offer, and notify CS.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: The Stripe subscription ID.
      - name: customer_name
        in: body
        type: string
        description: Customer name.
      - name: cancel_reason
        in: body
        type: string
        description: Stated cancellation reason.
      steps:
      - name: query-usage
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT feature, usage_count FROM billing.feature_usage WHERE subscription_id='{{subscription_id}}' AND month=DATE_TRUNC('month', CURRENT_DATE()) ORDER BY usage_count DESC LIMIT 5
      - name: generate-offer
        type: call
        call: anthropic.create-message
        with:
          model: claude-3-5-sonnet-20241022
          max_tokens: 500
          messages: '[{"role": "user", "content": "Generate a retention offer for {{customer_name}} who wants to cancel because: {{cancel_reason}}. Their top used features: {{query-usage.data}}"}]'
      - name: notify-cs
        type: call
        call: slack.post-message
        with:
          channel: customer-success
          text: 'Churn prevention — {{customer_name}} ({{subscription_id}}): Cancel reason: {{cancel_reason}}

            Suggested offer: {{generate-offer.content}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://stripe.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: 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: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-subscription-churn-prevention.yml

Validates an incoming Stripe webhook signature, parses the event type, and routes it to the appropriate internal processing queue via GitHub Actions dispatch.

naftiko: '0.5'
info:
  label: Stripe Webhook Event Validator
  description: Validates an incoming Stripe webhook signature, parses the event type, and routes it to the appropriate internal processing queue via GitHub Actions dispatch.
  tags:
  - devops
  - stripe
  - github
  - webhooks
  - automation
capability:
  exposes:
  - type: mcp
    namespace: webhook-ops
    port: 8080
    tools:
    - name: validate-and-route-webhook
      description: Given a raw Stripe webhook payload and signature header, verify the signature, extract the event type, and trigger a GitHub Actions repository dispatch to route processing. Use as the first handler in the Stripe webhook ingestion pipeline.
      inputParameters:
      - name: event_type
        in: body
        type: string
        description: Stripe event type extracted after signature validation (e.g. invoice.payment_failed).
      - name: event_id
        in: body
        type: string
        description: Stripe event ID (evt_xxxxx) for idempotency tracking.
      - name: repo_owner
        in: body
        type: string
        description: GitHub repository owner for dispatch target.
      - name: repo_name
        in: body
        type: string
        description: GitHub repository name for dispatch target.
      steps:
      - name: dispatch-workflow
        type: call
        call: github-dispatch.trigger-dispatch
        with:
          owner: '{{repo_owner}}'
          repo: '{{repo_name}}'
          event_type: '{{event_type}}'
          client_payload: '{{event_id}}'
  consumes:
  - type: http
    namespace: github-dispatch
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: repo-dispatches
      path: /repos/{{owner}}/{{repo}}/dispatches
      inputParameters:
      - name: owner
        in: path
      - name: repo
        in: path
      operations:
      - name: trigger-dispatch
        method: POST
Open in Framework → View in Fleet → stripe-webhook-event-validator.yml

When a merchant support ticket is created, uses Anthropic to draft a response based on the ticket context, posts the draft for agent review in Slack.

naftiko: '0.5'
info:
  label: Stripe Merchant Support AI Responder
  description: When a merchant support ticket is created, uses Anthropic to draft a response based on the ticket context, posts the draft for agent review in Slack.
  tags:
  - support
  - anthropic
  - slack
  - ai
capability:
  exposes:
  - type: mcp
    namespace: support-ai
    port: 8080
    tools:
    - name: draft-support-response
      description: Given a support ticket, generate an AI response draft and share with agents.
      inputParameters:
      - name: ticket_subject
        in: body
        type: string
        description: Support ticket subject.
      - name: ticket_body
        in: body
        type: string
        description: Support ticket body.
      - name: merchant_id
        in: body
        type: string
        description: Merchant account ID.
      steps:
      - name: generate-draft
        type: call
        call: anthropic.create-message
        with:
          model: claude-3-5-sonnet-20241022
          max_tokens: 500
          messages: '[{"role": "user", "content": "Draft a helpful, professional support response for this Stripe merchant inquiry:\nSubject: {{ticket_subject}}\nBody: {{ticket_body}}"}]'
      - name: post-draft
        type: call
        call: slack.post-message
        with:
          channel: support-ai-drafts
          text: 'AI draft for merchant {{merchant_id}}:

            Subject: {{ticket_subject}}

            ---

            {{generate-draft.content}}'
  consumes:
  - type: http
    namespace: anthropic
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: messages
      path: /messages
      operations:
      - name: create-message
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-merchant-support-ai-responder.yml

When a quarterly PCI audit is due, creates a Jira audit epic, assigns tasks to responsible teams, and notifies the compliance team via Slack.

naftiko: '0.5'
info:
  label: PCI Compliance Audit Workflow
  description: When a quarterly PCI audit is due, creates a Jira audit epic, assigns tasks to responsible teams, and notifies the compliance team via Slack.
  tags:
  - compliance
  - pci
  - jira
  - slack
  - security
capability:
  exposes:
  - type: mcp
    namespace: pci-ops
    port: 8080
    tools:
    - name: initiate-pci-audit
      description: Given a quarter and audit scope, create tracking epic and notify compliance.
      inputParameters:
      - name: audit_quarter
        in: body
        type: string
        description: Audit quarter (e.g., Q1-2026).
      - name: audit_scope
        in: body
        type: string
        description: Scope of PCI audit (e.g., cardholder_data_environment, network_segmentation).
      steps:
      - name: create-audit-epic
        type: call
        call: jira.create-issue
        with:
          project_key: COMPLY
          issuetype: Epic
          summary: 'PCI-DSS audit: {{audit_quarter}} — {{audit_scope}}'
      - name: notify-compliance
        type: call
        call: slack.post-message
        with:
          channel: pci-compliance
          text: 'PCI audit initiated for {{audit_quarter}}: {{audit_scope}}. Epic: {{create-audit-epic.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://stripe.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → pci-compliance-audit-workflow.yml

Queries Snowflake for tax obligation data, generates tax summary reports, and posts them to the tax operations Slack channel.

naftiko: '0.5'
info:
  label: Stripe Tax Reporting Generator
  description: Queries Snowflake for tax obligation data, generates tax summary reports, and posts them to the tax operations Slack channel.
  tags:
  - finance
  - tax
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: tax-ops
    port: 8080
    tools:
    - name: generate-tax-report
      description: Given a jurisdiction and period, pull tax data and share report.
      inputParameters:
      - name: jurisdiction
        in: body
        type: string
        description: Tax jurisdiction (e.g., US, EU, UK).
      - name: tax_period
        in: body
        type: string
        description: Tax period (e.g., 2026-Q1).
      steps:
      - name: query-tax-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT tax_type, SUM(tax_amount) as total, COUNT(*) as transactions FROM tax.obligations WHERE jurisdiction='{{jurisdiction}}' AND period='{{tax_period}}' GROUP BY tax_type
      - name: post-report
        type: call
        call: slack.post-message
        with:
          channel: tax-operations
          text: 'Tax report for {{jurisdiction}} — {{tax_period}}:

            {{query-tax-data.data}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://stripe.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-tax-reporting-generator.yml

Creates a Stripe Connect account for a new marketplace seller, generates an onboarding link, and records the account in Salesforce. Used during partner or platform merchant activation.

naftiko: '0.5'
info:
  label: Stripe Connect Account Onboarding
  description: Creates a Stripe Connect account for a new marketplace seller, generates an onboarding link, and records the account in Salesforce. Used during partner or platform merchant activation.
  tags:
  - finance
  - payments
  - stripe
  - salesforce
  - connect
  - onboarding
capability:
  exposes:
  - type: mcp
    namespace: connect-ops
    port: 8080
    tools:
    - name: onboard-connect-account
      description: Given a seller email and business type, create a Stripe Connect Express account, generate an account link for KYC onboarding, and upsert the Salesforce partner record with the Stripe account ID. Invoke during marketplace seller registration.
      inputParameters:
      - name: seller_email
        in: body
        type: string
        description: Primary email address for the marketplace seller.
      - name: business_type
        in: body
        type: string
        description: 'Stripe business type: individual or company.'
      - name: salesforce_account_id
        in: body
        type: string
        description: Salesforce Account ID to update with the Stripe Connect ID.
      steps:
      - name: create-connect-account
        type: call
        call: stripe-connect.create-account
        with:
          type: express
          email: '{{seller_email}}'
          business_type: '{{business_type}}'
      - name: create-account-link
        type: call
        call: stripe-connect-links.create-link
        with:
          account: '{{create-connect-account.id}}'
          refresh_url: https://dashboard.stripe.com/connect/accounts
          return_url: https://dashboard.stripe.com/connect/accounts
          type: account_onboarding
      - name: update-sf-partner
        type: call
        call: salesforce-connect.update-account
        with:
          account_id: '{{salesforce_account_id}}'
          Stripe_Connect_ID__c: '{{create-connect-account.id}}'
  consumes:
  - type: http
    namespace: stripe-connect
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: connect-accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
  - type: http
    namespace: stripe-connect-links
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: account-links
      path: /account_links
      operations:
      - name: create-link
        method: POST
  - type: http
    namespace: salesforce-connect
    baseUri: https://stripe.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: account-record
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: update-account
        method: PATCH
Open in Framework → View in Fleet → stripe-connect-account-onboarding.yml

Tracks Stripe Climate carbon removal orders, logs volume in Snowflake, and posts monthly carbon offset summary to the sustainability Slack channel.

naftiko: '0.5'
info:
  label: Stripe Climate Order Tracker
  description: Tracks Stripe Climate carbon removal orders, logs volume in Snowflake, and posts monthly carbon offset summary to the sustainability Slack channel.
  tags:
  - sustainability
  - stripe
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: climate-ops
    port: 8080
    tools:
    - name: track-climate-orders
      description: Given a month, query climate order data and post summary.
      inputParameters:
      - name: month
        in: body
        type: string
        description: Month in YYYY-MM format.
      steps:
      - name: query-climate-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT SUM(metric_tons) as total_tons, SUM(amount_usd) as total_spend FROM climate.carbon_orders WHERE order_month='{{month}}'
      - name: post-summary
        type: call
        call: slack.post-message
        with:
          channel: sustainability
          text: 'Stripe Climate report for {{month}}: {{query-climate-data.data}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://stripe.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-climate-order-tracker.yml

When a Stripe Atlas incorporation completes, creates a Salesforce lead, provisions the new company's Stripe account, and sends welcome email via SendGrid.

naftiko: '0.5'
info:
  label: Stripe Atlas Incorporation Workflow
  description: When a Stripe Atlas incorporation completes, creates a Salesforce lead, provisions the new company's Stripe account, and sends welcome email via SendGrid.
  tags:
  - atlas
  - stripe
  - salesforce
  - sendgrid
capability:
  exposes:
  - type: mcp
    namespace: atlas-ops
    port: 8080
    tools:
    - name: process-atlas-incorporation
      description: Given a newly incorporated company, create CRM lead, provision account, and send welcome.
      inputParameters:
      - name: company_name
        in: body
        type: string
        description: The incorporated company name.
      - name: founder_email
        in: body
        type: string
        description: Founder's email address.
      - name: incorporation_state
        in: body
        type: string
        description: State of incorporation.
      steps:
      - name: create-lead
        type: call
        call: salesforce.create-lead
        with:
          Company: '{{company_name}}'
          Email: '{{founder_email}}'
          LeadSource: Stripe Atlas
      - name: send-welcome
        type: call
        call: sendgrid.send-email
        with:
          to: '{{founder_email}}'
          subject: Welcome to Stripe, {{company_name}}!
          body: 'Your {{incorporation_state}} incorporation is complete. Your Stripe account is ready. Lead: {{create-lead.id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://stripe.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead
      operations:
      - name: create-lead
        method: POST
  - type: http
    namespace: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → stripe-atlas-incorporation-workflow.yml

Retrieves a Stripe Connect transfer by ID including amount, destination, and status.

naftiko: '0.5'
info:
  label: Stripe Transfer Lookup
  description: Retrieves a Stripe Connect transfer by ID including amount, destination, and status.
  tags:
  - finance
  - payments
  - stripe
  - connect
capability:
  exposes:
  - type: mcp
    namespace: connect
    port: 8080
    tools:
    - name: get-transfer
      description: Given a Stripe transfer ID, return its amount, destination account, and status.
      inputParameters:
      - name: transfer_id
        in: body
        type: string
        description: 'The Stripe transfer ID (format: tr_xxxxx).'
      call: stripe-transfers.get-transfer
      with:
        id: '{{transfer_id}}'
      outputParameters:
      - name: amount
        type: number
        mapping: $.amount
      - name: destination
        type: string
        mapping: $.destination
  consumes:
  - type: http
    namespace: stripe-transfers
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: transfers
      path: /transfers/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-transfer
        method: GET
Open in Framework → View in Fleet → stripe-transfer-lookup.yml

When a new fraud pattern is detected, creates a Stripe Radar rule, logs the rule in Jira for audit, and notifies the risk team via Slack.

naftiko: '0.5'
info:
  label: Stripe Radar Rule Deployment
  description: When a new fraud pattern is detected, creates a Stripe Radar rule, logs the rule in Jira for audit, and notifies the risk team via Slack.
  tags:
  - fraud
  - stripe
  - jira
  - slack
  - security
capability:
  exposes:
  - type: mcp
    namespace: fraud-ops
    port: 8080
    tools:
    - name: deploy-radar-rule
      description: Given a fraud pattern and rule definition, create a Radar rule, log in Jira, and notify risk team.
      inputParameters:
      - name: rule_name
        in: body
        type: string
        description: Name for the new Radar rule.
      - name: rule_predicate
        in: body
        type: string
        description: The Radar rule predicate expression.
      - name: fraud_pattern
        in: body
        type: string
        description: Description of the fraud pattern detected.
      steps:
      - name: create-audit-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: RISK
          issuetype: Task
          summary: 'Radar rule deployment: {{rule_name}}'
          description: 'Pattern: {{fraud_pattern}}

            Rule: {{rule_predicate}}'
      - name: notify-risk
        type: call
        call: slack.post-message
        with:
          channel: risk-operations
          text: 'New Radar rule deployed: {{rule_name}}. Pattern: {{fraud_pattern}}. Audit: {{create-audit-ticket.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://stripe.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-radar-rule-deployment.yml

Queries Workday for current headcount, compares against plan in Snowflake, and posts variance report to the people ops Slack channel.

naftiko: '0.5'
info:
  label: Workday Headcount Variance Reporter
  description: Queries Workday for current headcount, compares against plan in Snowflake, and posts variance report to the people ops Slack channel.
  tags:
  - hr
  - workday
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: people-ops
    port: 8080
    tools:
    - name: report-headcount-variance
      description: Given a department, compare actual vs planned headcount and report.
      inputParameters:
      - name: department
        in: body
        type: string
        description: Department name.
      steps:
      - name: query-variance
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT planned_hc, actual_hc, actual_hc-planned_hc as variance FROM hr.headcount_plan WHERE department='{{department}}' AND quarter=DATE_TRUNC('quarter', CURRENT_DATE())
      - name: post-report
        type: call
        call: slack.post-message
        with:
          channel: people-ops
          text: 'Headcount variance for {{department}}: {{query-variance.data}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://stripe.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → workday-headcount-variance-reporter.yml

Fetches Dependabot security alerts for a GitHub repository, filters critical severity findings, and creates Jira security tickets for each critical vulnerability.

naftiko: '0.5'
info:
  label: GitHub Security Vulnerability Scan Alert
  description: Fetches Dependabot security alerts for a GitHub repository, filters critical severity findings, and creates Jira security tickets for each critical vulnerability.
  tags:
  - devops
  - github
  - jira
  - security
  - vulnerability-management
capability:
  exposes:
  - type: mcp
    namespace: security-ops
    port: 8080
    tools:
    - name: triage-security-alerts
      description: Given a GitHub repo owner and name, fetch all open Dependabot critical security alerts and create a Jira security ticket for each. Use as a daily security scanning agent or post-deploy vulnerability check.
      inputParameters:
      - name: owner
        in: body
        type: string
        description: GitHub repository owner or organization name.
      - name: repo
        in: body
        type: string
        description: GitHub repository name to scan for vulnerabilities.
      steps:
      - name: get-alerts
        type: call
        call: github-security.get-dependabot-alerts
        with:
          owner: '{{owner}}'
          repo: '{{repo}}'
          severity: critical
      - name: create-sec-ticket
        type: call
        call: jira-security.create-issue
        with:
          project_key: SEC
          issuetype: Bug
          summary: 'Critical vulnerability in {{repo}}: {{get-alerts.number}} alerts'
          description: 'Critical Dependabot alerts detected in {{owner}}/{{repo}}. Alert count: {{get-alerts.total_count}}. Immediate remediation required.'
  consumes:
  - type: http
    namespace: github-security
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: dependabot-alerts
      path: /repos/{{owner}}/{{repo}}/dependabot/alerts
      inputParameters:
      - name: owner
        in: path
      - name: repo
        in: path
      - name: severity
        in: query
      operations:
      - name: get-dependabot-alerts
        method: GET
  - type: http
    namespace: jira-security
    baseUri: https://stripe.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → github-security-vulnerability-scan-alert.yml

Retrieves a Stripe subscription by ID including current period, plan, and billing status.

naftiko: '0.5'
info:
  label: Stripe Subscription Lookup
  description: Retrieves a Stripe subscription by ID including current period, plan, and billing status.
  tags:
  - finance
  - payments
  - stripe
  - subscriptions
capability:
  exposes:
  - type: mcp
    namespace: billing
    port: 8080
    tools:
    - name: get-subscription
      description: Given a Stripe subscription ID, return its status, plan, and current period details.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: 'The Stripe subscription ID (format: sub_xxxxx).'
      call: stripe-subs.get-subscription
      with:
        id: '{{subscription_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: plan_id
        type: string
        mapping: $.plan.id
      - name: current_period_end
        type: number
        mapping: $.current_period_end
  consumes:
  - type: http
    namespace: stripe-subs
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: subscriptions
      path: /subscriptions/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-subscription
        method: GET
Open in Framework → View in Fleet → stripe-subscription-lookup.yml

Retrieves a Stripe event by ID including type, data, and timestamp.

naftiko: '0.5'
info:
  label: Stripe Event Lookup
  description: Retrieves a Stripe event by ID including type, data, and timestamp.
  tags:
  - integrations
  - stripe
capability:
  exposes:
  - type: mcp
    namespace: events
    port: 8080
    tools:
    - name: get-event
      description: Given a Stripe event ID, return its type, data object, and creation time.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The Stripe event ID.
      call: stripe-events.get-event
      with:
        id: '{{event_id}}'
      outputParameters:
      - name: type
        type: string
        mapping: $.type
      - name: created
        type: number
        mapping: $.created
  consumes:
  - type: http
    namespace: stripe-events
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: events
      path: /events/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-event
        method: GET
Open in Framework → View in Fleet → stripe-event-lookup.yml

When a new integration partner needs a test environment, provisions sandbox credentials, creates a Jira onboarding ticket, and sends credentials via SendGrid.

naftiko: '0.5'
info:
  label: Stripe Sandbox Environment Provisioner
  description: When a new integration partner needs a test environment, provisions sandbox credentials, creates a Jira onboarding ticket, and sends credentials via SendGrid.
  tags:
  - partnerships
  - jira
  - sendgrid
  - sandbox
capability:
  exposes:
  - type: mcp
    namespace: sandbox-ops
    port: 8080
    tools:
    - name: provision-sandbox
      description: Given partner details, create onboarding ticket and send sandbox credentials.
      inputParameters:
      - name: partner_name
        in: body
        type: string
        description: Partner company name.
      - name: partner_email
        in: body
        type: string
        description: Partner technical contact.
      - name: integration_type
        in: body
        type: string
        description: Type of integration.
      steps:
      - name: create-onboarding-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: PARTNER
          issuetype: Task
          summary: 'Sandbox provisioning: {{partner_name}} — {{integration_type}}'
      - name: send-credentials
        type: call
        call: sendgrid.send-email
        with:
          to: '{{partner_email}}'
          subject: Your Stripe sandbox is ready
          body: 'Welcome {{partner_name}}! Your sandbox for {{integration_type}} is provisioned. Ticket: {{create-onboarding-ticket.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://stripe.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: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → stripe-sandbox-environment-provisioner.yml

When a security incident is detected, creates a Jira security ticket, logs in Snowflake for compliance, pages security on-call, and notifies leadership via Slack.

naftiko: '0.5'
info:
  label: Security Incident Response Playbook
  description: When a security incident is detected, creates a Jira security ticket, logs in Snowflake for compliance, pages security on-call, and notifies leadership via Slack.
  tags:
  - security
  - incident-response
  - jira
  - snowflake
  - pagerduty
  - slack
capability:
  exposes:
  - type: mcp
    namespace: security-ir
    port: 8080
    tools:
    - name: execute-security-playbook
      description: Given incident details, create security ticket, log for compliance, page on-call, and notify leadership.
      inputParameters:
      - name: incident_type
        in: body
        type: string
        description: Type of security incident.
      - name: severity
        in: body
        type: string
        description: 'Severity: critical, high, medium.'
      - name: affected_systems
        in: body
        type: string
        description: Comma-separated list of affected systems.
      steps:
      - name: create-security-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: SEC
          issuetype: Bug
          summary: '[{{severity}}] Security incident: {{incident_type}}'
          description: 'Affected systems: {{affected_systems}}'
          priority: Highest
      - name: log-incident
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO security.incidents (type, severity, affected_systems, ticket_key, detected_at) VALUES ('{{incident_type}}', '{{severity}}', '{{affected_systems}}', '{{create-security-ticket.key}}', CURRENT_TIMESTAMP())
      - name: page-security
        type: call
        call: pagerduty.create-incident
        with:
          title: '[{{severity}}] Security: {{incident_type}}'
          service_id: SECURITY_OPS
      - name: notify-leadership
        type: call
        call: slack.post-message
        with:
          channel: security-leadership
          text: 'SECURITY INCIDENT [{{severity}}]: {{incident_type}}. Systems: {{affected_systems}}. Jira: {{create-security-ticket.key}}. PD: {{page-security.incident.id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://stripe.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://stripe.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: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → security-incident-response-playbook.yml

When a customer cancels their subscription, cancels the Stripe subscription at period end, logs a churn event in Salesforce, and notifies the customer success team in Slack.

naftiko: '0.5'
info:
  label: Stripe Customer Cancellation Workflow
  description: When a customer cancels their subscription, cancels the Stripe subscription at period end, logs a churn event in Salesforce, and notifies the customer success team in Slack.
  tags:
  - finance
  - stripe
  - salesforce
  - slack
  - churn
  - customer-success
capability:
  exposes:
  - type: mcp
    namespace: churn-ops
    port: 8080
    tools:
    - name: handle-cancellation
      description: 'Given a Stripe subscription ID and Salesforce account ID, set the subscription to cancel at period end, update the Salesforce account stage to Churned, and notify #customer-success in Slack. Use when a customer cancellation request is confirmed.'
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Stripe subscription ID (sub_xxxxx) to cancel.
      - name: salesforce_account_id
        in: body
        type: string
        description: Salesforce account ID to mark as churned.
      steps:
      - name: cancel-subscription
        type: call
        call: stripe-cancel.update-subscription
        with:
          subscription_id: '{{subscription_id}}'
          cancel_at_period_end: 'true'
      - name: update-sf-stage
        type: call
        call: salesforce-churn.update-account
        with:
          account_id: '{{salesforce_account_id}}'
          CustomerStage__c: Churned
          ChurnDate__c: '{{cancel-subscription.current_period_end}}'
      - name: notify-cs-team
        type: call
        call: slack-cs.post-message
        with:
          channel: customer-success
          text: 'Cancellation received: Subscription {{subscription_id}} set to cancel at period end. Salesforce account {{salesforce_account_id}} updated to Churned.'
  consumes:
  - type: http
    namespace: stripe-cancel
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: subscription-update
      path: /subscriptions/{{subscription_id}}
      inputParameters:
      - name: subscription_id
        in: path
      operations:
      - name: update-subscription
        method: POST
  - type: http
    namespace: salesforce-churn
    baseUri: https://stripe.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: account-churn
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: update-account
        method: PATCH
  - type: http
    namespace: slack-cs
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-customer-cancellation-workflow.yml

Creates a Stripe billing portal session for a customer and returns the portal URL, enabling self-service subscription management from the Stripe dashboard or embedded product.

naftiko: '0.5'
info:
  label: Stripe Billing Portal Session Creation
  description: Creates a Stripe billing portal session for a customer and returns the portal URL, enabling self-service subscription management from the Stripe dashboard or embedded product.
  tags:
  - finance
  - stripe
  - billing
  - self-service
capability:
  exposes:
  - type: mcp
    namespace: self-service
    port: 8080
    tools:
    - name: create-billing-portal-session
      description: Given a Stripe customer ID and return URL, create a billing portal session and return the session URL. Use when a customer requests access to manage their subscription, payment methods, or invoices.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: Stripe customer ID (cus_xxxxx) requesting portal access.
      - name: return_url
        in: body
        type: string
        description: URL to redirect the customer to after leaving the billing portal.
      call: stripe-portal.create-session
      with:
        customer: '{{customer_id}}'
        return_url: '{{return_url}}'
      outputParameters:
      - name: portal_url
        type: string
        mapping: $.url
  consumes:
  - type: http
    namespace: stripe-portal
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: billing-portal-sessions
      path: /billing_portal/sessions
      operations:
      - name: create-session
        method: POST
Open in Framework → View in Fleet → stripe-billing-portal-session-creation.yml

Retrieves p99 payment processing latency from Datadog APM for Stripe's payment services.

naftiko: '0.5'
info:
  label: Datadog Payment Latency Check
  description: Retrieves p99 payment processing latency from Datadog APM for Stripe's payment services.
  tags:
  - observability
  - datadog
  - payments
capability:
  exposes:
  - type: mcp
    namespace: payment-monitoring
    port: 8080
    tools:
    - name: get-payment-latency
      description: Given a service name, return p99 latency for payment processing. Use for SLO tracking.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The Datadog service name.
      call: datadog-apm.query-timeseries
      with:
        query: avg:trace.http.request.duration.by_service_95p{service:{{service_name}}}
      outputParameters:
      - name: p99_latency_ms
        type: number
        mapping: $.series[0].pointlist[-1][1]
  consumes:
  - type: http
    namespace: datadog-apm
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: query
      path: /query
      operations:
      - name: query-timeseries
        method: GET
Open in Framework → View in Fleet → datadog-payment-latency-check.yml

When an enterprise deal closes in Salesforce, provisions a Stripe account, creates onboarding Jira tickets, and notifies the solutions engineering team via Slack.

naftiko: '0.5'
info:
  label: Salesforce Enterprise Deal to Stripe Provisioning
  description: When an enterprise deal closes in Salesforce, provisions a Stripe account, creates onboarding Jira tickets, and notifies the solutions engineering team via Slack.
  tags:
  - sales
  - salesforce
  - stripe
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: enterprise-ops
    port: 8080
    tools:
    - name: provision-enterprise-account
      description: Given a Salesforce opportunity, provision Stripe account, create onboarding tickets, and notify SE team.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID.
      - name: account_name
        in: body
        type: string
        description: Enterprise account name.
      - name: deal_value
        in: body
        type: number
        description: Annual deal value.
      steps:
      - name: create-onboarding-epic
        type: call
        call: jira.create-issue
        with:
          project_key: ENT
          issuetype: Epic
          summary: 'Enterprise onboarding: {{account_name}} (${{deal_value}})'
      - name: notify-se-team
        type: call
        call: slack.post-message
        with:
          channel: solutions-engineering
          text: 'New enterprise deal closed! {{account_name}} (${{deal_value}}). Onboarding: {{create-onboarding-epic.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://stripe.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-enterprise-deal-to-stripe-provisioning.yml

Queries GitHub for open pull requests and open Jira bugs, then posts a morning digest summary to the engineering Slack channel to kick off the day's prioritization.

naftiko: '0.5'
info:
  label: Slack Engineering Channel Digest
  description: Queries GitHub for open pull requests and open Jira bugs, then posts a morning digest summary to the engineering Slack channel to kick off the day's prioritization.
  tags:
  - devops
  - github
  - jira
  - slack
  - reporting
  - engineering
capability:
  exposes:
  - type: mcp
    namespace: morning-digest
    port: 8080
    tools:
    - name: publish-engineering-digest
      description: 'Given a GitHub repo and Jira project key, fetch open PRs awaiting review and open high-priority bugs, then post a consolidated morning digest to the #engineering Slack channel. Invoke as a daily scheduled agent.'
      inputParameters:
      - name: owner
        in: body
        type: string
        description: GitHub repository owner.
      - name: repo
        in: body
        type: string
        description: GitHub repository name.
      - name: jira_project
        in: body
        type: string
        description: Jira project key to check for open bugs.
      steps:
      - name: get-open-prs
        type: call
        call: github-open-prs.list-pull-requests
        with:
          owner: '{{owner}}'
          repo: '{{repo}}'
          state: open
      - name: get-open-bugs
        type: call
        call: jira-bugs.search-issues
        with:
          jql: project={{jira_project}} AND issuetype=Bug AND status!=Done ORDER BY priority ASC
      - name: post-digest
        type: call
        call: slack-morning.post-message
        with:
          channel: engineering
          text: 'Good morning! Open PRs in {{repo}}: {{get-open-prs.total_count}}. Open bugs in {{jira_project}}: {{get-open-bugs.total}}. Let''s ship!'
  consumes:
  - type: http
    namespace: github-open-prs
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: pull-requests
      path: /repos/{{owner}}/{{repo}}/pulls
      inputParameters:
      - name: owner
        in: path
      - name: repo
        in: path
      - name: state
        in: query
      operations:
      - name: list-pull-requests
        method: GET
  - type: http
    namespace: jira-bugs
    baseUri: https://stripe.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issue-search
      path: /issue/search
      inputParameters:
      - name: jql
        in: query
      operations:
      - name: search-issues
        method: GET
  - type: http
    namespace: slack-morning
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → slack-engineering-channel-digest.yml

When a Stripe invoice payment fails, retries the charge, logs the event to Datadog, and creates a Jira task for the collections team if retries are exhausted.

naftiko: '0.5'
info:
  label: Failed Payment Retry Orchestration
  description: When a Stripe invoice payment fails, retries the charge, logs the event to Datadog, and creates a Jira task for the collections team if retries are exhausted.
  tags:
  - finance
  - payments
  - stripe
  - datadog
  - jira
  - incident-response
  - billing
capability:
  exposes:
  - type: mcp
    namespace: billing-ops
    port: 8080
    tools:
    - name: handle-payment-failure
      description: Given a Stripe invoice ID and customer ID, retry the payment, emit a Datadog metric event, and open a Jira collections task if the retry also fails. Use in response to Stripe invoice.payment_failed webhooks.
      inputParameters:
      - name: invoice_id
        in: body
        type: string
        description: Stripe invoice ID (in_xxxxx) that failed payment.
      - name: customer_id
        in: body
        type: string
        description: Stripe customer ID associated with the failed invoice.
      - name: attempt_count
        in: body
        type: integer
        description: Number of prior payment attempts already made.
      steps:
      - name: retry-invoice
        type: call
        call: stripe-invoices.pay-invoice
        with:
          invoice_id: '{{invoice_id}}'
      - name: log-metric
        type: call
        call: datadog-metrics.post-metric
        with:
          metric: stripe.payment.failure
          value: 1
          tags: invoice:{{invoice_id}},customer:{{customer_id}},attempts:{{attempt_count}}
      - name: create-collections-task
        type: call
        call: jira-issues.create-issue
        with:
          project_key: BILL
          issuetype: Task
          summary: 'Collections follow-up: invoice {{invoice_id}} for customer {{customer_id}}'
          description: 'Invoice {{invoice_id}} has failed payment after {{attempt_count}} attempts. Stripe retry initiated: {{retry-invoice.status}}'
  consumes:
  - type: http
    namespace: stripe-invoices
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: invoice-pay
      path: /invoices/{{invoice_id}}/pay
      inputParameters:
      - name: invoice_id
        in: path
      operations:
      - name: pay-invoice
        method: POST
  - type: http
    namespace: datadog-metrics
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: metrics
      path: /series
      operations:
      - name: post-metric
        method: POST
  - type: http
    namespace: jira-issues
    baseUri: https://stripe.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → failed-payment-retry-orchestration.yml

When a new regulatory change is identified, creates a Jira compliance epic, documents requirements in Confluence, and notifies the legal team via Slack.

naftiko: '0.5'
info:
  label: Stripe Regulatory Change Tracker
  description: When a new regulatory change is identified, creates a Jira compliance epic, documents requirements in Confluence, and notifies the legal team via Slack.
  tags:
  - legal
  - regulatory
  - jira
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: regulatory
    port: 8080
    tools:
    - name: track-regulatory-change
      description: Given a regulation and jurisdiction, create compliance tracking and notify legal.
      inputParameters:
      - name: regulation_name
        in: body
        type: string
        description: Name of the regulation.
      - name: jurisdiction
        in: body
        type: string
        description: Jurisdiction (e.g., EU, US, UK).
      - name: effective_date
        in: body
        type: string
        description: Effective date.
      steps:
      - name: create-compliance-epic
        type: call
        call: jira.create-issue
        with:
          project_key: LEGAL
          issuetype: Epic
          summary: 'Regulatory: {{regulation_name}} ({{jurisdiction}}) — effective {{effective_date}}'
      - name: create-requirements-doc
        type: call
        call: confluence.create-page
        with:
          spaceKey: LEGAL
          title: '{{regulation_name}} — {{jurisdiction}}'
          body: 'Effective: {{effective_date}}

            Epic: {{create-compliance-epic.key}}

            Status: Analysis'
      - name: notify-legal
        type: call
        call: slack.post-message
        with:
          channel: legal-regulatory
          text: 'New regulatory change: {{regulation_name}} ({{jurisdiction}}), effective {{effective_date}}. Epic: {{create-compliance-epic.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://stripe.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://stripe.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-regulatory-change-tracker.yml

Retrieves a Stripe customer record by ID including email, subscription status, and payment methods.

naftiko: '0.5'
info:
  label: Stripe Customer Lookup
  description: Retrieves a Stripe customer record by ID including email, subscription status, and payment methods.
  tags:
  - finance
  - payments
  - stripe
capability:
  exposes:
  - type: mcp
    namespace: payments
    port: 8080
    tools:
    - name: get-stripe-customer
      description: Given a Stripe customer ID, return their profile, email, and default payment method. Use for support triage.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: 'The Stripe customer ID (format: cus_xxxxx).'
      call: stripe-customers.get-customer
      with:
        id: '{{customer_id}}'
      outputParameters:
      - name: email
        type: string
        mapping: $.email
      - name: name
        type: string
        mapping: $.name
      - name: default_source
        type: string
        mapping: $.default_source
  consumes:
  - type: http
    namespace: stripe-customers
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: customers
      path: /customers/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-customer
        method: GET
Open in Framework → View in Fleet → stripe-customer-lookup.yml

Retrieves a Stripe refund by ID including amount, status, and reason.

naftiko: '0.5'
info:
  label: Stripe Refund Lookup
  description: Retrieves a Stripe refund by ID including amount, status, and reason.
  tags:
  - finance
  - payments
  - stripe
capability:
  exposes:
  - type: mcp
    namespace: payments
    port: 8080
    tools:
    - name: get-refund
      description: Given a refund ID, return its status, amount, and reason.
      inputParameters:
      - name: refund_id
        in: body
        type: string
        description: The Stripe refund ID.
      call: stripe-refunds.get-refund
      with:
        id: '{{refund_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: amount
        type: number
        mapping: $.amount
  consumes:
  - type: http
    namespace: stripe-refunds
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: refunds
      path: /refunds/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-refund
        method: GET
Open in Framework → View in Fleet → stripe-refund-lookup.yml

Monitors Connect platform account health metrics, creates Jira tickets for accounts with compliance issues, and alerts the platform team via Slack.

naftiko: '0.5'
info:
  label: Stripe Connect Account Health Monitor
  description: Monitors Connect platform account health metrics, creates Jira tickets for accounts with compliance issues, and alerts the platform team via Slack.
  tags:
  - connect
  - stripe
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: connect-health
    port: 8080
    tools:
    - name: monitor-connect-health
      description: Given a platform account ID, check compliance status and escalate issues.
      inputParameters:
      - name: platform_id
        in: body
        type: string
        description: The Connect platform account ID.
      - name: issue_type
        in: body
        type: string
        description: Type of compliance issue.
      steps:
      - name: create-compliance-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: CONNECT
          issuetype: Task
          summary: 'Connect compliance: {{platform_id}} — {{issue_type}}'
      - name: alert-platform-team
        type: call
        call: slack.post-message
        with:
          channel: connect-platform-ops
          text: 'Connect compliance issue: Platform {{platform_id}} — {{issue_type}}. Ticket: {{create-compliance-ticket.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://stripe.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-connect-account-health-monitor.yml

Queries Datadog for infrastructure metric anomalies over the past 24 hours and posts a cost anomaly report to the platform engineering Slack channel.

naftiko: '0.5'
info:
  label: Datadog Infrastructure Cost Anomaly Detection
  description: Queries Datadog for infrastructure metric anomalies over the past 24 hours and posts a cost anomaly report to the platform engineering Slack channel.
  tags:
  - cloud
  - datadog
  - slack
  - cost-management
  - observability
capability:
  exposes:
  - type: mcp
    namespace: platform-ops
    port: 8080
    tools:
    - name: detect-infra-cost-anomaly
      description: 'Query Datadog for AWS infrastructure cost anomalies detected in the past 24 hours and post a ranked report to the #platform-eng Slack channel. Use daily for cloud spend governance.'
      inputParameters:
      - name: threshold_percent
        in: body
        type: number
        description: Percentage increase threshold to flag as an anomaly (e.g. 20 for 20% above baseline).
      steps:
      - name: query-anomalies
        type: call
        call: datadog-anomalies.query-metrics
        with:
          query: anomalies(avg:aws.ec2.estimated_charges{*}, adaptive, 2)
          from: '-86400'
          to: '0'
      - name: post-anomaly-report
        type: call
        call: slack-platform.post-message
        with:
          channel: platform-eng
          text: 'Infrastructure cost anomaly report (last 24h): Threshold {{threshold_percent}}%. Results: {{query-anomalies.series}}'
  consumes:
  - type: http
    namespace: datadog-anomalies
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: metrics-query
      path: /query
      inputParameters:
      - name: query
        in: query
      - name: from
        in: query
      - name: to
        in: query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: slack-platform
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → datadog-infrastructure-cost-anomaly-detection.yml

When a GitHub release is published, posts release notes to Slack and creates a Confluence changelog entry.

naftiko: '0.5'
info:
  label: GitHub Release Deployment Announcer
  description: When a GitHub release is published, posts release notes to Slack and creates a Confluence changelog entry.
  tags:
  - engineering
  - github
  - slack
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: release-ops
    port: 8080
    tools:
    - name: announce-release
      description: Given a repo and release tag, fetch notes, post to Slack, and update Confluence.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: Repository name.
      - name: release_tag
        in: body
        type: string
        description: Release tag.
      steps:
      - name: get-release
        type: call
        call: github.get-release
        with:
          repo: '{{repo_name}}'
          tag: '{{release_tag}}'
      - name: post-announcement
        type: call
        call: slack.post-message
        with:
          channel: releases
          text: 'Release {{release_tag}} for {{repo_name}}:

            {{get-release.body}}'
      - name: update-changelog
        type: call
        call: confluence.create-page
        with:
          spaceKey: ENG
          title: Release {{release_tag}} — {{repo_name}}
          body: '{{get-release.body}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: releases
      path: /repos/stripe/{{repo}}/releases/tags/{{tag}}
      inputParameters:
      - name: repo
        in: path
      - name: tag
        in: path
      operations:
      - name: get-release
        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: confluence
    baseUri: https://stripe.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → github-release-deployment-announcer.yml

Fetches Stripe balance transactions for the prior day, aggregates MRR and churn metrics, and posts a digest to a Slack finance channel. Runs on a daily schedule.

naftiko: '0.5'
info:
  label: Stripe Revenue Metrics Daily Digest
  description: Fetches Stripe balance transactions for the prior day, aggregates MRR and churn metrics, and posts a digest to a Slack finance channel. Runs on a daily schedule.
  tags:
  - finance
  - payments
  - stripe
  - slack
  - reporting
  - mrr
capability:
  exposes:
  - type: mcp
    namespace: finance-reporting
    port: 8080
    tools:
    - name: digest-daily-revenue
      description: 'Retrieve Stripe balance transactions for a given date, compute total volume and refund rate, and post a formatted summary to the Slack #finance-daily channel. Invoke as a scheduled daily agent task.'
      inputParameters:
      - name: report_date
        in: body
        type: string
        description: Date to report on in YYYY-MM-DD format.
      steps:
      - name: get-balance-transactions
        type: call
        call: stripe-balance.list-transactions
        with:
          created_gte: '{{report_date}}'
          limit: 100
      - name: post-digest
        type: call
        call: slack-finance.post-message
        with:
          channel: finance-daily
          text: 'Stripe Daily Digest for {{report_date}}: Transactions fetched. Review balance data: {{get-balance-transactions.data}}'
  consumes:
  - type: http
    namespace: stripe-balance
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: balance-transactions
      path: /balance_transactions
      inputParameters:
      - name: created_gte
        in: query
      - name: limit
        in: query
      operations:
      - name: list-transactions
        method: GET
  - type: http
    namespace: slack-finance
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-revenue-metrics-daily-digest.yml

When a Salesforce lead converts, automatically creates a Stripe customer and starts a free trial subscription, enabling a zero-touch trial activation flow.

naftiko: '0.5'
info:
  label: Salesforce Lead to Stripe Trial Activation
  description: When a Salesforce lead converts, automatically creates a Stripe customer and starts a free trial subscription, enabling a zero-touch trial activation flow.
  tags:
  - crm
  - salesforce
  - stripe
  - trial
  - sales
capability:
  exposes:
  - type: mcp
    namespace: trial-ops
    port: 8080
    tools:
    - name: activate-trial-from-lead
      description: Given a Salesforce lead ID and Stripe trial price ID, retrieve lead contact details, create a Stripe customer, start a trial subscription, and update the Salesforce lead with the Stripe customer and subscription IDs. Use for automated trial activation at lead conversion.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: Salesforce lead ID to activate trial for.
      - name: trial_price_id
        in: body
        type: string
        description: Stripe price ID for the trial plan.
      - name: trial_days
        in: body
        type: integer
        description: Number of trial days to grant.
      steps:
      - name: get-lead
        type: call
        call: salesforce-leads.get-lead
        with:
          lead_id: '{{lead_id}}'
      - name: create-trial-customer
        type: call
        call: stripe-trial.create-customer
        with:
          email: '{{get-lead.Email}}'
          name: '{{get-lead.Name}}'
      - name: start-trial
        type: call
        call: stripe-trial-subs.create-subscription
        with:
          customer: '{{create-trial-customer.id}}'
          price: '{{trial_price_id}}'
          trial_period_days: '{{trial_days}}'
      - name: update-lead
        type: call
        call: salesforce-leads-update.update-lead
        with:
          lead_id: '{{lead_id}}'
          Stripe_Customer_ID__c: '{{create-trial-customer.id}}'
          Stripe_Subscription_ID__c: '{{start-trial.id}}'
  consumes:
  - type: http
    namespace: salesforce-leads
    baseUri: https://stripe.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: leads
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: get-lead
        method: GET
  - type: http
    namespace: stripe-trial
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: customers
      path: /customers
      operations:
      - name: create-customer
        method: POST
  - type: http
    namespace: stripe-trial-subs
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: subscriptions
      path: /subscriptions
      operations:
      - name: create-subscription
        method: POST
  - type: http
    namespace: salesforce-leads-update
    baseUri: https://stripe.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: lead-update
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: update-lead
        method: PATCH
Open in Framework → View in Fleet → salesforce-lead-to-stripe-trial-activation.yml

When a Salesforce opportunity closes as Won, automatically creates a matching Stripe subscription for the customer and updates the Salesforce record with the subscription ID.

naftiko: '0.5'
info:
  label: Salesforce Opportunity to Stripe Subscription Sync
  description: When a Salesforce opportunity closes as Won, automatically creates a matching Stripe subscription for the customer and updates the Salesforce record with the subscription ID.
  tags:
  - crm
  - finance
  - salesforce
  - stripe
  - billing
  - revenue-operations
capability:
  exposes:
  - type: mcp
    namespace: rev-ops
    port: 8080
    tools:
    - name: sync-opportunity-to-subscription
      description: Given a closed-won Salesforce opportunity ID and Stripe price ID, retrieve opportunity details, create a Stripe subscription for the customer, and write the subscription ID back to the Salesforce opportunity. Use at deal close to automate billing activation.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID (18-char format) of the closed-won deal.
      - name: stripe_price_id
        in: body
        type: string
        description: Stripe price ID (price_xxxxx) for the subscription plan.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce-opps.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: create-subscription
        type: call
        call: stripe-subscriptions.create-subscription
        with:
          customer: '{{get-opportunity.Stripe_Customer_ID__c}}'
          price: '{{stripe_price_id}}'
      - name: update-opportunity
        type: call
        call: salesforce-opps-update.update-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
          Stripe_Subscription_ID__c: '{{create-subscription.id}}'
  consumes:
  - type: http
    namespace: salesforce-opps
    baseUri: https://stripe.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
  - type: http
    namespace: stripe-subscriptions
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: subscriptions
      path: /subscriptions
      operations:
      - name: create-subscription
        method: POST
  - type: http
    namespace: salesforce-opps-update
    baseUri: https://stripe.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: opportunity-update
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: update-opportunity
        method: PATCH
Open in Framework → View in Fleet → salesforce-opportunity-to-stripe-subscription-sync.yml

When a Stripe Identity verification session completes, updates Salesforce contact record, logs in Snowflake, and notifies compliance team via Slack.

naftiko: '0.5'
info:
  label: Stripe Identity Verification Handler
  description: When a Stripe Identity verification session completes, updates Salesforce contact record, logs in Snowflake, and notifies compliance team via Slack.
  tags:
  - compliance
  - stripe
  - salesforce
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: identity-ops
    port: 8080
    tools:
    - name: handle-verification-result
      description: Given a verification session ID and result, update CRM, log for audit, and notify compliance.
      inputParameters:
      - name: session_id
        in: body
        type: string
        description: Stripe Identity verification session ID.
      - name: result
        in: body
        type: string
        description: 'Verification result: verified, unverified, or requires_input.'
      - name: customer_id
        in: body
        type: string
        description: Salesforce contact ID.
      steps:
      - name: update-crm
        type: call
        call: salesforce.update-contact
        with:
          contact_id: '{{customer_id}}'
          Identity_Verified__c: '{{result}}'
      - name: log-verification
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO compliance.identity_verifications (session_id, result, customer_id, verified_at) VALUES ('{{session_id}}', '{{result}}', '{{customer_id}}', CURRENT_TIMESTAMP())
      - name: notify-compliance
        type: call
        call: slack.post-message
        with:
          channel: compliance-verifications
          text: 'Identity verification {{result}}: Session {{session_id}} for customer {{customer_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://stripe.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: snowflake
    baseUri: https://stripe.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-identity-verification-handler.yml

Queries OKR progress from Snowflake, creates a Confluence progress report, and posts a summary to the leadership Slack channel.

naftiko: '0.5'
info:
  label: Quarterly OKR Tracking Sync
  description: Queries OKR progress from Snowflake, creates a Confluence progress report, and posts a summary to the leadership Slack channel.
  tags:
  - business
  - snowflake
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: okr-ops
    port: 8080
    tools:
    - name: sync-okr-progress
      description: Given a quarter, pull OKR data, create a Confluence report, and share summary.
      inputParameters:
      - name: quarter
        in: body
        type: string
        description: The quarter (e.g., Q1-2026).
      steps:
      - name: query-okrs
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT team, objective, key_result, progress_pct FROM business.okr_tracking WHERE quarter='{{quarter}}' ORDER BY team, progress_pct
      - name: create-report
        type: call
        call: confluence.create-page
        with:
          spaceKey: OPS
          title: 'OKR Progress: {{quarter}}'
          body: '{{query-okrs.data}}'
      - name: post-summary
        type: call
        call: slack.post-message
        with:
          channel: leadership
          text: 'OKR progress for {{quarter}} posted: {{create-report._links.webui}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://stripe.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://stripe.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → quarterly-okr-tracking-sync.yml

Given a Stripe payment intent ID, retrieves full payment status, amount, currency, and customer metadata. Use for support triage or reconciliation workflows.

naftiko: '0.5'
info:
  label: Payment Intent Lookup
  description: Given a Stripe payment intent ID, retrieves full payment status, amount, currency, and customer metadata. Use for support triage or reconciliation workflows.
  tags:
  - finance
  - payments
  - stripe
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: payments
    port: 8080
    tools:
    - name: get-payment-intent
      description: Given a Stripe payment intent ID, return its status, amount, currency, and attached customer record. Invoke when a support agent or reconciliation job needs to verify a transaction state.
      inputParameters:
      - name: payment_intent_id
        in: body
        type: string
        description: 'The Stripe payment intent ID (format: pi_xxxxx).'
      call: stripe.get-payment-intent
      with:
        id: '{{payment_intent_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: amount
        type: number
        mapping: $.amount
      - name: currency
        type: string
        mapping: $.currency
      - name: customer_id
        type: string
        mapping: $.customer
  consumes:
  - type: http
    namespace: stripe
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: payment-intents
      path: /payment_intents/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-payment-intent
        method: GET
Open in Framework → View in Fleet → payment-intent-lookup.yml

Queries Snowflake for Payment Links conversion and revenue data, and posts performance summary to the product Slack channel.

naftiko: '0.5'
info:
  label: Stripe Payment Links Performance
  description: Queries Snowflake for Payment Links conversion and revenue data, and posts performance summary to the product Slack channel.
  tags:
  - payments
  - stripe
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: payment-links
    port: 8080
    tools:
    - name: get-payment-links-performance
      description: Given a date range, pull Payment Links metrics and share.
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: Start date YYYY-MM-DD.
      steps:
      - name: query-metrics
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT COUNT(*) as links_created, SUM(revenue) as total_revenue, AVG(conversion_rate) as avg_conversion FROM product.payment_links WHERE created_date>='{{start_date}}'
      - name: post-summary
        type: call
        call: slack.post-message
        with:
          channel: payment-links-product
          text: 'Payment Links performance since {{start_date}}: {{query-metrics.data}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://stripe.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-payment-links-performance.yml

Lists Stripe payouts for a date range, compares totals against internal ledger entries in Snowflake, and flags discrepancies to the finance team via Slack.

naftiko: '0.5'
info:
  label: Stripe Payout Reconciliation
  description: Lists Stripe payouts for a date range, compares totals against internal ledger entries in Snowflake, and flags discrepancies to the finance team via Slack.
  tags:
  - finance
  - payments
  - stripe
  - snowflake
  - slack
  - reconciliation
capability:
  exposes:
  - type: mcp
    namespace: finance-ops
    port: 8080
    tools:
    - name: reconcile-payouts
      description: 'Given a start and end date, fetch Stripe payout records and compare against the Snowflake ledger view. Post a Slack summary with any discrepancies to #finance-reconciliation. Use for month-end close or daily cash reconciliation.'
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: Reconciliation window start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: Reconciliation window end date in YYYY-MM-DD format.
      steps:
      - name: list-payouts
        type: call
        call: stripe-payouts.list-payouts
        with:
          arrival_date_gte: '{{start_date}}'
          arrival_date_lte: '{{end_date}}'
      - name: query-ledger
        type: call
        call: snowflake-ledger.query-payouts
        with:
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: post-reconciliation
        type: call
        call: slack-recon.post-message
        with:
          channel: finance-reconciliation
          text: 'Payout reconciliation {{start_date}} to {{end_date}}: Stripe payouts retrieved. Ledger query complete. Review discrepancies manually.'
  consumes:
  - type: http
    namespace: stripe-payouts
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: payouts
      path: /payouts
      inputParameters:
      - name: arrival_date_gte
        in: query
      - name: arrival_date_lte
        in: query
      operations:
      - name: list-payouts
        method: GET
  - type: http
    namespace: snowflake-ledger
    baseUri: https://stripe.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: ledger-statements
      path: /statements
      inputParameters:
      - name: start_date
        in: query
      - name: end_date
        in: query
      operations:
      - name: query-payouts
        method: POST
  - type: http
    namespace: slack-recon
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-payout-reconciliation.yml

When a payment fails, retrieves the payment intent, creates a Jira support ticket, and notifies the merchant success team via Slack.

naftiko: '0.5'
info:
  label: Stripe Payment Failure Recovery Workflow
  description: When a payment fails, retrieves the payment intent, creates a Jira support ticket, and notifies the merchant success team via Slack.
  tags:
  - payments
  - stripe
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: payment-recovery
    port: 8080
    tools:
    - name: recover-failed-payment
      description: Given a failed payment intent ID, fetch details, create support ticket, and notify the team.
      inputParameters:
      - name: payment_intent_id
        in: body
        type: string
        description: The failed Stripe payment intent ID.
      - name: merchant_name
        in: body
        type: string
        description: The merchant name.
      steps:
      - name: get-payment
        type: call
        call: stripe.get-payment-intent
        with:
          id: '{{payment_intent_id}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: SUPPORT
          issuetype: Bug
          summary: 'Payment failure: {{merchant_name}} — {{payment_intent_id}}'
          description: 'Status: {{get-payment.status}}. Amount: {{get-payment.amount}}. Error: {{get-payment.last_payment_error}}'
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: merchant-success
          text: 'Payment failure for {{merchant_name}}: {{payment_intent_id}} (${{get-payment.amount}}). Ticket: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: stripe
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: payment-intents
      path: /payment_intents/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-payment-intent
        method: GET
  - type: http
    namespace: jira
    baseUri: https://stripe.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-payment-failure-recovery-workflow.yml

Retrieves details of a Stripe dispute by ID including reason, amount, and evidence deadline.

naftiko: '0.5'
info:
  label: Stripe Dispute Lookup
  description: Retrieves details of a Stripe dispute by ID including reason, amount, and evidence deadline.
  tags:
  - finance
  - payments
  - stripe
  - disputes
capability:
  exposes:
  - type: mcp
    namespace: disputes
    port: 8080
    tools:
    - name: get-dispute
      description: Given a Stripe dispute ID, return its status, reason, amount, and evidence due date.
      inputParameters:
      - name: dispute_id
        in: body
        type: string
        description: 'The Stripe dispute ID (format: dp_xxxxx).'
      call: stripe-disputes.get-dispute
      with:
        id: '{{dispute_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: reason
        type: string
        mapping: $.reason
      - name: amount
        type: number
        mapping: $.amount
  consumes:
  - type: http
    namespace: stripe-disputes
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: disputes
      path: /disputes/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-dispute
        method: GET
Open in Framework → View in Fleet → stripe-dispute-lookup.yml

Queries Snowflake for checkout conversion funnel data, analyzes drop-off with Anthropic AI, and posts insights to the payments product Slack channel.

naftiko: '0.5'
info:
  label: Stripe Checkout Conversion Analyzer
  description: Queries Snowflake for checkout conversion funnel data, analyzes drop-off with Anthropic AI, and posts insights to the payments product Slack channel.
  tags:
  - analytics
  - snowflake
  - anthropic
  - slack
  - ai
capability:
  exposes:
  - type: mcp
    namespace: checkout-analytics
    port: 8080
    tools:
    - name: analyze-checkout-conversion
      description: Given a merchant segment, pull funnel data, analyze with AI, and share insights.
      inputParameters:
      - name: merchant_segment
        in: body
        type: string
        description: Merchant segment (e.g., smb, mid_market, enterprise).
      steps:
      - name: query-funnel
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT step, count, conversion_rate FROM checkout.funnel_metrics WHERE segment='{{merchant_segment}}' AND date=CURRENT_DATE()-1
      - name: analyze-dropoff
        type: call
        call: anthropic.create-message
        with:
          model: claude-3-5-sonnet-20241022
          max_tokens: 800
          messages: '[{"role": "user", "content": "Analyze this checkout conversion funnel data for {{merchant_segment}} merchants and identify key drop-off points with recommendations:\n{{query-funnel.data}}"}]'
      - name: share-insights
        type: call
        call: slack.post-message
        with:
          channel: checkout-product
          text: 'Checkout conversion analysis — {{merchant_segment}}:

            {{analyze-dropoff.content}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://stripe.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: 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: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-checkout-conversion-analyzer.yml

When Stripe Radar flags a high-risk payment, looks up the customer profile, creates a Jira security ticket, and notifies the fraud team in Slack for manual review.

naftiko: '0.5'
info:
  label: Stripe Fraud Alert Triage
  description: When Stripe Radar flags a high-risk payment, looks up the customer profile, creates a Jira security ticket, and notifies the fraud team in Slack for manual review.
  tags:
  - finance
  - payments
  - stripe
  - jira
  - slack
  - fraud
  - risk
capability:
  exposes:
  - type: mcp
    namespace: fraud-ops
    port: 8080
    tools:
    - name: triage-fraud-alert
      description: 'Given a Stripe payment intent ID flagged by Radar, retrieve the full charge and customer details, open a Jira fraud-review ticket, and alert the #fraud-ops Slack channel with context for manual review.'
      inputParameters:
      - name: payment_intent_id
        in: body
        type: string
        description: Stripe payment intent ID flagged by Radar (pi_xxxxx).
      - name: radar_score
        in: body
        type: number
        description: Stripe Radar risk score (0-100) attached to the payment.
      steps:
      - name: get-charge-details
        type: call
        call: stripe-fraud.get-payment-intent
        with:
          id: '{{payment_intent_id}}'
      - name: create-fraud-ticket
        type: call
        call: jira-fraud.create-issue
        with:
          project_key: FRAUD
          issuetype: Task
          summary: 'Radar fraud alert: {{payment_intent_id}} score {{radar_score}}'
          description: 'Payment intent {{payment_intent_id}} flagged with Radar score {{radar_score}}. Amount: {{get-charge-details.amount}}. Customer: {{get-charge-details.customer}}'
      - name: notify-fraud-team
        type: call
        call: slack-fraud.post-message
        with:
          channel: fraud-ops
          text: 'Fraud Alert: {{payment_intent_id}} | Radar Score: {{radar_score}} | Jira: {{create-fraud-ticket.key}} | Requires manual review'
  consumes:
  - type: http
    namespace: stripe-fraud
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: payment-intents
      path: /payment_intents/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-payment-intent
        method: GET
  - type: http
    namespace: jira-fraud
    baseUri: https://stripe.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-fraud
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-fraud-alert-triage.yml

Pulls daily Stripe payout data, reconciles against Snowflake ledger entries, and posts a reconciliation summary to the finance Slack channel.

naftiko: '0.5'
info:
  label: Stripe Treasury Reconciliation
  description: Pulls daily Stripe payout data, reconciles against Snowflake ledger entries, and posts a reconciliation summary to the finance Slack channel.
  tags:
  - finance
  - stripe
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: treasury
    port: 8080
    tools:
    - name: run-daily-reconciliation
      description: Given a date, pull Stripe payouts, compare with Snowflake ledger, and report discrepancies.
      inputParameters:
      - name: reconciliation_date
        in: body
        type: string
        description: Date to reconcile in YYYY-MM-DD format.
      steps:
      - name: query-ledger
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT SUM(amount) as ledger_total, COUNT(*) as entries FROM finance.payout_ledger WHERE payout_date='{{reconciliation_date}}'
      - name: post-reconciliation
        type: call
        call: slack.post-message
        with:
          channel: finance-treasury
          text: 'Daily reconciliation for {{reconciliation_date}}: Ledger total: {{query-ledger.data}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://stripe.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-treasury-reconciliation.yml

Collects developer documentation feedback, creates Jira improvement tickets, and posts weekly feedback digest to the docs team Slack channel.

naftiko: '0.5'
info:
  label: Stripe Developer Docs Feedback Pipeline
  description: Collects developer documentation feedback, creates Jira improvement tickets, and posts weekly feedback digest to the docs team Slack channel.
  tags:
  - documentation
  - jira
  - slack
  - developer-experience
capability:
  exposes:
  - type: mcp
    namespace: docs-ops
    port: 8080
    tools:
    - name: process-docs-feedback
      description: Given feedback details, create improvement tickets and notify the docs team.
      inputParameters:
      - name: page_url
        in: body
        type: string
        description: Documentation page URL.
      - name: feedback_type
        in: body
        type: string
        description: 'Type: unclear, outdated, missing_example, error.'
      - name: feedback_text
        in: body
        type: string
        description: Feedback text.
      steps:
      - name: create-improvement-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: DOCS
          issuetype: Task
          summary: 'Docs feedback ({{feedback_type}}): {{page_url}}'
          description: '{{feedback_text}}'
      - name: notify-docs-team
        type: call
        call: slack.post-message
        with:
          channel: docs-team
          text: 'New docs feedback ({{feedback_type}}): {{page_url}}. Ticket: {{create-improvement-ticket.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://stripe.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-developer-docs-feedback-pipeline.yml

When a Financial Connections account link is established, logs the connection in Snowflake, updates Salesforce, and notifies the partnerships team via Slack.

naftiko: '0.5'
info:
  label: Stripe Financial Connections Sync
  description: When a Financial Connections account link is established, logs the connection in Snowflake, updates Salesforce, and notifies the partnerships team via Slack.
  tags:
  - financial-services
  - stripe
  - snowflake
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: finconn-ops
    port: 8080
    tools:
    - name: sync-financial-connection
      description: Given a Financial Connections session, log the link, update CRM, and notify team.
      inputParameters:
      - name: session_id
        in: body
        type: string
        description: Financial Connections session ID.
      - name: institution_name
        in: body
        type: string
        description: Connected financial institution name.
      - name: merchant_id
        in: body
        type: string
        description: The merchant account ID.
      steps:
      - name: log-connection
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO finconn.linked_accounts (session_id, institution, merchant_id, linked_at) VALUES ('{{session_id}}', '{{institution_name}}', '{{merchant_id}}', CURRENT_TIMESTAMP())
      - name: notify-partnerships
        type: call
        call: slack.post-message
        with:
          channel: financial-partnerships
          text: 'New Financial Connection: {{institution_name}} linked for merchant {{merchant_id}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://stripe.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-financial-connections-sync.yml

Initiates a full or partial refund on a Stripe charge and notifies the support team in Slack. Triggered by a support escalation or automated dispute workflow.

naftiko: '0.5'
info:
  label: Stripe Charge Refund
  description: Initiates a full or partial refund on a Stripe charge and notifies the support team in Slack. Triggered by a support escalation or automated dispute workflow.
  tags:
  - finance
  - payments
  - stripe
  - refund
  - slack
capability:
  exposes:
  - type: mcp
    namespace: payment-ops
    port: 8080
    tools:
    - name: refund-charge
      description: Given a Stripe charge ID and optional partial amount, issue a refund and post a Slack notification to the payments-ops channel. Use when a customer refund is approved.
      inputParameters:
      - name: charge_id
        in: body
        type: string
        description: 'The Stripe charge ID to refund (format: ch_xxxxx).'
      - name: amount
        in: body
        type: integer
        description: Amount in cents to refund. Omit for full refund.
      - name: reason
        in: body
        type: string
        description: 'Refund reason: duplicate, fraudulent, or requested_by_customer.'
      steps:
      - name: issue-refund
        type: call
        call: stripe-refund.create-refund
        with:
          charge: '{{charge_id}}'
          amount: '{{amount}}'
          reason: '{{reason}}'
      - name: notify-slack
        type: call
        call: slack-notify.post-message
        with:
          channel: payments-ops
          text: 'Refund issued: {{charge_id}} | Amount: {{amount}} cents | Reason: {{reason}} | Refund ID: {{issue-refund.id}}'
  consumes:
  - type: http
    namespace: stripe-refund
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: refunds
      path: /refunds
      operations:
      - name: create-refund
        method: POST
  - type: http
    namespace: slack-notify
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-charge-refund.yml

Queries dispute outcome data from Snowflake and posts a monthly win rate analysis to the risk operations Slack channel.

naftiko: '0.5'
info:
  label: Stripe Dispute Win Rate Tracker
  description: Queries dispute outcome data from Snowflake and posts a monthly win rate analysis to the risk operations Slack channel.
  tags:
  - disputes
  - snowflake
  - slack
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: dispute-analytics
    port: 8080
    tools:
    - name: track-dispute-win-rate
      description: Given a month, pull dispute outcomes and share analysis.
      inputParameters:
      - name: month
        in: body
        type: string
        description: Month in YYYY-MM format.
      steps:
      - name: query-outcomes
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT reason, COUNT(*) as total, SUM(CASE WHEN outcome='won' THEN 1 ELSE 0 END) as won, ROUND(SUM(CASE WHEN outcome='won' THEN 1 ELSE 0 END)*100.0/COUNT(*),1) as win_rate FROM disputes.outcomes WHERE month='{{month}}' GROUP BY reason
      - name: post-analysis
        type: call
        call: slack.post-message
        with:
          channel: risk-operations
          text: 'Dispute win rates for {{month}}:

            {{query-outcomes.data}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://stripe.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-dispute-win-rate-tracker.yml

When a Connect payout fails, retrieves failure reason, creates a Jira support ticket, and notifies the Connect operations team via Slack.

naftiko: '0.5'
info:
  label: Stripe Connect Payout Failure Handler
  description: When a Connect payout fails, retrieves failure reason, creates a Jira support ticket, and notifies the Connect operations team via Slack.
  tags:
  - payments
  - stripe
  - connect
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: connect-ops
    port: 8080
    tools:
    - name: handle-payout-failure
      description: Given a failed payout ID and account, create support ticket and notify ops.
      inputParameters:
      - name: payout_id
        in: body
        type: string
        description: The failed payout ID.
      - name: account_id
        in: body
        type: string
        description: The Connect account ID.
      - name: failure_code
        in: body
        type: string
        description: The payout failure code.
      steps:
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: CONNECT
          issuetype: Bug
          summary: 'Payout failure: {{account_id}} — {{failure_code}}'
          description: Payout {{payout_id}} failed with code {{failure_code}}.
      - name: notify-ops
        type: call
        call: slack.post-message
        with:
          channel: connect-operations
          text: 'Payout failure: Account {{account_id}}, Payout {{payout_id}}, Code: {{failure_code}}. Ticket: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://stripe.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-connect-payout-failure-handler.yml

When a Stripe API version is being deprecated, queries Snowflake for merchants using the old version, creates Jira migration tickets, and sends notification emails via SendGrid.

naftiko: '0.5'
info:
  label: Stripe API Deprecation Notifier
  description: When a Stripe API version is being deprecated, queries Snowflake for merchants using the old version, creates Jira migration tickets, and sends notification emails via SendGrid.
  tags:
  - api-management
  - snowflake
  - jira
  - sendgrid
capability:
  exposes:
  - type: mcp
    namespace: api-lifecycle
    port: 8080
    tools:
    - name: notify-api-deprecation
      description: Given an API version and deprecation date, find affected merchants, create tickets, and send notifications.
      inputParameters:
      - name: api_version
        in: body
        type: string
        description: The API version being deprecated.
      - name: deprecation_date
        in: body
        type: string
        description: Deprecation date.
      - name: replacement_version
        in: body
        type: string
        description: The replacement API version.
      steps:
      - name: find-affected-merchants
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT merchant_id, merchant_email, api_version FROM merchants.api_usage WHERE api_version='{{api_version}}'
      - name: create-migration-epic
        type: call
        call: jira.create-issue
        with:
          project_key: API
          issuetype: Epic
          summary: 'API deprecation: v{{api_version}} -> v{{replacement_version}} by {{deprecation_date}}'
          description: 'Affected merchants: {{find-affected-merchants.data}}'
      - name: send-notifications
        type: call
        call: sendgrid.send-email
        with:
          to: api-deprecation-list@stripe.com
          subject: Stripe API version {{api_version}} deprecation notice
          body: API version {{api_version}} will be deprecated on {{deprecation_date}}. Please upgrade to {{replacement_version}}.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://stripe.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: jira
    baseUri: https://stripe.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: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → stripe-api-deprecation-notifier.yml

When launching in a new country, creates a Jira expansion epic, documents regulatory requirements in Confluence, and notifies the international team via Slack.

naftiko: '0.5'
info:
  label: Stripe International Expansion Tracker
  description: When launching in a new country, creates a Jira expansion epic, documents regulatory requirements in Confluence, and notifies the international team via Slack.
  tags:
  - international
  - jira
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: intl-ops
    port: 8080
    tools:
    - name: track-country-launch
      description: Given a country and launch details, create tracking epic, document requirements, and notify team.
      inputParameters:
      - name: country
        in: body
        type: string
        description: Country name.
      - name: launch_date
        in: body
        type: string
        description: Target launch date.
      - name: payment_methods
        in: body
        type: string
        description: Supported payment methods.
      steps:
      - name: create-expansion-epic
        type: call
        call: jira.create-issue
        with:
          project_key: INTL
          issuetype: Epic
          summary: 'Country launch: {{country}} — target {{launch_date}}'
      - name: create-requirements-doc
        type: call
        call: confluence.create-page
        with:
          spaceKey: INTL
          title: 'Launch: {{country}}'
          body: 'Target date: {{launch_date}}

            Payment methods: {{payment_methods}}

            Epic: {{create-expansion-epic.key}}'
      - name: notify-intl-team
        type: call
        call: slack.post-message
        with:
          channel: international-expansion
          text: 'Country launch: {{country}} targeting {{launch_date}}. Methods: {{payment_methods}}. Epic: {{create-expansion-epic.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://stripe.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://stripe.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-international-expansion-tracker.yml

When a Stripe Issuing card fraud alert is triggered, freezes the card, creates a Jira investigation ticket, and notifies the fraud team via Slack.

naftiko: '0.5'
info:
  label: Stripe Issuing Card Fraud Alert
  description: When a Stripe Issuing card fraud alert is triggered, freezes the card, creates a Jira investigation ticket, and notifies the fraud team via Slack.
  tags:
  - fraud
  - stripe
  - issuing
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: issuing-fraud
    port: 8080
    tools:
    - name: handle-card-fraud
      description: Given a card ID and fraud details, freeze the card, create investigation ticket, and alert fraud team.
      inputParameters:
      - name: card_id
        in: body
        type: string
        description: The Stripe Issuing card ID.
      - name: fraud_type
        in: body
        type: string
        description: Type of fraud detected.
      - name: transaction_id
        in: body
        type: string
        description: The suspicious transaction ID.
      steps:
      - name: create-investigation
        type: call
        call: jira.create-issue
        with:
          project_key: FRAUD
          issuetype: Bug
          summary: 'Issuing fraud: Card {{card_id}} — {{fraud_type}}'
          description: 'Transaction: {{transaction_id}}'
          priority: High
      - name: alert-fraud-team
        type: call
        call: slack.post-message
        with:
          channel: issuing-fraud-alerts
          text: 'Card fraud alert: {{card_id}} — {{fraud_type}}. Transaction: {{transaction_id}}. Ticket: {{create-investigation.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://stripe.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-issuing-card-fraud-alert.yml

When a new engineer joins Stripe, creates a Jira onboarding epic, provisions GitHub org access, provisions Okta account, and sends a Slack welcome.

naftiko: '0.5'
info:
  label: Engineer Onboarding Orchestrator
  description: When a new engineer joins Stripe, creates a Jira onboarding epic, provisions GitHub org access, provisions Okta account, and sends a Slack welcome.
  tags:
  - hr
  - onboarding
  - jira
  - github
  - okta
  - slack
capability:
  exposes:
  - type: mcp
    namespace: hr-onboarding
    port: 8080
    tools:
    - name: onboard-engineer
      description: Given employee details, create Jira epic, provision GitHub and Okta access, and welcome on Slack.
      inputParameters:
      - name: employee_name
        in: body
        type: string
        description: New hire's full name.
      - name: github_username
        in: body
        type: string
        description: GitHub username.
      - name: team_name
        in: body
        type: string
        description: Engineering team name.
      - name: start_date
        in: body
        type: string
        description: Start date YYYY-MM-DD.
      steps:
      - name: create-onboarding-epic
        type: call
        call: jira.create-issue
        with:
          project_key: ENG
          issuetype: Epic
          summary: 'Onboarding: {{employee_name}} — {{team_name}} — {{start_date}}'
      - name: provision-github
        type: call
        call: github.add-org-member
        with:
          username: '{{github_username}}'
          role: member
      - name: welcome-slack
        type: call
        call: slack.post-message
        with:
          channel: '{{team_name}}-engineering'
          text: 'Welcome {{employee_name}} to the {{team_name}} team! Starting {{start_date}}. Onboarding: {{create-onboarding-epic.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://stripe.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: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: org-members
      path: /orgs/stripe/memberships/{{username}}
      inputParameters:
      - name: username
        in: path
      operations:
      - name: add-org-member
        method: PUT
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → engineer-onboarding-orchestrator.yml

Submits an incoming support message to OpenAI for intent classification, then routes the Zendesk ticket to the appropriate support queue based on the classified intent.

naftiko: '0.5'
info:
  label: OpenAI-Assisted Support Ticket Routing
  description: Submits an incoming support message to OpenAI for intent classification, then routes the Zendesk ticket to the appropriate support queue based on the classified intent.
  tags:
  - ai
  - openai
  - support
  - automation
  - triage
capability:
  exposes:
  - type: mcp
    namespace: support-ai
    port: 8080
    tools:
    - name: route-support-ticket
      description: Given a support ticket subject and body, call OpenAI to classify the intent (billing, technical, fraud, general), then update the ticket's Zendesk group assignment accordingly. Use at ticket ingestion for zero-touch triage routing.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: Zendesk ticket ID to route.
      - name: ticket_subject
        in: body
        type: string
        description: Zendesk ticket subject line.
      - name: ticket_body
        in: body
        type: string
        description: Full text body of the support ticket.
      steps:
      - name: classify-intent
        type: call
        call: openai-classify.create-completion
        with:
          model: gpt-4o
          messages: '[{"role":"system","content":"Classify this support ticket into one of: billing, technical, fraud, general. Return only the category."},{"role":"user","content":"Subject: {{ticket_subject}}\n\n{{ticket_body}}"}]'
          max_tokens: 10
      - name: update-ticket-group
        type: call
        call: zendesk-tickets.update-ticket
        with:
          ticket_id: '{{ticket_id}}'
          group_name: '{{classify-intent.choices[0].message.content}}'
  consumes:
  - type: http
    namespace: openai-classify
    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
  - type: http
    namespace: zendesk-tickets
    baseUri: https://stripe.zendesk.com/api/v2
    authentication:
      type: basic
      username: $secrets.zendesk_user
      password: $secrets.zendesk_api_token
    resources:
    - name: tickets
      path: /tickets/{{ticket_id}}
      inputParameters:
      - name: ticket_id
        in: path
      operations:
      - name: update-ticket
        method: PUT
Open in Framework → View in Fleet → openai-assisted-support-ticket-routing.yml

When a Connect account's KYC verification fails, retrieves account requirements, creates a Jira compliance ticket, and notifies the partner via SendGrid.

naftiko: '0.5'
info:
  label: Stripe Connect KYC Verification Flow
  description: When a Connect account's KYC verification fails, retrieves account requirements, creates a Jira compliance ticket, and notifies the partner via SendGrid.
  tags:
  - compliance
  - stripe
  - connect
  - jira
  - sendgrid
capability:
  exposes:
  - type: mcp
    namespace: connect-compliance
    port: 8080
    tools:
    - name: handle-kyc-failure
      description: Given a Connect account ID, retrieve verification requirements, create a compliance ticket, and notify the partner.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Stripe Connect account ID.
      - name: partner_email
        in: body
        type: string
        description: Partner's email address.
      steps:
      - name: get-account
        type: call
        call: stripe-connect.get-account
        with:
          account_id: '{{account_id}}'
      - name: create-compliance-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: COMPLY
          issuetype: Task
          summary: 'KYC failure: Connect account {{account_id}}'
          description: 'Requirements: {{get-account.requirements.currently_due}}'
      - name: notify-partner
        type: call
        call: sendgrid.send-email
        with:
          to: '{{partner_email}}'
          subject: 'Action required: Complete your Stripe verification'
          body: 'Your account {{account_id}} requires additional verification. Please complete the following: {{get-account.requirements.currently_due}}'
  consumes:
  - type: http
    namespace: stripe-connect
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: accounts
      path: /accounts/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: jira
    baseUri: https://stripe.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: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → stripe-connect-kyc-verification-flow.yml

When a pull request is opened in a Stripe engineering repository, automatically assigns reviewers based on CODEOWNERS and posts a review reminder in the team's Slack channel.

naftiko: '0.5'
info:
  label: GitHub Code Review Assignment
  description: When a pull request is opened in a Stripe engineering repository, automatically assigns reviewers based on CODEOWNERS and posts a review reminder in the team's Slack channel.
  tags:
  - devops
  - github
  - slack
  - code-review
capability:
  exposes:
  - type: mcp
    namespace: eng-ops
    port: 8080
    tools:
    - name: assign-pr-reviewers
      description: Given a GitHub pull request number and repo, fetch PR details, assign reviewers, and post a review request to the relevant Slack engineering channel. Use as a post-PR-open webhook handler.
      inputParameters:
      - name: pr_number
        in: body
        type: integer
        description: GitHub pull request number.
      - name: owner
        in: body
        type: string
        description: GitHub repository owner or org name.
      - name: repo
        in: body
        type: string
        description: GitHub repository name.
      - name: reviewers
        in: body
        type: string
        description: Comma-separated list of GitHub usernames to assign as reviewers.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel to post the review request notification.
      steps:
      - name: get-pr
        type: call
        call: github-prs.get-pull-request
        with:
          owner: '{{owner}}'
          repo: '{{repo}}'
          pull_number: '{{pr_number}}'
      - name: assign-reviewers
        type: call
        call: github-reviewers.request-reviewers
        with:
          owner: '{{owner}}'
          repo: '{{repo}}'
          pull_number: '{{pr_number}}'
          reviewers: '{{reviewers}}'
      - name: notify-team
        type: call
        call: slack-eng.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Review requested: {{get-pr.title}} (PR #{{pr_number}}) in {{repo}} — assigned to {{reviewers}}'
  consumes:
  - type: http
    namespace: github-prs
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: pull-requests
      path: /repos/{{owner}}/{{repo}}/pulls/{{pull_number}}
      inputParameters:
      - name: owner
        in: path
      - name: repo
        in: path
      - name: pull_number
        in: path
      operations:
      - name: get-pull-request
        method: GET
  - type: http
    namespace: github-reviewers
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: review-requests
      path: /repos/{{owner}}/{{repo}}/pulls/{{pull_number}}/requested_reviewers
      inputParameters:
      - name: owner
        in: path
      - name: repo
        in: path
      - name: pull_number
        in: path
      operations:
      - name: request-reviewers
        method: POST
  - type: http
    namespace: slack-eng
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → github-code-review-assignment.yml

Executes a merchant analytics query against Snowflake and returns aggregated payment volume data.

naftiko: '0.5'
info:
  label: Snowflake Merchant Analytics Query
  description: Executes a merchant analytics query against Snowflake and returns aggregated payment volume data.
  tags:
  - data
  - snowflake
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: query-merchant-analytics
      description: Given a merchant ID, return payment volume, transaction count, and average transaction value.
      inputParameters:
      - name: merchant_id
        in: body
        type: string
        description: The merchant account ID.
      call: snowflake-analytics.execute-statement
      with:
        statement: SELECT SUM(amount) as total_volume, COUNT(*) as txn_count, AVG(amount) as avg_txn FROM payments.transactions WHERE merchant_id='{{merchant_id}}' AND created_at>=DATEADD(day, -30, CURRENT_DATE())
      outputParameters:
      - name: total_volume
        type: number
        mapping: $.data[0][0]
      - name: txn_count
        type: number
        mapping: $.data[0][1]
  consumes:
  - type: http
    namespace: snowflake-analytics
    baseUri: https://stripe.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
Open in Framework → View in Fleet → snowflake-merchant-analytics-query.yml

Lists recent Stripe Checkout sessions for a specified product, computes conversion rate and abandonment metrics, and posts an analytics summary to the growth team's Slack channel.

naftiko: '0.5'
info:
  label: Stripe Checkout Session Analytics
  description: Lists recent Stripe Checkout sessions for a specified product, computes conversion rate and abandonment metrics, and posts an analytics summary to the growth team's Slack channel.
  tags:
  - finance
  - stripe
  - analytics
  - growth
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: growth-analytics
    port: 8080
    tools:
    - name: analyze-checkout-sessions
      description: 'Fetch recent Stripe Checkout sessions for a date range, compute session counts by status (open, complete, expired), and post a conversion summary to the #growth Slack channel. Use for weekly funnel analysis or A/B test measurement.'
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: Start of the reporting window in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: End of the reporting window in YYYY-MM-DD format.
      steps:
      - name: list-sessions
        type: call
        call: stripe-checkout.list-sessions
        with:
          created_gte: '{{start_date}}'
          created_lte: '{{end_date}}'
          limit: 100
      - name: post-analytics
        type: call
        call: slack-growth.post-message
        with:
          channel: growth
          text: 'Checkout session analytics {{start_date}} to {{end_date}}: Sessions retrieved {{list-sessions.data}}. Review conversion rates in Stripe dashboard.'
  consumes:
  - type: http
    namespace: stripe-checkout
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: checkout-sessions
      path: /checkout/sessions
      inputParameters:
      - name: created_gte
        in: query
      - name: created_lte
        in: query
      - name: limit
        in: query
      operations:
      - name: list-sessions
        method: GET
  - type: http
    namespace: slack-growth
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-checkout-session-analytics.yml

Queries Snowflake for Radar ML model performance metrics, analyzes trends, and posts a weekly model health report to the risk team Slack channel.

naftiko: '0.5'
info:
  label: Stripe Radar Model Performance Monitor
  description: Queries Snowflake for Radar ML model performance metrics, analyzes trends, and posts a weekly model health report to the risk team Slack channel.
  tags:
  - fraud
  - machine-learning
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: radar-ml
    port: 8080
    tools:
    - name: monitor-radar-model
      description: Given a model version, pull performance metrics and share report.
      inputParameters:
      - name: model_version
        in: body
        type: string
        description: Radar model version.
      steps:
      - name: query-performance
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT date, precision, recall, f1_score, false_positive_rate FROM ml.radar_model_metrics WHERE model_version='{{model_version}}' ORDER BY date DESC LIMIT 7
      - name: post-report
        type: call
        call: slack.post-message
        with:
          channel: radar-ml-team
          text: 'Radar model {{model_version}} performance (last 7 days):

            {{query-performance.data}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://stripe.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-radar-model-performance-monitor.yml

Creates a Stripe invoice for a customer, adds line items, finalizes it, and sends it via email. Used by the billing team or automated billing agents at the end of a billing cycle.

naftiko: '0.5'
info:
  label: Stripe Invoice Generation and Delivery
  description: Creates a Stripe invoice for a customer, adds line items, finalizes it, and sends it via email. Used by the billing team or automated billing agents at the end of a billing cycle.
  tags:
  - finance
  - stripe
  - billing
  - invoicing
capability:
  exposes:
  - type: mcp
    namespace: invoicing
    port: 8080
    tools:
    - name: generate-and-send-invoice
      description: Given a Stripe customer ID, price ID, and quantity, create a draft invoice, add the line item, finalize the invoice, and trigger email delivery to the customer. Use at billing cycle close or for one-off manual billing.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: Stripe customer ID (cus_xxxxx) to invoice.
      - name: price_id
        in: body
        type: string
        description: Stripe price ID (price_xxxxx) to add as line item.
      - name: quantity
        in: body
        type: integer
        description: Quantity of the price units to invoice.
      steps:
      - name: create-invoice
        type: call
        call: stripe-invoice-create.create-invoice
        with:
          customer: '{{customer_id}}'
      - name: add-line-item
        type: call
        call: stripe-invoice-items.create-invoice-item
        with:
          customer: '{{customer_id}}'
          invoice: '{{create-invoice.id}}'
          price: '{{price_id}}'
          quantity: '{{quantity}}'
      - name: finalize-invoice
        type: call
        call: stripe-invoice-finalize.finalize-invoice
        with:
          invoice_id: '{{create-invoice.id}}'
      - name: send-invoice
        type: call
        call: stripe-invoice-send.send-invoice
        with:
          invoice_id: '{{create-invoice.id}}'
  consumes:
  - type: http
    namespace: stripe-invoice-create
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: invoices
      path: /invoices
      operations:
      - name: create-invoice
        method: POST
  - type: http
    namespace: stripe-invoice-items
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: invoice-items
      path: /invoiceitems
      operations:
      - name: create-invoice-item
        method: POST
  - type: http
    namespace: stripe-invoice-finalize
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: invoice-finalize
      path: /invoices/{{invoice_id}}/finalize
      inputParameters:
      - name: invoice_id
        in: path
      operations:
      - name: finalize-invoice
        method: POST
  - type: http
    namespace: stripe-invoice-send
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: invoice-send
      path: /invoices/{{invoice_id}}/send
      inputParameters:
      - name: invoice_id
        in: path
      operations:
      - name: send-invoice
        method: POST
Open in Framework → View in Fleet → stripe-invoice-generation-and-delivery.yml

Retrieves the current Stripe account balance including available and pending amounts by currency.

naftiko: '0.5'
info:
  label: Stripe Balance Lookup
  description: Retrieves the current Stripe account balance including available and pending amounts by currency.
  tags:
  - finance
  - payments
  - stripe
capability:
  exposes:
  - type: mcp
    namespace: payments
    port: 8080
    tools:
    - name: get-stripe-balance
      description: Return the current Stripe account balance with available and pending amounts. Use for reconciliation and treasury dashboards.
      inputParameters: []
      call: stripe-balance.get-balance
      with: {}
      outputParameters:
      - name: available
        type: array
        mapping: $.available
      - name: pending
        type: array
        mapping: $.pending
  consumes:
  - type: http
    namespace: stripe-balance
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: balance
      path: /balance
      operations:
      - name: get-balance
        method: GET
Open in Framework → View in Fleet → stripe-balance-lookup.yml

When a merchant's payment volume drops significantly, queries Snowflake for analytics, updates Salesforce account health, and alerts the merchant success team via Slack.

naftiko: '0.5'
info:
  label: Merchant Churn Risk Alert
  description: When a merchant's payment volume drops significantly, queries Snowflake for analytics, updates Salesforce account health, and alerts the merchant success team via Slack.
  tags:
  - analytics
  - snowflake
  - salesforce
  - slack
  - customer-success
capability:
  exposes:
  - type: mcp
    namespace: merchant-success
    port: 8080
    tools:
    - name: alert-churn-risk
      description: Given a merchant ID and volume decline percentage, pull analytics, update Salesforce, and alert the team.
      inputParameters:
      - name: merchant_id
        in: body
        type: string
        description: The merchant account ID.
      - name: decline_pct
        in: body
        type: number
        description: Volume decline percentage.
      steps:
      - name: query-analytics
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT total_volume, txn_count, avg_txn_size FROM payments.merchant_monthly WHERE merchant_id='{{merchant_id}}' ORDER BY month DESC LIMIT 3
      - name: update-salesforce
        type: call
        call: salesforce.update-account
        with:
          account_id: '{{merchant_id}}'
          Churn_Risk__c: High
      - name: alert-team
        type: call
        call: slack.post-message
        with:
          channel: merchant-success-alerts
          text: 'Churn risk: Merchant {{merchant_id}} volume dropped {{decline_pct}}%. Last 3 months: {{query-analytics.data}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://stripe.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: salesforce
    baseUri: https://stripe.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: update-account
        method: PATCH
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → merchant-churn-risk-alert.yml

Retrieves Datadog SLO status for a given service and posts a compliance report to Slack. Triggered weekly or on-demand for engineering reliability reviews.

naftiko: '0.5'
info:
  label: Datadog SLO Compliance Check
  description: Retrieves Datadog SLO status for a given service and posts a compliance report to Slack. Triggered weekly or on-demand for engineering reliability reviews.
  tags:
  - devops
  - datadog
  - slack
  - observability
  - slo
  - reliability
capability:
  exposes:
  - type: mcp
    namespace: reliability-ops
    port: 8080
    tools:
    - name: check-slo-compliance
      description: Given a Datadog SLO ID, retrieve its current status and error budget remaining, then post a compliance summary to a Slack channel. Use for weekly reliability reviews or ad-hoc SLO checks.
      inputParameters:
      - name: slo_id
        in: body
        type: string
        description: Datadog SLO ID to check compliance for.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel to post the SLO compliance report.
      steps:
      - name: get-slo
        type: call
        call: datadog-slos.get-slo
        with:
          slo_id: '{{slo_id}}'
      - name: post-slo-report
        type: call
        call: slack-reliability.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'SLO Compliance for {{slo_id}}: Status {{get-slo.data.overall_status}} | Error budget: {{get-slo.data.overall_error_budget_remaining}}%'
  consumes:
  - type: http
    namespace: datadog-slos
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: slos
      path: /slo/{{slo_id}}
      inputParameters:
      - name: slo_id
        in: path
      operations:
      - name: get-slo
        method: GET
  - type: http
    namespace: slack-reliability
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → datadog-slo-compliance-check.yml

When a Jira issue is escalated to P1 priority, posts an alert to the #escalations Slack channel and creates a Datadog event for correlated observability tracking.

naftiko: '0.5'
info:
  label: Jira Escalation to Slack and Datadog
  description: 'When a Jira issue is escalated to P1 priority, posts an alert to the #escalations Slack channel and creates a Datadog event for correlated observability tracking.'
  tags:
  - devops
  - jira
  - slack
  - datadog
  - escalation
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: escalation-ops
    port: 8080
    tools:
    - name: handle-jira-escalation
      description: 'Given a Jira issue key and escalation reason, post an escalation notice to #escalations in Slack and create a correlated Datadog event. Use when a Jira automation or human escalates an issue to P1.'
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: Jira issue key being escalated (e.g. OPS-1234).
      - name: escalation_reason
        in: body
        type: string
        description: Text describing why the issue was escalated to P1.
      - name: service_tag
        in: body
        type: string
        description: Service or component tag for Datadog event correlation.
      steps:
      - name: post-escalation
        type: call
        call: slack-escalation.post-message
        with:
          channel: escalations
          text: 'P1 ESCALATION: {{issue_key}} | Reason: {{escalation_reason}} | https://stripe.atlassian.net/browse/{{issue_key}}'
      - name: log-dd-event
        type: call
        call: datadog-escalation.create-event
        with:
          title: 'Jira P1 Escalation: {{issue_key}}'
          text: '{{escalation_reason}}'
          tags: service:{{service_tag}},source:jira,priority:p1
  consumes:
  - type: http
    namespace: slack-escalation
    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: datadog-escalation
    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
Open in Framework → View in Fleet → jira-escalation-to-slack-and-datadog.yml

Queries Snowflake for Connect platform fees, reconciles against Stripe records, and posts a daily fee summary to the finance Slack channel.

naftiko: '0.5'
info:
  label: Stripe Connect Fee Reconciliation
  description: Queries Snowflake for Connect platform fees, reconciles against Stripe records, and posts a daily fee summary to the finance Slack channel.
  tags:
  - finance
  - stripe
  - connect
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: connect-finance
    port: 8080
    tools:
    - name: reconcile-connect-fees
      description: Given a date, pull Connect fee data and share reconciliation.
      inputParameters:
      - name: reconciliation_date
        in: body
        type: string
        description: Date YYYY-MM-DD.
      steps:
      - name: query-fees
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT platform_id, SUM(application_fee) as total_fees, COUNT(*) as txns FROM connect.application_fees WHERE fee_date='{{reconciliation_date}}' GROUP BY platform_id ORDER BY total_fees DESC LIMIT 10
      - name: post-reconciliation
        type: call
        call: slack.post-message
        with:
          channel: connect-finance
          text: 'Connect fee reconciliation for {{reconciliation_date}}:

            {{query-fees.data}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://stripe.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → stripe-connect-fee-reconciliation.yml

When an employee departs, revokes GitHub access, disables Okta account, creates a Jira deprovisioning ticket, and notifies the team via Slack.

naftiko: '0.5'
info:
  label: Workday Employee Offboarding Orchestrator
  description: When an employee departs, revokes GitHub access, disables Okta account, creates a Jira deprovisioning ticket, and notifies the team via Slack.
  tags:
  - hr
  - offboarding
  - workday
  - github
  - okta
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: offboard-employee
      description: Given employee details, revoke all access, create deprovisioning ticket, and notify.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      - name: github_username
        in: body
        type: string
        description: GitHub username.
      - name: employee_name
        in: body
        type: string
        description: Employee name.
      - name: team_name
        in: body
        type: string
        description: Team name.
      steps:
      - name: revoke-github
        type: call
        call: github.remove-org-member
        with:
          username: '{{github_username}}'
      - name: create-deprov-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: IT
          issuetype: Task
          summary: 'Offboarding: {{employee_name}} — access deprovisioning'
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: '{{team_name}}-engineering'
          text: '{{employee_name}} has departed. Access revoked. Deprovisioning: {{create-deprov-ticket.key}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: org-members
      path: /orgs/stripe/members/{{username}}
      inputParameters:
      - name: username
        in: path
      operations:
      - name: remove-org-member
        method: DELETE
  - type: http
    namespace: jira
    baseUri: https://stripe.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → workday-employee-offboarding-orchestrator.yml

When Datadog fires a P1 monitor alert, automatically creates a Jira incident ticket, notifies the on-call engineer via Slack, and logs the event in the incident management workflow.

naftiko: '0.5'
info:
  label: Datadog Incident Alert to Jira
  description: When Datadog fires a P1 monitor alert, automatically creates a Jira incident ticket, notifies the on-call engineer via Slack, and logs the event in the incident management workflow.
  tags:
  - devops
  - datadog
  - jira
  - slack
  - incident-response
  - observability
capability:
  exposes:
  - type: mcp
    namespace: incident-ops
    port: 8080
    tools:
    - name: handle-p1-alert
      description: 'Given a Datadog monitor ID and alert message, retrieve monitor details, open a Jira P1 incident, and notify the #incidents Slack channel. Invoke from Datadog webhook integrations on ALERT state transitions.'
      inputParameters:
      - name: monitor_id
        in: body
        type: integer
        description: Datadog monitor ID that fired the alert.
      - name: alert_message
        in: body
        type: string
        description: Alert body text from the Datadog notification.
      - name: service
        in: body
        type: string
        description: Service name associated with the triggered monitor.
      steps:
      - name: get-monitor
        type: call
        call: datadog-monitors.get-monitor
        with:
          monitor_id: '{{monitor_id}}'
      - name: create-incident
        type: call
        call: jira-incident.create-issue
        with:
          project_key: OPS
          issuetype: Incident
          summary: 'P1 Alert: {{service}} — {{alert_message}}'
          description: 'Datadog monitor {{monitor_id}} fired.

            Service: {{service}}

            Message: {{alert_message}}

            Monitor name: {{get-monitor.name}}'
          priority: Highest
      - name: notify-oncall
        type: call
        call: slack-incidents.post-message
        with:
          channel: incidents
          text: 'P1 ALERT: {{service}} | Monitor: {{monitor_id}} | Jira: {{create-incident.key}} | {{alert_message}}'
  consumes:
  - type: http
    namespace: datadog-monitors
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor/{{monitor_id}}
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: get-monitor
        method: GET
  - type: http
    namespace: jira-incident
    baseUri: https://stripe.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-incidents
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → datadog-incident-alert-to-jira.yml

Looks up a Stripe subscription by ID and returns plan, status, current period end, and trial information. Used by support and billing agents to answer customer inquiries.

naftiko: '0.5'
info:
  label: Stripe Subscription Status Check
  description: Looks up a Stripe subscription by ID and returns plan, status, current period end, and trial information. Used by support and billing agents to answer customer inquiries.
  tags:
  - finance
  - payments
  - stripe
  - billing
  - subscriptions
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: billing
    port: 8080
    tools:
    - name: get-subscription
      description: Given a Stripe subscription ID, return current plan name, status, current period end date, and trial end date. Invoke for customer billing inquiries or churn risk analysis.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: 'Stripe subscription ID (format: sub_xxxxx).'
      call: stripe-subs.get-subscription
      with:
        id: '{{subscription_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: current_period_end
        type: number
        mapping: $.current_period_end
      - name: plan_id
        type: string
        mapping: $.plan.id
      - name: trial_end
        type: number
        mapping: $.trial_end
  consumes:
  - type: http
    namespace: stripe-subs
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: subscriptions
      path: /subscriptions/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-subscription
        method: GET
Open in Framework → View in Fleet → stripe-subscription-status-check.yml

Retrieves status and arrival date of a Stripe payout.

naftiko: '0.5'
info:
  label: Stripe Payout Status Lookup
  description: Retrieves status and arrival date of a Stripe payout.
  tags:
  - finance
  - stripe
  - payouts
capability:
  exposes:
  - type: mcp
    namespace: treasury
    port: 8080
    tools:
    - name: get-payout-status
      description: Given a payout ID, return status and estimated arrival date.
      inputParameters:
      - name: payout_id
        in: body
        type: string
        description: The Stripe payout ID.
      call: stripe-payouts.get-payout
      with:
        id: '{{payout_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: arrival_date
        type: number
        mapping: $.arrival_date
  consumes:
  - type: http
    namespace: stripe-payouts
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: payouts
      path: /payouts/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-payout
        method: GET
Open in Framework → View in Fleet → stripe-payout-status-lookup.yml

When a new business customer is approved, creates a Stripe customer record, attaches a default payment method, and provisions a Salesforce account. Spans Stripe and Salesforce.

naftiko: '0.5'
info:
  label: Stripe Customer Onboarding
  description: When a new business customer is approved, creates a Stripe customer record, attaches a default payment method, and provisions a Salesforce account. Spans Stripe and Salesforce.
  tags:
  - finance
  - payments
  - stripe
  - salesforce
  - onboarding
  - crm
capability:
  exposes:
  - type: mcp
    namespace: customer-onboarding
    port: 8080
    tools:
    - name: onboard-business-customer
      description: Given a business name, email, and payment method token, create a Stripe customer, attach the payment method, then create or update the matching Salesforce account. Use during B2B customer activation.
      inputParameters:
      - name: business_name
        in: body
        type: string
        description: Legal business name for the new customer.
      - name: email
        in: body
        type: string
        description: Primary billing email address.
      - name: payment_method_id
        in: body
        type: string
        description: Stripe payment method ID (pm_xxxxx) to attach as default.
      steps:
      - name: create-customer
        type: call
        call: stripe-customers.create-customer
        with:
          name: '{{business_name}}'
          email: '{{email}}'
      - name: attach-payment
        type: call
        call: stripe-payment-methods.attach-method
        with:
          payment_method_id: '{{payment_method_id}}'
          customer: '{{create-customer.id}}'
      - name: create-sf-account
        type: call
        call: salesforce-accounts.create-account
        with:
          Name: '{{business_name}}'
          Stripe_Customer_ID__c: '{{create-customer.id}}'
          BillingEmail: '{{email}}'
  consumes:
  - type: http
    namespace: stripe-customers
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: customers
      path: /customers
      operations:
      - name: create-customer
        method: POST
  - type: http
    namespace: stripe-payment-methods
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: payment-method-attach
      path: /payment_methods/{{payment_method_id}}/attach
      inputParameters:
      - name: payment_method_id
        in: path
      operations:
      - name: attach-method
        method: POST
  - type: http
    namespace: salesforce-accounts
    baseUri: https://stripe.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: accounts
      path: /sobjects/Account
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → stripe-customer-onboarding.yml

When a new service is created, triggers a Terraform run, creates a Jira provisioning ticket, and notifies platform engineering via Slack.

naftiko: '0.5'
info:
  label: Terraform Infrastructure Provisioning
  description: When a new service is created, triggers a Terraform run, creates a Jira provisioning ticket, and notifies platform engineering via Slack.
  tags:
  - infrastructure
  - terraform
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: infra-ops
    port: 8080
    tools:
    - name: provision-infrastructure
      description: Given service details, trigger Terraform, create ticket, and notify team.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: New service name.
      - name: environment
        in: body
        type: string
        description: Target environment.
      steps:
      - name: create-provisioning-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: INFRA
          issuetype: Task
          summary: 'Provision: {{service_name}} in {{environment}}'
      - name: notify-platform
        type: call
        call: slack.post-message
        with:
          channel: platform-engineering
          text: 'Infrastructure provisioning: {{service_name}} in {{environment}}. Ticket: {{create-provisioning-ticket.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://stripe.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → terraform-infrastructure-provisioning.yml

On pull request merge to main, runs pre-deployment checks via GitHub Actions, posts build status to Slack, and creates a Datadog deployment event marker.

naftiko: '0.5'
info:
  label: GitHub Pull Request Deployment Gate
  description: On pull request merge to main, runs pre-deployment checks via GitHub Actions, posts build status to Slack, and creates a Datadog deployment event marker.
  tags:
  - devops
  - github
  - datadog
  - slack
  - cicd
  - deployment
capability:
  exposes:
  - type: mcp
    namespace: deploy-ops
    port: 8080
    tools:
    - name: handle-pr-merge-deployment
      description: Given a merged PR number, repo, and commit SHA, trigger a GitHub Actions workflow, post a Slack deployment notice, and create a Datadog deployment marker. Use as the post-merge deployment orchestration step.
      inputParameters:
      - name: pr_number
        in: body
        type: integer
        description: Merged pull request number.
      - name: repo
        in: body
        type: string
        description: Repository name in owner/repo format.
      - name: commit_sha
        in: body
        type: string
        description: SHA of the merge commit triggering deployment.
      - name: service_name
        in: body
        type: string
        description: Service or component being deployed.
      steps:
      - name: trigger-workflow
        type: call
        call: github-actions.trigger-dispatch
        with:
          repo: '{{repo}}'
          event_type: deploy
          client_payload: '{{commit_sha}}'
      - name: post-deploy-notice
        type: call
        call: slack-deploy.post-message
        with:
          channel: deployments
          text: 'Deploying {{service_name}} from PR #{{pr_number}} commit {{commit_sha}}'
      - name: create-dd-marker
        type: call
        call: datadog-deploy.create-event
        with:
          title: 'Deployment: {{service_name}}'
          text: 'PR #{{pr_number}} merged — commit {{commit_sha}} deploying to production'
          tags: service:{{service_name}},env:production
  consumes:
  - type: http
    namespace: github-actions
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: dispatches
      path: /repos/{{repo}}/dispatches
      inputParameters:
      - name: repo
        in: path
      operations:
      - name: trigger-dispatch
        method: POST
  - type: http
    namespace: slack-deploy
    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: datadog-deploy
    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
Open in Framework → View in Fleet → github-pull-request-deployment-gate.yml

Retrieves Stripe Tax Rate objects for a given jurisdiction to support tax calculation and compliance reporting workflows.

naftiko: '0.5'
info:
  label: Stripe Tax Rate Lookup
  description: Retrieves Stripe Tax Rate objects for a given jurisdiction to support tax calculation and compliance reporting workflows.
  tags:
  - finance
  - stripe
  - tax
  - compliance
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: tax-ops
    port: 8080
    tools:
    - name: get-tax-rate
      description: Given a Stripe tax rate ID, return the display name, percentage, jurisdiction, and inclusive/exclusive type. Use during invoice generation or tax compliance review.
      inputParameters:
      - name: tax_rate_id
        in: body
        type: string
        description: Stripe tax rate ID (txr_xxxxx) to retrieve.
      call: stripe-tax.get-tax-rate
      with:
        id: '{{tax_rate_id}}'
      outputParameters:
      - name: display_name
        type: string
        mapping: $.display_name
      - name: percentage
        type: number
        mapping: $.percentage
      - name: jurisdiction
        type: string
        mapping: $.jurisdiction
      - name: inclusive
        type: boolean
        mapping: $.inclusive
  consumes:
  - type: http
    namespace: stripe-tax
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: tax-rates
      path: /tax_rates/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-tax-rate
        method: GET
Open in Framework → View in Fleet → stripe-tax-rate-lookup.yml

Queries Snowflake for transaction volume metrics by region and card type.

naftiko: '0.5'
info:
  label: Visa Transaction Volume Query
  description: Queries Snowflake for transaction volume metrics by region and card type.
  tags:
  - payments
  - snowflake
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: visa_transaction_vol
    port: 8080
    tools:
    - name: query-data
      description: Queries Snowflake for transaction volume metrics by region and card type.
      inputParameters:
      - name: query_param
        in: body
        type: string
        description: The query parameter.
      call: snowflake-api.run-query
      with:
        query_param: '{{query_param}}'
      outputParameters:
      - name: results
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → visa-transaction-volume-query.yml

At month end, queries Oracle ERP for open AP items and journal entries requiring action, then creates a period-close ServiceNow task for the finance controller team.

naftiko: '0.5'
info:
  label: Oracle Period-Close Financial Checklist
  description: At month end, queries Oracle ERP for open AP items and journal entries requiring action, then creates a period-close ServiceNow task for the finance controller team.
  tags:
  - finance
  - period-close
  - oracle
  - servicenow
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: finance-period-close
    port: 8080
    tools:
    - name: run-period-close-checklist
      description: Given a fiscal period and Oracle ledger ID, fetch open AP and pending journal items, then create a ServiceNow period-close task for the finance team.
      inputParameters:
      - name: fiscal_period
        in: body
        type: string
        description: Fiscal period in YYYYMM format.
      - name: ledger_id
        in: body
        type: string
        description: Oracle General Ledger ledger ID.
      - name: finance_group
        in: body
        type: string
        description: ServiceNow assignment group for the finance controller team.
      steps:
      - name: get-open-ap
        type: call
        call: oracle-payables.get-open-invoices
        with:
          fiscal_period: '{{fiscal_period}}'
          ledger_id: '{{ledger_id}}'
      - name: create-close-task
        type: call
        call: servicenow-period.create-task
        with:
          short_description: 'Period close: {{fiscal_period}} — {{get-open-ap.count}} open AP items'
          description: 'Oracle ERP open AP items for period {{fiscal_period}}: {{get-open-ap.count}} invoices totaling {{get-open-ap.total_amount}} {{get-open-ap.currency}}. Clear before period close.'
          assignment_group: '{{finance_group}}'
  consumes:
  - type: http
    namespace: oracle-payables
    baseUri: https://visa.fa.us2.oraclecloud.com/fscmRestApi/resources/11.13.18.05
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: invoices
      path: /invoices
      operations:
      - name: get-open-invoices
        method: GET
  - type: http
    namespace: servicenow-period
    baseUri: https://visa.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → oracle-period-close-financial-checklist.yml

Triggers a Tableau workbook refresh for Visa's executive payment KPI dashboards and notifies the business intelligence leadership team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Tableau Payment KPI Dashboard Refresh
  description: Triggers a Tableau workbook refresh for Visa's executive payment KPI dashboards and notifies the business intelligence leadership team via Microsoft Teams.
  tags:
  - analytics
  - tableau
  - microsoft-teams
  - reporting
  - dashboards
  - payments
capability:
  exposes:
  - type: mcp
    namespace: payment-dashboards
    port: 8080
    tools:
    - name: refresh-payment-kpi-dashboard
      description: Trigger a Tableau workbook refresh for a payment KPI dashboard and notify the BI leadership Teams channel on completion.
      inputParameters:
      - name: workbook_id
        in: body
        type: string
        description: The Tableau workbook LUID to refresh.
      - name: site_id
        in: body
        type: string
        description: Tableau server site ID.
      - name: notify_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID for BI leadership notification.
      steps:
      - name: trigger-refresh
        type: call
        call: tableau.refresh-workbook
        with:
          site_id: '{{site_id}}'
          workbook_id: '{{workbook_id}}'
      - name: notify-bi-leaders
        type: call
        call: msteams-bi.post-message
        with:
          channel_id: '{{notify_channel_id}}'
          text: 'Payment KPI dashboard refresh complete. Workbook: {{workbook_id}}, Job: {{trigger-refresh.job_id}}, Status: {{trigger-refresh.status}}.'
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://tableau.visa.com/api/2.8
    authentication:
      type: apikey
      key: X-Tableau-Auth
      value: $secrets.tableau_token
      placement: header
    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
  - type: http
    namespace: msteams-bi
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → tableau-payment-kpi-dashboard-refresh.yml

Generates a QBR report from Snowflake analytics, creates a Salesforce activity record, and posts highlights to Slack.

naftiko: '0.5'
info:
  label: Visa Quarterly Business Review Generator
  description: Generates a QBR report from Snowflake analytics, creates a Salesforce activity record, and posts highlights to Slack.
  tags:
  - payments
  - snowflake
  - salesforce
  - slack
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: visa_quarterly_busin
    port: 8080
    tools:
    - name: handle-event
      description: Generates a QBR report from Snowflake analytics, creates a Salesforce activity record, and posts highlights to Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[payments] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: payments-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-quarterly-business-review-generator.yml

When a Splunk fraud detection alert fires, creates a CrowdStrike investigation, opens a P1 ServiceNow security incident, and pages the fraud operations team via PagerDuty.

naftiko: '0.5'
info:
  label: Fraud Alert Investigation Handler
  description: When a Splunk fraud detection alert fires, creates a CrowdStrike investigation, opens a P1 ServiceNow security incident, and pages the fraud operations team via PagerDuty.
  tags:
  - security
  - fraud
  - splunk
  - crowdstrike
  - servicenow
  - pagerduty
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: fraud-ops
    port: 8080
    tools:
    - name: handle-fraud-alert
      description: Given a Splunk fraud alert ID and affected account or entity, create a CrowdStrike detection, open a P1 ServiceNow security incident, and trigger PagerDuty for the fraud ops team.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The Splunk alert ID or correlation search ID.
      - name: entity_id
        in: body
        type: string
        description: The affected account, card, or entity identifier.
      - name: fraud_type
        in: body
        type: string
        description: Type of fraud detected (e.g., account_takeover, card_not_present, identity_theft).
      - name: severity
        in: body
        type: string
        description: 'Alert severity: critical, high, or medium.'
      steps:
      - name: get-alert-details
        type: call
        call: splunk.get-alert-results
        with:
          alert_id: '{{alert_id}}'
      - name: create-cs-detection
        type: call
        call: crowdstrike.create-detection
        with:
          hostname: fraud-ops-investigation
          description: 'Fraud event {{fraud_type}} for entity {{entity_id}}. Splunk alert: {{alert_id}}.'
      - name: create-p1-incident
        type: call
        call: servicenow-fraud.create-incident
        with:
          short_description: '[{{severity}}] Fraud alert: {{fraud_type}} — entity {{entity_id}}'
          description: 'Splunk alert {{alert_id}} detected {{fraud_type}} for {{entity_id}}. CrowdStrike detection: {{create-cs-detection.detection_id}}. Details: {{get-alert-details.results}}'
          category: fraud_investigation
          urgency: '1'
      - name: page-fraud-team
        type: call
        call: pagerduty.create-incident
        with:
          title: 'Fraud Alert: {{fraud_type}} — {{entity_id}}'
          body: 'ServiceNow: {{create-p1-incident.number}}. CrowdStrike: {{create-cs-detection.detection_id}}. Splunk: {{alert_id}}.'
          service_id: FRAUD_OPS_SERVICE
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.visa.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: alert-results
      path: /search/jobs/{{alert_id}}/results
      inputParameters:
      - name: alert_id
        in: path
      operations:
      - name: get-alert-results
        method: GET
  - type: http
    namespace: crowdstrike
    baseUri: https://api.crowdstrike.com
    authentication:
      type: bearer
      token: $secrets.crowdstrike_token
    resources:
    - name: detections
      path: /detects/entities/detects/v2
      operations:
      - name: create-detection
        method: PATCH
  - type: http
    namespace: servicenow-fraud
    baseUri: https://visa.service-now.com/api/now
    authentication:
      type: 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_token
      placement: header
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → fraud-alert-investigation-handler.yml

When encryption keys approach expiration, triggers rotation, creates a ServiceNow change request, and notifies the security team via Slack.

naftiko: '0.5'
info:
  label: Visa Encryption Key Rotation Workflow
  description: When encryption keys approach expiration, triggers rotation, creates a ServiceNow change request, and notifies the security team via Slack.
  tags:
  - security
  - servicenow
  - slack
  - encryption
capability:
  exposes:
  - type: mcp
    namespace: visa_encryption_key_
    port: 8080
    tools:
    - name: handle-event
      description: When encryption keys approach expiration, triggers rotation, creates a ServiceNow change request, and notifies the security team via Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[security] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: security-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-encryption-key-rotation-workflow.yml

Returns merchant category, location, and transaction history from Snowflake.

naftiko: '0.5'
info:
  label: Visa Merchant Detail Lookup
  description: Returns merchant category, location, and transaction history from Snowflake.
  tags:
  - payments
  - snowflake
  - merchants
capability:
  exposes:
  - type: mcp
    namespace: visa_merchant_detail
    port: 8080
    tools:
    - name: query-data
      description: Returns merchant category, location, and transaction history from Snowflake.
      inputParameters:
      - name: query_param
        in: body
        type: string
        description: The query parameter.
      call: snowflake-api.run-query
      with:
        query_param: '{{query_param}}'
      outputParameters:
      - name: results
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → visa-merchant-detail-lookup.yml

When debit routing anomalies are detected in Snowflake, creates a Jira investigation task and alerts the debit network team via Slack.

naftiko: '0.5'
info:
  label: Visa Debit Network Routing Alert
  description: When debit routing anomalies are detected in Snowflake, creates a Jira investigation task and alerts the debit network team via Slack.
  tags:
  - payments
  - snowflake
  - jira
  - slack
  - debit
capability:
  exposes:
  - type: mcp
    namespace: visa_debit_network_r
    port: 8080
    tools:
    - name: handle-event
      description: When debit routing anomalies are detected in Snowflake, creates a Jira investigation task and alerts the debit network team via Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[payments] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: payments-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-debit-network-routing-alert.yml

When a partner exceeds API rate limits, logs the event in Splunk, creates a Jira ticket, and notifies the developer relations team via Slack.

naftiko: '0.5'
info:
  label: Visa API Rate Limit Breach Handler
  description: When a partner exceeds API rate limits, logs the event in Splunk, creates a Jira ticket, and notifies the developer relations team via Slack.
  tags:
  - api-management
  - splunk
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: visa_api_rate_limit_
    port: 8080
    tools:
    - name: handle-event
      description: When a partner exceeds API rate limits, logs the event in Splunk, creates a Jira ticket, and notifies the developer relations team via Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[api-management] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: api-management-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-api-rate-limit-breach-handler.yml

When settlement reconciliation detects a mismatch, queries Snowflake for details, creates a Jira ticket, and alerts finance via Slack.

naftiko: '0.5'
info:
  label: Visa Settlement Reconciliation Alert
  description: When settlement reconciliation detects a mismatch, queries Snowflake for details, creates a Jira ticket, and alerts finance via Slack.
  tags:
  - payments
  - snowflake
  - jira
  - slack
  - settlements
capability:
  exposes:
  - type: mcp
    namespace: visa_settlement_reco
    port: 8080
    tools:
    - name: handle-event
      description: When settlement reconciliation detects a mismatch, queries Snowflake for details, creates a Jira ticket, and alerts finance via Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[payments] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: payments-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-settlement-reconciliation-alert.yml

Queries cross-border transaction volumes by corridor from Snowflake.

naftiko: '0.5'
info:
  label: Snowflake Cross-Border Volume Query
  description: Queries cross-border transaction volumes by corridor from Snowflake.
  tags:
  - payments
  - snowflake
  - cross-border
capability:
  exposes:
  - type: mcp
    namespace: snowflake_cross_bord
    port: 8080
    tools:
    - name: query-data
      description: Queries cross-border transaction volumes by corridor from Snowflake.
      inputParameters:
      - name: query_param
        in: body
        type: string
        description: The query parameter.
      call: snowflake-api.run-query
      with:
        query_param: '{{query_param}}'
      outputParameters:
      - name: results
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → snowflake-cross-border-volume-query.yml

When CrowdStrike detects a new threat, queries Splunk for exposure, creates a ServiceNow incident, and pages the CSIRT team.

naftiko: '0.5'
info:
  label: Visa Cybersecurity Threat Intelligence Handler
  description: When CrowdStrike detects a new threat, queries Splunk for exposure, creates a ServiceNow incident, and pages the CSIRT team.
  tags:
  - security
  - crowdstrike
  - splunk
  - servicenow
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: visa_cybersecurity_t
    port: 8080
    tools:
    - name: handle-event
      description: When CrowdStrike detects a new threat, queries Splunk for exposure, creates a ServiceNow incident, and pages the CSIRT team.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[security] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: security-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-cybersecurity-threat-intelligence-handler.yml

When tokens approach expiration, queries Snowflake for affected issuers, creates a Jira renewal task, and notifies the digital payments team.

naftiko: '0.5'
info:
  label: Visa Token Lifecycle Management Alert
  description: When tokens approach expiration, queries Snowflake for affected issuers, creates a Jira renewal task, and notifies the digital payments team.
  tags:
  - payments
  - snowflake
  - jira
  - slack
  - tokenization
capability:
  exposes:
  - type: mcp
    namespace: visa_token_lifecycle
    port: 8080
    tools:
    - name: handle-event
      description: When tokens approach expiration, queries Snowflake for affected issuers, creates a Jira renewal task, and notifies the digital payments team.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[payments] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: payments-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-token-lifecycle-management-alert.yml

When ISO 8583 message validation errors spike, queries Splunk for patterns, creates a Jira ticket, and alerts the integration team via Slack.

naftiko: '0.5'
info:
  label: Visa ISO Message Format Validation Alert
  description: When ISO 8583 message validation errors spike, queries Splunk for patterns, creates a Jira ticket, and alerts the integration team via Slack.
  tags:
  - payments
  - splunk
  - jira
  - slack
  - iso-8583
capability:
  exposes:
  - type: mcp
    namespace: visa_iso_message_for
    port: 8080
    tools:
    - name: handle-event
      description: When ISO 8583 message validation errors spike, queries Splunk for patterns, creates a Jira ticket, and alerts the integration team via Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[payments] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: payments-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-iso-message-format-validation-alert.yml

Queries Snowflake for fraud detection metrics including false positive rates.

naftiko: '0.5'
info:
  label: Snowflake Fraud Metrics Query
  description: Queries Snowflake for fraud detection metrics including false positive rates.
  tags:
  - security
  - snowflake
  - fraud-detection
capability:
  exposes:
  - type: mcp
    namespace: snowflake_fraud_metr
    port: 8080
    tools:
    - name: query-data
      description: Queries Snowflake for fraud detection metrics including false positive rates.
      inputParameters:
      - name: query_param
        in: body
        type: string
        description: The query parameter.
      call: snowflake-api.run-query
      with:
        query_param: '{{query_param}}'
      outputParameters:
      - name: results
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → snowflake-fraud-metrics-query.yml

Queries Snowflake for daily settlement totals by currency and network.

naftiko: '0.5'
info:
  label: Snowflake Settlement Report Query
  description: Queries Snowflake for daily settlement totals by currency and network.
  tags:
  - payments
  - snowflake
  - settlements
capability:
  exposes:
  - type: mcp
    namespace: snowflake_settlement
    port: 8080
    tools:
    - name: query-data
      description: Queries Snowflake for daily settlement totals by currency and network.
      inputParameters:
      - name: query_param
        in: body
        type: string
        description: The query parameter.
      call: snowflake-api.run-query
      with:
        query_param: '{{query_param}}'
      outputParameters:
      - name: results
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → snowflake-settlement-report-query.yml

Enriches Salesforce issuer account records with transaction health scores from Snowflake to provide account managers with a real-time view of relationship health.

naftiko: '0.5'
info:
  label: Salesforce Issuer Relationship Health Dashboard Sync
  description: Enriches Salesforce issuer account records with transaction health scores from Snowflake to provide account managers with a real-time view of relationship health.
  tags:
  - crm
  - salesforce
  - snowflake
  - customer-success
  - data-enrichment
  - payments
capability:
  exposes:
  - type: mcp
    namespace: issuer-health-sync
    port: 8080
    tools:
    - name: sync-issuer-health-score
      description: Given a Salesforce account ID and issuer BIN range, query Snowflake for transaction health KPIs and update the Salesforce account with a calculated health score.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Salesforce issuer account ID (18-character).
      - name: bin_range
        in: body
        type: string
        description: Bank Identification Number (BIN) range for the issuer.
      steps:
      - name: get-transaction-kpis
        type: call
        call: snowflake-issuer.execute-query
        with:
          statement: SELECT avg_approval_rate, decline_rate, dispute_rate, transaction_volume FROM payments.issuer_health WHERE bin_range = '{{bin_range}}' AND report_date = CURRENT_DATE
      - name: update-sf-account
        type: call
        call: salesforce-issuers.update-account
        with:
          account_id: '{{account_id}}'
          approval_rate__c: '{{get-transaction-kpis.avg_approval_rate}}'
          decline_rate__c: '{{get-transaction-kpis.decline_rate}}'
          dispute_rate__c: '{{get-transaction-kpis.dispute_rate}}'
  consumes:
  - type: http
    namespace: snowflake-issuer
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: salesforce-issuers
    baseUri: https://visa.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: update-account
        method: PATCH
Open in Framework → View in Fleet → salesforce-issuer-relationship-health-dashboard-sync.yml

Returns issuer bank account details from Salesforce including relationship tier and volume.

naftiko: '0.5'
info:
  label: Salesforce Issuer Account Lookup
  description: Returns issuer bank account details from Salesforce including relationship tier and volume.
  tags:
  - payments
  - salesforce
  - issuers
capability:
  exposes:
  - type: mcp
    namespace: salesforce_issuer_ac
    port: 8080
    tools:
    - name: query-data
      description: Returns issuer bank account details from Salesforce including relationship tier and volume.
      inputParameters:
      - name: query_param
        in: body
        type: string
        description: The query parameter.
      call: snowflake-api.run-query
      with:
        query_param: '{{query_param}}'
      outputParameters:
      - name: results
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → salesforce-issuer-account-lookup.yml

Monitors Datadog SLOs for Visa's payment authorization and settlement services and creates P1 ServiceNow incidents when SLO compliance drops below the defined threshold.

naftiko: '0.5'
info:
  label: Datadog Payment Processing SLO Monitor
  description: Monitors Datadog SLOs for Visa's payment authorization and settlement services and creates P1 ServiceNow incidents when SLO compliance drops below the defined threshold.
  tags:
  - observability
  - datadog
  - servicenow
  - slo
  - payment-processing
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: payment-slo-monitor
    port: 8080
    tools:
    - name: check-payment-slo-compliance
      description: Fetch SLO compliance data from Datadog for payment processing services and create a P1 ServiceNow incident if compliance drops below the threshold. Use for continuous payment SLO monitoring.
      inputParameters:
      - name: slo_id
        in: body
        type: string
        description: The Datadog SLO ID for the payment service to check.
      - name: compliance_threshold
        in: body
        type: number
        description: Minimum acceptable SLO compliance percentage (e.g., 99.9).
      - name: timeframe
        in: body
        type: string
        description: 'Compliance check window: 7d, 30d.'
      steps:
      - name: get-slo-status
        type: call
        call: datadog.get-slo-history
        with:
          slo_id: '{{slo_id}}'
          timeframe: '{{timeframe}}'
      - name: create-p1-incident
        type: call
        call: servicenow-slo.create-incident
        with:
          short_description: 'Payment SLO breach: {{slo_id}} below {{compliance_threshold}}%'
          description: Datadog SLO {{slo_id}} compliance dropped to {{get-slo-status.overall_compliance}}%, below threshold of {{compliance_threshold}}%. Immediate remediation required.
          urgency: '1'
          impact: '1'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: slo-history
      path: /slo/history
      operations:
      - name: get-slo-history
        method: GET
  - type: http
    namespace: servicenow-slo
    baseUri: https://visa.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → datadog-payment-processing-slo-monitor.yml

When 3D Secure authentication failure rates spike, queries Snowflake for issuer patterns, creates a Jira ticket, and alerts the authentication team.

naftiko: '0.5'
info:
  label: Visa 3DS Authentication Failure Handler
  description: When 3D Secure authentication failure rates spike, queries Snowflake for issuer patterns, creates a Jira ticket, and alerts the authentication team.
  tags:
  - payments
  - snowflake
  - jira
  - slack
  - 3ds
capability:
  exposes:
  - type: mcp
    namespace: visa_3ds_authenticat
    port: 8080
    tools:
    - name: handle-event
      description: When 3D Secure authentication failure rates spike, queries Snowflake for issuer patterns, creates a Jira ticket, and alerts the authentication team.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[payments] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: payments-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-3ds-authentication-failure-handler.yml

When a transaction anomaly is detected, queries Splunk for details, creates a ServiceNow incident, and pages the fraud team via PagerDuty.

naftiko: '0.5'
info:
  label: Visa Transaction Anomaly Investigation
  description: When a transaction anomaly is detected, queries Splunk for details, creates a ServiceNow incident, and pages the fraud team via PagerDuty.
  tags:
  - payments
  - splunk
  - servicenow
  - pagerduty
  - fraud
capability:
  exposes:
  - type: mcp
    namespace: visa_transaction_ano
    port: 8080
    tools:
    - name: handle-event
      description: When a transaction anomaly is detected, queries Splunk for details, creates a ServiceNow incident, and pages the fraud team via PagerDuty.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[payments] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: payments-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-transaction-anomaly-investigation.yml

Tracks Click to Pay enrollment metrics from Snowflake, updates Salesforce issuer records, and posts weekly growth stats to Slack.

naftiko: '0.5'
info:
  label: Visa Click-to-Pay Enrollment Tracker
  description: Tracks Click to Pay enrollment metrics from Snowflake, updates Salesforce issuer records, and posts weekly growth stats to Slack.
  tags:
  - payments
  - snowflake
  - salesforce
  - slack
  - digital-payments
capability:
  exposes:
  - type: mcp
    namespace: visa_click_to_pay_en
    port: 8080
    tools:
    - name: handle-event
      description: Tracks Click to Pay enrollment metrics from Snowflake, updates Salesforce issuer records, and posts weekly growth stats to Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[payments] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: payments-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-click-to-pay-enrollment-tracker.yml

When an employee changes roles in Workday, updates their Okta group memberships to provision access for new applications and deprovision access for previous role applications.

naftiko: '0.5'
info:
  label: Okta Application Provisioning for New Role
  description: When an employee changes roles in Workday, updates their Okta group memberships to provision access for new applications and deprovision access for previous role applications.
  tags:
  - identity
  - hr
  - okta
  - workday
  - access-management
  - role-change
capability:
  exposes:
  - type: mcp
    namespace: role-based-provisioning
    port: 8080
    tools:
    - name: reprovision-access-for-role-change
      description: Given a Workday employee ID, new role group ID, and previous role group ID in Okta, remove the employee from the old group and add them to the new group to align application access with their new role.
      inputParameters:
      - name: employee_email
        in: body
        type: string
        description: Work email address of the employee changing roles.
      - name: new_role_group_id
        in: body
        type: string
        description: Okta group ID for the new role's application access.
      - name: previous_role_group_id
        in: body
        type: string
        description: Okta group ID for the previous role's application access.
      steps:
      - name: get-okta-user
        type: call
        call: okta-user.get-user
        with:
          login: '{{employee_email}}'
      - name: remove-old-group
        type: call
        call: okta-groups-remove.remove-user-from-group
        with:
          group_id: '{{previous_role_group_id}}'
          user_id: '{{get-okta-user.id}}'
      - name: add-new-group
        type: call
        call: okta-groups-add.add-user-to-group
        with:
          group_id: '{{new_role_group_id}}'
          user_id: '{{get-okta-user.id}}'
  consumes:
  - type: http
    namespace: okta-user
    baseUri: https://visa.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_token
      placement: header
    resources:
    - name: users
      path: /users/{{login}}
      inputParameters:
      - name: login
        in: path
      operations:
      - name: get-user
        method: GET
  - type: http
    namespace: okta-groups-remove
    baseUri: https://visa.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_token
      placement: header
    resources:
    - name: group-members
      path: /groups/{{group_id}}/users/{{user_id}}
      inputParameters:
      - name: group_id
        in: path
      - name: user_id
        in: path
      operations:
      - name: remove-user-from-group
        method: DELETE
  - type: http
    namespace: okta-groups-add
    baseUri: https://visa.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_token
      placement: header
    resources:
    - name: group-members
      path: /groups/{{group_id}}/users/{{user_id}}
      inputParameters:
      - name: group_id
        in: path
      - name: user_id
        in: path
      operations:
      - name: add-user-to-group
        method: PUT
Open in Framework → View in Fleet → okta-application-provisioning-for-new-role.yml

Retrieves payment API specification documentation from Confluence.

naftiko: '0.5'
info:
  label: Confluence Payment Spec Lookup
  description: Retrieves payment API specification documentation from Confluence.
  tags:
  - documentation
  - confluence
  - api-specs
capability:
  exposes:
  - type: mcp
    namespace: confluence_payment_s
    port: 8080
    tools:
    - name: query-data
      description: Retrieves payment API specification documentation from Confluence.
      inputParameters:
      - name: query_param
        in: body
        type: string
        description: The query parameter.
      call: snowflake-api.run-query
      with:
        query_param: '{{query_param}}'
      outputParameters:
      - name: results
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → confluence-payment-spec-lookup.yml

When a new fraud rule is approved, deploys to production, verifies via Datadog, logs in ServiceNow, and notifies the fraud team via Slack.

naftiko: '0.5'
info:
  label: Visa Payment Fraud Rule Deployment
  description: When a new fraud rule is approved, deploys to production, verifies via Datadog, logs in ServiceNow, and notifies the fraud team via Slack.
  tags:
  - security
  - datadog
  - servicenow
  - slack
  - fraud-detection
capability:
  exposes:
  - type: mcp
    namespace: visa_payment_fraud_r
    port: 8080
    tools:
    - name: handle-event
      description: When a new fraud rule is approved, deploys to production, verifies via Datadog, logs in ServiceNow, and notifies the fraud team via Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[security] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: security-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-payment-fraud-rule-deployment.yml

Queries Snowflake for chargeback rates by merchant category and region.

naftiko: '0.5'
info:
  label: Visa Chargeback Rate Query
  description: Queries Snowflake for chargeback rates by merchant category and region.
  tags:
  - payments
  - snowflake
  - chargebacks
capability:
  exposes:
  - type: mcp
    namespace: visa_chargeback_rate
    port: 8080
    tools:
    - name: query-data
      description: Queries Snowflake for chargeback rates by merchant category and region.
      inputParameters:
      - name: query_param
        in: body
        type: string
        description: The query parameter.
      call: snowflake-api.run-query
      with:
        query_param: '{{query_param}}'
      outputParameters:
      - name: results
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → visa-chargeback-rate-query.yml

Updates Salesforce account records with the latest NPS survey scores and verbatim comments to enable account teams to identify at-risk relationships.

naftiko: '0.5'
info:
  label: Salesforce Account NPS Update
  description: Updates Salesforce account records with the latest NPS survey scores and verbatim comments to enable account teams to identify at-risk relationships.
  tags:
  - crm
  - customer-success
  - salesforce
  - nps
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: crm-nps
    port: 8080
    tools:
    - name: update-account-nps
      description: Given a Salesforce account ID, NPS score, and comment, update the account record with the latest survey result. Use after NPS surveys are completed by banking or merchant partners.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID (18-character).
      - name: nps_score
        in: body
        type: integer
        description: The NPS score (0–10).
      - name: nps_comment
        in: body
        type: string
        description: Verbatim NPS comment from the partner.
      - name: survey_date
        in: body
        type: string
        description: Date of the NPS survey in YYYY-MM-DD format.
      call: salesforce-nps.update-account
      with:
        account_id: '{{account_id}}'
        nps_score__c: '{{nps_score}}'
        nps_comment__c: '{{nps_comment}}'
        nps_date__c: '{{survey_date}}'
  consumes:
  - type: http
    namespace: salesforce-nps
    baseUri: https://visa.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: update-account
        method: PATCH
Open in Framework → View in Fleet → salesforce-account-nps-update.yml

Returns the last refresh status and time for payment KPI dashboards.

naftiko: '0.5'
info:
  label: Tableau Payment Dashboard Refresh Status
  description: Returns the last refresh status and time for payment KPI dashboards.
  tags:
  - analytics
  - tableau
  - dashboards
capability:
  exposes:
  - type: mcp
    namespace: tableau_payment_dash
    port: 8080
    tools:
    - name: query-data
      description: Returns the last refresh status and time for payment KPI dashboards.
      inputParameters:
      - name: query_param
        in: body
        type: string
        description: The query parameter.
      call: snowflake-api.run-query
      with:
        query_param: '{{query_param}}'
      outputParameters:
      - name: results
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → tableau-payment-dashboard-refresh-status.yml

Monitors real-time payment processing metrics from Datadog, creates PagerDuty alerts for anomalies, and posts status to Slack.

naftiko: '0.5'
info:
  label: Visa Real-Time Payment Monitoring
  description: Monitors real-time payment processing metrics from Datadog, creates PagerDuty alerts for anomalies, and posts status to Slack.
  tags:
  - payments
  - datadog
  - pagerduty
  - slack
  - real-time
capability:
  exposes:
  - type: mcp
    namespace: visa_real_time_payme
    port: 8080
    tools:
    - name: handle-event
      description: Monitors real-time payment processing metrics from Datadog, creates PagerDuty alerts for anomalies, and posts status to Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[payments] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: payments-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-real-time-payment-monitoring.yml

Monitors GitHub Dependabot critical vulnerability alerts across Visa's payment platform repositories and creates ServiceNow security incidents for immediate remediation.

naftiko: '0.5'
info:
  label: GitHub Dependabot Critical Vulnerability Triage
  description: Monitors GitHub Dependabot critical vulnerability alerts across Visa's payment platform repositories and creates ServiceNow security incidents for immediate remediation.
  tags:
  - security
  - github
  - servicenow
  - vulnerability
  - dependency-management
  - pci-dss
capability:
  exposes:
  - type: mcp
    namespace: vuln-triage
    port: 8080
    tools:
    - name: triage-critical-vulnerability
      description: Given a GitHub repository and Dependabot alert number, create a ServiceNow security incident for critical vulnerability tracking and assign it to the platform security team.
      inputParameters:
      - name: repository
        in: body
        type: string
        description: GitHub repository in owner/repo format.
      - name: alert_number
        in: body
        type: integer
        description: Dependabot alert number.
      steps:
      - name: get-alert
        type: call
        call: github-dep.get-dependabot-alert
        with:
          repo: '{{repository}}'
          alert_number: '{{alert_number}}'
      - name: create-snow-incident
        type: call
        call: servicenow-dep.create-incident
        with:
          short_description: 'Critical vulnerability: {{get-alert.security_advisory.cve_id}} in {{repository}}'
          description: 'Package: {{get-alert.dependency.package.name}}. CVE: {{get-alert.security_advisory.cve_id}}. CVSS: {{get-alert.security_advisory.cvss_score}}. Requires remediation within SLA.'
          category: security
          urgency: '1'
  consumes:
  - type: http
    namespace: github-dep
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: dependabot-alerts
      path: /repos/{{repo}}/dependabot/alerts/{{alert_number}}
      inputParameters:
      - name: repo
        in: path
      - name: alert_number
        in: path
      operations:
      - name: get-dependabot-alert
        method: GET
  - type: http
    namespace: servicenow-dep
    baseUri: https://visa.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → github-dependabot-critical-vulnerability-triage.yml

When Datadog detects network latency spikes, queries Snowflake for affected corridors, creates a Jira ticket, and alerts the network team.

naftiko: '0.5'
info:
  label: Visa Payment Network Latency Investigation
  description: When Datadog detects network latency spikes, queries Snowflake for affected corridors, creates a Jira ticket, and alerts the network team.
  tags:
  - infrastructure
  - datadog
  - snowflake
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: visa_payment_network
    port: 8080
    tools:
    - name: handle-event
      description: When Datadog detects network latency spikes, queries Snowflake for affected corridors, creates a Jira ticket, and alerts the network team.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[infrastructure] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: infrastructure-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-payment-network-latency-investigation.yml

When a regulatory deadline approaches, queries Snowflake for required data, creates a Jira task, and notifies the legal team via Slack.

naftiko: '0.5'
info:
  label: Visa Regulatory Filing Workflow
  description: When a regulatory deadline approaches, queries Snowflake for required data, creates a Jira task, and notifies the legal team via Slack.
  tags:
  - compliance
  - snowflake
  - jira
  - slack
  - regulatory
capability:
  exposes:
  - type: mcp
    namespace: visa_regulatory_fili
    port: 8080
    tools:
    - name: handle-event
      description: When a regulatory deadline approaches, queries Snowflake for required data, creates a Jira task, and notifies the legal team via Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[compliance] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: compliance-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-regulatory-filing-workflow.yml

Monitors PSD2 SCA compliance rates from Snowflake, creates Jira tickets for non-compliant issuers, and alerts the European operations team.

naftiko: '0.5'
info:
  label: Visa PSD2 Compliance Monitoring
  description: Monitors PSD2 SCA compliance rates from Snowflake, creates Jira tickets for non-compliant issuers, and alerts the European operations team.
  tags:
  - compliance
  - snowflake
  - jira
  - slack
  - psd2
capability:
  exposes:
  - type: mcp
    namespace: visa_psd2_compliance
    port: 8080
    tools:
    - name: handle-event
      description: Monitors PSD2 SCA compliance rates from Snowflake, creates Jira tickets for non-compliant issuers, and alerts the European operations team.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[compliance] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: compliance-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-psd2-compliance-monitoring.yml

Queries Snowflake for prepaid program health metrics, updates Salesforce records, and posts a health summary to Slack.

naftiko: '0.5'
info:
  label: Visa Prepaid Card Program Health Check
  description: Queries Snowflake for prepaid program health metrics, updates Salesforce records, and posts a health summary to Slack.
  tags:
  - payments
  - snowflake
  - salesforce
  - slack
  - prepaid
capability:
  exposes:
  - type: mcp
    namespace: visa_prepaid_card_pr
    port: 8080
    tools:
    - name: handle-event
      description: Queries Snowflake for prepaid program health metrics, updates Salesforce records, and posts a health summary to Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[payments] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: payments-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-prepaid-card-program-health-check.yml

Tracks terminal certification status from Snowflake, creates Jira tasks for expiring certifications, and notifies the terminal team via Slack.

naftiko: '0.5'
info:
  label: Visa Payment Terminal Certification Tracker
  description: Tracks terminal certification status from Snowflake, creates Jira tasks for expiring certifications, and notifies the terminal team via Slack.
  tags:
  - payments
  - snowflake
  - jira
  - slack
  - terminals
capability:
  exposes:
  - type: mcp
    namespace: visa_payment_termina
    port: 8080
    tools:
    - name: handle-event
      description: Tracks terminal certification status from Snowflake, creates Jira tasks for expiring certifications, and notifies the terminal team via Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[payments] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: payments-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-payment-terminal-certification-tracker.yml

Assigns mandatory PCI-DSS and AML compliance training in Workday Learning to employees based on their role and tracks completion via a ServiceNow monitoring task.

naftiko: '0.5'
info:
  label: Workday Learning Compliance Assignment
  description: Assigns mandatory PCI-DSS and AML compliance training in Workday Learning to employees based on their role and tracks completion via a ServiceNow monitoring task.
  tags:
  - hr
  - learning
  - compliance
  - workday
  - servicenow
  - pci-dss
capability:
  exposes:
  - type: mcp
    namespace: compliance-learning
    port: 8080
    tools:
    - name: assign-compliance-training
      description: Given an employee ID and training course ID, assign the mandatory compliance course in Workday Learning and create a ServiceNow tracking task for completion monitoring.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      - name: course_id
        in: body
        type: string
        description: Workday Learning course ID to assign.
      - name: due_date
        in: body
        type: string
        description: Training completion due date in YYYY-MM-DD format.
      - name: compliance_type
        in: body
        type: string
        description: Compliance category (e.g., PCI-DSS, AML, GDPR, Ethics).
      steps:
      - name: assign-course
        type: call
        call: workday-lms.assign-learning
        with:
          worker_id: '{{employee_id}}'
          course_id: '{{course_id}}'
          due_date: '{{due_date}}'
      - name: create-tracking-task
        type: call
        call: servicenow-learning.create-task
        with:
          short_description: '{{compliance_type}} training assigned to employee {{employee_id}}'
          description: 'Course {{course_id}} assigned. Compliance type: {{compliance_type}}. Due: {{due_date}}.'
          due_date: '{{due_date}}'
  consumes:
  - type: http
    namespace: workday-lms
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: learning-assignments
      path: /learningCourseTopics
      operations:
      - name: assign-learning
        method: POST
  - type: http
    namespace: servicenow-learning
    baseUri: https://visa.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → workday-learning-compliance-assignment.yml

When a PagerDuty incident escalates to a critical severity, automatically creates a corresponding ServiceNow P1 incident and notifies the incident commander via Microsoft Teams.

naftiko: '0.5'
info:
  label: PagerDuty Incident Escalation to ServiceNow
  description: When a PagerDuty incident escalates to a critical severity, automatically creates a corresponding ServiceNow P1 incident and notifies the incident commander via Microsoft Teams.
  tags:
  - itsm
  - incident-response
  - pagerduty
  - servicenow
  - microsoft-teams
  - escalation
capability:
  exposes:
  - type: mcp
    namespace: incident-escalation
    port: 8080
    tools:
    - name: escalate-pagerduty-incident
      description: Given a PagerDuty incident ID, fetch its details, create a P1 ServiceNow incident, and notify the incident commander via Teams. Use when on-call escalation reaches critical severity.
      inputParameters:
      - name: pagerduty_incident_id
        in: body
        type: string
        description: The PagerDuty incident ID to escalate.
      - name: incident_commander_upn
        in: body
        type: string
        description: UPN of the incident commander to notify via Teams.
      steps:
      - name: get-pd-incident
        type: call
        call: pagerduty.get-incident
        with:
          incident_id: '{{pagerduty_incident_id}}'
      - name: create-snow-incident
        type: call
        call: servicenow-p1.create-incident
        with:
          short_description: 'P1 Escalation: {{get-pd-incident.title}}'
          description: 'PagerDuty incident {{pagerduty_incident_id}} escalated. Service: {{get-pd-incident.service.name}}. Status: {{get-pd-incident.status}}.'
          urgency: '1'
          impact: '1'
      - name: notify-ic
        type: call
        call: msteams-ic.send-message
        with:
          recipient_upn: '{{incident_commander_upn}}'
          text: 'P1 Incident Escalated: {{get-pd-incident.title}}. ServiceNow: {{create-snow-incident.number}}. PagerDuty: {{pagerduty_incident_id}}. Bridge required immediately.'
  consumes:
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incidents
      path: /incidents/{{incident_id}}
      inputParameters:
      - name: incident_id
        in: path
      operations:
      - name: get-incident
        method: GET
  - type: http
    namespace: servicenow-p1
    baseUri: https://visa.service-now.com/api/now
    authentication:
      type: 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-ic
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → pagerduty-incident-escalation-to-servicenow.yml

When interchange rates are updated, queries Snowflake for affected merchants, creates Jira notification tasks, and alerts the pricing team via Slack.

naftiko: '0.5'
info:
  label: Visa Interchange Rate Update Workflow
  description: When interchange rates are updated, queries Snowflake for affected merchants, creates Jira notification tasks, and alerts the pricing team via Slack.
  tags:
  - payments
  - snowflake
  - jira
  - slack
  - interchange
capability:
  exposes:
  - type: mcp
    namespace: visa_interchange_rat
    port: 8080
    tools:
    - name: handle-event
      description: When interchange rates are updated, queries Snowflake for affected merchants, creates Jira notification tasks, and alerts the pricing team via Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[payments] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: payments-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-interchange-rate-update-workflow.yml

Pulls sprint completion metrics from Jira and posts a delivery velocity digest to the product engineering Microsoft Teams channel at the end of each sprint.

naftiko: '0.5'
info:
  label: Jira Sprint Velocity and Delivery Report
  description: Pulls sprint completion metrics from Jira and posts a delivery velocity digest to the product engineering Microsoft Teams channel at the end of each sprint.
  tags:
  - devops
  - jira
  - microsoft-teams
  - reporting
  - agile
capability:
  exposes:
  - type: mcp
    namespace: agile-reporting
    port: 8080
    tools:
    - name: digest-sprint-delivery
      description: Given a Jira board ID and sprint ID, fetch sprint velocity metrics and post a delivery digest to the product engineering Teams channel.
      inputParameters:
      - name: board_id
        in: body
        type: string
        description: Jira board ID.
      - name: sprint_id
        in: body
        type: string
        description: Jira sprint ID to report on.
      - name: teams_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID for the sprint digest.
      steps:
      - name: get-sprint-data
        type: call
        call: jira.get-sprint
        with:
          board_id: '{{board_id}}'
          sprint_id: '{{sprint_id}}'
      - name: post-digest
        type: call
        call: msteams-product.post-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Sprint Digest: {{get-sprint-data.name}}. Done: {{get-sprint-data.issues_done}}, Incomplete: {{get-sprint-data.issues_not_done}}, Velocity: {{get-sprint-data.story_points_completed}} pts.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_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: msteams-product
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → jira-sprint-velocity-and-delivery-report.yml

Generates acquirer performance reports from Snowflake, updates Salesforce account records, and posts summaries to Slack.

naftiko: '0.5'
info:
  label: Visa Acquirer Performance Report
  description: Generates acquirer performance reports from Snowflake, updates Salesforce account records, and posts summaries to Slack.
  tags:
  - payments
  - snowflake
  - salesforce
  - slack
  - acquirers
capability:
  exposes:
  - type: mcp
    namespace: visa_acquirer_perfor
    port: 8080
    tools:
    - name: handle-event
      description: Generates acquirer performance reports from Snowflake, updates Salesforce account records, and posts summaries to Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[payments] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: payments-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-acquirer-performance-report.yml

When a new cross-border corridor is activated, verifies regulatory compliance via Snowflake, creates a Jira task, and notifies compliance via Slack.

naftiko: '0.5'
info:
  label: Visa Cross-Border Compliance Check
  description: When a new cross-border corridor is activated, verifies regulatory compliance via Snowflake, creates a Jira task, and notifies compliance via Slack.
  tags:
  - payments
  - snowflake
  - jira
  - slack
  - cross-border
capability:
  exposes:
  - type: mcp
    namespace: visa_cross_border_co
    port: 8080
    tools:
    - name: handle-event
      description: When a new cross-border corridor is activated, verifies regulatory compliance via Snowflake, creates a Jira task, and notifies compliance via Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[payments] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: payments-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-cross-border-compliance-check.yml

Queries Snowflake for contactless adoption metrics by region, updates Salesforce records, and posts a weekly digest to Slack.

naftiko: '0.5'
info:
  label: Visa Contactless Payment Adoption Digest
  description: Queries Snowflake for contactless adoption metrics by region, updates Salesforce records, and posts a weekly digest to Slack.
  tags:
  - payments
  - snowflake
  - salesforce
  - slack
  - contactless
capability:
  exposes:
  - type: mcp
    namespace: visa_contactless_pay
    port: 8080
    tools:
    - name: handle-event
      description: Queries Snowflake for contactless adoption metrics by region, updates Salesforce records, and posts a weekly digest to Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[payments] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: payments-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-contactless-payment-adoption-digest.yml

Returns user access permissions for payment processing systems from Okta.

naftiko: '0.5'
info:
  label: Okta Payment System Access Check
  description: Returns user access permissions for payment processing systems from Okta.
  tags:
  - security
  - okta
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: okta_payment_system_
    port: 8080
    tools:
    - name: query-data
      description: Returns user access permissions for payment processing systems from Okta.
      inputParameters:
      - name: query_param
        in: body
        type: string
        description: The query parameter.
      call: snowflake-api.run-query
      with:
        query_param: '{{query_param}}'
      outputParameters:
      - name: results
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → okta-payment-system-access-check.yml

When an API version is scheduled for deprecation, identifies active consumers from Snowflake, creates Jira migration tasks, and notifies via Slack.

naftiko: '0.5'
info:
  label: Visa Payment API Version Deprecation
  description: When an API version is scheduled for deprecation, identifies active consumers from Snowflake, creates Jira migration tasks, and notifies via Slack.
  tags:
  - api-management
  - snowflake
  - jira
  - slack
  - deprecation
capability:
  exposes:
  - type: mcp
    namespace: visa_payment_api_ver
    port: 8080
    tools:
    - name: handle-event
      description: When an API version is scheduled for deprecation, identifies active consumers from Snowflake, creates Jira migration tasks, and notifies via Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[api-management] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: api-management-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-payment-api-version-deprecation.yml

Executes Snowflake analytics queries on Visa's transaction data and delivers a formatted daily transaction volume and approval rate report to the payments leadership Teams channel.

naftiko: '0.5'
info:
  label: Snowflake Transaction Analytics Report
  description: Executes Snowflake analytics queries on Visa's transaction data and delivers a formatted daily transaction volume and approval rate report to the payments leadership Teams channel.
  tags:
  - analytics
  - snowflake
  - microsoft-teams
  - reporting
  - payments
capability:
  exposes:
  - type: mcp
    namespace: payments-analytics
    port: 8080
    tools:
    - name: digest-transaction-analytics
      description: Run a Snowflake transaction analytics query and post a daily volume and approval rate digest to the payments leadership Teams channel.
      inputParameters:
      - name: reporting_date
        in: body
        type: string
        description: The reporting date in YYYY-MM-DD format.
      - name: region
        in: body
        type: string
        description: Transaction region filter (e.g., NAP, LAP, CEMEA, AP).
      - name: teams_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID for the payments leadership team.
      steps:
      - name: run-analytics-query
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT region, SUM(transaction_count) as volume, AVG(approval_rate) as approval_rate, SUM(transaction_amount_usd) as total_value FROM payments.daily_transactions WHERE transaction_date = '{{reporting_date}}' AND region = '{{region}}' GROUP BY region
      - name: post-digest
        type: call
        call: msteams-payments.post-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Transaction Digest ({{reporting_date}}, {{region}}): Volume {{run-analytics-query.volume}}, Approval rate {{run-analytics-query.approval_rate}}%, Total value ${{run-analytics-query.total_value}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://visa.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-payments
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → snowflake-transaction-analytics-report.yml

When a potential data breach is detected, creates a ServiceNow P1 incident, pages the security team, and initiates a Splunk forensic search.

naftiko: '0.5'
info:
  label: Visa Cardholder Data Breach Response
  description: When a potential data breach is detected, creates a ServiceNow P1 incident, pages the security team, and initiates a Splunk forensic search.
  tags:
  - security
  - servicenow
  - pagerduty
  - splunk
  - data-breach
capability:
  exposes:
  - type: mcp
    namespace: visa_cardholder_data
    port: 8080
    tools:
    - name: handle-event
      description: When a potential data breach is detected, creates a ServiceNow P1 incident, pages the security team, and initiates a Splunk forensic search.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[security] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: security-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-cardholder-data-breach-response.yml

Uses Anthropic to analyze incoming regulatory compliance documents and payments industry guidelines, extracting obligations and action items stored in SharePoint for compliance teams.

naftiko: '0.5'
info:
  label: Anthropic Regulatory Document Analysis
  description: Uses Anthropic to analyze incoming regulatory compliance documents and payments industry guidelines, extracting obligations and action items stored in SharePoint for compliance teams.
  tags:
  - ai
  - compliance
  - anthropic
  - sharepoint
  - regulation
capability:
  exposes:
  - type: mcp
    namespace: regulatory-analysis
    port: 8080
    tools:
    - name: analyze-regulatory-document
      description: Given a regulatory document text, use Anthropic to extract compliance obligations, deadlines, and required actions, then store the structured analysis in SharePoint.
      inputParameters:
      - name: document_text
        in: body
        type: string
        description: The full text of the regulatory document to analyze.
      - name: document_title
        in: body
        type: string
        description: Title of the regulatory document.
      - name: sharepoint_site_id
        in: body
        type: string
        description: SharePoint site ID for the compliance document library.
      - name: regulation_type
        in: body
        type: string
        description: Type of regulation (e.g., PCI-DSS, GDPR, AML, Basel-III).
      steps:
      - name: analyze-document
        type: call
        call: anthropic.create-message
        with:
          model: claude-opus-4-5
          max_tokens: 2048
          prompt: 'Analyze this {{regulation_type}} regulatory document. Extract: 1) Key compliance obligations (bulleted list), 2) Applicable deadlines, 3) Required actions for Visa as a payment network. Be specific and concise. Document: {{document_text}}'
      - name: store-analysis
        type: call
        call: sharepoint-compliance.upload-file
        with:
          site_id: '{{sharepoint_site_id}}'
          folder_path: ComplianceAnalysis/{{regulation_type}}
          file_name: '{{document_title}}_analysis.txt'
          content: '{{analyze-document.content}}'
  consumes:
  - type: http
    namespace: anthropic
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: messages
      path: /messages
      operations:
      - name: create-message
        method: POST
  - type: http
    namespace: sharepoint-compliance
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → anthropic-regulatory-document-analysis.yml

Assesses merchant risk by querying transaction patterns from Snowflake, updates the risk score in Salesforce, and alerts the risk team via Slack.

naftiko: '0.5'
info:
  label: Visa Merchant Risk Assessment
  description: Assesses merchant risk by querying transaction patterns from Snowflake, updates the risk score in Salesforce, and alerts the risk team via Slack.
  tags:
  - payments
  - snowflake
  - salesforce
  - slack
  - risk
capability:
  exposes:
  - type: mcp
    namespace: visa_merchant_risk_a
    port: 8080
    tools:
    - name: handle-event
      description: Assesses merchant risk by querying transaction patterns from Snowflake, updates the risk score in Salesforce, and alerts the risk team via Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[payments] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: payments-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-merchant-risk-assessment.yml

Returns current headcount and open positions for payment operations from Workday.

naftiko: '0.5'
info:
  label: Workday Payment Ops Headcount
  description: Returns current headcount and open positions for payment operations from Workday.
  tags:
  - hr
  - workday
  - workforce
capability:
  exposes:
  - type: mcp
    namespace: workday_payment_ops_
    port: 8080
    tools:
    - name: query-data
      description: Returns current headcount and open positions for payment operations from Workday.
      inputParameters:
      - name: query_param
        in: body
        type: string
        description: The query parameter.
      call: snowflake-api.run-query
      with:
        query_param: '{{query_param}}'
      outputParameters:
      - name: results
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → workday-payment-ops-headcount.yml

Queries dispute resolution time and success rate metrics from Snowflake.

naftiko: '0.5'
info:
  label: Snowflake Dispute Resolution Metrics
  description: Queries dispute resolution time and success rate metrics from Snowflake.
  tags:
  - payments
  - snowflake
  - disputes
capability:
  exposes:
  - type: mcp
    namespace: snowflake_dispute_re
    port: 8080
    tools:
    - name: query-data
      description: Queries dispute resolution time and success rate metrics from Snowflake.
      inputParameters:
      - name: query_param
        in: body
        type: string
        description: The query parameter.
      call: snowflake-api.run-query
      with:
        query_param: '{{query_param}}'
      outputParameters:
      - name: results
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → snowflake-dispute-resolution-metrics.yml

Monitors real-time payment SLA compliance from Datadog, creates PagerDuty incidents for breaches, and posts status to Slack.

naftiko: '0.5'
info:
  label: Visa Instant Payment SLA Monitor
  description: Monitors real-time payment SLA compliance from Datadog, creates PagerDuty incidents for breaches, and posts status to Slack.
  tags:
  - payments
  - datadog
  - pagerduty
  - slack
  - instant-payments
capability:
  exposes:
  - type: mcp
    namespace: visa_instant_payment
    port: 8080
    tools:
    - name: handle-event
      description: Monitors real-time payment SLA compliance from Datadog, creates PagerDuty incidents for breaches, and posts status to Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[payments] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: payments-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-instant-payment-sla-monitor.yml

Returns the latest release details for a Visa payment service repository.

naftiko: '0.5'
info:
  label: GitHub Payment Service Release Lookup
  description: Returns the latest release details for a Visa payment service repository.
  tags:
  - devops
  - github
  - releases
capability:
  exposes:
  - type: mcp
    namespace: github_payment_servi
    port: 8080
    tools:
    - name: query-data
      description: Returns the latest release details for a Visa payment service repository.
      inputParameters:
      - name: query_param
        in: body
        type: string
        description: The query parameter.
      call: snowflake-api.run-query
      with:
        query_param: '{{query_param}}'
      outputParameters:
      - name: results
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → github-payment-service-release-lookup.yml

When a payment gateway health check fails, triggers failover, creates a PagerDuty incident, and notifies the NOC via Slack.

naftiko: '0.5'
info:
  label: Visa Payment Gateway Failover Handler
  description: When a payment gateway health check fails, triggers failover, creates a PagerDuty incident, and notifies the NOC via Slack.
  tags:
  - infrastructure
  - pagerduty
  - slack
  - payments
capability:
  exposes:
  - type: mcp
    namespace: visa_payment_gateway
    port: 8080
    tools:
    - name: handle-event
      description: When a payment gateway health check fails, triggers failover, creates a PagerDuty incident, and notifies the NOC via Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[infrastructure] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: infrastructure-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-payment-gateway-failover-handler.yml

When a new merchant application is received, screens against sanctions lists in Snowflake, creates a Jira compliance task, and notifies the compliance team.

naftiko: '0.5'
info:
  label: Visa Sanctions Screening Workflow
  description: When a new merchant application is received, screens against sanctions lists in Snowflake, creates a Jira compliance task, and notifies the compliance team.
  tags:
  - compliance
  - snowflake
  - jira
  - slack
  - sanctions
capability:
  exposes:
  - type: mcp
    namespace: visa_sanctions_scree
    port: 8080
    tools:
    - name: handle-event
      description: When a new merchant application is received, screens against sanctions lists in Snowflake, creates a Jira compliance task, and notifies the compliance team.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[compliance] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: compliance-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-sanctions-screening-workflow.yml

Returns status and details of a PCI compliance Jira ticket.

naftiko: '0.5'
info:
  label: Jira Compliance Ticket Lookup
  description: Returns status and details of a PCI compliance Jira ticket.
  tags:
  - compliance
  - jira
  - pci
capability:
  exposes:
  - type: mcp
    namespace: jira_compliance_tick
    port: 8080
    tools:
    - name: query-data
      description: Returns status and details of a PCI compliance Jira ticket.
      inputParameters:
      - name: query_param
        in: body
        type: string
        description: The query parameter.
      call: snowflake-api.run-query
      with:
        query_param: '{{query_param}}'
      outputParameters:
      - name: results
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → jira-compliance-ticket-lookup.yml

When payment processing latency exceeds SLA, creates a PagerDuty incident, posts to Slack, and opens a ServiceNow ticket.

naftiko: '0.5'
info:
  label: Visa Payment Processing SLA Alert
  description: When payment processing latency exceeds SLA, creates a PagerDuty incident, posts to Slack, and opens a ServiceNow ticket.
  tags:
  - payments
  - pagerduty
  - slack
  - servicenow
  - sla
capability:
  exposes:
  - type: mcp
    namespace: visa_payment_process
    port: 8080
    tools:
    - name: handle-event
      description: When payment processing latency exceeds SLA, creates a PagerDuty incident, posts to Slack, and opens a ServiceNow ticket.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[payments] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: payments-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-payment-processing-sla-alert.yml

After a major payment incident is resolved, collects timeline from ServiceNow, creates a Confluence post-mortem page, and notifies via Slack.

naftiko: '0.5'
info:
  label: Visa Incident Post-Mortem Generator
  description: After a major payment incident is resolved, collects timeline from ServiceNow, creates a Confluence post-mortem page, and notifies via Slack.
  tags:
  - operations
  - servicenow
  - confluence
  - slack
  - incident-management
capability:
  exposes:
  - type: mcp
    namespace: visa_incident_post_m
    port: 8080
    tools:
    - name: handle-event
      description: After a major payment incident is resolved, collects timeline from ServiceNow, creates a Confluence post-mortem page, and notifies via Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[operations] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: operations-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-incident-post-mortem-generator.yml

Returns the status and details of a payment processing incident from ServiceNow.

naftiko: '0.5'
info:
  label: ServiceNow Payment Incident Lookup
  description: Returns the status and details of a payment processing incident from ServiceNow.
  tags:
  - operations
  - servicenow
  - payments
capability:
  exposes:
  - type: mcp
    namespace: servicenow_payment_i
    port: 8080
    tools:
    - name: query-data
      description: Returns the status and details of a payment processing incident from ServiceNow.
      inputParameters:
      - name: query_param
        in: body
        type: string
        description: The query parameter.
      call: snowflake-api.run-query
      with:
        query_param: '{{query_param}}'
      outputParameters:
      - name: results
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → servicenow-payment-incident-lookup.yml

Returns the current on-call engineer for payment processing services.

naftiko: '0.5'
info:
  label: PagerDuty Payment On-Call Lookup
  description: Returns the current on-call engineer for payment processing services.
  tags:
  - operations
  - pagerduty
  - payments
capability:
  exposes:
  - type: mcp
    namespace: pagerduty_payment_on
    port: 8080
    tools:
    - name: query-data
      description: Returns the current on-call engineer for payment processing services.
      inputParameters:
      - name: query_param
        in: body
        type: string
        description: The query parameter.
      call: snowflake-api.run-query
      with:
        query_param: '{{query_param}}'
      outputParameters:
      - name: results
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → pagerduty-payment-on-call-lookup.yml

Monitors token provisioning rates from Snowflake, creates Jira tickets for failures, and alerts the digital payments team via Slack.

naftiko: '0.5'
info:
  label: Visa Digital Wallet Provisioning Monitor
  description: Monitors token provisioning rates from Snowflake, creates Jira tickets for failures, and alerts the digital payments team via Slack.
  tags:
  - payments
  - snowflake
  - jira
  - slack
  - tokenization
capability:
  exposes:
  - type: mcp
    namespace: visa_digital_wallet_
    port: 8080
    tools:
    - name: handle-event
      description: Monitors token provisioning rates from Snowflake, creates Jira tickets for failures, and alerts the digital payments team via Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[payments] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: payments-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-digital-wallet-provisioning-monitor.yml

Looks up an Oracle ERP purchase order by number and returns structured header status, supplier details, and line item amounts.

naftiko: '0.5'
info:
  label: Oracle ERP Purchase Order Lookup
  description: Looks up an Oracle ERP purchase order by number and returns structured header status, supplier details, and line item amounts.
  tags:
  - finance
  - procurement
  - oracle
  - purchase-order
capability:
  exposes:
  - type: mcp
    namespace: erp-procurement
    port: 8080
    tools:
    - name: get-purchase-order
      description: Look up an Oracle Cloud ERP purchase order by PO number. Returns status, supplier name, total value, and currency. Use for procurement status checks and invoice validation.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: The Oracle purchase order number.
      call: oracle-po.get-purchase-order
      with:
        po_number: '{{po_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: supplier
        type: string
        mapping: $.supplier.SupplierName
      - name: total_amount
        type: string
        mapping: $.orderAmount
      - name: currency
        type: string
        mapping: $.currencyCode
  consumes:
  - type: http
    namespace: oracle-po
    baseUri: https://visa.fa.us2.oraclecloud.com/fscmRestApi/resources/11.13.18.05
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: purchase-orders
      path: /purchaseOrders/{{po_number}}
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-purchase-order
        method: GET
Open in Framework → View in Fleet → oracle-erp-purchase-order-lookup.yml

Detects AWS cost anomalies across Visa's cloud accounts and creates ServiceNow FinOps tasks for the cloud engineering team to investigate and optimize.

naftiko: '0.5'
info:
  label: AWS Cloud Cost Anomaly Response
  description: Detects AWS cost anomalies across Visa's cloud accounts and creates ServiceNow FinOps tasks for the cloud engineering team to investigate and optimize.
  tags:
  - cloud
  - finops
  - aws
  - servicenow
  - cost-management
capability:
  exposes:
  - type: mcp
    namespace: cloud-finops
    port: 8080
    tools:
    - name: handle-aws-cost-anomaly
      description: Given an AWS account ID and billing period, detect cost anomalies and create a ServiceNow FinOps task when spend exceeds budget. Use for proactive cloud cost governance.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The AWS account ID to check.
      - name: time_period_start
        in: body
        type: string
        description: Start date for cost analysis in YYYY-MM-DD format.
      - name: time_period_end
        in: body
        type: string
        description: End date for cost analysis in YYYY-MM-DD format.
      steps:
      - name: get-cost-data
        type: call
        call: aws-cost.get-cost-and-usage
        with:
          account_id: '{{account_id}}'
          start: '{{time_period_start}}'
          end: '{{time_period_end}}'
      - name: create-finops-task
        type: call
        call: servicenow-cloud.create-task
        with:
          short_description: 'AWS cost anomaly: account {{account_id}} — {{time_period_start}} to {{time_period_end}}'
          description: 'Total spend: {{get-cost-data.total_cost}}. Review for budget variances and optimization opportunities.'
          assignment_group: Cloud_FinOps
  consumes:
  - type: http
    namespace: aws-cost
    baseUri: https://ce.us-east-1.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_access_token
    resources:
    - name: cost-and-usage
      path: /GetCostAndUsage
      operations:
      - name: get-cost-and-usage
        method: POST
  - type: http
    namespace: servicenow-cloud
    baseUri: https://visa.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → aws-cloud-cost-anomaly-response.yml

Submits and routes change requests for Visa payment infrastructure modifications through the CAB approval workflow in ServiceNow.

naftiko: '0.5'
info:
  label: ServiceNow Change Management for Payment Infrastructure
  description: Submits and routes change requests for Visa payment infrastructure modifications through the CAB approval workflow in ServiceNow.
  tags:
  - itsm
  - change-management
  - servicenow
  - payment-infrastructure
  - approval
capability:
  exposes:
  - type: mcp
    namespace: payment-change-mgmt
    port: 8080
    tools:
    - name: submit-payment-infrastructure-change
      description: Given a change description and maintenance window, create a ServiceNow change request for a payment infrastructure modification and assign to the CAB for review.
      inputParameters:
      - name: change_description
        in: body
        type: string
        description: Description of the proposed payment infrastructure change.
      - name: risk_level
        in: body
        type: string
        description: 'Change risk level: low, medium, high, or critical.'
      - name: scheduled_start
        in: body
        type: string
        description: Planned start datetime in ISO 8601 format.
      - name: scheduled_end
        in: body
        type: string
        description: Planned end datetime in ISO 8601 format.
      call: servicenow-change.create-change-request
      with:
        short_description: '{{change_description}}'
        risk: '{{risk_level}}'
        start_date: '{{scheduled_start}}'
        end_date: '{{scheduled_end}}'
        assignment_group: Payment_CAB
      outputParameters:
      - name: change_number
        type: string
        mapping: $.result.number
  consumes:
  - type: http
    namespace: servicenow-change
    baseUri: https://visa.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
Open in Framework → View in Fleet → servicenow-change-management-for-payment-infrastructure.yml

Generates weekly capacity utilization reports from Snowflake, creates Jira planning tasks for high-utilization systems, and posts to Slack.

naftiko: '0.5'
info:
  label: Visa Payment Processing Capacity Report
  description: Generates weekly capacity utilization reports from Snowflake, creates Jira planning tasks for high-utilization systems, and posts to Slack.
  tags:
  - infrastructure
  - snowflake
  - jira
  - slack
  - capacity
capability:
  exposes:
  - type: mcp
    namespace: visa_payment_process
    port: 8080
    tools:
    - name: handle-event
      description: Generates weekly capacity utilization reports from Snowflake, creates Jira planning tasks for high-utilization systems, and posts to Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[infrastructure] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: infrastructure-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-payment-processing-capacity-report.yml

Returns health status and error rates for Visa API gateway from Datadog.

naftiko: '0.5'
info:
  label: Datadog API Gateway Health
  description: Returns health status and error rates for Visa API gateway from Datadog.
  tags:
  - observability
  - datadog
  - api-gateway
capability:
  exposes:
  - type: mcp
    namespace: datadog_api_gateway_
    port: 8080
    tools:
    - name: query-data
      description: Returns health status and error rates for Visa API gateway from Datadog.
      inputParameters:
      - name: query_param
        in: body
        type: string
        description: The query parameter.
      call: snowflake-api.run-query
      with:
        query_param: '{{query_param}}'
      outputParameters:
      - name: results
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → datadog-api-gateway-health.yml

When CrowdStrike detects a critical threat on a Visa endpoint, automatically contains the device, creates a ServiceNow security incident, and pages the SOC via PagerDuty.

naftiko: '0.5'
info:
  label: CrowdStrike Endpoint Threat Response
  description: When CrowdStrike detects a critical threat on a Visa endpoint, automatically contains the device, creates a ServiceNow security incident, and pages the SOC via PagerDuty.
  tags:
  - security
  - crowdstrike
  - servicenow
  - pagerduty
  - endpoint-security
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: endpoint-threat-response
    port: 8080
    tools:
    - name: respond-to-endpoint-threat
      description: Given a CrowdStrike device ID and detection ID, contain the device, create a P1 ServiceNow security incident, and trigger PagerDuty for SOC response.
      inputParameters:
      - name: device_id
        in: body
        type: string
        description: CrowdStrike device ID of the compromised endpoint.
      - name: detection_id
        in: body
        type: string
        description: CrowdStrike detection ID for the threat.
      - name: hostname
        in: body
        type: string
        description: Hostname of the affected endpoint.
      - name: threat_name
        in: body
        type: string
        description: Name or type of the detected threat.
      steps:
      - name: contain-device
        type: call
        call: crowdstrike-contain.contain-host
        with:
          device_id: '{{device_id}}'
      - name: create-security-incident
        type: call
        call: servicenow-cso.create-incident
        with:
          short_description: 'Endpoint threat: {{threat_name}} on {{hostname}}'
          description: 'CrowdStrike detection {{detection_id}}: {{threat_name}} on {{hostname}} (device {{device_id}}). Host contained automatically.'
          category: security
          urgency: '1'
          impact: '1'
      - name: page-soc
        type: call
        call: pagerduty-soc.create-incident
        with:
          title: 'Endpoint threat: {{threat_name}} — {{hostname}}'
          body: 'ServiceNow: {{create-security-incident.number}}. CrowdStrike detection: {{detection_id}}. Host isolated.'
          service_id: SOC_SERVICE_ID
  consumes:
  - type: http
    namespace: crowdstrike-contain
    baseUri: https://api.crowdstrike.com
    authentication:
      type: bearer
      token: $secrets.crowdstrike_token
    resources:
    - name: device-actions
      path: /devices/entities/devices-actions/v2
      operations:
      - name: contain-host
        method: POST
  - type: http
    namespace: servicenow-cso
    baseUri: https://visa.service-now.com/api/now
    authentication:
      type: 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-soc
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → crowdstrike-endpoint-threat-response.yml

Runs a PCI compliance check via Splunk, creates a Jira audit ticket for findings, and notifies the compliance team via Slack.

naftiko: '0.5'
info:
  label: Visa PCI Compliance Audit Workflow
  description: Runs a PCI compliance check via Splunk, creates a Jira audit ticket for findings, and notifies the compliance team via Slack.
  tags:
  - security
  - splunk
  - jira
  - slack
  - pci-compliance
capability:
  exposes:
  - type: mcp
    namespace: visa_pci_compliance_
    port: 8080
    tools:
    - name: handle-event
      description: Runs a PCI compliance check via Splunk, creates a Jira audit ticket for findings, and notifies the compliance team via Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[security] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: security-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-pci-compliance-audit-workflow.yml

Queries Snowflake for developer portal API adoption metrics, creates a Jira roadmap task, and posts the digest to Slack.

naftiko: '0.5'
info:
  label: Visa Developer Portal Usage Digest
  description: Queries Snowflake for developer portal API adoption metrics, creates a Jira roadmap task, and posts the digest to Slack.
  tags:
  - api-management
  - snowflake
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: visa_developer_porta
    port: 8080
    tools:
    - name: handle-event
      description: Queries Snowflake for developer portal API adoption metrics, creates a Jira roadmap task, and posts the digest to Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[api-management] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: api-management-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-developer-portal-usage-digest.yml

Monitors fintech partner API integration health from Datadog, creates Jira tickets for failures, and alerts the partnerships team via Slack.

naftiko: '0.5'
info:
  label: Visa Fintech Partner Integration Monitor
  description: Monitors fintech partner API integration health from Datadog, creates Jira tickets for failures, and alerts the partnerships team via Slack.
  tags:
  - api-management
  - datadog
  - jira
  - slack
  - partnerships
capability:
  exposes:
  - type: mcp
    namespace: visa_fintech_partner
    port: 8080
    tools:
    - name: handle-event
      description: Monitors fintech partner API integration health from Datadog, creates Jira tickets for failures, and alerts the partnerships team via Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[api-management] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: api-management-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-fintech-partner-integration-monitor.yml

Generates a weekly card portfolio analytics digest from Snowflake, creates a Salesforce report record, and posts highlights to Slack.

naftiko: '0.5'
info:
  label: Visa Card Portfolio Analytics Digest
  description: Generates a weekly card portfolio analytics digest from Snowflake, creates a Salesforce report record, and posts highlights to Slack.
  tags:
  - payments
  - snowflake
  - salesforce
  - slack
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: visa_card_portfolio_
    port: 8080
    tools:
    - name: handle-event
      description: Generates a weekly card portfolio analytics digest from Snowflake, creates a Salesforce report record, and posts highlights to Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[payments] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: payments-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-card-portfolio-analytics-digest.yml

Analyzes transaction routing efficiency from Snowflake, updates routing rules in the config system, and reports optimization results to Slack.

naftiko: '0.5'
info:
  label: Visa Global Transaction Routing Optimizer
  description: Analyzes transaction routing efficiency from Snowflake, updates routing rules in the config system, and reports optimization results to Slack.
  tags:
  - payments
  - snowflake
  - slack
  - routing
capability:
  exposes:
  - type: mcp
    namespace: visa_global_transact
    port: 8080
    tools:
    - name: handle-event
      description: Analyzes transaction routing efficiency from Snowflake, updates routing rules in the config system, and reports optimization results to Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[payments] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: payments-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-global-transaction-routing-optimizer.yml

Returns current authorization approval rates by issuer from Snowflake analytics.

naftiko: '0.5'
info:
  label: Visa Authorization Rate Check
  description: Returns current authorization approval rates by issuer from Snowflake analytics.
  tags:
  - payments
  - snowflake
  - authorization
capability:
  exposes:
  - type: mcp
    namespace: visa_authorization_r
    port: 8080
    tools:
    - name: query-data
      description: Returns current authorization approval rates by issuer from Snowflake analytics.
      inputParameters:
      - name: query_param
        in: body
        type: string
        description: The query parameter.
      call: snowflake-api.run-query
      with:
        query_param: '{{query_param}}'
      outputParameters:
      - name: results
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → visa-authorization-rate-check.yml

Initiates a business continuity test, verifies failover health via Datadog, creates a ServiceNow audit record, and reports results to Slack.

naftiko: '0.5'
info:
  label: Visa Business Continuity Test Workflow
  description: Initiates a business continuity test, verifies failover health via Datadog, creates a ServiceNow audit record, and reports results to Slack.
  tags:
  - operations
  - datadog
  - servicenow
  - slack
  - business-continuity
capability:
  exposes:
  - type: mcp
    namespace: visa_business_contin
    port: 8080
    tools:
    - name: handle-event
      description: Initiates a business continuity test, verifies failover health via Datadog, creates a ServiceNow audit record, and reports results to Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[operations] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: operations-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-business-continuity-test-workflow.yml

Queries Okta for users with privileged application assignments and generates a quarterly access review report delivered to the CISO team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Okta Privileged Access Review
  description: Queries Okta for users with privileged application assignments and generates a quarterly access review report delivered to the CISO team via Microsoft Teams.
  tags:
  - identity
  - security
  - okta
  - microsoft-teams
  - access-management
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: privileged-access-review
    port: 8080
    tools:
    - name: run-privileged-access-review
      description: Fetch Okta users with privileged application group memberships and post an access review summary to the CISO Teams channel. Use for quarterly compliance reviews.
      inputParameters:
      - name: privileged_group_id
        in: body
        type: string
        description: Okta group ID representing privileged application access.
      - name: ciso_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID for the CISO team.
      steps:
      - name: get-privileged-users
        type: call
        call: okta.list-group-members
        with:
          group_id: '{{privileged_group_id}}'
      - name: post-review-report
        type: call
        call: msteams-ciso.post-message
        with:
          channel_id: '{{ciso_channel_id}}'
          text: 'Privileged Access Review: {{get-privileged-users.total}} users in privileged group {{privileged_group_id}}. Review and certify access in Okta.'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://visa.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_token
      placement: header
    resources:
    - name: group-members
      path: /groups/{{group_id}}/users
      inputParameters:
      - name: group_id
        in: path
      operations:
      - name: list-group-members
        method: GET
  - type: http
    namespace: msteams-ciso
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → okta-privileged-access-review.yml

When AML monitoring detects suspicious patterns, creates a ServiceNow investigation, queries Splunk for details, and pages the compliance team.

naftiko: '0.5'
info:
  label: Visa AML Transaction Monitoring Alert
  description: When AML monitoring detects suspicious patterns, creates a ServiceNow investigation, queries Splunk for details, and pages the compliance team.
  tags:
  - compliance
  - servicenow
  - splunk
  - pagerduty
  - aml
capability:
  exposes:
  - type: mcp
    namespace: visa_aml_transaction
    port: 8080
    tools:
    - name: handle-event
      description: When AML monitoring detects suspicious patterns, creates a ServiceNow investigation, queries Splunk for details, and pages the compliance team.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[compliance] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: compliance-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-aml-transaction-monitoring-alert.yml

Returns partner program tier, status, and integration details from Salesforce.

naftiko: '0.5'
info:
  label: Salesforce Partner Program Lookup
  description: Returns partner program tier, status, and integration details from Salesforce.
  tags:
  - payments
  - salesforce
  - partners
capability:
  exposes:
  - type: mcp
    namespace: salesforce_partner_p
    port: 8080
    tools:
    - name: query-data
      description: Returns partner program tier, status, and integration details from Salesforce.
      inputParameters:
      - name: query_param
        in: body
        type: string
        description: The query parameter.
      call: snowflake-api.run-query
      with:
        query_param: '{{query_param}}'
      outputParameters:
      - name: results
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → salesforce-partner-program-lookup.yml

When real-time fraud scoring triggers an alert, blocks the transaction, creates a CrowdStrike investigation, and pages the fraud ops team.

naftiko: '0.5'
info:
  label: Visa Real-Time Fraud Response
  description: When real-time fraud scoring triggers an alert, blocks the transaction, creates a CrowdStrike investigation, and pages the fraud ops team.
  tags:
  - security
  - crowdstrike
  - pagerduty
  - fraud-detection
capability:
  exposes:
  - type: mcp
    namespace: visa_real_time_fraud
    port: 8080
    tools:
    - name: handle-event
      description: When real-time fraud scoring triggers an alert, blocks the transaction, creates a CrowdStrike investigation, and pages the fraud ops team.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[security] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: security-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-real-time-fraud-response.yml

Queries Snowflake for issuer transaction metrics, updates the Salesforce account health score, and posts a digest to Slack.

naftiko: '0.5'
info:
  label: Visa Issuer Relationship Health Sync
  description: Queries Snowflake for issuer transaction metrics, updates the Salesforce account health score, and posts a digest to Slack.
  tags:
  - payments
  - snowflake
  - salesforce
  - slack
  - issuers
capability:
  exposes:
  - type: mcp
    namespace: visa_issuer_relation
    port: 8080
    tools:
    - name: handle-event
      description: Queries Snowflake for issuer transaction metrics, updates the Salesforce account health score, and posts a digest to Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[payments] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: payments-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-issuer-relationship-health-sync.yml

When EMV chip decline rates spike, queries Snowflake for failure patterns, creates a Jira investigation ticket, and notifies the card technology team.

naftiko: '0.5'
info:
  label: Visa EMV Chip Failure Analysis
  description: When EMV chip decline rates spike, queries Snowflake for failure patterns, creates a Jira investigation ticket, and notifies the card technology team.
  tags:
  - payments
  - snowflake
  - jira
  - slack
  - emv
capability:
  exposes:
  - type: mcp
    namespace: visa_emv_chip_failur
    port: 8080
    tools:
    - name: handle-event
      description: When EMV chip decline rates spike, queries Snowflake for failure patterns, creates a Jira investigation ticket, and notifies the card technology team.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[payments] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: payments-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-emv-chip-failure-analysis.yml

When a new merchant is approved, creates the account in Salesforce, provisions API credentials, and notifies the partner team via Slack.

naftiko: '0.5'
info:
  label: Visa Merchant Onboarding Workflow
  description: When a new merchant is approved, creates the account in Salesforce, provisions API credentials, and notifies the partner team via Slack.
  tags:
  - payments
  - salesforce
  - slack
  - merchant-onboarding
capability:
  exposes:
  - type: mcp
    namespace: visa_merchant_onboar
    port: 8080
    tools:
    - name: handle-event
      description: When a new merchant is approved, creates the account in Salesforce, provisions API credentials, and notifies the partner team via Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[payments] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: payments-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-merchant-onboarding-workflow.yml

Fetches LinkedIn engagement analytics for Visa executive thought leadership posts and delivers a weekly performance digest to the communications team via Microsoft Teams.

naftiko: '0.5'
info:
  label: LinkedIn Executive Thought Leadership Tracker
  description: Fetches LinkedIn engagement analytics for Visa executive thought leadership posts and delivers a weekly performance digest to the communications team via Microsoft Teams.
  tags:
  - marketing
  - linkedin
  - microsoft-teams
  - social-media
  - reporting
  - communications
capability:
  exposes:
  - type: mcp
    namespace: exec-comms-reporting
    port: 8080
    tools:
    - name: digest-linkedin-engagement
      description: Fetch LinkedIn organic post analytics for a given organization and post a weekly engagement digest to the communications Teams channel.
      inputParameters:
      - name: organization_id
        in: body
        type: string
        description: LinkedIn organization URN for Visa's company page.
      - name: teams_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID for the communications team.
      steps:
      - name: get-post-analytics
        type: call
        call: linkedin.get-organization-follower-stats
        with:
          organization_id: '{{organization_id}}'
      - name: post-digest
        type: call
        call: msteams-comms.post-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'LinkedIn Weekly Digest (Visa): Total followers {{get-post-analytics.followerCount}}. Organic impressions this week: {{get-post-analytics.impressionCount}}. Engagement rate: {{get-post-analytics.engagementRate}}%.'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: organization-stats
      path: /organizationalEntityFollowerStatistics
      operations:
      - name: get-organization-follower-stats
        method: GET
  - type: http
    namespace: msteams-comms
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → linkedin-executive-thought-leadership-tracker.yml

When merchant transaction patterns deviate from their category, flags for review in Jira, updates Salesforce risk fields, and notifies via Slack.

naftiko: '0.5'
info:
  label: Visa Merchant Category Review Workflow
  description: When merchant transaction patterns deviate from their category, flags for review in Jira, updates Salesforce risk fields, and notifies via Slack.
  tags:
  - payments
  - jira
  - salesforce
  - slack
  - merchants
capability:
  exposes:
  - type: mcp
    namespace: visa_merchant_catego
    port: 8080
    tools:
    - name: handle-event
      description: When merchant transaction patterns deviate from their category, flags for review in Jira, updates Salesforce risk fields, and notifies via Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[payments] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: payments-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-merchant-category-review-workflow.yml

Monitors open banking API adoption and health from Snowflake, creates Jira tasks for degraded partners, and posts metrics to Slack.

naftiko: '0.5'
info:
  label: Visa Open Banking API Monitor
  description: Monitors open banking API adoption and health from Snowflake, creates Jira tasks for degraded partners, and posts metrics to Slack.
  tags:
  - api-management
  - snowflake
  - jira
  - slack
  - open-banking
capability:
  exposes:
  - type: mcp
    namespace: visa_open_banking_ap
    port: 8080
    tools:
    - name: handle-event
      description: Monitors open banking API adoption and health from Snowflake, creates Jira tasks for degraded partners, and posts metrics to Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[api-management] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: api-management-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-open-banking-api-monitor.yml

When a dispute exceeds the resolution SLA, escalates via PagerDuty, updates ServiceNow, and notifies the dispute resolution team via Slack.

naftiko: '0.5'
info:
  label: Visa Payment Dispute Escalation
  description: When a dispute exceeds the resolution SLA, escalates via PagerDuty, updates ServiceNow, and notifies the dispute resolution team via Slack.
  tags:
  - payments
  - pagerduty
  - servicenow
  - slack
  - disputes
capability:
  exposes:
  - type: mcp
    namespace: visa_payment_dispute
    port: 8080
    tools:
    - name: handle-event
      description: When a dispute exceeds the resolution SLA, escalates via PagerDuty, updates ServiceNow, and notifies the dispute resolution team via Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[payments] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: payments-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-payment-dispute-escalation.yml

Queries Splunk for PCI-DSS required log events and generates a compliance audit report, creating a ServiceNow compliance record for the QSA review process.

naftiko: '0.5'
info:
  label: Splunk PCI Compliance Log Audit
  description: Queries Splunk for PCI-DSS required log events and generates a compliance audit report, creating a ServiceNow compliance record for the QSA review process.
  tags:
  - security
  - compliance
  - splunk
  - servicenow
  - pci-dss
  - audit
capability:
  exposes:
  - type: mcp
    namespace: pci-audit
    port: 8080
    tools:
    - name: run-pci-log-audit
      description: Query Splunk for PCI-DSS required log events over a given period, summarize findings, and create a ServiceNow compliance record for the audit trail. Use for quarterly PCI assessments.
      inputParameters:
      - name: audit_start
        in: body
        type: string
        description: Start of the audit period in ISO 8601 format.
      - name: audit_end
        in: body
        type: string
        description: End of the audit period in ISO 8601 format.
      - name: pci_scope
        in: body
        type: string
        description: PCI scope identifier (e.g., CDE, connected-systems).
      steps:
      - name: query-logs
        type: call
        call: splunk-pci.search-events
        with:
          query: index=pci_logs earliest={{audit_start}} latest={{audit_end}} scope={{pci_scope}} | stats count by event_type, host
      - name: create-compliance-record
        type: call
        call: servicenow-pci.create-record
        with:
          short_description: 'PCI log audit: {{pci_scope}} — {{audit_start}} to {{audit_end}}'
          description: 'Splunk PCI audit complete. Events found: {{query-logs.total_events}}. Scope: {{pci_scope}}. Period: {{audit_start}} to {{audit_end}}.'
  consumes:
  - type: http
    namespace: splunk-pci
    baseUri: https://splunk.visa.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search-jobs
      path: /search/jobs/export
      operations:
      - name: search-events
        method: POST
  - type: http
    namespace: servicenow-pci
    baseUri: https://visa.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: compliance-records
      path: /table/compliance_finding
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → splunk-pci-compliance-log-audit.yml

When a Salesforce partner opportunity reaches Closed Won, creates a corresponding Oracle ERP project record and sends a Microsoft Teams notification to the partner success team.

naftiko: '0.5'
info:
  label: Salesforce Partner Opportunity Sync
  description: When a Salesforce partner opportunity reaches Closed Won, creates a corresponding Oracle ERP project record and sends a Microsoft Teams notification to the partner success team.
  tags:
  - crm
  - sales
  - salesforce
  - oracle
  - microsoft-teams
  - partner-management
capability:
  exposes:
  - type: mcp
    namespace: crm-partner-sync
    port: 8080
    tools:
    - name: sync-partner-opportunity
      description: Given a Salesforce opportunity ID, fetch deal details, create a project in Oracle ERP, and notify the partner success Teams channel.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity record ID (18-character).
      - name: partner_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID for the partner success team.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: create-oracle-project
        type: call
        call: oracle-projects.create-project
        with:
          project_name: '{{get-opportunity.Name}}'
          customer_name: '{{get-opportunity.Account.Name}}'
          amount: '{{get-opportunity.Amount}}'
      - name: notify-team
        type: call
        call: msteams-partner.post-message
        with:
          channel_id: '{{partner_channel_id}}'
          text: 'Partner deal closed: {{get-opportunity.Name}} ({{get-opportunity.Amount}} {{get-opportunity.CurrencyIsoCode}}). Oracle project created: {{create-oracle-project.project_id}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://visa.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: oracle-projects
    baseUri: https://visa.fa.us2.oraclecloud.com/fscmRestApi/resources/11.13.18.05
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: projects
      path: /projects
      operations:
      - name: create-project
        method: POST
  - type: http
    namespace: msteams-partner
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-partner-opportunity-sync.yml

Queries Snowflake for fraud model precision and recall metrics, creates a Jira review task, and posts the digest to Slack.

naftiko: '0.5'
info:
  label: Visa Risk Model Performance Digest
  description: Queries Snowflake for fraud model precision and recall metrics, creates a Jira review task, and posts the digest to Slack.
  tags:
  - security
  - snowflake
  - jira
  - slack
  - fraud-detection
capability:
  exposes:
  - type: mcp
    namespace: visa_risk_model_perf
    port: 8080
    tools:
    - name: handle-event
      description: Queries Snowflake for fraud model precision and recall metrics, creates a Jira review task, and posts the digest to Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[security] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: security-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-risk-model-performance-digest.yml

When a merchant exceeds chargeback thresholds, creates a Jira investigation ticket, updates Salesforce, and alerts the risk team via Slack.

naftiko: '0.5'
info:
  label: Visa Chargeback Threshold Alert
  description: When a merchant exceeds chargeback thresholds, creates a Jira investigation ticket, updates Salesforce, and alerts the risk team via Slack.
  tags:
  - payments
  - jira
  - salesforce
  - slack
  - chargebacks
capability:
  exposes:
  - type: mcp
    namespace: visa_chargeback_thre
    port: 8080
    tools:
    - name: handle-event
      description: When a merchant exceeds chargeback thresholds, creates a Jira investigation ticket, updates Salesforce, and alerts the risk team via Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[payments] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: payments-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-chargeback-threshold-alert.yml

When transaction volumes approach capacity thresholds, queries Snowflake trends, creates a Jira planning task, and alerts infrastructure via Slack.

naftiko: '0.5'
info:
  label: Visa Network Capacity Planning Alert
  description: When transaction volumes approach capacity thresholds, queries Snowflake trends, creates a Jira planning task, and alerts infrastructure via Slack.
  tags:
  - infrastructure
  - snowflake
  - jira
  - slack
  - capacity
capability:
  exposes:
  - type: mcp
    namespace: visa_network_capacit
    port: 8080
    tools:
    - name: handle-event
      description: When transaction volumes approach capacity thresholds, queries Snowflake trends, creates a Jira planning task, and alerts infrastructure via Slack.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[infrastructure] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: infrastructure-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-network-capacity-planning-alert.yml

Queries token provisioning rates and usage metrics from Snowflake.

naftiko: '0.5'
info:
  label: Snowflake Tokenization Metrics Query
  description: Queries token provisioning rates and usage metrics from Snowflake.
  tags:
  - payments
  - snowflake
  - tokenization
capability:
  exposes:
  - type: mcp
    namespace: snowflake_tokenizati
    port: 8080
    tools:
    - name: query-data
      description: Queries token provisioning rates and usage metrics from Snowflake.
      inputParameters:
      - name: query_param
        in: body
        type: string
        description: The query parameter.
      call: snowflake-api.run-query
      with:
        query_param: '{{query_param}}'
      outputParameters:
      - name: results
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → snowflake-tokenization-metrics-query.yml

Generates a daily API health digest from Datadog metrics, posts to Slack, and creates Jira tickets for degraded services.

naftiko: '0.5'
info:
  label: Visa Partner API Health Digest
  description: Generates a daily API health digest from Datadog metrics, posts to Slack, and creates Jira tickets for degraded services.
  tags:
  - api-management
  - datadog
  - slack
  - jira
capability:
  exposes:
  - type: mcp
    namespace: visa_partner_api_hea
    port: 8080
    tools:
    - name: handle-event
      description: Generates a daily API health digest from Datadog metrics, posts to Slack, and creates Jira tickets for degraded services.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[api-management] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: api-management-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-partner-api-health-digest.yml

Retrieves PCI compliance audit log results from Splunk by search job ID.

naftiko: '0.5'
info:
  label: Splunk PCI Log Query
  description: Retrieves PCI compliance audit log results from Splunk by search job ID.
  tags:
  - security
  - splunk
  - pci-compliance
capability:
  exposes:
  - type: mcp
    namespace: splunk_pci_log_query
    port: 8080
    tools:
    - name: query-data
      description: Retrieves PCI compliance audit log results from Splunk by search job ID.
      inputParameters:
      - name: query_param
        in: body
        type: string
        description: The query parameter.
      call: snowflake-api.run-query
      with:
        query_param: '{{query_param}}'
      outputParameters:
      - name: results
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → splunk-pci-log-query.yml

When a new vendor is proposed, creates a security assessment in Jira, queries compliance data from Snowflake, and notifies the security team.

naftiko: '0.5'
info:
  label: Visa Vendor Security Assessment Workflow
  description: When a new vendor is proposed, creates a security assessment in Jira, queries compliance data from Snowflake, and notifies the security team.
  tags:
  - security
  - jira
  - snowflake
  - slack
  - vendor-management
capability:
  exposes:
  - type: mcp
    namespace: visa_vendor_security
    port: 8080
    tools:
    - name: handle-event
      description: When a new vendor is proposed, creates a security assessment in Jira, queries compliance data from Snowflake, and notifies the security team.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The triggering event identifier.
      - name: context
        in: body
        type: string
        description: Additional context for the event.
      steps:
      - name: gather-data
        type: call
        call: snowflake-api.run-query
        with:
          event_id: '{{event_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Task
          summary: '[security] {{event_id}} — {{context}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: security-ops
          text: 'Alert: {{event_id}} | {{context}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://visa.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://visa.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → visa-vendor-security-assessment-workflow.yml

Generates a daily Datadog infrastructure health digest for Visa's payment processing clusters and posts the summary to the platform engineering Teams channel.

naftiko: '0.5'
info:
  label: Datadog Infrastructure Health Digest
  description: Generates a daily Datadog infrastructure health digest for Visa's payment processing clusters and posts the summary to the platform engineering Teams channel.
  tags:
  - observability
  - datadog
  - microsoft-teams
  - reporting
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: infra-health-digest
    port: 8080
    tools:
    - name: digest-infrastructure-health
      description: Fetch Datadog host and monitor summary for payment processing infrastructure and post a daily health digest to the platform Teams channel.
      inputParameters:
      - name: environment_tag
        in: body
        type: string
        description: Datadog environment tag to filter (e.g., env:production,service:payment-auth).
      - name: platform_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID for platform engineering.
      steps:
      - name: get-host-status
        type: call
        call: datadog-infra.list-hosts
        with:
          filter: '{{environment_tag}}'
      - name: get-monitor-summary
        type: call
        call: datadog-infra.get-monitor-summary
        with:
          tags: '{{environment_tag}}'
      - name: post-digest
        type: call
        call: msteams-platform.post-message
        with:
          channel_id: '{{platform_channel_id}}'
          text: 'Infrastructure Health ({{environment_tag}}): {{get-host-status.total_matching}} hosts. Monitors — OK: {{get-monitor-summary.ok_count}}, Warn: {{get-monitor-summary.warn_count}}, Critical: {{get-monitor-summary.critical_count}}.'
  consumes:
  - type: http
    namespace: datadog-infra
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: hosts
      path: /hosts
      operations:
      - name: list-hosts
        method: GET
    - name: monitor-summary
      path: /monitor/summary
      operations:
      - name: get-monitor-summary
        method: GET
  - type: http
    namespace: msteams-platform
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → datadog-infrastructure-health-digest.yml

When a new hire start date approaches, creates an Azure AD account, provisions SailPoint entitlements, opens a ServiceNow hardware request, and notifies the manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: New Hire IT Provisioning Workflow
  description: When a new hire start date approaches, creates an Azure AD account, provisions SailPoint entitlements, opens a ServiceNow hardware request, and notifies the manager via Microsoft Teams.
  tags:
  - hr
  - onboarding
  - azure-active-directory
  - sailpoint
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: new_hire_it_provisio
    port: 8080
    tools:
    - name: new-hire
      description: Given an execution date, run the new hire it provisioning workflow process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.NEW_HIRE_IT_PROVISIONING_WORKFLOW LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.NEW_HIRE_IT_PROVISIONING_WORKFLOW_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: hr
          short_description: New Hire IT Provisioning Workflow processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_new_hire_it_provisio_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: servicenow
    baseUri: https://wellsfargo.service-now.com/api/now
    authentication:
      type: 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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → new-hire-it-provisioning-workflow.yml

Retrieves application health status from New Relic including response time, error rate, and throughput.

naftiko: '0.5'
info:
  label: New Relic Application Health Check
  description: Retrieves application health status from New Relic including response time, error rate, and throughput.
  tags:
  - monitoring
  - new-relic
  - banking
capability:
  exposes:
  - type: mcp
    namespace: apm-health
    port: 8080
    tools:
    - name: get-app-health
      description: Given a New Relic application ID, return the current response time, error rate, and throughput. Use for application performance monitoring.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: The New Relic application ID.
      call: newrelic.get-application
      with:
        app_id: '{{app_id}}'
      outputParameters:
      - name: response_time
        type: string
        mapping: $.application.application_summary.response_time
      - name: error_rate
        type: string
        mapping: $.application.application_summary.error_rate
      - name: throughput
        type: string
        mapping: $.application.application_summary.throughput
  consumes:
  - type: http
    namespace: newrelic
    baseUri: https://api.newrelic.com/v2
    authentication:
      type: apikey
      key: X-Api-Key
      value: $secrets.newrelic_api_key
      placement: header
    resources:
    - name: applications
      path: /applications/{{app_id}}.json
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: get-application
        method: GET
Open in Framework → View in Fleet → new-relic-application-health-check.yml

Triggers Azure Synapse data pipelines, monitors execution status, logs metrics in Snowflake, and alerts the data engineering team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Azure Synapse Data Pipeline Orchestrator
  description: Triggers Azure Synapse data pipelines, monitors execution status, logs metrics in Snowflake, and alerts the data engineering team via Microsoft Teams.
  tags:
  - data-engineering
  - azure-synapse-analytics
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: azure_synapse_data_p
    port: 8080
    tools:
    - name: azure-synapse
      description: Given an execution date, run the azure synapse data pipeline orchestrator process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.AZURE_SYNAPSE_DATA_PIPELINE_ORCHESTRATOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.AZURE_SYNAPSE_DATA_PIPELINE_ORCHESTRATOR_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_azure_synapse_data_p_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → azure-synapse-data-pipeline-orchestrator.yml

Checks the last refresh status of a Power BI dataset and returns the refresh state and timestamp.

naftiko: '0.5'
info:
  label: Power BI Dataset Refresh Check
  description: Checks the last refresh status of a Power BI dataset and returns the refresh state and timestamp.
  tags:
  - analytics
  - power-bi
  - banking
capability:
  exposes:
  - type: mcp
    namespace: bi-ops
    port: 8080
    tools:
    - name: get-refresh-status
      description: Given a Power BI group ID and dataset ID, return the last refresh status and end time. Use for dashboard reliability monitoring.
      inputParameters:
      - name: group_id
        in: body
        type: string
        description: The Power BI workspace (group) ID.
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID.
      call: powerbi.get-refresh-history
      with:
        group_id: '{{group_id}}'
        dataset_id: '{{dataset_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.value[0].status
      - name: end_time
        type: string
        mapping: $.value[0].endTime
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: refreshes
      path: /groups/{{group_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: group_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: get-refresh-history
        method: GET
Open in Framework → View in Fleet → power-bi-dataset-refresh-check.yml

When a new commercial banking customer is approved, creates a Salesforce onboarding case, links the account record, and notifies the relationship manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: Salesforce Customer Onboarding Case Creation
  description: When a new commercial banking customer is approved, creates a Salesforce onboarding case, links the account record, and notifies the relationship manager via Microsoft Teams.
  tags:
  - customer-onboarding
  - salesforce
  - microsoft-teams
  - commercial-banking
capability:
  exposes:
  - type: mcp
    namespace: customer-onboarding
    port: 8080
    tools:
    - name: create-customer-onboarding-case
      description: Given a Salesforce account ID and relationship manager UPN, create a customer onboarding case linked to the account and notify the relationship manager in Microsoft Teams. Use when a commercial banking customer completes credit approval.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Salesforce account ID for the approved commercial customer.
      - name: rm_upn
        in: body
        type: string
        description: Microsoft UPN of the assigned relationship manager.
      - name: product_type
        in: body
        type: string
        description: Product being onboarded (e.g. Commercial Credit Line, Treasury Services).
      steps:
      - name: get-account
        type: call
        call: salesforce-acct.get-account
        with:
          account_id: '{{account_id}}'
      - name: create-onboarding-case
        type: call
        call: salesforce-case.create-case
        with:
          account_id: '{{account_id}}'
          subject: 'Customer Onboarding: {{get-account.name}} — {{product_type}}'
          type: New_Customer_Onboarding
      - name: notify-rm
        type: call
        call: msteams-rm.send-message
        with:
          recipient_upn: '{{rm_upn}}'
          text: 'Onboarding case created for {{get-account.name}}: {{product_type}}. Salesforce case: {{create-onboarding-case.case_number}}. Please complete onboarding tasks in Salesforce.'
  consumes:
  - type: http
    namespace: salesforce-acct
    baseUri: https://wellsfargo.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: salesforce-case
    baseUri: https://wellsfargo.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: msteams-rm
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /users/{{upn}}/chats
      inputParameters:
      - name: upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-customer-onboarding-case-creation.yml

When a mortgage application is submitted, retrieves the applicant record from Salesforce, runs document verification via Snowflake, and notifies the underwriting team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Mortgage Document Verification Chain
  description: When a mortgage application is submitted, retrieves the applicant record from Salesforce, runs document verification via Snowflake, and notifies the underwriting team in Microsoft Teams.
  tags:
  - lending
  - salesforce
  - snowflake
  - microsoft-teams
  - banking
capability:
  exposes:
  - type: mcp
    namespace: mortgage-ops
    port: 8080
    tools:
    - name: verify-mortgage-docs
      description: Given a Salesforce case ID for a mortgage application, pull applicant details, run document checks, and notify underwriters. Use when new mortgage applications enter the pipeline.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: The Salesforce case ID for the mortgage application.
      - name: applicant_email
        in: body
        type: string
        description: The applicant email address.
      steps:
      - name: get-case
        type: call
        call: salesforce.get-case
        with:
          case_id: '{{case_id}}'
      - name: verify-docs
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM LENDING.DOC_VERIFICATION WHERE case_id='{{case_id}}'
      - name: notify-underwriting
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_underwriting_channel
          text: 'Mortgage doc verification complete for case {{case_id}} ({{get-case.applicant_name}}). Status: {{verify-docs.status}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://wellsfargo.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: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → mortgage-document-verification-chain.yml

When a GitHub Actions workflow fails on a protected branch, creates a Jira bug in the engineering project and posts an alert to the platform engineering Microsoft Teams channel.

naftiko: '0.5'
info:
  label: GitHub CI/CD Pipeline Failure to Jira
  description: When a GitHub Actions workflow fails on a protected branch, creates a Jira bug in the engineering project and posts an alert to the platform engineering Microsoft Teams channel.
  tags:
  - devops
  - cicd
  - github
  - jira
  - microsoft-teams
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: cicd-ops
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a failed GitHub Actions run, create a Jira bug and alert the platform engineering Teams channel. Invoke on protected-branch pipeline failures for critical banking application repositories.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository in owner/repo format (e.g. wells-fargo/core-banking-api).
      - name: workflow_run_id
        in: body
        type: string
        description: GitHub Actions workflow run ID that failed.
      - name: branch
        in: body
        type: string
        description: Branch name where the failure occurred.
      - name: commit_sha
        in: body
        type: string
        description: Commit SHA of the failed run.
      steps:
      - name: get-run-details
        type: call
        call: github.get-workflow-run
        with:
          repo: '{{repo}}'
          run_id: '{{workflow_run_id}}'
      - name: create-jira-bug
        type: call
        call: jira.create-issue
        with:
          project_key: PLAT
          issuetype: Bug
          summary: '[CI Failure] {{repo}} / {{branch}} — {{get-run-details.name}}'
          description: 'Workflow: {{get-run-details.name}}

            Branch: {{branch}}

            Commit: {{commit_sha}}

            URL: {{get-run-details.html_url}}'
      - name: alert-platform-eng
        type: call
        call: msteams-platform.send-message
        with:
          channel_id: $secrets.teams_platform_channel_id
          text: 'CI/CD failure: {{repo}} | Branch: {{branch}} | Jira: {{create-jira-bug.key}} | Run: {{get-run-details.html_url}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflow-runs
      path: /repos/{{repo}}/actions/runs/{{run_id}}
      inputParameters:
      - name: repo
        in: path
      - name: run_id
        in: path
      operations:
      - name: get-workflow-run
        method: GET
  - type: http
    namespace: jira
    baseUri: https://wellsfargo.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-platform
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → github-ci-cd-pipeline-failure-to-jira.yml

Pulls client portfolio performance from Snowflake, enriches with FactSet market data, and sends personalized review digests to relationship managers via Microsoft Teams.

naftiko: '0.5'
info:
  label: Wealth Management Client Review Digest
  description: Pulls client portfolio performance from Snowflake, enriches with FactSet market data, and sends personalized review digests to relationship managers via Microsoft Teams.
  tags:
  - wealth-management
  - snowflake
  - factset
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: wealth_management_cl
    port: 8080
    tools:
    - name: wealth-management
      description: Given an execution date, run the wealth management client review digest process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.WEALTH_MANAGEMENT_CLIENT_REVIEW_DIGEST LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.WEALTH_MANAGEMENT_CLIENT_REVIEW_DIGEST_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_wealth_management_cl_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → wealth-management-client-review-digest.yml

Pulls data classification results from Microsoft Purview, aggregates in Snowflake, and distributes the compliance summary to the data governance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Microsoft Purview Data Classification Report
  description: Pulls data classification results from Microsoft Purview, aggregates in Snowflake, and distributes the compliance summary to the data governance team via Microsoft Teams.
  tags:
  - data-governance
  - microsoft-purview
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: microsoft_purview_da
    port: 8080
    tools:
    - name: microsoft-purview
      description: Given an execution date, run the microsoft purview data classification report process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.MICROSOFT_PURVIEW_DATA_CLASSIFICATION_REPORT LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.MICROSOFT_PURVIEW_DATA_CLASSIFICATION_REPORT_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_microsoft_purview_da_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → microsoft-purview-data-classification-report.yml

Retrieves a SAP purchase order by number and returns status, vendor, and total amount.

naftiko: '0.5'
info:
  label: SAP Purchase Order Detail Lookup
  description: Retrieves a SAP purchase order by number and returns status, vendor, and total amount.
  tags:
  - procurement
  - sap
  - banking
capability:
  exposes:
  - type: mcp
    namespace: erp-procurement
    port: 8080
    tools:
    - name: get-purchase-order
      description: Given a SAP purchase order number, return the PO status, vendor name, total amount, and currency. Use for procurement verification.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: The SAP purchase order number (e.g., 4500012345).
      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_amount
        type: string
        mapping: $.d.TotalAmount
  consumes:
  - type: http
    namespace: sap
    baseUri: https://wellsfargo-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: purchase-orders
      path: /A_PurchaseOrder('{{po_number}}')
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-po
        method: GET
Open in Framework → View in Fleet → sap-purchase-order-detail-lookup.yml

Files a Suspicious Activity Report by extracting transaction patterns from Snowflake, creating a compliance case in Salesforce, uploading documentation to SharePoint, and alerting the BSA team.

naftiko: '0.5'
info:
  label: AML Suspicious Activity Report Chain
  description: Files a Suspicious Activity Report by extracting transaction patterns from Snowflake, creating a compliance case in Salesforce, uploading documentation to SharePoint, and alerting the BSA team.
  tags:
  - compliance
  - aml
  - snowflake
  - salesforce
  - sharepoint
  - microsoft-teams
  - banking
capability:
  exposes:
  - type: mcp
    namespace: bsa-ops
    port: 8080
    tools:
    - name: file-sar
      description: Given a customer ID and suspicious transaction IDs, extract patterns, create a compliance case, upload supporting docs, and alert BSA. Use when AML monitoring flags suspicious activity.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The customer identifier.
      - name: transaction_ids
        in: body
        type: string
        description: Comma-separated list of suspicious transaction IDs.
      steps:
      - name: extract-patterns
        type: call
        call: snowflake.execute-statement
        with:
          statement: CALL COMPLIANCE.EXTRACT_SAR_PATTERNS('{{customer_id}}', '{{transaction_ids}}')
      - name: create-case
        type: call
        call: salesforce.create-case
        with:
          subject: 'SAR Filing: Customer {{customer_id}}'
          description: '{{extract-patterns.summary}}'
      - name: upload-docs
        type: call
        call: sharepoint.upload-file
        with:
          site_id: $secrets.bsa_site_id
          file_name: SAR_{{customer_id}}_{{create-case.id}}.pdf
      - name: alert-bsa
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_bsa_channel
          text: 'SAR filed for customer {{customer_id}}. Case: {{create-case.id}}. Patterns: {{extract-patterns.pattern_count}} flagged transactions.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: salesforce
    baseUri: https://wellsfargo.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: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /sites/{{site_id}}/drive/root:/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → aml-suspicious-activity-report-chain.yml

Evaluates ServiceNow change requests against historical failure data in Snowflake, assigns a risk score, and notifies the CAB via Microsoft Teams.

naftiko: '0.5'
info:
  label: ServiceNow Change Risk Assessor
  description: Evaluates ServiceNow change requests against historical failure data in Snowflake, assigns a risk score, and notifies the CAB via Microsoft Teams.
  tags:
  - itsm
  - servicenow
  - snowflake
  - microsoft-teams
  - change-management
capability:
  exposes:
  - type: mcp
    namespace: servicenow_change_ri
    port: 8080
    tools:
    - name: servicenow-change
      description: Given an execution date, run the servicenow change risk assessor process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SERVICENOW_CHANGE_RISK_ASSESSOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SERVICENOW_CHANGE_RISK_ASSESSOR_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: itsm
          short_description: ServiceNow Change Risk Assessor processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_servicenow_change_ri_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: servicenow
    baseUri: https://wellsfargo.service-now.com/api/now
    authentication:
      type: 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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → servicenow-change-risk-assessor.yml

Audits Keycloak SSO sessions for anomalous patterns, logs findings in Snowflake, creates ServiceNow security incidents, and alerts the IAM team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Keycloak SSO Session Audit
  description: Audits Keycloak SSO sessions for anomalous patterns, logs findings in Snowflake, creates ServiceNow security incidents, and alerts the IAM team via Microsoft Teams.
  tags:
  - security
  - keycloak
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: keycloak_sso_session
    port: 8080
    tools:
    - name: keycloak-sso
      description: Given an execution date, run the keycloak sso session audit process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.KEYCLOAK_SSO_SESSION_AUDIT LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.KEYCLOAK_SSO_SESSION_AUDIT_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: security
          short_description: Keycloak SSO Session Audit processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_keycloak_sso_session_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: servicenow
    baseUri: https://wellsfargo.service-now.com/api/now
    authentication:
      type: 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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → keycloak-sso-session-audit.yml

Retrieves a Salesforce account record by account ID, returning name, industry, and annual revenue.

naftiko: '0.5'
info:
  label: Salesforce Account Detail Lookup
  description: Retrieves a Salesforce account record by account ID, returning name, industry, and annual revenue.
  tags:
  - crm
  - salesforce
  - banking
capability:
  exposes:
  - type: mcp
    namespace: crm-lookup
    port: 8080
    tools:
    - name: get-account
      description: Given a Salesforce account ID, return the account name, industry, and annual revenue. Use for relationship manager inquiries.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID.
      call: salesforce.get-account
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.Name
      - name: industry
        type: string
        mapping: $.Industry
      - name: annual_revenue
        type: string
        mapping: $.AnnualRevenue
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://wellsfargo.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
Open in Framework → View in Fleet → salesforce-account-detail-lookup.yml

Processes Checkmarx SAST scan results, logs findings in Snowflake, creates Jira remediation tickets for critical vulnerabilities, and alerts the AppSec team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Checkmarx SAST Scan Result Handler
  description: Processes Checkmarx SAST scan results, logs findings in Snowflake, creates Jira remediation tickets for critical vulnerabilities, and alerts the AppSec team via Microsoft Teams.
  tags:
  - security
  - checkmarx
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: checkmarx_sast_scan_
    port: 8080
    tools:
    - name: checkmarx-sast
      description: Given an execution date, run the checkmarx sast scan result handler process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.CHECKMARX_SAST_SCAN_RESULT_HANDLER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.CHECKMARX_SAST_SCAN_RESULT_HANDLER_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: WFOPS
          issue_type: Task
          summary: Checkmarx SAST Scan Result Handler - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_checkmarx_sast_scan__channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: jira
    baseUri: https://wellsfargo.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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → checkmarx-sast-scan-result-handler.yml

When an SAP Concur expense report exceeds policy limits, logs the exception in Snowflake, creates a ServiceNow approval task, and notifies the manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Concur Expense Over-Limit Escalation
  description: When an SAP Concur expense report exceeds policy limits, logs the exception in Snowflake, creates a ServiceNow approval task, and notifies the manager via Microsoft Teams.
  tags:
  - finance
  - sap
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap_concur_expense_o
    port: 8080
    tools:
    - name: sap-concur
      description: Given an execution date, run the sap concur expense over-limit escalation process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_CONCUR_EXPENSE_OVER_LIMIT_ESCALATION LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_CONCUR_EXPENSE_OVER_LIMIT_ESCALATION_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: finance
          short_description: SAP Concur Expense Over-Limit Escalation processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_concur_expense_o_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: servicenow
    baseUri: https://wellsfargo.service-now.com/api/now
    authentication:
      type: 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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-concur-expense-over-limit-escalation.yml

Retrieves the current month cost summary for an Azure resource group for FinOps reporting.

naftiko: '0.5'
info:
  label: Azure Resource Group Cost Summary
  description: Retrieves the current month cost summary for an Azure resource group for FinOps reporting.
  tags:
  - finops
  - microsoft-azure
  - banking
capability:
  exposes:
  - type: mcp
    namespace: cloud-cost
    port: 8080
    tools:
    - name: get-cost-summary
      description: Given an Azure subscription ID and resource group name, return the current month cost total and currency. Use for cloud FinOps reviews.
      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.
      call: azure.get-cost
      with:
        subscription_id: '{{subscription_id}}'
        resource_group: '{{resource_group}}'
      outputParameters:
      - name: total_cost
        type: string
        mapping: $.properties.rows[0][0]
      - name: currency
        type: string
        mapping: $.properties.rows[0][1]
  consumes:
  - type: http
    namespace: azure
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: cost-management
      path: /subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.CostManagement/query?api-version=2023-03-01
      inputParameters:
      - name: subscription_id
        in: path
      - name: resource_group
        in: path
      operations:
      - name: get-cost
        method: POST
Open in Framework → View in Fleet → azure-resource-group-cost-summary.yml

When Palo Alto Networks detects a critical threat, logs the event in Splunk, creates a ServiceNow security incident, and alerts the SOC via Microsoft Teams.

naftiko: '0.5'
info:
  label: Palo Alto Firewall Threat Handler
  description: When Palo Alto Networks detects a critical threat, logs the event in Splunk, creates a ServiceNow security incident, and alerts the SOC via Microsoft Teams.
  tags:
  - security
  - palo-alto-networks
  - splunk
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: palo_alto_firewall_t
    port: 8080
    tools:
    - name: palo-alto
      description: Given an execution date, run the palo alto firewall threat handler process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.PALO_ALTO_FIREWALL_THREAT_HANDLER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.PALO_ALTO_FIREWALL_THREAT_HANDLER_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: security
          short_description: Palo Alto Firewall Threat Handler processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_palo_alto_firewall_t_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: servicenow
    baseUri: https://wellsfargo.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: splunk
    baseUri: https://wellsfargo-splunk.example.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: events
      path: /receivers/simple
      operations:
      - name: index-event
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → palo-alto-firewall-threat-handler.yml

Queries SAP for open journal entries and unreconciled items that block period close, then creates a ServiceNow task for each blocker and notifies the finance Slack channel.

naftiko: '0.5'
info:
  label: SAP General Ledger Period Close Check
  description: Queries SAP for open journal entries and unreconciled items that block period close, then creates a ServiceNow task for each blocker and notifies the finance Slack channel.
  tags:
  - finance
  - sap
  - servicenow
  - slack
  - period-close
capability:
  exposes:
  - type: mcp
    namespace: finance-close
    port: 8080
    tools:
    - name: check-gl-period-close
      description: Given a SAP company code and fiscal period, check for open general ledger items, create ServiceNow tasks for each blocker, and post a readiness summary to the finance Slack channel. Use at month-end for period close orchestration.
      inputParameters:
      - name: company_code
        in: body
        type: string
        description: SAP company code (e.g. WFC1 for Wells Fargo US).
      - name: fiscal_period
        in: body
        type: string
        description: Fiscal period in YYYYMM format (e.g. 202503).
      steps:
      - name: get-open-items
        type: call
        call: sap.get-gl-open-items
        with:
          company_code: '{{company_code}}'
          fiscal_period: '{{fiscal_period}}'
      - name: create-close-task
        type: call
        call: servicenow-finance.create-task
        with:
          category: finance_period_close
          short_description: 'GL close blocker: {{company_code}} — {{fiscal_period}}'
          description: 'Open GL items blocking period close: {{get-open-items.open_count}} items, total {{get-open-items.total_amount}}'
      - name: post-summary
        type: call
        call: slack-finance.post-message
        with:
          channel: finance-close-ops
          text: 'Period close readiness {{company_code}}/{{fiscal_period}}: {{get-open-items.open_count}} blocking items. Task: {{create-close-task.number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://wfc-s4.sap.com/sap/opu/odata/sap/ZFI_GL_CLOSE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: gl-open-items
      path: /GLOpenItemSet
      inputParameters:
      - name: company_code
        in: query
      - name: fiscal_period
        in: query
      operations:
      - name: get-gl-open-items
        method: GET
  - type: http
    namespace: servicenow-finance
    baseUri: https://wellsfargo.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: slack-finance
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → sap-general-ledger-period-close-check.yml

Performs a vendor risk assessment by pulling vendor data from SAP, running risk scoring in Snowflake, creating a Jira review ticket, and notifying procurement.

naftiko: '0.5'
info:
  label: Vendor Risk Assessment Workflow
  description: Performs a vendor risk assessment by pulling vendor data from SAP, running risk scoring in Snowflake, creating a Jira review ticket, and notifying procurement.
  tags:
  - procurement
  - sap
  - snowflake
  - jira
  - microsoft-teams
  - banking
capability:
  exposes:
  - type: mcp
    namespace: vendor-risk
    port: 8080
    tools:
    - name: assess-vendor-risk
      description: Given a SAP vendor number, pull vendor master data, compute risk score, open a Jira review ticket, and notify procurement. Use for annual vendor risk reviews.
      inputParameters:
      - name: vendor_number
        in: body
        type: string
        description: The SAP vendor number.
      steps:
      - name: get-vendor
        type: call
        call: sap.get-vendor
        with:
          vendor_number: '{{vendor_number}}'
      - name: compute-risk
        type: call
        call: snowflake.execute-statement
        with:
          statement: CALL PROCUREMENT.COMPUTE_VENDOR_RISK('{{vendor_number}}')
      - name: create-review
        type: call
        call: jira.create-issue
        with:
          project: VRISK
          issue_type: Task
          summary: 'Vendor risk review: {{get-vendor.name}} ({{vendor_number}}) - Score: {{compute-risk.risk_score}}'
      - name: notify-procurement
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_procurement_channel
          text: 'Vendor risk assessment complete for {{get-vendor.name}}: score {{compute-risk.risk_score}}. Review: {{create-review.key}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://wellsfargo-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: vendors
      path: /A_Supplier('{{vendor_number}}')
      inputParameters:
      - name: vendor_number
        in: path
      operations:
      - name: get-vendor
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: jira
    baseUri: https://wellsfargo.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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → vendor-risk-assessment-workflow.yml

Syncs Dealogic investment banking deal pipeline data to Snowflake, compares against targets, and notifies the deal team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Dealogic Deal Pipeline Sync
  description: Syncs Dealogic investment banking deal pipeline data to Snowflake, compares against targets, and notifies the deal team via Microsoft Teams.
  tags:
  - investment-banking
  - dealogic
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: dealogic_deal_pipeli
    port: 8080
    tools:
    - name: dealogic-deal
      description: Given an execution date, run the dealogic deal pipeline sync process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.DEALOGIC_DEAL_PIPELINE_SYNC LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.DEALOGIC_DEAL_PIPELINE_SYNC_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_dealogic_deal_pipeli_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → dealogic-deal-pipeline-sync.yml

Submits a ServiceNow change request for a planned banking system change and notifies the change approver in Microsoft Teams when the CAB review is scheduled.

naftiko: '0.5'
info:
  label: ServiceNow Change Request Approval Workflow
  description: Submits a ServiceNow change request for a planned banking system change and notifies the change approver in Microsoft Teams when the CAB review is scheduled.
  tags:
  - itsm
  - servicenow
  - microsoft-teams
  - change-management
  - approval
capability:
  exposes:
  - type: mcp
    namespace: change-mgmt
    port: 8080
    tools:
    - name: submit-system-change-request
      description: Given change details and an approver UPN, submit a ServiceNow change request and notify the approver in Microsoft Teams. Use for planned changes to core banking, payments, and compliance systems.
      inputParameters:
      - name: short_description
        in: body
        type: string
        description: Brief description of the planned change.
      - name: description
        in: body
        type: string
        description: Detailed description including impact assessment and rollback plan.
      - name: scheduled_start
        in: body
        type: string
        description: Scheduled start time in ISO 8601 format.
      - name: approver_upn
        in: body
        type: string
        description: Microsoft UPN of the change approver.
      steps:
      - name: create-change-request
        type: call
        call: servicenow-chg.create-change
        with:
          short_description: '{{short_description}}'
          description: '{{description}}'
          start_date: '{{scheduled_start}}'
          type: normal
      - name: notify-approver
        type: call
        call: msteams-chg.send-message
        with:
          recipient_upn: '{{approver_upn}}'
          text: 'Change request submitted for your approval: {{short_description}}. Change number: {{create-change-request.number}}. Scheduled: {{scheduled_start}}. Review in ServiceNow.'
  consumes:
  - type: http
    namespace: servicenow-chg
    baseUri: https://wellsfargo.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-chg
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /users/{{upn}}/chats
      inputParameters:
      - name: upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → servicenow-change-request-approval-workflow.yml

Sends a message to a Microsoft Teams channel for team notifications and alerts.

naftiko: '0.5'
info:
  label: Microsoft Teams Channel Message Sender
  description: Sends a message to a Microsoft Teams channel for team notifications and alerts.
  tags:
  - communication
  - microsoft-teams
  - banking
capability:
  exposes:
  - type: mcp
    namespace: messaging
    port: 8080
    tools:
    - name: send-channel-message
      description: Given a Teams channel ID and message text, post the message to the channel. Use for automated notifications.
      inputParameters:
      - name: channel_id
        in: body
        type: string
        description: The Microsoft Teams channel ID.
      - name: message_text
        in: body
        type: string
        description: The message body text to send.
      call: msteams.send-message
      with:
        channel_id: '{{channel_id}}'
        text: '{{message_text}}'
      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: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → microsoft-teams-channel-message-sender.yml

When a high-value wire transfer exceeds the threshold, pulls transaction details from Snowflake, creates a ServiceNow approval task, and escalates to the treasury team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Wire Transfer Approval Escalation
  description: When a high-value wire transfer exceeds the threshold, pulls transaction details from Snowflake, creates a ServiceNow approval task, and escalates to the treasury team via Microsoft Teams.
  tags:
  - treasury
  - snowflake
  - servicenow
  - microsoft-teams
  - banking
capability:
  exposes:
  - type: mcp
    namespace: treasury-ops
    port: 8080
    tools:
    - name: escalate-wire-transfer
      description: Given a wire transfer ID and amount, verify the transaction, create an approval task, and notify treasury. Use for wire transfers above the auto-approval limit.
      inputParameters:
      - name: transfer_id
        in: body
        type: string
        description: The wire transfer transaction ID.
      - name: amount
        in: body
        type: string
        description: The transfer amount in USD.
      steps:
      - name: get-transfer
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM TREASURY.WIRE_TRANSFERS WHERE transfer_id='{{transfer_id}}'
      - name: create-approval
        type: call
        call: servicenow.create-incident
        with:
          category: wire_approval
          short_description: 'Wire transfer approval: {{transfer_id}} (${{amount}})'
      - name: notify-treasury
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_treasury_channel
          text: 'Wire transfer {{transfer_id}} for ${{amount}} requires approval. Task: {{create-approval.number}}. Beneficiary: {{get-transfer.beneficiary}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: servicenow
    baseUri: https://wellsfargo.service-now.com/api/now
    authentication:
      type: 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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → wire-transfer-approval-escalation.yml

Runs data quality checks against Snowflake SLA definitions, logs results, creates ServiceNow incidents for violations, and alerts data stewards via Microsoft Teams.

naftiko: '0.5'
info:
  label: Snowflake Data Quality SLA Monitor
  description: Runs data quality checks against Snowflake SLA definitions, logs results, creates ServiceNow incidents for violations, and alerts data stewards via Microsoft Teams.
  tags:
  - data-quality
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: snowflake_data_quali
    port: 8080
    tools:
    - name: snowflake-data
      description: Given an execution date, run the snowflake data quality sla monitor process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SNOWFLAKE_DATA_QUALITY_SLA_MONITOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SNOWFLAKE_DATA_QUALITY_SLA_MONITOR_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: data-quality
          short_description: Snowflake Data Quality SLA Monitor processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_snowflake_data_quali_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: servicenow
    baseUri: https://wellsfargo.service-now.com/api/now
    authentication:
      type: 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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → snowflake-data-quality-sla-monitor.yml

Monitors Azure Service Bus dead-letter queues, logs failed messages in Snowflake, creates Jira investigation tickets, and alerts the integration team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Azure Service Bus Dead Letter Handler
  description: Monitors Azure Service Bus dead-letter queues, logs failed messages in Snowflake, creates Jira investigation tickets, and alerts the integration team via Microsoft Teams.
  tags:
  - integration
  - azure-service-bus
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: azure_service_bus_de
    port: 8080
    tools:
    - name: azure-service
      description: Given an execution date, run the azure service bus dead letter handler process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.AZURE_SERVICE_BUS_DEAD_LETTER_HANDLER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.AZURE_SERVICE_BUS_DEAD_LETTER_HANDLER_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: WFOPS
          issue_type: Task
          summary: Azure Service Bus Dead Letter Handler - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_azure_service_bus_de_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: jira
    baseUri: https://wellsfargo.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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → azure-service-bus-dead-letter-handler.yml

Validates a digital banking release by checking the GitHub Actions pipeline, running smoke tests via Datadog, and posting results to Microsoft Teams.

naftiko: '0.5'
info:
  label: Digital Banking Release Validation
  description: Validates a digital banking release by checking the GitHub Actions pipeline, running smoke tests via Datadog, and posting results to Microsoft Teams.
  tags:
  - devops
  - github-actions
  - datadog
  - microsoft-teams
  - banking
capability:
  exposes:
  - type: mcp
    namespace: release-ops
    port: 8080
    tools:
    - name: validate-release
      description: Given a GitHub repository and release tag, verify CI pipeline passed, trigger synthetic tests, and notify the release team. Use after each digital banking deployment.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: The GitHub repository name.
      - name: release_tag
        in: body
        type: string
        description: The release tag (e.g., v2.5.1).
      steps:
      - name: check-pipeline
        type: call
        call: github.get-workflow-run
        with:
          repo: '{{repo_name}}'
          tag: '{{release_tag}}'
      - name: run-synthetics
        type: call
        call: datadog.trigger-synthetics
        with:
          test_ids: $secrets.digital_banking_test_ids
      - name: notify-release
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_release_channel
          text: 'Release {{release_tag}} for {{repo_name}}: CI {{check-pipeline.conclusion}}, synthetics {{run-synthetics.status}}.'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflow-runs
      path: /repos/wellsfargo/{{repo}}/actions/runs?branch={{tag}}
      inputParameters:
      - name: repo
        in: path
      - name: tag
        in: query
      operations:
      - name: get-workflow-run
        method: GET
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: synthetics
      path: /synthetics/tests/trigger
      operations:
      - name: trigger-synthetics
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → digital-banking-release-validation.yml

Queries Snowflake task history for failed ETL jobs supporting core banking and compliance data feeds, creates ServiceNow tickets for failures, and notifies the data engineering team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Snowflake Data Pipeline Health Monitor
  description: Queries Snowflake task history for failed ETL jobs supporting core banking and compliance data feeds, creates ServiceNow tickets for failures, and notifies the data engineering team via Microsoft Teams.
  tags:
  - data
  - snowflake
  - servicenow
  - microsoft-teams
  - monitoring
  - etl
capability:
  exposes:
  - type: mcp
    namespace: data-pipeline-health
    port: 8080
    tools:
    - name: monitor-etl-pipeline-health
      description: Given a Snowflake schema and lookback window in hours, check for failed task runs, create a ServiceNow task for each failure, and post a health summary to the data-engineering Teams channel. Use for daily ETL health checks on banking data pipelines.
      inputParameters:
      - name: schema_name
        in: body
        type: string
        description: Snowflake schema to check (e.g. BANKING.ETL_CORE).
      - name: lookback_hours
        in: body
        type: integer
        description: Hours of task history to inspect (e.g. 24).
      steps:
      - name: check-task-failures
        type: call
        call: snowflake-etl.execute-statement
        with:
          statement: SELECT name, state, error_message, scheduled_time FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY(SCHEDULED_TIME_RANGE_START=>DATEADD('hour', -{{lookback_hours}}, CURRENT_TIMESTAMP()))) WHERE STATE = 'FAILED'
      - name: create-failure-ticket
        type: call
        call: servicenow-data.create-task
        with:
          category: data_pipeline
          short_description: ETL failures in {{schema_name}} — last {{lookback_hours}}h
          description: 'Failed Snowflake tasks detected: {{check-task-failures.row_count}} failures

            {{check-task-failures.results}}'
      - name: notify-data-eng
        type: call
        call: msteams-dataeng.send-message
        with:
          channel_id: $secrets.teams_dataeng_channel_id
          text: 'Pipeline health: {{schema_name}} — {{check-task-failures.row_count}} failures in last {{lookback_hours}}h. ServiceNow: {{create-failure-ticket.number}}.'
  consumes:
  - type: http
    namespace: snowflake-etl
    baseUri: https://wellsfargo.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: servicenow-data
    baseUri: https://wellsfargo.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-dataeng
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → snowflake-data-pipeline-health-monitor.yml

Processes GitHub Dependabot vulnerability alerts, logs them in Snowflake, creates Jira remediation tickets, and notifies the security engineering team via Microsoft Teams.

naftiko: '0.5'
info:
  label: GitHub Dependabot Vulnerability Triage
  description: Processes GitHub Dependabot vulnerability alerts, logs them in Snowflake, creates Jira remediation tickets, and notifies the security engineering team via Microsoft Teams.
  tags:
  - security
  - github
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: github_dependabot_vu
    port: 8080
    tools:
    - name: github-dependabot
      description: Given an execution date, run the github dependabot vulnerability triage process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.GITHUB_DEPENDABOT_VULNERABILITY_TRIAGE LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.GITHUB_DEPENDABOT_VULNERABILITY_TRIAGE_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: WFOPS
          issue_type: Task
          summary: GitHub Dependabot Vulnerability Triage - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_github_dependabot_vu_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: jira
    baseUri: https://wellsfargo.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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → github-dependabot-vulnerability-triage.yml

Retrieves regulatory documents from SharePoint, summarizes them using the OpenAI API, stores summaries in Snowflake, and distributes to the legal team via Microsoft Teams.

naftiko: '0.5'
info:
  label: OpenAI Document Summarization Pipeline
  description: Retrieves regulatory documents from SharePoint, summarizes them using the OpenAI API, stores summaries in Snowflake, and distributes to the legal team via Microsoft Teams.
  tags:
  - ai
  - openai
  - sharepoint
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: openai_document_summ
    port: 8080
    tools:
    - name: openai-document
      description: Given an execution date, run the openai document summarization pipeline process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.OPENAI_DOCUMENT_SUMMARIZATION_PIPELINE LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.OPENAI_DOCUMENT_SUMMARIZATION_PIPELINE_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_openai_document_summ_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → openai-document-summarization-pipeline.yml

Retrieves a Confluence page by ID and returns the title, body content, and last modified date.

naftiko: '0.5'
info:
  label: Confluence Knowledge Base Lookup
  description: Retrieves a Confluence page by ID and returns the title, body content, and last modified date.
  tags:
  - documentation
  - confluence
  - banking
capability:
  exposes:
  - type: mcp
    namespace: wiki-lookup
    port: 8080
    tools:
    - name: get-page
      description: Given a Confluence page ID, return the page title, content body, and last modified date. Use for knowledge base lookups.
      inputParameters:
      - name: page_id
        in: body
        type: string
        description: The Confluence page ID.
      call: confluence.get-page
      with:
        page_id: '{{page_id}}'
      outputParameters:
      - name: title
        type: string
        mapping: $.title
      - name: body
        type: string
        mapping: $.body.storage.value
      - name: last_modified
        type: string
        mapping: $.version.when
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://wellsfargo.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content/{{page_id}}?expand=body.storage,version
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: get-page
        method: GET
Open in Framework → View in Fleet → confluence-knowledge-base-lookup.yml

When Splunk Enterprise Security generates a critical notable event, creates a ServiceNow P1 security incident and posts a triage summary to the SOC Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Splunk SIEM Alert to Incident Chain
  description: When Splunk Enterprise Security generates a critical notable event, creates a ServiceNow P1 security incident and posts a triage summary to the SOC Microsoft Teams channel.
  tags:
  - security
  - splunk
  - servicenow
  - microsoft-teams
  - secops
  - siem
capability:
  exposes:
  - type: mcp
    namespace: siem-ops
    port: 8080
    tools:
    - name: handle-siem-alert
      description: Given a Splunk notable event ID, severity, and description, create a ServiceNow security incident and alert the SOC Teams channel. Invoke on critical or high Splunk ES notable events for financial system threats.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: Splunk notable event ID from Enterprise Security.
      - name: severity
        in: body
        type: string
        description: 'Event severity: critical, high, medium.'
      - name: event_description
        in: body
        type: string
        description: Human-readable description of the notable event.
      - name: affected_system
        in: body
        type: string
        description: Name of the affected banking system or application.
      steps:
      - name: create-si-incident
        type: call
        call: servicenow-siem.create-incident
        with:
          category: security
          subcategory: siem_alert
          impact: '{{severity}}'
          short_description: 'SIEM alert: {{event_description}} on {{affected_system}}'
          description: 'Splunk event {{event_id}}: {{event_description}}. Affected: {{affected_system}}. Severity: {{severity}}.'
      - name: alert-soc-team
        type: call
        call: msteams-siem.send-message
        with:
          channel_id: $secrets.teams_soc_channel_id
          text: 'SIEM Incident: {{event_description}} | System: {{affected_system}} | Severity: {{severity}} | ServiceNow: {{create-si-incident.number}} | Splunk: {{event_id}}'
  consumes:
  - type: http
    namespace: servicenow-siem
    baseUri: https://wellsfargo.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-incident
        method: POST
  - type: http
    namespace: msteams-siem
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → splunk-siem-alert-to-incident-chain.yml

Scans vulnerability data in Snowflake, creates Jira remediation tickets for critical findings, and alerts the security team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Cybersecurity Vulnerability Remediation Tracker
  description: Scans vulnerability data in Snowflake, creates Jira remediation tickets for critical findings, and alerts the security team via Microsoft Teams.
  tags:
  - security
  - vulnerability
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cybersecurity_vulner
    port: 8080
    tools:
    - name: cybersecurity-vulnerability
      description: Given an execution date, run the cybersecurity vulnerability remediation tracker process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.CYBERSECURITY_VULNERABILITY_REMEDIATION_TRACKER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.CYBERSECURITY_VULNERABILITY_REMEDIATION_TRACKER_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: WFOPS
          issue_type: Task
          summary: Cybersecurity Vulnerability Remediation Tracker - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_cybersecurity_vulner_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: jira
    baseUri: https://wellsfargo.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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → cybersecurity-vulnerability-remediation-tracker.yml

Returns current headcount by department, cost center, and business line from Workday for finance and workforce planning reporting.

naftiko: '0.5'
info:
  label: Workday Headcount and Cost Center Report
  description: Returns current headcount by department, cost center, and business line from Workday for finance and workforce planning reporting.
  tags:
  - hr
  - finance
  - workday
  - reporting
  - headcount
capability:
  exposes:
  - type: mcp
    namespace: hr-finance-reporting
    port: 8080
    tools:
    - name: get-headcount-report
      description: Returns active employee headcount grouped by department, cost center, and business line from Workday. Use for workforce planning, regulatory staffing disclosures, and budget reviews.
      call: workday.get-headcount
      outputParameters:
      - name: workers
        type: array
        mapping: $.data[*]
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: headcount
      path: /wellsfargo/workers
      operations:
      - name: get-headcount
        method: GET
Open in Framework → View in Fleet → workday-headcount-and-cost-center-report.yml

When a Figma design is marked as ready, creates Jira development tickets with design links, and notifies the engineering team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Figma Design Handoff Workflow
  description: When a Figma design is marked as ready, creates Jira development tickets with design links, and notifies the engineering team via Microsoft Teams.
  tags:
  - design
  - figma
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: figma_design_handoff
    port: 8080
    tools:
    - name: figma-design
      description: Given an execution date, run the figma design handoff workflow process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.FIGMA_DESIGN_HANDOFF_WORKFLOW LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.FIGMA_DESIGN_HANDOFF_WORKFLOW_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: WFOPS
          issue_type: Task
          summary: Figma Design Handoff Workflow - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_figma_design_handoff_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: jira
    baseUri: https://wellsfargo.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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → figma-design-handoff-workflow.yml

Reconciles Bloomberg AIM trade records against Snowflake settlement data, flags breaks, and notifies the middle office via Microsoft Teams.

naftiko: '0.5'
info:
  label: Bloomberg AIM Trade Reconciliation
  description: Reconciles Bloomberg AIM trade records against Snowflake settlement data, flags breaks, and notifies the middle office via Microsoft Teams.
  tags:
  - trading
  - bloomberg
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: bloomberg_aim_trade_
    port: 8080
    tools:
    - name: bloomberg-aim
      description: Given an execution date, run the bloomberg aim trade reconciliation process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.BLOOMBERG_AIM_TRADE_RECONCILIATION LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.BLOOMBERG_AIM_TRADE_RECONCILIATION_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_bloomberg_aim_trade__channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → bloomberg-aim-trade-reconciliation.yml

Tracks loan origination status by querying Snowflake for pipeline data, updating the Salesforce opportunity, and publishing a summary to Microsoft Teams.

naftiko: '0.5'
info:
  label: Loan Origination Status Tracker
  description: Tracks loan origination status by querying Snowflake for pipeline data, updating the Salesforce opportunity, and publishing a summary to Microsoft Teams.
  tags:
  - lending
  - snowflake
  - salesforce
  - microsoft-teams
  - banking
capability:
  exposes:
  - type: mcp
    namespace: lending-ops
    port: 8080
    tools:
    - name: track-loan-status
      description: Given a loan application ID, pull pipeline status from Snowflake, sync to Salesforce, and notify the originations team. Use for daily loan pipeline reviews.
      inputParameters:
      - name: loan_app_id
        in: body
        type: string
        description: The loan application ID.
      steps:
      - name: get-pipeline-status
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM LENDING.LOAN_PIPELINE WHERE app_id='{{loan_app_id}}'
      - name: update-opportunity
        type: call
        call: salesforce.update-opportunity
        with:
          opportunity_id: '{{get-pipeline-status.sf_opportunity_id}}'
          stage: '{{get-pipeline-status.current_stage}}'
      - name: notify-originations
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_lending_channel
          text: 'Loan {{loan_app_id}} status: {{get-pipeline-status.current_stage}}. Updated in Salesforce.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: salesforce
    baseUri: https://wellsfargo.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: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → loan-origination-status-tracker.yml

Orchestrates PCI-DSS compliance scanning by triggering Palo Alto vulnerability scans, storing results in Snowflake, creating remediation tickets in Jira, and notifying the security team.

naftiko: '0.5'
info:
  label: PCI-DSS Compliance Scan Chain
  description: Orchestrates PCI-DSS compliance scanning by triggering Palo Alto vulnerability scans, storing results in Snowflake, creating remediation tickets in Jira, and notifying the security team.
  tags:
  - security
  - pci
  - palo-alto-networks
  - snowflake
  - jira
  - microsoft-teams
  - banking
capability:
  exposes:
  - type: mcp
    namespace: security-compliance
    port: 8080
    tools:
    - name: run-pci-scan
      description: Given a target environment and scan scope, run vulnerability scans, record findings, create remediation tickets, and alert security. Use for quarterly PCI-DSS compliance.
      inputParameters:
      - name: environment
        in: body
        type: string
        description: Target environment (PRODUCTION, STAGING, DR).
      - name: scan_scope
        in: body
        type: string
        description: Scan scope (FULL, DELTA, CARDHOLDER_ONLY).
      steps:
      - name: trigger-scan
        type: call
        call: paloalto.run-scan
        with:
          environment: '{{environment}}'
          scope: '{{scan_scope}}'
      - name: store-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO SECURITY.PCI_SCAN_RESULTS VALUES ('{{environment}}', '{{scan_scope}}', CURRENT_TIMESTAMP)
      - name: create-remediation
        type: call
        call: jira.create-issue
        with:
          project: PCIDSS
          issue_type: Task
          summary: 'PCI scan findings: {{environment}} ({{scan_scope}}) - {{trigger-scan.finding_count}} issues'
      - name: notify-security
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_security_channel
          text: 'PCI-DSS scan complete for {{environment}}: {{trigger-scan.finding_count}} findings. Remediation: {{create-remediation.key}}.'
  consumes:
  - type: http
    namespace: paloalto
    baseUri: https://panorama.wellsfargo.com/restapi/v10.1
    authentication:
      type: apikey
      key: X-PAN-KEY
      value: $secrets.paloalto_api_key
      placement: header
    resources:
    - name: scans
      path: /vulnerability/scan
      operations:
      - name: run-scan
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: jira
    baseUri: https://wellsfargo.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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → pci-dss-compliance-scan-chain.yml

Identifies unused artifacts in JFrog Artifactory, logs cleanup candidates in Snowflake, creates Jira cleanup tasks, and notifies the DevOps team via Microsoft Teams.

naftiko: '0.5'
info:
  label: JFrog Artifactory Artifact Cleanup
  description: Identifies unused artifacts in JFrog Artifactory, logs cleanup candidates in Snowflake, creates Jira cleanup tasks, and notifies the DevOps team via Microsoft Teams.
  tags:
  - devops
  - jfrog-artifactory
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: jfrog_artifactory_ar
    port: 8080
    tools:
    - name: jfrog-artifactory
      description: Given an execution date, run the jfrog artifactory artifact cleanup process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.JFROG_ARTIFACTORY_ARTIFACT_CLEANUP LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.JFROG_ARTIFACTORY_ARTIFACT_CLEANUP_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: WFOPS
          issue_type: Task
          summary: JFrog Artifactory Artifact Cleanup - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_jfrog_artifactory_ar_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: jira
    baseUri: https://wellsfargo.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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → jfrog-artifactory-artifact-cleanup.yml

When a Salesforce opportunity is closed (won or lost), syncs the outcome data to Snowflake for sales analytics and posts a notification to the sales leadership Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Win/Loss Snowflake Sync
  description: When a Salesforce opportunity is closed (won or lost), syncs the outcome data to Snowflake for sales analytics and posts a notification to the sales leadership Microsoft Teams channel.
  tags:
  - sales
  - salesforce
  - snowflake
  - microsoft-teams
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: sales-analytics
    port: 8080
    tools:
    - name: sync-opportunity-outcome
      description: Given a Salesforce opportunity ID and close type (won or lost), retrieve full opportunity details, write the record to Snowflake sales analytics, and notify the sales leadership Teams channel. Invoke when an opportunity stage changes to Closed Won or Closed Lost.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID (18-character).
      - name: close_type
        in: body
        type: string
        description: 'Close outcome: won or lost.'
      steps:
      - name: get-opportunity
        type: call
        call: salesforce-opp.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: write-to-snowflake
        type: call
        call: snowflake-sales.execute-statement
        with:
          statement: INSERT INTO SALES.OPPORTUNITY_OUTCOMES VALUES ('{{opportunity_id}}', '{{get-opportunity.name}}', '{{close_type}}', {{get-opportunity.amount}}, '{{get-opportunity.close_date}}')
      - name: notify-sales-leadership
        type: call
        call: msteams-sales-ops.send-message
        with:
          channel_id: $secrets.teams_sales_channel_id
          text: 'Opportunity {{close_type}}: {{get-opportunity.name}} — {{get-opportunity.amount}} {{get-opportunity.currency_iso_code}}. Closed by {{get-opportunity.owner_name}}.'
  consumes:
  - type: http
    namespace: salesforce-opp
    baseUri: https://wellsfargo.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: snowflake-sales
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams-sales-ops
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-opportunity-win-loss-snowflake-sync.yml

Executes a read-only SQL query against Snowflake and returns the result set for ad-hoc analytics.

naftiko: '0.5'
info:
  label: Snowflake Ad-Hoc Query Executor
  description: Executes a read-only SQL query against Snowflake and returns the result set for ad-hoc analytics.
  tags:
  - data
  - snowflake
  - banking
capability:
  exposes:
  - type: mcp
    namespace: data-query
    port: 8080
    tools:
    - name: execute-query
      description: Given a SQL statement, execute it against the Wells Fargo Snowflake warehouse and return the result set. Use for ad-hoc reporting queries.
      inputParameters:
      - name: sql_statement
        in: body
        type: string
        description: The SQL SELECT statement to execute.
      call: snowflake.execute-statement
      with:
        statement: '{{sql_statement}}'
      outputParameters:
      - name: row_count
        type: integer
        mapping: $.resultSetMetaData.numRows
      - name: rows
        type: array
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
Open in Framework → View in Fleet → snowflake-ad-hoc-query-executor.yml

Prepares stress test data by aggregating loan portfolios in Snowflake, validates data quality, refreshes Power BI reports, and notifies the CCAR team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Quarterly Stress Test Data Preparation
  description: Prepares stress test data by aggregating loan portfolios in Snowflake, validates data quality, refreshes Power BI reports, and notifies the CCAR team via Microsoft Teams.
  tags:
  - risk
  - regulatory
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: quarterly_stress_tes
    port: 8080
    tools:
    - name: quarterly-stress
      description: Given an execution date, run the quarterly stress test data preparation process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.QUARTERLY_STRESS_TEST_DATA_PREPARATION LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.QUARTERLY_STRESS_TEST_DATA_PREPARATION_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_quarterly_stress_tes_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → quarterly-stress-test-data-preparation.yml

Analyzes Qlik Sense application usage patterns from Snowflake, identifies underutilized assets, creates Jira optimization tasks, and notifies the BI team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Qlik Sense App Usage Analyzer
  description: Analyzes Qlik Sense application usage patterns from Snowflake, identifies underutilized assets, creates Jira optimization tasks, and notifies the BI team via Microsoft Teams.
  tags:
  - analytics
  - qlik-sense
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: qlik_sense_app_usage
    port: 8080
    tools:
    - name: qlik-sense
      description: Given an execution date, run the qlik sense app usage analyzer process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.QLIK_SENSE_APP_USAGE_ANALYZER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.QLIK_SENSE_APP_USAGE_ANALYZER_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: WFOPS
          issue_type: Task
          summary: Qlik Sense App Usage Analyzer - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_qlik_sense_app_usage_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: jira
    baseUri: https://wellsfargo.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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → qlik-sense-app-usage-analyzer.yml

Triggers Power Query data model refreshes, validates row counts in Snowflake, and notifies the BI team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Power Query Data Model Refresh Chain
  description: Triggers Power Query data model refreshes, validates row counts in Snowflake, and notifies the BI team via Microsoft Teams.
  tags:
  - analytics
  - power-query
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: power_query_data_mod
    port: 8080
    tools:
    - name: power-query
      description: Given an execution date, run the power query data model refresh chain process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.POWER_QUERY_DATA_MODEL_REFRESH_CHAIN LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.POWER_QUERY_DATA_MODEL_REFRESH_CHAIN_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_power_query_data_mod_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → power-query-data-model-refresh-chain.yml

Monitors IBM MQ queue depths from Snowflake metrics, flags queues approaching capacity, creates Jira tasks, and alerts the middleware team via Microsoft Teams.

naftiko: '0.5'
info:
  label: IBM MQ Queue Depth Monitor
  description: Monitors IBM MQ queue depths from Snowflake metrics, flags queues approaching capacity, creates Jira tasks, and alerts the middleware team via Microsoft Teams.
  tags:
  - integration
  - ibm-mq
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ibm_mq_queue_depth_m
    port: 8080
    tools:
    - name: ibm-mq
      description: Given an execution date, run the ibm mq queue depth monitor process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.IBM_MQ_QUEUE_DEPTH_MONITOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.IBM_MQ_QUEUE_DEPTH_MONITOR_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: WFOPS
          issue_type: Task
          summary: IBM MQ Queue Depth Monitor - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_ibm_mq_queue_depth_m_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: jira
    baseUri: https://wellsfargo.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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → ibm-mq-queue-depth-monitor.yml

Checks the health of a SQL Server database, returning size, active connections, and backup status.

naftiko: '0.5'
info:
  label: SQL Server Database Health Check
  description: Checks the health of a SQL Server database, returning size, active connections, and backup status.
  tags:
  - database
  - sql-server
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: database
    port: 8080
    tools:
    - name: get-db-health
      description: Given a SQL Server instance and database name, retrieve health metrics. Use for database monitoring.
      inputParameters:
      - name: instance
        in: body
        type: string
        description: The SQL Server instance name.
      - name: database_name
        in: body
        type: string
        description: The database name.
      call: snowflake.execute-statement
      with:
        statement: SELECT * FROM DBA.SQLSERVER_HEALTH WHERE instance='{{instance}}' AND db_name='{{database_name}}'
      outputParameters:
      - name: size_gb
        type: string
        mapping: $.data.rows[0].size_gb
      - name: backup_status
        type: string
        mapping: $.data.rows[0].backup_status
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
Open in Framework → View in Fleet → sql-server-database-health-check.yml

When deposit rates change, updates the rate table in Snowflake, refreshes the Power BI dashboard, and notifies branch managers and treasury via Microsoft Teams.

naftiko: '0.5'
info:
  label: Deposit Rate Change Propagation
  description: When deposit rates change, updates the rate table in Snowflake, refreshes the Power BI dashboard, and notifies branch managers and treasury via Microsoft Teams.
  tags:
  - treasury
  - snowflake
  - power-bi
  - microsoft-teams
  - banking
capability:
  exposes:
  - type: mcp
    namespace: rates-ops
    port: 8080
    tools:
    - name: propagate-rate-change
      description: Given a product type and new rate, update the rate table, refresh dashboards, and notify stakeholders. Use when the ALCO committee approves rate changes.
      inputParameters:
      - name: product_type
        in: body
        type: string
        description: The deposit product type (e.g., SAVINGS, CD_12M, MMDA).
      - name: new_rate
        in: body
        type: string
        description: The new interest rate as a decimal (e.g., 0.0425).
      steps:
      - name: update-rate
        type: call
        call: snowflake.execute-statement
        with:
          statement: UPDATE TREASURY.DEPOSIT_RATES SET rate={{new_rate}}, effective_date=CURRENT_DATE WHERE product='{{product_type}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.trigger-refresh
        with:
          dataset_id: $secrets.rates_dataset_id
      - name: notify-treasury
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_treasury_channel
          text: 'Deposit rate update: {{product_type}} now {{new_rate}}. Dashboard refreshed.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: refreshes
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → deposit-rate-change-propagation.yml

Executes SAP period-end close steps, validates balancing entries in Snowflake, and notifies the accounting team via Microsoft Teams with close status.

naftiko: '0.5'
info:
  label: SAP Period-End Close Automation
  description: Executes SAP period-end close steps, validates balancing entries in Snowflake, and notifies the accounting team via Microsoft Teams with close status.
  tags:
  - finance
  - sap
  - snowflake
  - microsoft-teams
  - accounting
capability:
  exposes:
  - type: mcp
    namespace: sap_period_end_close
    port: 8080
    tools:
    - name: sap-period
      description: Given an execution date, run the sap period-end close automation process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SAP_PERIOD_END_CLOSE_AUTOMATION LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SAP_PERIOD_END_CLOSE_AUTOMATION_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_sap_period_end_close_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-period-end-close-automation.yml

Pulls Apigee API traffic and latency metrics, stores analytics in Snowflake, and distributes performance reports to the API team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Apigee API Gateway Performance Report
  description: Pulls Apigee API traffic and latency metrics, stores analytics in Snowflake, and distributes performance reports to the API team via Microsoft Teams.
  tags:
  - api-management
  - apigee
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: apigee_api_gateway_p
    port: 8080
    tools:
    - name: apigee-api
      description: Given an execution date, run the apigee api gateway performance report process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.APIGEE_API_GATEWAY_PERFORMANCE_REPORT LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.APIGEE_API_GATEWAY_PERFORMANCE_REPORT_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_apigee_api_gateway_p_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → apigee-api-gateway-performance-report.yml

Retrieves mortgage application documents from Salesforce, validates completeness in Snowflake, and notifies the underwriting team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Mortgage Application Document Verification
  description: Retrieves mortgage application documents from Salesforce, validates completeness in Snowflake, and notifies the underwriting team via Microsoft Teams.
  tags:
  - banking
  - mortgage
  - salesforce
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: mortgage-ops
    port: 8080
    tools:
    - name: verify-mortgage-docs
      description: Given a mortgage application ID, verify document completeness and notify underwriting. Use for mortgage pipeline processing.
      inputParameters:
      - name: application_id
        in: body
        type: string
        description: The mortgage application ID.
      steps:
      - name: get-application
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{application_id}}'
      - name: check-documents
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT COUNT(*) as doc_count FROM MORTGAGE.APPLICATION_DOCS WHERE app_id = '{{application_id}}'
      - name: notify-underwriting
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_underwriting_channel
          text: 'Mortgage app {{application_id}} ({{get-application.stage}}): {{check-documents.doc_count}} documents uploaded.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://wellsfargo.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: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → mortgage-application-document-verification.yml

Triggers a Power BI dataset refresh for regulatory compliance dashboards and posts the refresh status to the compliance Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Power BI Regulatory Dashboard Refresh
  description: Triggers a Power BI dataset refresh for regulatory compliance dashboards and posts the refresh status to the compliance Microsoft Teams channel.
  tags:
  - compliance
  - data
  - power-bi
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: compliance-reporting
    port: 8080
    tools:
    - name: refresh-regulatory-dashboard
      description: Given a Power BI workspace ID and dataset ID, trigger a refresh for a regulatory compliance dashboard and post the result to the compliance Teams channel. Use after Snowflake regulatory data pipelines complete.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: Power BI workspace (group) ID.
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset ID for the regulatory dashboard.
      - name: report_name
        in: body
        type: string
        description: Human-readable name of the regulatory report (e.g. CCAR Dashboard).
      steps:
      - name: trigger-refresh
        type: call
        call: powerbi.trigger-refresh
        with:
          group_id: '{{workspace_id}}'
          dataset_id: '{{dataset_id}}'
      - name: notify-compliance
        type: call
        call: msteams-pbi.send-message
        with:
          channel_id: $secrets.teams_compliance_channel_id
          text: 'Power BI refresh triggered: {{report_name}} (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: dataset-refreshes
      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-pbi
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → power-bi-regulatory-dashboard-refresh.yml

When a fraud alert is raised, pulls the transaction details from Snowflake, creates a Jira investigation ticket, and sends an urgent notification to the fraud operations team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Fraud Alert Investigation Chain
  description: When a fraud alert is raised, pulls the transaction details from Snowflake, creates a Jira investigation ticket, and sends an urgent notification to the fraud operations team via Microsoft Teams.
  tags:
  - fraud
  - snowflake
  - jira
  - microsoft-teams
  - banking
capability:
  exposes:
  - type: mcp
    namespace: fraud-ops
    port: 8080
    tools:
    - name: investigate-fraud-alert
      description: Given a transaction ID and alert severity, pull transaction details, open a Jira investigation ticket, and notify fraud ops. Use when real-time fraud alerts are triggered.
      inputParameters:
      - name: transaction_id
        in: body
        type: string
        description: The transaction ID flagged for fraud.
      - name: alert_severity
        in: body
        type: string
        description: Alert severity level (HIGH, MEDIUM, LOW).
      steps:
      - name: get-transaction
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM FRAUD.TRANSACTIONS WHERE txn_id='{{transaction_id}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: FRAUD
          issue_type: Bug
          summary: 'Fraud alert [{{alert_severity}}]: txn {{transaction_id}}'
      - name: notify-fraud-ops
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_fraud_channel
          text: 'Fraud alert for txn {{transaction_id}} ({{alert_severity}}). Investigation ticket: {{create-ticket.key}}. Amount: {{get-transaction.amount}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: jira
    baseUri: https://wellsfargo.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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → fraud-alert-investigation-chain.yml

Synchronizes branch staffing forecasts by pulling headcount from Workday, comparing to traffic data in Snowflake, and sending staffing recommendations to branch managers.

naftiko: '0.5'
info:
  label: Branch Staffing Forecast Sync
  description: Synchronizes branch staffing forecasts by pulling headcount from Workday, comparing to traffic data in Snowflake, and sending staffing recommendations to branch managers.
  tags:
  - hr
  - workday
  - snowflake
  - microsoft-teams
  - banking
capability:
  exposes:
  - type: mcp
    namespace: workforce-planning
    port: 8080
    tools:
    - name: sync-branch-staffing
      description: Given a branch ID and forecast period, pull Workday headcount, compare to foot traffic data, and notify branch management with recommendations. Use for quarterly staffing reviews.
      inputParameters:
      - name: branch_id
        in: body
        type: string
        description: The branch location ID.
      - name: forecast_period
        in: body
        type: string
        description: The forecast period in YYYY-QN format.
      steps:
      - name: get-headcount
        type: call
        call: workday.get-headcount
        with:
          location_id: '{{branch_id}}'
      - name: get-traffic
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT avg_daily_traffic FROM OPS.BRANCH_TRAFFIC WHERE branch_id='{{branch_id}}' AND period='{{forecast_period}}'
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_branch_mgmt_channel
          text: 'Branch {{branch_id}} staffing: current headcount {{get-headcount.count}}, avg daily traffic {{get-traffic.avg_daily_traffic}} for {{forecast_period}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1/wellsfargo
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: headcount
      path: /workers?location={{location_id}}
      inputParameters:
      - name: location_id
        in: query
      operations:
      - name: get-headcount
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → branch-staffing-forecast-sync.yml

Checks the current status of a Datadog monitor and returns the overall state and last triggered time.

naftiko: '0.5'
info:
  label: Datadog Monitor Status Check
  description: Checks the current status of a Datadog monitor and returns the overall state and last triggered time.
  tags:
  - monitoring
  - datadog
  - banking
capability:
  exposes:
  - type: mcp
    namespace: observability
    port: 8080
    tools:
    - name: get-monitor-status
      description: Given a Datadog monitor ID, return the current overall status and last triggered timestamp. Use for operational health checks.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: The Datadog monitor ID.
      call: datadog.get-monitor
      with:
        monitor_id: '{{monitor_id}}'
      outputParameters:
      - name: overall_state
        type: string
        mapping: $.overall_state
      - name: last_triggered
        type: string
        mapping: $.overall_state_modified
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor/{{monitor_id}}
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: get-monitor
        method: GET
Open in Framework → View in Fleet → datadog-monitor-status-check.yml

Retrieves cost center details from SAP including responsible person and company code.

naftiko: '0.5'
info:
  label: SAP Cost Center Lookup
  description: Retrieves cost center details from SAP including responsible person and company code.
  tags:
  - finance
  - sap
  - cost-management
capability:
  exposes:
  - type: mcp
    namespace: finance
    port: 8080
    tools:
    - name: get-cost-center
      description: Given a SAP cost center ID, retrieve the master data. Use for budget allocation and reporting.
      inputParameters:
      - name: cost_center
        in: body
        type: string
        description: The SAP cost center ID.
      call: sap.get-cost-center
      with:
        cost_center: '{{cost_center}}'
      outputParameters:
      - name: description
        type: string
        mapping: $.d.CostCenterDescription
      - name: responsible_person
        type: string
        mapping: $.d.PersonResponsible
  consumes:
  - type: http
    namespace: sap
    baseUri: https://wellsfargo-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: cost-centers
      path: /A_CostCenter('{{cost_center}}')
      inputParameters:
      - name: cost_center
        in: path
      operations:
      - name: get-cost-center
        method: GET
Open in Framework → View in Fleet → sap-cost-center-lookup.yml

Pulls Salesforce win/loss data into Snowflake, generates analysis reports, refreshes Power BI dashboards, and sends insights to sales leadership via Microsoft Teams.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Win/Loss Analyzer
  description: Pulls Salesforce win/loss data into Snowflake, generates analysis reports, refreshes Power BI dashboards, and sends insights to sales leadership via Microsoft Teams.
  tags:
  - sales
  - salesforce
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: salesforce_opportuni
    port: 8080
    tools:
    - name: salesforce-opportunity
      description: Given an execution date, run the salesforce opportunity win/loss analyzer process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SALESFORCE_OPPORTUNITY_WIN_LOSS_ANALYZER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SALESFORCE_OPPORTUNITY_WIN_LOSS_ANALYZER_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_salesforce_opportuni_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-opportunity-win-loss-analyzer.yml

Checks the health status of a specified Azure resource, returning availability state.

naftiko: '0.5'
info:
  label: Azure Resource Health Check
  description: Checks the health status of a specified Azure resource, returning availability state.
  tags:
  - cloud
  - microsoft-azure
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: cloud
    port: 8080
    tools:
    - name: get-resource-health
      description: Given an Azure resource ID, retrieve its current availability status. Use for infrastructure monitoring.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: The full Azure resource ID path.
      call: azure.get-resource-health
      with:
        resource_id: '{{resource_id}}'
      outputParameters:
      - name: availability_state
        type: string
        mapping: $.properties.availabilityState
  consumes:
  - type: http
    namespace: azure
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: resource-health
      path: /{{resource_id}}/providers/Microsoft.ResourceHealth/availabilityStatuses/current
      inputParameters:
      - name: resource_id
        in: path
      operations:
      - name: get-resource-health
        method: GET
Open in Framework → View in Fleet → azure-resource-health-check.yml

Manages IT change requests by creating a ServiceNow change record, running pre-change health checks in Datadog, and notifying the CAB via Microsoft Teams.

naftiko: '0.5'
info:
  label: IT Change Management Chain
  description: Manages IT change requests by creating a ServiceNow change record, running pre-change health checks in Datadog, and notifying the CAB via Microsoft Teams.
  tags:
  - itsm
  - servicenow
  - datadog
  - microsoft-teams
  - banking
capability:
  exposes:
  - type: mcp
    namespace: change-mgmt
    port: 8080
    tools:
    - name: process-change-request
      description: Given a change description, risk level, and implementation window, create the ServiceNow record, validate system health, and notify the CAB. Use for production change management.
      inputParameters:
      - name: change_description
        in: body
        type: string
        description: Description of the proposed change.
      - name: risk_level
        in: body
        type: string
        description: 'Risk level: Low, Medium, High, Emergency.'
      steps:
      - name: create-change
        type: call
        call: servicenow.create-change
        with:
          description: '{{change_description}}'
          risk: '{{risk_level}}'
      - name: health-check
        type: call
        call: datadog.get-monitor
        with:
          monitor_id: $secrets.prod_health_monitor_id
      - name: notify-cab
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_cab_channel
          text: 'Change request {{create-change.number}}: {{change_description}}. Risk: {{risk_level}}. System health: {{health-check.overall_state}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://wellsfargo.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: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor/{{monitor_id}}
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: get-monitor
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → it-change-management-chain.yml

Retrieves a Grafana dashboard by UID and returns the title, panel count, and last updated timestamp.

naftiko: '0.5'
info:
  label: Grafana Dashboard Info Lookup
  description: Retrieves a Grafana dashboard by UID and returns the title, panel count, and last updated timestamp.
  tags:
  - monitoring
  - grafana
  - banking
capability:
  exposes:
  - type: mcp
    namespace: observability-dash
    port: 8080
    tools:
    - name: get-dashboard
      description: Given a Grafana dashboard UID, return the dashboard title, number of panels, and last updated time. Use for observability catalog queries.
      inputParameters:
      - name: dashboard_uid
        in: body
        type: string
        description: The Grafana dashboard UID.
      call: grafana.get-dashboard
      with:
        uid: '{{dashboard_uid}}'
      outputParameters:
      - name: title
        type: string
        mapping: $.dashboard.title
      - name: panel_count
        type: integer
        mapping: $.dashboard.panels.length
      - name: updated
        type: string
        mapping: $.meta.updated
  consumes:
  - type: http
    namespace: grafana
    baseUri: https://grafana.wellsfargo.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_token
    resources:
    - name: dashboards
      path: /dashboards/uid/{{uid}}
      inputParameters:
      - name: uid
        in: path
      operations:
      - name: get-dashboard
        method: GET
Open in Framework → View in Fleet → grafana-dashboard-info-lookup.yml

Executes a Snowflake query to produce a regulatory reporting dataset, validates row counts, and posts the validation summary to the compliance Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Snowflake Regulatory Reporting Data Product
  description: Executes a Snowflake query to produce a regulatory reporting dataset, validates row counts, and posts the validation summary to the compliance Microsoft Teams channel.
  tags:
  - compliance
  - data
  - snowflake
  - microsoft-teams
  - regulatory-reporting
capability:
  exposes:
  - type: mcp
    namespace: regulatory-reporting
    port: 8080
    tools:
    - name: run-regulatory-report
      description: Given a report name and reporting date, execute the corresponding Snowflake regulatory query, validate output row counts against expected thresholds, and post a validation summary to the compliance Teams channel. Use for OCC, Fed, and CFPB reporting runs.
      inputParameters:
      - name: report_name
        in: body
        type: string
        description: Regulatory report identifier (e.g. CALL_REPORT, HMDA, CCAR).
      - name: as_of_date
        in: body
        type: string
        description: Report as-of date in ISO 8601 format (YYYY-MM-DD).
      - name: expected_min_rows
        in: body
        type: integer
        description: Minimum expected row count for validation.
      steps:
      - name: execute-report-query
        type: call
        call: snowflake-reg.execute-statement
        with:
          statement: CALL REGULATORY.RUN_REPORT('{{report_name}}', '{{as_of_date}}')
      - name: notify-compliance
        type: call
        call: msteams-compliance.send-message
        with:
          channel_id: $secrets.teams_compliance_channel_id
          text: 'Regulatory report {{report_name}} as of {{as_of_date}} completed. Row count: {{execute-report-query.row_count}} (min expected: {{expected_min_rows}}). Status: {{execute-report-query.status}}.'
  consumes:
  - type: http
    namespace: snowflake-reg
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams-compliance
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → snowflake-regulatory-reporting-data-product.yml

Retrieves metadata for a GitHub repository including description, default branch, and open issue count.

naftiko: '0.5'
info:
  label: GitHub Repository Info Lookup
  description: Retrieves metadata for a GitHub repository including description, default branch, and open issue count.
  tags:
  - devops
  - github
  - banking
capability:
  exposes:
  - type: mcp
    namespace: scm-lookup
    port: 8080
    tools:
    - name: get-repo-info
      description: Given a GitHub org and repo name, return the description, default branch, and open issues count. Use for developer portal lookups.
      inputParameters:
      - name: org
        in: body
        type: string
        description: The GitHub organization name.
      - name: repo
        in: body
        type: string
        description: The GitHub repository name.
      call: github.get-repo
      with:
        org: '{{org}}'
        repo: '{{repo}}'
      outputParameters:
      - name: description
        type: string
        mapping: $.description
      - name: default_branch
        type: string
        mapping: $.default_branch
      - name: open_issues
        type: integer
        mapping: $.open_issues_count
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: repos
      path: /repos/{{org}}/{{repo}}
      inputParameters:
      - name: org
        in: path
      - name: repo
        in: path
      operations:
      - name: get-repo
        method: GET
Open in Framework → View in Fleet → github-repository-info-lookup.yml

When an employee separation is processed in Workday, creates a ServiceNow offboarding task for access revocation and notifies HR Operations via Microsoft Teams.

naftiko: '0.5'
info:
  label: Employee Separation and Access Revocation
  description: When an employee separation is processed in Workday, creates a ServiceNow offboarding task for access revocation and notifies HR Operations via Microsoft Teams.
  tags:
  - hr
  - offboarding
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: trigger-employee-offboarding
      description: Given a Workday employee ID and separation date, create a ServiceNow access revocation task and notify HR Operations in Microsoft Teams. Invoke on any voluntary or involuntary separation at Wells Fargo.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: Workday worker ID of the departing employee.
      - name: separation_date
        in: body
        type: string
        description: Last working day in ISO 8601 format (YYYY-MM-DD).
      - name: separation_type
        in: body
        type: string
        description: 'Separation type: voluntary, involuntary, retirement, transfer.'
      steps:
      - name: get-worker
        type: call
        call: workday-off.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: create-offboarding-task
        type: call
        call: servicenow-off.create-task
        with:
          category: hr_offboarding
          short_description: 'Offboarding: {{get-worker.full_name}} — {{separation_date}}'
          assigned_group: IT_Access_Management
          description: Employee {{workday_employee_id}} separating on {{separation_date}} ({{separation_type}}). All system access must be revoked.
      - name: notify-hr-ops
        type: call
        call: msteams-hrops.send-message
        with:
          channel_id: $secrets.teams_hrops_channel_id
          text: 'Offboarding initiated: {{get-worker.full_name}} ({{workday_employee_id}}). Separation: {{separation_date}} ({{separation_type}}). ServiceNow task: {{create-offboarding-task.number}}.'
  consumes:
  - type: http
    namespace: workday-off
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /wellsfargo/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: servicenow-off
    baseUri: https://wellsfargo.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-hrops
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → employee-separation-and-access-revocation.yml

When an n8n automation workflow fails, captures error details, creates a ServiceNow incident, and notifies the automation team via Microsoft Teams.

naftiko: '0.5'
info:
  label: n8n Workflow Failure Handler
  description: When an n8n automation workflow fails, captures error details, creates a ServiceNow incident, and notifies the automation team via Microsoft Teams.
  tags:
  - automation
  - n8n
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: n8n_workflow_failure
    port: 8080
    tools:
    - name: n8n-workflow
      description: Given an execution date, run the n8n workflow failure handler process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.N8N_WORKFLOW_FAILURE_HANDLER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.N8N_WORKFLOW_FAILURE_HANDLER_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: automation
          short_description: n8n Workflow Failure Handler processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_n8n_workflow_failure_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: servicenow
    baseUri: https://wellsfargo.service-now.com/api/now
    authentication:
      type: 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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → n8n-workflow-failure-handler.yml

Reconciles daily cash positions across banking systems in Snowflake, flags discrepancies, and notifies the treasury team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Treasury Cash Position Reconciliation
  description: Reconciles daily cash positions across banking systems in Snowflake, flags discrepancies, and notifies the treasury team via Microsoft Teams.
  tags:
  - treasury
  - finance
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: treasury_cash_positi
    port: 8080
    tools:
    - name: treasury-cash
      description: Given an execution date, run the treasury cash position reconciliation process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.TREASURY_CASH_POSITION_RECONCILIATION LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.TREASURY_CASH_POSITION_RECONCILIATION_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_treasury_cash_positi_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → treasury-cash-position-reconciliation.yml

Analyzes ATM error logs in Snowflake, identifies machines needing maintenance, creates ServiceNow work orders, and notifies the ATM operations team via Microsoft Teams.

naftiko: '0.5'
info:
  label: ATM Fleet Maintenance Scheduler
  description: Analyzes ATM error logs in Snowflake, identifies machines needing maintenance, creates ServiceNow work orders, and notifies the ATM operations team via Microsoft Teams.
  tags:
  - operations
  - atm
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: atm_fleet_maintenanc
    port: 8080
    tools:
    - name: atm-fleet
      description: Given an execution date, run the atm fleet maintenance scheduler process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.ATM_FLEET_MAINTENANCE_SCHEDULER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.ATM_FLEET_MAINTENANCE_SCHEDULER_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: operations
          short_description: ATM Fleet Maintenance Scheduler processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_atm_fleet_maintenanc_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: servicenow
    baseUri: https://wellsfargo.service-now.com/api/now
    authentication:
      type: 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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → atm-fleet-maintenance-scheduler.yml

Monitors Apache Kafka consumer group lag from Snowflake metrics, creates Jira tickets when lag exceeds thresholds, and alerts the streaming platform team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Apache Kafka Consumer Lag Monitor
  description: Monitors Apache Kafka consumer group lag from Snowflake metrics, creates Jira tickets when lag exceeds thresholds, and alerts the streaming platform team via Microsoft Teams.
  tags:
  - data-engineering
  - apache-kafka
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: apache_kafka_consume
    port: 8080
    tools:
    - name: apache-kafka
      description: Given an execution date, run the apache kafka consumer lag monitor process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.APACHE_KAFKA_CONSUMER_LAG_MONITOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.APACHE_KAFKA_CONSUMER_LAG_MONITOR_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: WFOPS
          issue_type: Task
          summary: Apache Kafka Consumer Lag Monitor - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_apache_kafka_consume_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: jira
    baseUri: https://wellsfargo.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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → apache-kafka-consumer-lag-monitor.yml

Identifies employees who have not completed benefits enrollment in Workday, logs status in Snowflake, and sends reminders via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Benefits Open Enrollment Reminder
  description: Identifies employees who have not completed benefits enrollment in Workday, logs status in Snowflake, and sends reminders via Microsoft Teams.
  tags:
  - hr
  - benefits
  - workday
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: workday_benefits_ope
    port: 8080
    tools:
    - name: workday-benefits
      description: Given an execution date, run the workday benefits open enrollment reminder process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.WORKDAY_BENEFITS_OPEN_ENROLLMENT_REMINDER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.WORKDAY_BENEFITS_OPEN_ENROLLMENT_REMINDER_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_workday_benefits_ope_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-benefits-open-enrollment-reminder.yml

Generates a quarterly regulatory compliance report by pulling data from Snowflake, refreshing Power BI dashboards, uploading to SharePoint, and notifying stakeholders via Microsoft Teams.

naftiko: '0.5'
info:
  label: Regulatory Compliance Report Generator
  description: Generates a quarterly regulatory compliance report by pulling data from Snowflake, refreshing Power BI dashboards, uploading to SharePoint, and notifying stakeholders via Microsoft Teams.
  tags:
  - compliance
  - snowflake
  - power-bi
  - sharepoint
  - microsoft-teams
  - banking
capability:
  exposes:
  - type: mcp
    namespace: compliance-reporting
    port: 8080
    tools:
    - name: generate-compliance-report
      description: Given a regulatory report type and reporting period, extract compliance data, refresh the Power BI dashboard, upload to SharePoint, and notify stakeholders. Use for OCC and Fed reporting cycles.
      inputParameters:
      - name: report_type
        in: body
        type: string
        description: The regulatory report type (e.g., CCAR, DFAST, BSA).
      - name: reporting_period
        in: body
        type: string
        description: The reporting period in YYYY-QN format.
      steps:
      - name: extract-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM COMPLIANCE.{{report_type}}_DATA WHERE period='{{reporting_period}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.trigger-refresh
        with:
          dataset_id: $secrets.compliance_dataset_id
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: $secrets.compliance_site_id
          file_name: '{{report_type}}_{{reporting_period}}.xlsx'
      - name: notify-compliance
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_compliance_channel
          text: '{{report_type}} report for {{reporting_period}} is ready. SharePoint link: {{upload-report.webUrl}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: refreshes
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /sites/{{site_id}}/drive/root:/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → regulatory-compliance-report-generator.yml

Initiates the annual compensation review cycle by pulling current comp data from Snowflake, creating Jira tracking tasks, and notifying HR business partners via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Annual Compensation Review Launcher
  description: Initiates the annual compensation review cycle by pulling current comp data from Snowflake, creating Jira tracking tasks, and notifying HR business partners via Microsoft Teams.
  tags:
  - hr
  - compensation
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: workday_annual_compe
    port: 8080
    tools:
    - name: workday-annual
      description: Given an execution date, run the workday annual compensation review launcher process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.WORKDAY_ANNUAL_COMPENSATION_REVIEW_LAUNCHER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.WORKDAY_ANNUAL_COMPENSATION_REVIEW_LAUNCHER_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: WFOPS
          issue_type: Task
          summary: Workday Annual Compensation Review Launcher - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_workday_annual_compe_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: jira
    baseUri: https://wellsfargo.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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-annual-compensation-review-launcher.yml

Retrieves an Okta user profile by login email, returning status, name, and last login time.

naftiko: '0.5'
info:
  label: Okta User Lookup
  description: Retrieves an Okta user profile by login email, returning status, name, and last login time.
  tags:
  - identity
  - okta
  - banking
capability:
  exposes:
  - type: mcp
    namespace: iam-lookup
    port: 8080
    tools:
    - name: get-user
      description: Given an Okta user login email, return the user status, display name, and last login timestamp. Use for access management verification.
      inputParameters:
      - name: user_login
        in: body
        type: string
        description: The Okta user login email address.
      call: okta.get-user
      with:
        login: '{{user_login}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: display_name
        type: string
        mapping: $.profile.displayName
      - name: last_login
        type: string
        mapping: $.lastLogin
  consumes:
  - type: http
    namespace: okta
    baseUri: https://wellsfargo.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: users
      path: /users/{{login}}
      inputParameters:
      - name: login
        in: path
      operations:
      - name: get-user
        method: GET
Open in Framework → View in Fleet → okta-user-lookup.yml

Analyzes AKS cluster utilization metrics in Snowflake, generates scaling recommendations, creates Jira tasks, and notifies the platform team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Azure Kubernetes Cluster Scaling Advisor
  description: Analyzes AKS cluster utilization metrics in Snowflake, generates scaling recommendations, creates Jira tasks, and notifies the platform team via Microsoft Teams.
  tags:
  - infrastructure
  - azure-kubernetes-service
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: azure_kubernetes_clu
    port: 8080
    tools:
    - name: azure-kubernetes
      description: Given an execution date, run the azure kubernetes cluster scaling advisor process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.AZURE_KUBERNETES_CLUSTER_SCALING_ADVISOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.AZURE_KUBERNETES_CLUSTER_SCALING_ADVISOR_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: WFOPS
          issue_type: Task
          summary: Azure Kubernetes Cluster Scaling Advisor - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_azure_kubernetes_clu_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: jira
    baseUri: https://wellsfargo.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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → azure-kubernetes-cluster-scaling-advisor.yml

Checks the status of a Snowflake data share and returns consumer access details and last refresh time.

naftiko: '0.5'
info:
  label: Snowflake Data Share Consumer Check
  description: Checks the status of a Snowflake data share and returns consumer access details and last refresh time.
  tags:
  - data
  - snowflake
  - data-sharing
capability:
  exposes:
  - type: mcp
    namespace: data-sharing
    port: 8080
    tools:
    - name: check-data-share
      description: Given a Snowflake share name, check consumer access status and data freshness. Use for data partnership monitoring.
      inputParameters:
      - name: share_name
        in: body
        type: string
        description: The Snowflake data share name.
      call: snowflake.get-share
      with:
        share_name: '{{share_name}}'
      outputParameters:
      - name: consumer_count
        type: integer
        mapping: $.data.consumer_count
      - name: last_refresh
        type: string
        mapping: $.data.last_refresh_time
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: shares
      path: /shares/{{share_name}}
      inputParameters:
      - name: share_name
        in: path
      operations:
      - name: get-share
        method: GET
Open in Framework → View in Fleet → snowflake-data-share-consumer-check.yml

Executes data quality checks on Snowflake AML transaction tables, logs results to a compliance audit table, and alerts the AML compliance team via Microsoft Teams if thresholds are breached.

naftiko: '0.5'
info:
  label: Snowflake Anti-Money Laundering Data Quality Check
  description: Executes data quality checks on Snowflake AML transaction tables, logs results to a compliance audit table, and alerts the AML compliance team via Microsoft Teams if thresholds are breached.
  tags:
  - compliance
  - data
  - snowflake
  - microsoft-teams
  - aml
  - data-quality
capability:
  exposes:
  - type: mcp
    namespace: aml-data-quality
    port: 8080
    tools:
    - name: run-aml-data-quality-check
      description: Given a Snowflake AML table name and as-of date, execute row count and null-check validations, log results, and alert the AML compliance Teams channel if any check fails. Use daily before AML transaction monitoring batch runs.
      inputParameters:
      - name: aml_table
        in: body
        type: string
        description: Snowflake AML table to validate (e.g. COMPLIANCE.AML_TRANSACTIONS).
      - name: as_of_date
        in: body
        type: string
        description: Date partition to validate in YYYY-MM-DD format.
      - name: min_row_count
        in: body
        type: integer
        description: Minimum expected row count for the given date partition.
      steps:
      - name: run-quality-checks
        type: call
        call: snowflake-aml.execute-statement
        with:
          statement: SELECT COUNT(*) as row_count, SUM(CASE WHEN account_id IS NULL THEN 1 ELSE 0 END) as null_accounts FROM {{aml_table}} WHERE transaction_date = '{{as_of_date}}'
      - name: notify-aml-team
        type: call
        call: msteams-aml.send-message
        with:
          channel_id: $secrets.teams_aml_channel_id
          text: 'AML data quality check for {{aml_table}} on {{as_of_date}}: Row count={{run-quality-checks.row_count}} (min: {{min_row_count}}), Null accounts={{run-quality-checks.null_accounts}}. Status: {{run-quality-checks.status}}.'
  consumes:
  - type: http
    namespace: snowflake-aml
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams-aml
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → snowflake-anti-money-laundering-data-quality-check.yml

Retrieves compensation review proposals from Workday for a given cycle and notifies HR business partners via Microsoft Teams with a summary of merit increases pending approval.

naftiko: '0.5'
info:
  label: Workday Compensation Review Notification
  description: Retrieves compensation review proposals from Workday for a given cycle and notifies HR business partners via Microsoft Teams with a summary of merit increases pending approval.
  tags:
  - hr
  - workday
  - microsoft-teams
  - compensation
  - approval
capability:
  exposes:
  - type: mcp
    namespace: compensation-review
    port: 8080
    tools:
    - name: notify-compensation-review
      description: Given a Workday compensation review cycle ID, retrieve proposal counts and totals, and notify the HRBP team in Microsoft Teams. Use to kick off the annual compensation review approval workflow.
      inputParameters:
      - name: review_cycle_id
        in: body
        type: string
        description: Workday compensation review cycle ID.
      - name: review_period_label
        in: body
        type: string
        description: Human-readable review period (e.g. 2025 Annual Merit Increase).
      steps:
      - name: get-review-summary
        type: call
        call: workday.get-comp-review
        with:
          cycle_id: '{{review_cycle_id}}'
      - name: notify-hrbp
        type: call
        call: msteams-hrbp.send-message
        with:
          channel_id: $secrets.teams_hrbp_channel_id
          text: 'Compensation review {{review_period_label}} is open: {{get-review-summary.total_proposals}} proposals, total increase {{get-review-summary.total_amount}}. Please complete approvals in Workday by {{get-review-summary.deadline}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: comp-reviews
      path: /wellsfargo/compensationReviewCycles/{{cycle_id}}
      inputParameters:
      - name: cycle_id
        in: path
      operations:
      - name: get-comp-review
        method: GET
  - type: http
    namespace: msteams-hrbp
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-compensation-review-notification.yml

Triggers a Postman collection test run and returns the pass/fail summary.

naftiko: '0.5'
info:
  label: Postman API Collection Test Runner
  description: Triggers a Postman collection test run and returns the pass/fail summary.
  tags:
  - devops
  - postman
  - api-testing
capability:
  exposes:
  - type: mcp
    namespace: api-testing
    port: 8080
    tools:
    - name: run-collection
      description: Given a Postman collection ID, trigger a test run and return results. Use for API regression testing.
      inputParameters:
      - name: collection_id
        in: body
        type: string
        description: The Postman collection ID.
      call: postman.run-collection
      with:
        collection_id: '{{collection_id}}'
      outputParameters:
      - name: total_tests
        type: integer
        mapping: $.run.stats.tests.total
      - name: failed_tests
        type: integer
        mapping: $.run.stats.tests.failed
  consumes:
  - type: http
    namespace: postman
    baseUri: https://api.getpostman.com
    authentication:
      type: apikey
      key: X-Api-Key
      value: $secrets.postman_api_key
      placement: header
    resources:
    - name: collections
      path: /collections/{{collection_id}}/run
      inputParameters:
      - name: collection_id
        in: path
      operations:
      - name: run-collection
        method: POST
Open in Framework → View in Fleet → postman-api-collection-test-runner.yml

When a consumer complaint is filed in Salesforce, categorizes it using Snowflake analytics, creates a ServiceNow case, and notifies the complaints team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Consumer Complaint Triage Workflow
  description: When a consumer complaint is filed in Salesforce, categorizes it using Snowflake analytics, creates a ServiceNow case, and notifies the complaints team via Microsoft Teams.
  tags:
  - compliance
  - consumer-complaints
  - salesforce
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: consumer_complaint_t
    port: 8080
    tools:
    - name: consumer-complaint
      description: Given an execution date, run the consumer complaint triage workflow process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.CONSUMER_COMPLAINT_TRIAGE_WORKFLOW LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.CONSUMER_COMPLAINT_TRIAGE_WORKFLOW_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: compliance
          short_description: Consumer Complaint Triage Workflow processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_consumer_complaint_t_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: servicenow
    baseUri: https://wellsfargo.service-now.com/api/now
    authentication:
      type: 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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → consumer-complaint-triage-workflow.yml

Retrieves metadata for a Box file including name, size, and shared link status.

naftiko: '0.5'
info:
  label: Box Document Metadata Lookup
  description: Retrieves metadata for a Box file including name, size, and shared link status.
  tags:
  - content-management
  - box
  - banking
capability:
  exposes:
  - type: mcp
    namespace: ecm-lookup
    port: 8080
    tools:
    - name: get-file-info
      description: Given a Box file ID, return the file name, size in bytes, and shared link URL. Use for document management queries.
      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: integer
        mapping: $.size
      - name: shared_link
        type: string
        mapping: $.shared_link.url
  consumes:
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files/{{file_id}}
      inputParameters:
      - name: file_id
        in: path
      operations:
      - name: get-file
        method: GET
Open in Framework → View in Fleet → box-document-metadata-lookup.yml

Deploys a credit risk ML model by pulling the artifact from Azure ML, validating in Snowflake, registering in Databricks, and notifying the risk team.

naftiko: '0.5'
info:
  label: Credit Risk ML Model Deployment Chain
  description: Deploys a credit risk ML model by pulling the artifact from Azure ML, validating in Snowflake, registering in Databricks, and notifying the risk team.
  tags:
  - risk
  - azure-machine-learning
  - snowflake
  - databricks
  - microsoft-teams
  - banking
capability:
  exposes:
  - type: mcp
    namespace: ml-ops
    port: 8080
    tools:
    - name: deploy-risk-model
      description: Given a model name and version, fetch the artifact, validate, register, and notify. Use for model promotion to production.
      inputParameters:
      - name: model_name
        in: body
        type: string
        description: The ML model name.
      - name: model_version
        in: body
        type: string
        description: The model version to deploy.
      steps:
      - name: get-model
        type: call
        call: azureml.get-model
        with:
          model_name: '{{model_name}}'
          version: '{{model_version}}'
      - name: validate-model
        type: call
        call: snowflake.execute-statement
        with:
          statement: CALL RISK.VALIDATE_MODEL('{{model_name}}', '{{model_version}}')
      - name: register-model
        type: call
        call: databricks.register-model
        with:
          model_name: '{{model_name}}'
          version: '{{model_version}}'
      - name: notify-risk
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_risk_channel
          text: 'Model {{model_name}} v{{model_version}} deployed. Validation: {{validate-model.status}}.'
  consumes:
  - type: http
    namespace: azureml
    baseUri: https://ml.azure.com/api
    authentication:
      type: bearer
      token: $secrets.azureml_token
    resources:
    - name: models
      path: /models/{{model_name}}/versions/{{version}}
      inputParameters:
      - name: model_name
        in: path
      - name: version
        in: path
      operations:
      - name: get-model
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: databricks
    baseUri: https://wellsfargo.cloud.databricks.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: model-versions
      path: /mlflow/model-versions/create
      operations:
      - name: register-model
        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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → credit-risk-ml-model-deployment-chain.yml

Computes regulatory capital ratios from Snowflake, refreshes the Power BI compliance dashboard, and distributes to the finance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Regulatory Capital Report Generator
  description: Computes regulatory capital ratios from Snowflake, refreshes the Power BI compliance dashboard, and distributes to the finance team via Microsoft Teams.
  tags:
  - compliance
  - regulatory
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: regulatory_capital_r
    port: 8080
    tools:
    - name: regulatory-capital
      description: Given an execution date, run the regulatory capital report generator process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.REGULATORY_CAPITAL_REPORT_GENERATOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.REGULATORY_CAPITAL_REPORT_GENERATOR_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_regulatory_capital_r_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → regulatory-capital-report-generator.yml

When Cisco Firepower detects an intrusion, logs the alert in Splunk, creates a ServiceNow security incident, and alerts the SOC via Microsoft Teams.

naftiko: '0.5'
info:
  label: Cisco Firepower IDS Alert Handler
  description: When Cisco Firepower detects an intrusion, logs the alert in Splunk, creates a ServiceNow security incident, and alerts the SOC via Microsoft Teams.
  tags:
  - security
  - cisco
  - splunk
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cisco_firepower_ids_
    port: 8080
    tools:
    - name: cisco-firepower
      description: Given an execution date, run the cisco firepower ids alert handler process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.CISCO_FIREPOWER_IDS_ALERT_HANDLER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.CISCO_FIREPOWER_IDS_ALERT_HANDLER_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: security
          short_description: Cisco Firepower IDS Alert Handler processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_cisco_firepower_ids__channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: servicenow
    baseUri: https://wellsfargo.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: splunk
    baseUri: https://wellsfargo-splunk.example.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: events
      path: /receivers/simple
      operations:
      - name: index-event
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → cisco-firepower-ids-alert-handler.yml

Runs churn prediction models in Snowflake against Salesforce CRM data, identifies at-risk accounts, and notifies relationship managers via Microsoft Teams.

naftiko: '0.5'
info:
  label: Salesforce Customer Churn Prediction Pipeline
  description: Runs churn prediction models in Snowflake against Salesforce CRM data, identifies at-risk accounts, and notifies relationship managers via Microsoft Teams.
  tags:
  - analytics
  - salesforce
  - snowflake
  - microsoft-teams
  - machine-learning
capability:
  exposes:
  - type: mcp
    namespace: salesforce_customer_
    port: 8080
    tools:
    - name: salesforce-customer
      description: Given an execution date, run the salesforce customer churn prediction pipeline process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SALESFORCE_CUSTOMER_CHURN_PREDICTION_PIPELINE LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SALESFORCE_CUSTOMER_CHURN_PREDICTION_PIPELINE_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_salesforce_customer__channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-customer-churn-prediction-pipeline.yml

Promotes a validated credit risk model from Databricks staging to production, logs the deployment in Snowflake, and notifies the risk analytics team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Credit Risk Model Deployment Pipeline
  description: Promotes a validated credit risk model from Databricks staging to production, logs the deployment in Snowflake, and notifies the risk analytics team via Microsoft Teams.
  tags:
  - risk
  - databricks
  - snowflake
  - microsoft-teams
  - mlops
capability:
  exposes:
  - type: mcp
    namespace: credit_risk_model_de
    port: 8080
    tools:
    - name: credit-risk
      description: Given an execution date, run the credit risk model deployment pipeline process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.CREDIT_RISK_MODEL_DEPLOYMENT_PIPELINE LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.CREDIT_RISK_MODEL_DEPLOYMENT_PIPELINE_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_credit_risk_model_de_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → credit-risk-model-deployment-pipeline.yml

Checks the current state of an AWS CloudWatch alarm and returns the state value and reason.

naftiko: '0.5'
info:
  label: CloudWatch Alarm Check
  description: Checks the current state of an AWS CloudWatch alarm and returns the state value and reason.
  tags:
  - monitoring
  - amazon-web-services
  - cloudwatch
  - banking
capability:
  exposes:
  - type: mcp
    namespace: aws-monitoring
    port: 8080
    tools:
    - name: get-alarm-status
      description: Given an AWS CloudWatch alarm name, retrieve its current state and state reason. Use for operational monitoring dashboards.
      inputParameters:
      - name: alarm_name
        in: body
        type: string
        description: The CloudWatch alarm name.
      call: cloudwatch.describe-alarm
      with:
        alarm_name: '{{alarm_name}}'
      outputParameters:
      - name: state_value
        type: string
        mapping: $.MetricAlarms[0].StateValue
      - name: state_reason
        type: string
        mapping: $.MetricAlarms[0].StateReason
  consumes:
  - type: http
    namespace: cloudwatch
    baseUri: https://monitoring.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: X-Amz-Security-Token
      value: $secrets.aws_session_token
      placement: header
    resources:
    - name: alarms
      path: /?Action=DescribeAlarms&AlarmNames.member.1={{alarm_name}}
      inputParameters:
      - name: alarm_name
        in: query
      operations:
      - name: describe-alarm
        method: GET
Open in Framework → View in Fleet → cloudwatch-alarm-check.yml

Compares actual Workday headcount against forecast in Snowflake, flags variances, refreshes Power BI dashboards, and notifies HR leadership via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Headcount Forecast Variance
  description: Compares actual Workday headcount against forecast in Snowflake, flags variances, refreshes Power BI dashboards, and notifies HR leadership via Microsoft Teams.
  tags:
  - hr
  - workforce-planning
  - workday
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: workday_headcount_fo
    port: 8080
    tools:
    - name: workday-headcount
      description: Given an execution date, run the workday headcount forecast variance process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.WORKDAY_HEADCOUNT_FORECAST_VARIANCE LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.WORKDAY_HEADCOUNT_FORECAST_VARIANCE_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_workday_headcount_fo_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-headcount-forecast-variance.yml

Detects Azure billing anomalies above a daily spend threshold and notifies the FinOps team via Microsoft Teams with a cost breakdown by subscription.

naftiko: '0.5'
info:
  label: Azure Cloud Cost Anomaly Alert
  description: Detects Azure billing anomalies above a daily spend threshold and notifies the FinOps team via Microsoft Teams with a cost breakdown by subscription.
  tags:
  - cloud
  - finops
  - azure
  - microsoft-teams
  - cost-management
capability:
  exposes:
  - type: mcp
    namespace: cloud-cost-ops
    port: 8080
    tools:
    - name: alert-azure-cost-anomaly
      description: Given an Azure subscription ID and spend threshold, retrieve daily cost data and post an anomaly alert to the FinOps Teams channel if the threshold is exceeded. Use for daily cloud spend governance.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID to check (GUID format).
      - name: threshold_usd
        in: body
        type: number
        description: Daily spend threshold in USD above which to alert.
      steps:
      - name: get-usage-summary
        type: call
        call: azure-cost.get-usage-summary
        with:
          subscription_id: '{{subscription_id}}'
      - name: post-cost-alert
        type: call
        call: msteams-finops.send-message
        with:
          channel_id: $secrets.teams_finops_channel_id
          text: 'Azure cost anomaly: Subscription {{subscription_id}} daily spend {{get-usage-summary.total_cost}} exceeds threshold ${{threshold_usd}}. Top service: {{get-usage-summary.top_service}}.'
  consumes:
  - type: http
    namespace: azure-cost
    baseUri: https://management.azure.com/subscriptions
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: usage-summary
      path: /{{subscription_id}}/providers/Microsoft.Consumption/usageDetails
      inputParameters:
      - name: subscription_id
        in: path
      operations:
      - name: get-usage-summary
        method: GET
  - type: http
    namespace: msteams-finops
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → azure-cloud-cost-anomaly-alert.yml

Monitors Workday payroll tax filing status, logs compliance metrics in Snowflake, and alerts the payroll compliance team via Microsoft Teams when filings are overdue.

naftiko: '0.5'
info:
  label: Workday Payroll Tax Filing Monitor
  description: Monitors Workday payroll tax filing status, logs compliance metrics in Snowflake, and alerts the payroll compliance team via Microsoft Teams when filings are overdue.
  tags:
  - hr
  - payroll
  - workday
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: workday_payroll_tax_
    port: 8080
    tools:
    - name: workday-payroll
      description: Given an execution date, run the workday payroll tax filing monitor process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.WORKDAY_PAYROLL_TAX_FILING_MONITOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.WORKDAY_PAYROLL_TAX_FILING_MONITOR_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_workday_payroll_tax__channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-payroll-tax-filing-monitor.yml

Retrieves a SAP vendor master record by vendor number and returns the name, payment terms, and city.

naftiko: '0.5'
info:
  label: SAP Vendor Master Detail Lookup
  description: Retrieves a SAP vendor master record by vendor number and returns the name, payment terms, and city.
  tags:
  - procurement
  - sap
  - banking
capability:
  exposes:
  - type: mcp
    namespace: erp-vendor
    port: 8080
    tools:
    - name: get-vendor
      description: Given a SAP vendor number, return the vendor name, payment terms, and city. Use for vendor due diligence and onboarding checks.
      inputParameters:
      - name: vendor_number
        in: body
        type: string
        description: The SAP vendor number.
      call: sap.get-vendor
      with:
        vendor_number: '{{vendor_number}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.d.VendorName
      - name: payment_terms
        type: string
        mapping: $.d.PaymentTerms
      - name: city
        type: string
        mapping: $.d.City
  consumes:
  - type: http
    namespace: sap
    baseUri: https://wellsfargo-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: vendors
      path: /A_Supplier('{{vendor_number}}')
      inputParameters:
      - name: vendor_number
        in: path
      operations:
      - name: get-vendor
        method: GET
Open in Framework → View in Fleet → sap-vendor-master-detail-lookup.yml

Tests Splunk SIEM correlation rules against historical data in Snowflake, logs test results, and notifies the security engineering team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Splunk SIEM Correlation Rule Tester
  description: Tests Splunk SIEM correlation rules against historical data in Snowflake, logs test results, and notifies the security engineering team via Microsoft Teams.
  tags:
  - security
  - splunk
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: splunk_siem_correlat
    port: 8080
    tools:
    - name: splunk-siem
      description: Given an execution date, run the splunk siem correlation rule tester process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.SPLUNK_SIEM_CORRELATION_RULE_TESTER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.SPLUNK_SIEM_CORRELATION_RULE_TESTER_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_splunk_siem_correlat_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: splunk
    baseUri: https://wellsfargo-splunk.example.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: events
      path: /receivers/simple
      operations:
      - name: index-event
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → splunk-siem-correlation-rule-tester.yml

Checks the identity governance status for a user in SailPoint, returning access certifications and risk score.

naftiko: '0.5'
info:
  label: SailPoint Identity Governance Check
  description: Checks the identity governance status for a user in SailPoint, returning access certifications and risk score.
  tags:
  - identity
  - sailpoint
  - governance
capability:
  exposes:
  - type: mcp
    namespace: identity-governance
    port: 8080
    tools:
    - name: get-identity-status
      description: Given a SailPoint identity ID, retrieve governance status including pending certifications and risk score. Use for access reviews.
      inputParameters:
      - name: identity_id
        in: body
        type: string
        description: The SailPoint identity ID.
      call: sailpoint.get-identity
      with:
        identity_id: '{{identity_id}}'
      outputParameters:
      - name: risk_score
        type: integer
        mapping: $.riskScore
      - name: pending_certifications
        type: integer
        mapping: $.pendingCertifications
  consumes:
  - type: http
    namespace: sailpoint
    baseUri: https://wellsfargo.api.identitynow.com/v3
    authentication:
      type: bearer
      token: $secrets.sailpoint_token
    resources:
    - name: identities
      path: /identities/{{identity_id}}
      inputParameters:
      - name: identity_id
        in: path
      operations:
      - name: get-identity
        method: GET
Open in Framework → View in Fleet → sailpoint-identity-governance-check.yml

Screens international wire transfers against OFAC sanctions lists in Snowflake, flags matches in ServiceNow, and alerts the compliance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Wire Transfer Sanctions Check
  description: Screens international wire transfers against OFAC sanctions lists in Snowflake, flags matches in ServiceNow, and alerts the compliance team via Microsoft Teams.
  tags:
  - compliance
  - sanctions
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: wire_transfer_sancti
    port: 8080
    tools:
    - name: wire-transfer
      description: Given an execution date, run the wire transfer sanctions check process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.WIRE_TRANSFER_SANCTIONS_CHECK LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.WIRE_TRANSFER_SANCTIONS_CHECK_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: compliance
          short_description: Wire Transfer Sanctions Check processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_wire_transfer_sancti_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: servicenow
    baseUri: https://wellsfargo.service-now.com/api/now
    authentication:
      type: 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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → wire-transfer-sanctions-check.yml

Monitors network connectivity across branch locations via Snowflake metrics, creates ServiceNow incidents for outages, and notifies the NOC via Microsoft Teams.

naftiko: '0.5'
info:
  label: Branch Network Health Monitor
  description: Monitors network connectivity across branch locations via Snowflake metrics, creates ServiceNow incidents for outages, and notifies the NOC via Microsoft Teams.
  tags:
  - networking
  - infrastructure
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: branch_network_healt
    port: 8080
    tools:
    - name: branch-network
      description: Given an execution date, run the branch network health monitor process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.BRANCH_NETWORK_HEALTH_MONITOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.BRANCH_NETWORK_HEALTH_MONITOR_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: networking
          short_description: Branch Network Health Monitor processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_branch_network_healt_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: servicenow
    baseUri: https://wellsfargo.service-now.com/api/now
    authentication:
      type: 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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → branch-network-health-monitor.yml

When Palo Alto Networks detects a critical threat, creates a ServiceNow security incident, enriches it with threat intelligence, and alerts the SOC Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Palo Alto Networks Security Incident Triage
  description: When Palo Alto Networks detects a critical threat, creates a ServiceNow security incident, enriches it with threat intelligence, and alerts the SOC Microsoft Teams channel.
  tags:
  - security
  - palo-alto
  - servicenow
  - microsoft-teams
  - secops
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: soc-ops
    port: 8080
    tools:
    - name: triage-network-threat
      description: Given a Palo Alto Networks threat ID and severity, create a ServiceNow security incident and alert the SOC Microsoft Teams channel. Invoke on critical or high Palo Alto threat notifications.
      inputParameters:
      - name: threat_id
        in: body
        type: string
        description: Palo Alto Networks threat log ID.
      - name: severity
        in: body
        type: string
        description: 'Threat severity: critical, high, medium.'
      - name: source_ip
        in: body
        type: string
        description: Source IP address of the detected threat.
      - name: threat_name
        in: body
        type: string
        description: Name or type of the detected threat (e.g. command-and-control, malware).
      steps:
      - name: get-threat-details
        type: call
        call: palo-alto.get-threat-log
        with:
          threat_id: '{{threat_id}}'
      - name: create-security-incident
        type: call
        call: servicenow-soc.create-incident
        with:
          category: security
          impact: '{{severity}}'
          short_description: 'Network threat: {{threat_name}} from {{source_ip}}'
          description: 'Palo Alto threat {{threat_id}}: {{threat_name}}. Source: {{source_ip}}. Category: {{get-threat-details.category}}.'
      - name: alert-soc
        type: call
        call: msteams-soc.send-message
        with:
          channel_id: $secrets.teams_soc_channel_id
          text: 'SOC Alert: {{severity}} threat — {{threat_name}} from {{source_ip}}. ServiceNow: {{create-security-incident.number}}. Threat ID: {{threat_id}}.'
  consumes:
  - type: http
    namespace: palo-alto
    baseUri: https://wfc-panorama.internal/restapi/v10.1
    authentication:
      type: apikey
      key: X-PAN-KEY
      value: $secrets.palo_alto_api_key
      placement: header
    resources:
    - name: threat-logs
      path: /log/threat
      inputParameters:
      - name: threat_id
        in: query
      operations:
      - name: get-threat-log
        method: GET
  - type: http
    namespace: servicenow-soc
    baseUri: https://wellsfargo.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/sn_si_incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams-soc
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → palo-alto-networks-security-incident-triage.yml

Collects GitHub Copilot usage metrics, stores analytics in Snowflake, and distributes adoption reports to engineering leadership via Microsoft Teams.

naftiko: '0.5'
info:
  label: GitHub Copilot Usage Analytics Reporter
  description: Collects GitHub Copilot usage metrics, stores analytics in Snowflake, and distributes adoption reports to engineering leadership via Microsoft Teams.
  tags:
  - devops
  - github-copilot
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: github_copilot_usage
    port: 8080
    tools:
    - name: github-copilot
      description: Given an execution date, run the github copilot usage analytics reporter process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.GITHUB_COPILOT_USAGE_ANALYTICS_REPORTER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.GITHUB_COPILOT_USAGE_ANALYTICS_REPORTER_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_github_copilot_usage_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → github-copilot-usage-analytics-reporter.yml

When a ServiceNow P1 or P2 incident is created for a core banking system, creates a linked Jira issue in the engineering project and notifies the engineering on-call via Microsoft Teams.

naftiko: '0.5'
info:
  label: ServiceNow ITSM Incident to Jira Sync
  description: When a ServiceNow P1 or P2 incident is created for a core banking system, creates a linked Jira issue in the engineering project and notifies the engineering on-call via Microsoft Teams.
  tags:
  - itsm
  - servicenow
  - jira
  - microsoft-teams
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: itsm-bridge
    port: 8080
    tools:
    - name: sync-incident-to-jira
      description: Given a ServiceNow incident number and priority, create a linked Jira issue and notify the on-call engineering team in Microsoft Teams. Use for P1/P2 incidents affecting core banking applications.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number (e.g. INC0001234).
      - name: priority
        in: body
        type: string
        description: 'Incident priority: P1 or P2.'
      - name: affected_system
        in: body
        type: string
        description: Name of the affected banking system.
      steps:
      - name: get-incident
        type: call
        call: servicenow.get-incident
        with:
          number: '{{incident_number}}'
      - name: create-jira-issue
        type: call
        call: jira-ops.create-issue
        with:
          project_key: OPS
          issuetype: Incident
          summary: '[{{priority}}] {{get-incident.short_description}}'
          description: 'ServiceNow: {{incident_number}}

            System: {{affected_system}}

            Details: {{get-incident.description}}'
      - name: notify-oncall
        type: call
        call: msteams-oncall.send-message
        with:
          channel_id: $secrets.teams_oncall_channel_id
          text: '{{priority}} Incident: {{get-incident.short_description}} | System: {{affected_system}} | ServiceNow: {{incident_number}} | Jira: {{create-jira-issue.key}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://wellsfargo.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      inputParameters:
      - name: number
        in: query
      operations:
      - name: get-incident
        method: GET
  - type: http
    namespace: jira-ops
    baseUri: https://wellsfargo.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-oncall
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → servicenow-itsm-incident-to-jira-sync.yml

Synchronizes Salesforce opportunity pipeline data to Snowflake for executive revenue reporting and notifies the sales leadership team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Salesforce CRM Opportunity Pipeline Sync
  description: Synchronizes Salesforce opportunity pipeline data to Snowflake for executive revenue reporting and notifies the sales leadership team via Microsoft Teams.
  tags:
  - sales
  - crm
  - salesforce
  - snowflake
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: crm-reporting
    port: 8080
    tools:
    - name: sync-opportunity-pipeline
      description: Given a Salesforce forecast category and fiscal quarter, retrieve open opportunities, write a pipeline snapshot to Snowflake, and notify sales leadership in Microsoft Teams. Use for quarterly pipeline reviews.
      inputParameters:
      - name: fiscal_quarter
        in: body
        type: string
        description: Fiscal quarter in YYYY-QN format (e.g. 2025-Q2).
      - name: forecast_category
        in: body
        type: string
        description: Salesforce forecast category filter (e.g. Commit, BestCase, Pipeline).
      steps:
      - name: get-opportunities
        type: call
        call: salesforce.search-opportunities
        with:
          fiscal_quarter: '{{fiscal_quarter}}'
          forecast_category: '{{forecast_category}}'
      - name: write-pipeline-snapshot
        type: call
        call: snowflake.insert-row
        with:
          table: SALES.PIPELINE_SNAPSHOTS
          fiscal_quarter: '{{fiscal_quarter}}'
          opportunity_count: '{{get-opportunities.totalSize}}'
          total_amount: '{{get-opportunities.total_amount}}'
      - name: notify-leadership
        type: call
        call: msteams-sales.send-message
        with:
          channel_id: $secrets.teams_sales_channel_id
          text: 'Pipeline sync complete for {{fiscal_quarter}} ({{forecast_category}}): {{get-opportunities.totalSize}} opportunities, total value {{get-opportunities.total_amount}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://wellsfargo.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /query
      inputParameters:
      - name: q
        in: query
      operations:
      - name: search-opportunities
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: insert-row
        method: POST
  - type: http
    namespace: msteams-sales
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-crm-opportunity-pipeline-sync.yml

Monitors Calypso trade lifecycle events in Snowflake, flags stuck or aged trades, and alerts the trading operations team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Calypso Trade Lifecycle Monitor
  description: Monitors Calypso trade lifecycle events in Snowflake, flags stuck or aged trades, and alerts the trading operations team via Microsoft Teams.
  tags:
  - trading
  - calypso
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: calypso_trade_lifecy
    port: 8080
    tools:
    - name: calypso-trade
      description: Given an execution date, run the calypso trade lifecycle monitor process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.CALYPSO_TRADE_LIFECYCLE_MONITOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.CALYPSO_TRADE_LIFECYCLE_MONITOR_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_calypso_trade_lifecy_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → calypso-trade-lifecycle-monitor.yml

Scans GitHub repositories for open Dependabot and code scanning alerts, aggregates findings by severity, and posts a weekly digest to the AppSec Microsoft Teams channel.

naftiko: '0.5'
info:
  label: GitHub Repository Security Advisory Scan
  description: Scans GitHub repositories for open Dependabot and code scanning alerts, aggregates findings by severity, and posts a weekly digest to the AppSec Microsoft Teams channel.
  tags:
  - devops
  - security
  - github
  - microsoft-teams
  - devsecops
  - appsec
capability:
  exposes:
  - type: mcp
    namespace: appsec-scanning
    port: 8080
    tools:
    - name: digest-repo-security-alerts
      description: Given a GitHub organization and severity filter, retrieve open Dependabot and code scanning alerts and post a digest to the AppSec Teams channel. Use for weekly security hygiene reviews on banking application repositories.
      inputParameters:
      - name: github_org
        in: body
        type: string
        description: GitHub organization to scan (e.g. wells-fargo).
      - name: severity_filter
        in: body
        type: string
        description: 'Minimum severity to include: critical, high, medium.'
      steps:
      - name: get-dependabot-alerts
        type: call
        call: github-sec.list-org-alerts
        with:
          org: '{{github_org}}'
          severity: '{{severity_filter}}'
      - name: post-security-digest
        type: call
        call: msteams-appsec.send-message
        with:
          channel_id: $secrets.teams_appsec_channel_id
          text: 'Weekly security scan for {{github_org}}: {{get-dependabot-alerts.total_count}} open alerts (Critical: {{get-dependabot-alerts.critical_count}}, High: {{get-dependabot-alerts.high_count}}). Review in GitHub Security.'
  consumes:
  - type: http
    namespace: github-sec
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: org-alerts
      path: /orgs/{{org}}/dependabot/alerts
      inputParameters:
      - name: org
        in: path
      - name: severity
        in: query
      operations:
      - name: list-org-alerts
        method: GET
  - type: http
    namespace: msteams-appsec
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → github-repository-security-advisory-scan.yml

Monitors ATM fleet health by pulling device telemetry from Snowflake, creating ServiceNow incidents for offline units, and alerting the channel operations team.

naftiko: '0.5'
info:
  label: ATM Fleet Health Monitoring Chain
  description: Monitors ATM fleet health by pulling device telemetry from Snowflake, creating ServiceNow incidents for offline units, and alerting the channel operations team.
  tags:
  - operations
  - snowflake
  - servicenow
  - microsoft-teams
  - banking
capability:
  exposes:
  - type: mcp
    namespace: atm-ops
    port: 8080
    tools:
    - name: monitor-atm-fleet
      description: Given a region code, query ATM health data from Snowflake, auto-create incidents for offline ATMs, and notify channel ops. Use for daily ATM fleet monitoring.
      inputParameters:
      - name: region_code
        in: body
        type: string
        description: The geographic region code (e.g., WEST, EAST, CENTRAL).
      steps:
      - name: get-offline-atms
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM OPS.ATM_HEALTH WHERE region='{{region_code}}' AND status='OFFLINE'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: atm_outage
          short_description: 'ATM outage in {{region_code}}: {{get-offline-atms.count}} units offline'
      - name: notify-channel-ops
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_atm_channel
          text: 'ATM fleet alert for {{region_code}}: {{get-offline-atms.count}} ATMs offline. Incident: {{create-incident.number}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: servicenow
    baseUri: https://wellsfargo.service-now.com/api/now
    authentication:
      type: 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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → atm-fleet-health-monitoring-chain.yml

Validates Refinitiv market data feed quality in Snowflake, flags stale or missing data points, and alerts the market data team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Refinitiv Market Data Quality Validator
  description: Validates Refinitiv market data feed quality in Snowflake, flags stale or missing data points, and alerts the market data team via Microsoft Teams.
  tags:
  - trading
  - refinitiv
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: refinitiv_market_dat
    port: 8080
    tools:
    - name: refinitiv-market
      description: Given an execution date, run the refinitiv market data quality validator process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.REFINITIV_MARKET_DATA_QUALITY_VALIDATOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.REFINITIV_MARKET_DATA_QUALITY_VALIDATOR_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_refinitiv_market_dat_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → refinitiv-market-data-quality-validator.yml

Executes a read-only SQL query against the Wells Fargo Snowflake data warehouse and returns results.

naftiko: '0.5'
info:
  label: Snowflake Query Executor
  description: Executes a read-only SQL query against the Wells Fargo Snowflake data warehouse and returns results.
  tags:
  - data
  - snowflake
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: data
    port: 8080
    tools:
    - name: execute-query
      description: Given a SQL statement, execute it against Snowflake and return results. Use for analytics and data validation.
      inputParameters:
      - name: sql_statement
        in: body
        type: string
        description: The read-only SQL query to execute.
      call: snowflake.execute-statement
      with:
        statement: '{{sql_statement}}'
      outputParameters:
      - name: row_count
        type: integer
        mapping: $.data.rowCount
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
Open in Framework → View in Fleet → snowflake-query-executor.yml

Retrieves completed sprint data from Jira, calculates story point velocity, and publishes the report to the technology leadership Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Jira Sprint Board Velocity Report
  description: Retrieves completed sprint data from Jira, calculates story point velocity, and publishes the report to the technology leadership Microsoft Teams channel.
  tags:
  - devops
  - jira
  - microsoft-teams
  - reporting
  - agile
capability:
  exposes:
  - type: mcp
    namespace: agile-metrics
    port: 8080
    tools:
    - name: publish-sprint-velocity-report
      description: Given a Jira board ID and sprint ID, retrieve completed issues and story points, and post the velocity summary to the technology leadership Teams channel. Use after each sprint close.
      inputParameters:
      - name: board_id
        in: body
        type: string
        description: Jira board ID (numeric string).
      - name: sprint_id
        in: body
        type: string
        description: Jira sprint ID for the completed sprint.
      steps:
      - name: get-sprint-details
        type: call
        call: jira.get-sprint
        with:
          sprint_id: '{{sprint_id}}'
      - name: get-completed-issues
        type: call
        call: jira.search-issues
        with:
          jql: sprint = {{sprint_id}} AND status = Done
      - name: post-velocity-report
        type: call
        call: msteams-tech.send-message
        with:
          channel_id: $secrets.teams_tech_channel_id
          text: 'Sprint {{get-sprint-details.name}} velocity: {{get-completed-issues.total}} issues completed. Goal: {{get-sprint-details.goal}}. Board: {{board_id}}.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://wellsfargo.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: sprints
      path: /sprint/{{sprint_id}}
      inputParameters:
      - name: sprint_id
        in: path
      operations:
      - name: get-sprint
        method: GET
    - name: issues
      path: /search
      inputParameters:
      - name: jql
        in: query
      operations:
      - name: search-issues
        method: GET
  - type: http
    namespace: msteams-tech
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → jira-sprint-board-velocity-report.yml

Retrieves an approved Workday job requisition and publishes it to LinkedIn Jobs, logging the external posting record back in Workday for recruiting pipeline tracking.

naftiko: '0.5'
info:
  label: LinkedIn Job Posting for Open Requisitions
  description: Retrieves an approved Workday job requisition and publishes it to LinkedIn Jobs, logging the external posting record back in Workday for recruiting pipeline tracking.
  tags:
  - hr
  - recruiting
  - workday
  - linkedin
capability:
  exposes:
  - type: mcp
    namespace: talent-acquisition
    port: 8080
    tools:
    - name: post-job-to-linkedin
      description: Given a Workday job requisition ID, retrieve the job details and publish the opening to LinkedIn Jobs. Use when a requisition is approved and ready for external advertising.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: Workday job requisition ID (e.g. JR-00023456).
      - name: linkedin_organization_id
        in: body
        type: string
        description: LinkedIn organization ID for the Wells Fargo company page.
      steps:
      - name: get-requisition
        type: call
        call: workday-ta.get-job-requisition
        with:
          requisition_id: '{{requisition_id}}'
      - name: publish-job-posting
        type: call
        call: linkedin.create-job-posting
        with:
          organization_id: '{{linkedin_organization_id}}'
          title: '{{get-requisition.job_title}}'
          description: '{{get-requisition.job_description}}'
          location: '{{get-requisition.location}}'
  consumes:
  - type: http
    namespace: workday-ta
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: job-requisitions
      path: /wellsfargo/jobRequisitions/{{requisition_id}}
      inputParameters:
      - name: requisition_id
        in: path
      operations:
      - name: get-job-requisition
        method: GET
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: job-postings
      path: /jobPostings
      operations:
      - name: create-job-posting
        method: POST
Open in Framework → View in Fleet → linkedin-job-posting-for-open-requisitions.yml

Posts intercompany journal entries in SAP, validates the posting via Snowflake balance check, and notifies the accounting team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Intercompany Journal Entry Poster
  description: Posts intercompany journal entries in SAP, validates the posting via Snowflake balance check, and notifies the accounting team via Microsoft Teams.
  tags:
  - finance
  - sap
  - snowflake
  - microsoft-teams
  - banking
capability:
  exposes:
  - type: mcp
    namespace: finance-ops
    port: 8080
    tools:
    - name: post-intercompany-je
      description: Given debit and credit company codes and amount, post the entry in SAP, verify balances, and notify accounting. Use for month-end intercompany settlements.
      inputParameters:
      - name: debit_company
        in: body
        type: string
        description: The debit company code.
      - name: credit_company
        in: body
        type: string
        description: The credit company code.
      - name: amount
        in: body
        type: string
        description: The journal entry amount.
      steps:
      - name: post-entry
        type: call
        call: sap.post-journal
        with:
          debit_company: '{{debit_company}}'
          credit_company: '{{credit_company}}'
          amount: '{{amount}}'
      - name: verify-balance
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT balance FROM FINANCE.IC_BALANCES WHERE company_code='{{debit_company}}'
      - name: notify-accounting
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_accounting_channel
          text: 'Intercompany JE posted: {{debit_company}} -> {{credit_company}}, amount ${{amount}}. Doc: {{post-entry.document_number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://wellsfargo-s4.sap.com/sap/opu/odata/sap/API_JOURNALENTRYITEMBASIC_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: journal-entries
      path: /A_JournalEntryItemBasic
      operations:
      - name: post-journal
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-intercompany-journal-entry-poster.yml

Retrieves an Azure AD user profile by UPN and returns display name, job title, and department.

naftiko: '0.5'
info:
  label: Azure Active Directory User Profile Lookup
  description: Retrieves an Azure AD user profile by UPN and returns display name, job title, and department.
  tags:
  - identity
  - microsoft-azure
  - banking
capability:
  exposes:
  - type: mcp
    namespace: iam-directory
    port: 8080
    tools:
    - name: get-aad-user
      description: Given an Azure AD user principal name, return the display name, job title, and department. Use for identity verification.
      inputParameters:
      - name: user_upn
        in: body
        type: string
        description: The user principal name (e.g., jdoe@wellsfargo.com).
      call: aad.get-user
      with:
        upn: '{{user_upn}}'
      outputParameters:
      - name: display_name
        type: string
        mapping: $.displayName
      - name: job_title
        type: string
        mapping: $.jobTitle
      - name: department
        type: string
        mapping: $.department
  consumes:
  - type: http
    namespace: aad
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users/{{upn}}
      inputParameters:
      - name: upn
        in: path
      operations:
      - name: get-user
        method: GET
Open in Framework → View in Fleet → azure-active-directory-user-profile-lookup.yml

Retrieves a Jira issue by key and returns summary, status, assignee, and priority.

naftiko: '0.5'
info:
  label: Jira Ticket Lookup
  description: Retrieves a Jira issue by key and returns summary, status, assignee, and priority.
  tags:
  - project-management
  - jira
  - banking
capability:
  exposes:
  - type: mcp
    namespace: pm-lookup
    port: 8080
    tools:
    - name: get-issue
      description: Given a Jira issue key, return the issue summary, status, assignee, and priority. Use for project tracking and status inquiries.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: The Jira issue key (e.g., PROJ-123).
      call: jira.get-issue
      with:
        issue_key: '{{issue_key}}'
      outputParameters:
      - name: summary
        type: string
        mapping: $.fields.summary
      - name: status
        type: string
        mapping: $.fields.status.name
      - name: assignee
        type: string
        mapping: $.fields.assignee.displayName
  consumes:
  - type: http
    namespace: jira
    baseUri: https://wellsfargo.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-ticket-lookup.yml

When a Salesforce customer NPS survey response is marked detractor, creates a follow-up case, assigns it to the relationship manager, and sends a recovery notification via Microsoft Teams.

naftiko: '0.5'
info:
  label: Salesforce NPS Survey Follow-Up Workflow
  description: When a Salesforce customer NPS survey response is marked detractor, creates a follow-up case, assigns it to the relationship manager, and sends a recovery notification via Microsoft Teams.
  tags:
  - customer-experience
  - salesforce
  - microsoft-teams
  - nps
  - customer-support
capability:
  exposes:
  - type: mcp
    namespace: nps-recovery
    port: 8080
    tools:
    - name: handle-nps-detractor
      description: Given a Salesforce survey response ID, retrieve the detractor's account details, create a recovery case, and notify the relationship manager in Microsoft Teams. Invoke when an NPS score of 0-6 is submitted.
      inputParameters:
      - name: survey_response_id
        in: body
        type: string
        description: Salesforce survey response record ID.
      - name: nps_score
        in: body
        type: integer
        description: NPS score submitted (0-10).
      steps:
      - name: get-survey-response
        type: call
        call: salesforce-survey.get-survey-response
        with:
          response_id: '{{survey_response_id}}'
      - name: create-recovery-case
        type: call
        call: salesforce-nps.create-case
        with:
          account_id: '{{get-survey-response.account_id}}'
          subject: 'NPS Detractor Recovery: Score {{nps_score}} — {{get-survey-response.account_name}}'
          type: NPS_Recovery
      - name: notify-rm
        type: call
        call: msteams-nps.send-message
        with:
          recipient_upn: '{{get-survey-response.rm_upn}}'
          text: 'NPS detractor alert: {{get-survey-response.account_name}} scored {{nps_score}}. Recovery case created: {{create-recovery-case.case_number}}. Please reach out within 24 hours.'
  consumes:
  - type: http
    namespace: salesforce-survey
    baseUri: https://wellsfargo.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: survey-responses
      path: /sobjects/SurveyQuestionResponse/{{response_id}}
      inputParameters:
      - name: response_id
        in: path
      operations:
      - name: get-survey-response
        method: GET
  - type: http
    namespace: salesforce-nps
    baseUri: https://wellsfargo.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: msteams-nps
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /users/{{upn}}/chats
      inputParameters:
      - name: upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-nps-survey-follow-up-workflow.yml

Monitors Alteryx workflow execution results, logs output metrics in Snowflake, and notifies the analytics team via Microsoft Teams when workflows fail.

naftiko: '0.5'
info:
  label: Alteryx Data Prep Workflow Monitor
  description: Monitors Alteryx workflow execution results, logs output metrics in Snowflake, and notifies the analytics team via Microsoft Teams when workflows fail.
  tags:
  - analytics
  - alteryx
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: alteryx_data_prep_wo
    port: 8080
    tools:
    - name: alteryx-data
      description: Given an execution date, run the alteryx data prep workflow monitor process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.ALTERYX_DATA_PREP_WORKFLOW_MONITOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.ALTERYX_DATA_PREP_WORKFLOW_MONITOR_RESULTS SELECT * FROM staging
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_alteryx_data_prep_wo_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → alteryx-data-prep-workflow-monitor.yml

Assigns incoming leads in Microsoft Dynamics 365 based on territory rules in Snowflake, creates Jira tasks for follow-up, and notifies assigned reps via Microsoft Teams.

naftiko: '0.5'
info:
  label: Dynamics 365 CRM Lead Assignment
  description: Assigns incoming leads in Microsoft Dynamics 365 based on territory rules in Snowflake, creates Jira tasks for follow-up, and notifies assigned reps via Microsoft Teams.
  tags:
  - sales
  - microsoft-dynamics-365
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: dynamic_365_crm_lead
    port: 8080
    tools:
    - name: dynamic-365
      description: Given an execution date, run the dynamics 365 crm lead assignment process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.DYNAMIC_365_CRM_LEAD_ASSIGNMENT LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.DYNAMIC_365_CRM_LEAD_ASSIGNMENT_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: WFOPS
          issue_type: Task
          summary: Dynamics 365 CRM Lead Assignment - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_dynamic_365_crm_lead_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: jira
    baseUri: https://wellsfargo.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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → dynamics-365-crm-lead-assignment.yml

Analyzes Istio service mesh traffic patterns from Snowflake metrics, identifies anomalies, creates Jira investigation tickets, and alerts the platform team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Istio Service Mesh Traffic Analyzer
  description: Analyzes Istio service mesh traffic patterns from Snowflake metrics, identifies anomalies, creates Jira investigation tickets, and alerts the platform team via Microsoft Teams.
  tags:
  - infrastructure
  - istio
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: istio_service_mesh_t
    port: 8080
    tools:
    - name: istio-service
      description: Given an execution date, run the istio service mesh traffic analyzer process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.ISTIO_SERVICE_MESH_TRAFFIC_ANALYZER LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.ISTIO_SERVICE_MESH_TRAFFIC_ANALYZER_RESULTS SELECT * FROM staging
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: WFOPS
          issue_type: Task
          summary: Istio Service Mesh Traffic Analyzer - review required
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_istio_service_mesh_t_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: jira
    baseUri: https://wellsfargo.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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → istio-service-mesh-traffic-analyzer.yml

Looks up a Workday worker profile by employee ID, returning name, title, department, and manager.

naftiko: '0.5'
info:
  label: Workday Worker Profile Lookup
  description: Looks up a Workday worker profile by employee ID, returning name, title, department, and manager.
  tags:
  - hr
  - workday
  - employee-data
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: get-worker-profile
      description: Given a Workday employee ID, retrieve the worker profile including job title and department. Use for HR inquiries.
      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: $.worker.fullName
      - name: job_title
        type: string
        mapping: $.worker.jobTitle
  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: /wellsfargo/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
Open in Framework → View in Fleet → workday-worker-profile-lookup.yml

Monitors Linkerd golden signals from Snowflake metrics, flags SLO breaches, creates ServiceNow incidents, and alerts the SRE team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Linkerd Service Mesh Golden Signal Monitor
  description: Monitors Linkerd golden signals from Snowflake metrics, flags SLO breaches, creates ServiceNow incidents, and alerts the SRE team via Microsoft Teams.
  tags:
  - infrastructure
  - linkerd
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: linkerd_service_mesh
    port: 8080
    tools:
    - name: linkerd-service
      description: Given an execution date, run the linkerd service mesh golden signal monitor process. Use for scheduled operations.
      inputParameters:
      - name: execution_date
        in: body
        type: string
        description: The execution date in YYYY-MM-DD format.
      steps:
      - name: get-data
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT * FROM ANALYTICS.LINKERD_SERVICE_MESH_GOLDEN_SIGNAL_MONITOR LIMIT 100
      - name: process-results
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO ANALYTICS.LINKERD_SERVICE_MESH_GOLDEN_SIGNAL_MONITOR_RESULTS SELECT * FROM staging
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: infrastructure
          short_description: Linkerd Service Mesh Golden Signal Monitor processing complete
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.teams_linkerd_service_mesh_channel
          text: Process complete. Results logged.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://wellsfargo.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: servicenow
    baseUri: https://wellsfargo.service-now.com/api/now
    authentication:
      type: 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/$secrets.teams_team_id/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → linkerd-service-mesh-golden-signal-monitor.yml

Areas — Total: 2874

  • .NET
  • 3D
  • A/B Testing
  • AI Agents
  • 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 Toolings
  • AI Tools
  • AJAX
  • API Design
  • API Development
  • API Gateways
  • API Integrations
  • API Management
  • API Securities
  • API Testing
  • Acadias
  • Acceptance Testing
  • Access Control Management
  • Access Controls
  • Access Management
  • Accessibility
  • Accessibility Audits
  • Accessibility Testing
  • Account Management
  • Accountability
  • Accounting
  • Accounting Platforms
  • Accounting Software
  • Accounting Systems
  • Accounts Payables
  • Accounts Receivables
  • Active Directory
  • Active Directory Certificate Services
  • Activity Streams
  • Actuarial Sciences
  • Ad Management
  • Ad Platforms
  • Ad-teches
  • Administration
  • Administratives
  • Advertising
  • Advertising Platforms
  • Advertising Technologies
  • Agent Development
  • Agent Frameworks
  • Agent-based Systems
  • Agentic AI
  • Agentic Frameworks
  • Agentic Solutions
  • Agentic Systems
  • Agentics
  • Agents
  • Alarm Systems
  • Alerting
  • Alerts
  • Algorithm Design
  • Algorithm Development
  • Algorithmic Tradings
  • Algorithms
  • Ambassadors
  • Analysis
  • Analytical Databases
  • Analytics
  • Analytics Infrastructure
  • Androids
  • Animations
  • Annotations
  • Anomaly Detections
  • Anti-Money Launderings
  • Antivirus
  • Apache Portable Runtimes
  • App Store Deployments
  • Apple iOS
  • Applicant Tracking Systems
  • Application Architectures
  • Application Deliveries
  • Application Development
  • Application Integrations
  • Application Lifecycle Management
  • Application Management
  • Application Monitoring
  • Application Performance Management
  • Application Performance Monitoring
  • Application Platforms
  • Application Profilings
  • Application Programming Interfaces
  • Application Runtimes
  • Application Securities
  • Application Servers
  • Applications
  • Architecture Design
  • Architecture Governance
  • Architecture Strategies
  • Architectures
  • Archives
  • Archiving
  • Argus
  • Arrays
  • Artemis
  • Artifact Management
  • Artifact Storage
  • Artificial Intelligence
  • Artificial Intelligence/Machine Learning
  • Assessment Tools
  • Assessments
  • Asset Allocations
  • Asset Inventories
  • Asset Liability Management
  • Asset Management
  • Asset Managers
  • Asset Protection
  • Asset Servicings
  • Asset Tracking
  • Asset Valuations
  • Assignments
  • Asynchronous
  • Asynchronous Communications
  • Asynchronous Processing
  • Attendance Tracking
  • Attendee Tracking
  • Audience Engagements
  • Audience Segmentations
  • Audience Targetings
  • Audio
  • Audit Management
  • Audit Processes
  • Audit Reports
  • Audit Systems
  • Audit Techniques
  • Audit Technologies
  • Audit Tools
  • Audit Trails
  • Audits
  • Australias
  • Authentications
  • Authoring Tools
  • Authorizations
  • Auto Scaling
  • Automated Incident Responses
  • Automated Monitoring Systems
  • 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
  • Background Jobs
  • Backup And Recovery
  • Backups
  • Backward Compatibilities
  • Banking
  • Banking Infrastructure
  • Banking Platforms
  • Banking Supervisions
  • Banking Systems
  • Banking Technologies
  • Bashes
  • Batch Processing
  • Belts
  • Benchmarkings
  • Benchmarks
  • Benefits Administration
  • Best Practices
  • Big Data
  • Billings
  • Biotechnologies
  • Black Box Testing
  • Blockchains
  • Bloggings
  • Booking Systems
  • Bookings
  • Bookkeepings
  • Border Controls
  • Borrowings
  • Bots
  • Brand Monitoring
  • Bridges
  • Broadcastings
  • Browser Compatibilities
  • Browser Extensions
  • Browser Support
  • Browser-Based
  • Browsers
  • Budgetings
  • Bug Tracking
  • Build Automation
  • Build Pipelines
  • Build Systems
  • Build Tools
  • Building Automation
  • Building Securities
  • Built Environments
  • Business
  • Business Alignments
  • Business Analysis
  • Business Analytics
  • Business Applications
  • Business Continuities
  • Business Excellence
  • Business Intelligence
  • Business Logics
  • Business Management
  • Business Modeling
  • Business Models
  • Business News
  • 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
  • Carbon Accounting
  • Career Development
  • Case Laws
  • Case Management
  • Cash Flow Management
  • Cash Management
  • Cash Management Systems
  • Cash Processing
  • Cash Reconciliations
  • Catalogs
  • Centralized Management
  • Centralized Repositories
  • Certificate Authorities
  • Certificates
  • Certifications
  • Change Data Captures
  • Change Management
  • Chaos Engineering
  • Charting
  • Charts
  • Charts And Graphs
  • Chatbot Platforms
  • Chatbots
  • Chats
  • Chemical Engineering
  • Chromiums
  • Cities
  • Claims Management
  • Claims Processing
  • Classification
  • Clean Energies
  • Clearing And Settlement Systems
  • Clearing And Settlements
  • Clearings
  • Client Analytics
  • Client Books
  • Client Communications
  • Client Data
  • Client Experiences
  • Client Libraries
  • Client Management
  • Client Referentials
  • Client Relations
  • Client Relationship Management
  • Client Relationship Management Tools
  • Client Reportings
  • Client Service Desks
  • Client Services
  • Client Solutions
  • Client Updates
  • Client-servers
  • Clients
  • Climate Changes
  • Climate Controls
  • Climates
  • Cloud Adoptions
  • Cloud And Data Management Tools
  • Cloud Architectures
  • Cloud Assessments
  • Cloud Assets
  • Cloud Computes
  • Cloud Computing
  • Cloud Computing Environments
  • Cloud Computing Infrastructure
  • Cloud Computing Platforms
  • Cloud Computing Services
  • Cloud Controls
  • Cloud Data
  • Cloud Data Migrations
  • Cloud Data Platforms
  • Cloud Data Warehouses
  • Cloud Databases
  • Cloud Deployments
  • Cloud Development
  • Cloud Ecosystems
  • Cloud Enablement
  • Cloud Engineering
  • Cloud Environments
  • Cloud Governance
  • Cloud Implementations
  • Cloud Infrastructure
  • Cloud Instances
  • Cloud Integrations
  • Cloud Landing Zones
  • Cloud Management
  • Cloud Migrations
  • Cloud Native Stacks
  • Cloud Natives
  • Cloud Networking
  • Cloud Operations
  • Cloud Platforms
  • Cloud Risks
  • Cloud Runs
  • Cloud Securities
  • Cloud Security Best Practices
  • Cloud Security Controls
  • Cloud Security Frameworks
  • Cloud Security Posture Management
  • Cloud Security Posture Management (CSPM)
  • 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 Technologies
  • Cloud-Native Distributed Systems
  • Cloud-based Distributed Systems
  • Cloud-based Environments
  • Cloud-based Services
  • Cloud-based Solutions
  • Cloud-first Solutions
  • Cloud-native Applications
  • Cloud-native Architectures
  • Cloud-native Design
  • Cloud-native Development
  • Cloud-native Engineering
  • Cloud-native Platforms
  • Cloud-native Services
  • Cloud-native Solutions
  • Cloud-native Tech
  • Cloud-native Technologies
  • Clouds
  • Cluster Management
  • Clustering
  • Coals
  • Code Analysis
  • Code Assistants
  • Code Coverages
  • Code Generations
  • Code Management
  • Code Quality
  • Code Repositories
  • Code Reusabilities
  • Code Reviews
  • Code Versioning Tools
  • Codes
  • Collaboration Tools
  • Collaborations
  • Collaborative Development
  • Collateral Eligibilities
  • Collateral Management
  • Collaterals
  • Collections
  • Column Stores
  • Command Lines
  • Commerce
  • Commercial Services
  • Committee Management
  • Commodities
  • Commodity Futures
  • Common Sense
  • Communication Tools
  • Communications
  • Communities
  • Community Engagements
  • Compatibilities
  • Compatibility Testing
  • Compensation Management
  • Competency Frameworks
  • Competitive Analyses
  • Competitive Analysis
  • Competitive Intelligence
  • Competitor Analysis
  • Compilations
  • Compilers
  • Complaint Management
  • Complex Systems
  • Complexity Analysis
  • Compliance
  • Compliance Automation
  • Compliance Expertises
  • Compliance Frameworks
  • Compliance Hubs
  • Compliance Management
  • Compliance Management Programs
  • Compliance Managers
  • Compliance Monitoring
  • Compliance Monitoring Systems
  • Compliance Oversights
  • Compliance Policies
  • Compliance Risk Management Frameworks
  • Compliance Services
  • Compliance Solutions
  • Compliance Systems
  • Compliance Technologies
  • Compliance Tools
  • Component Architectures
  • Component Frameworks
  • Component Libraries
  • Compressions
  • Computational Linguistics
  • Computational Tools
  • Computations
  • Computer Aided Design
  • Computer Aided Engineering
  • Computer Aided Manufacturing
  • Computer Applications
  • 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 Protection
  • Contact Centers
  • Contact Databases
  • Contact Management
  • Contactless Payments
  • Contacts
  • Container Management
  • Container Networking
  • Container Orchestration
  • Container Orchestration Services
  • Container Platforms
  • Container Registries
  • Container Runtimes
  • Container Securities
  • Container Services
  • Containerization
  • Containerization Technologies
  • Containerized Applications
  • Containerized Deployments
  • Containerized Environments
  • Containerized Microservices
  • Containerized Workloads
  • Containers
  • Content Creations
  • Content Deliveries
  • Content Delivery Networks
  • Content Generations
  • Content Integrations
  • Content Management
  • Content Management Systems
  • Content Marketing
  • Content Repositories
  • 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
  • Contract Management Software
  • Contribution Management
  • Contributions
  • Control Planes
  • Control Systems
  • Controllers
  • Controls
  • Controls Frameworks
  • Conversational AI
  • Conversion Optimizations
  • Conversion Rate Optimizations
  • Coordinates
  • Coordination Services
  • Copywritings
  • Core Banking
  • Core Systems
  • Corporate Actions
  • Corporate Banking
  • Corporate Finances
  • Corporate Learning
  • Cost Accounting
  • Cost Containments
  • Cost Controls
  • Cost Management
  • Cost Optimizations
  • Country-Specific
  • Creative Productions
  • Creative Services
  • Creative Suites
  • Creative Tools
  • Credentials
  • Credit Applications
  • Credit Cards
  • Credit Controls
  • Credit Decision Process
  • Credit Management
  • Credit Middle Offices
  • Credit Process
  • Credit Protection
  • Credit Ratings
  • Credit Risk Modeling
  • Credit Risks
  • Credit Valuation Adjustments
  • Crisis Management
  • Critical Thinkings
  • Cross Currency Swaps
  • Cross Platforms
  • Cross-Border Solutions
  • Cross-border Payments
  • Cross-browser Compatibilities
  • Cross-device Testing
  • Cryptocurrencies
  • Cryptographies
  • Cs
  • Cultural Changes
  • Currencies
  • Custodies
  • Custody Platforms
  • Custody Products
  • Custody Services
  • Custom Development
  • 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 Portals
  • Customer Relationship Management
  • Customer Satisfactions
  • Customer Segmentations
  • Customer Service
  • Customer Success
  • Customer Support
  • Customer Targetings
  • Customizations
  • Customs
  • Cyber Defenses
  • Cyber Governance
  • Cyber Resiliences
  • Cyber Risk Management
  • Cyber Securities
  • Cybersecurities
  • Cybersecurity Frameworks
  • DNS Securities
  • DNS, DHCP, and IP Address Management
  • Dashboards
  • Data
  • Data Access
  • Data Access Governance
  • Data Accessibility
  • Data Acquisition
  • Data Activations
  • Data Analysis
  • Data Analysis Methods
  • Data Analysis Techniques
  • Data Analysis Tools
  • Data Analysis Tools And Software
  • Data Analysis Tools And Techniques
  • Data Analytic Tools
  • Data Analytics
  • Data Analytics Platforms
  • Data Analytics Technologies
  • Data Analytics Tools
  • Data Analytics Tools And Techniques
  • Data And Analytical Tools
  • Data And Analytics Tools
  • Data Anonymizations
  • Data Architectures
  • Data At Rest Encryptions
  • Data Capabilities
  • Data Captures
  • Data Catalogs
  • Data Center Infrastructure
  • Data Center Operations
  • Data Centers
  • Data Centres
  • Data Certifications
  • Data Classification
  • Data Cleanings
  • Data Cleansing
  • Data Collections
  • Data Commercializations
  • Data Consumptions
  • Data Conversions
  • Data Dashboards
  • Data Deletions
  • Data Discoveries
  • Data Distribution Models
  • Data Distributions
  • Data Drifts
  • Data Encryptions
  • Data Engineering
  • Data Engines
  • Data Enrichments
  • Data Entries
  • Data Exchanges
  • Data Explorations
  • Data Extractions
  • Data Fabrics
  • Data Factories
  • Data Flows
  • Data Focused Technologies
  • Data Foundations
  • Data Gatherings
  • Data Governance
  • Data Governance Frameworks
  • Data Governance Policies
  • Data Governance Strategies
  • Data Governance Tools
  • Data Handling
  • Data Import/Export
  • Data Infrastructure
  • Data Ingestions
  • Data Insights
  • Data Integrations
  • Data Integrity
  • Data Intelligence
  • Data Interpretations
  • Data Lake Storage
  • Data Lakes
  • Data Leakage Preventions
  • Data License Plus (DL+)
  • Data Licensings
  • Data Lifecycle
  • Data Lifecycle Management
  • Data Lineages
  • Data Loadings
  • Data Loss Preventions
  • Data Management
  • Data Management Controls
  • Data Management Frameworks
  • Data Management Platforms
  • Data Management Services (DMS)
  • Data Management Strategies
  • Data Management Systems
  • Data Management Tools
  • Data Manipulations
  • Data Mappings
  • Data Marketplaces
  • Data Marts
  • Data Meshes
  • Data Migrations
  • Data Minimizations
  • Data Mining
  • Data Monetizations
  • Data Monitoring
  • Data Movements
  • Data Normalizations
  • Data Observability
  • Data Operations
  • Data Orchestration
  • Data Ownerships
  • Data Persistences
  • Data Pipelines
  • Data Platforms
  • Data Preparations
  • Data Privacies
  • Data Processes
  • Data Processing
  • Data Processing Frameworks
  • Data Processing Pipelines
  • Data Processing Platforms
  • Data Products
  • Data Profilings
  • Data Protection
  • Data Providers
  • Data Publishings
  • Data Quality
  • Data Quality Analytics
  • Data Quality Checks
  • Data Quality Controls
  • Data Quality Frameworks
  • Data Quality Management
  • Data Quality Testing
  • Data Quality Tools
  • Data Reconciliations
  • Data Replications
  • Data Reportings
  • Data Repositories
  • Data Retentions
  • Data Retrievals
  • Data Risk Management
  • Data Science Libraries
  • Data Science Models
  • Data Science Techniques
  • Data Science Workflows
  • Data Sciences
  • Data Securities
  • Data Security And Privacies
  • Data Serializations
  • Data Services
  • Data Sharing
  • Data Stacks
  • Data Standardizations
  • Data Stewardships
  • Data Storage
  • Data Storage Systems
  • Data Storytellings
  • Data Strategies
  • Data Streamings
  • Data Structures
  • Data Synchronizations
  • Data Systems
  • Data Technologies
  • Data Testing
  • Data Tokenizations
  • Data Tools
  • Data Tracking
  • Data Transfers
  • Data Transformations
  • Data Transmissions
  • Data Validation
  • Data Vaults
  • Data Visualisations
  • Data Visualization Platforms
  • Data Visualization Software
  • Data Visualization Tools
  • Data Visualizations
  • Data Warehouse Architectures
  • Data Warehouse Technologies
  • Data Warehouses
  • Data Warehousing
  • Data Wranglings
  • Data and Analytics
  • Data-Driven
  • Data-Driven Processes
  • Data-Driven Products
  • Data-Driven Techniques
  • Data-Intensive Solutions
  • Data-driven Dashboards
  • Data-driven Decision Making
  • Data-driven Initiatives
  • Data-driven Insights
  • Database Administration
  • Database Applications
  • Database Architectures
  • Database Clusters
  • Database Design
  • Database Integrations
  • Database Management
  • Database Optimizations
  • Database Performance Tuning
  • Database Queries
  • Database Replications
  • Database Securities
  • Database Systems
  • Database Technologies
  • Database Tuning
  • Database Usages
  • Databases
  • Databolts
  • Datastages
  • Debt Collections
  • Debt Financings
  • Debt Securities
  • Debuggings
  • Decentralizations
  • Decentralized
  • Decentralized Autonomous Organizations
  • Decision Making
  • Decision Sciences
  • Decision Support
  • Decision Support Systems
  • Decisioning Models
  • Deep Learning
  • Defis
  • Deliveries
  • Dependencies
  • Dependency Management
  • Dependency Mappings
  • Dependency Tracking
  • Deployment Automation
  • Deployment Infrastructure
  • Deployment Pipeline Lifecycle
  • Deployment Pipelines
  • Deployment Practices
  • Deployment Strategies
  • Deployment Tools
  • Deployments
  • Derbies
  • Derivatives
  • Derivatives Pricings
  • Design
  • Design Guidelines
  • Design Principles
  • Design Reviews
  • Design Software
  • Design Systems
  • Design Thinkings
  • Design Tools
  • Desktop Applications
  • Desktop Software
  • Desktops
  • DevOps Practices
  • DevOps Technologies
  • DevOps Tools
  • Developer Experiences
  • Developer Portals
  • Developer Productivity Tools
  • Developer Tools
  • Development
  • Development Lifecycle
  • Development Operations
  • Development Platforms
  • Development Practices
  • Development Process
  • Development Software
  • Development Tools
  • Device Management
  • Diagnostic Tools
  • Diagnostics
  • Diagrammings
  • Differential Equations
  • Digital Advertising
  • Digital Arts
  • Digital Assets
  • Digital Banking
  • Digital Certificates
  • Digital Channels
  • Digital Commerce
  • Digital Contents
  • Digital Distributions
  • Digital Engagements
  • Digital Events
  • Digital Experiences
  • Digital Identities
  • Digital Infrastructure
  • Digital Learning Tools
  • Digital Marketing
  • Digital Marketing Technologies
  • Digital Media
  • Digital Operations
  • Digital Payments
  • Digital Products
  • Digital Self-services
  • Digital Services
  • Digital Signatures
  • Digital Solutions
  • Digital Strategies
  • Digital Systems
  • Digital Technologies
  • Digital Tools
  • Digital Transactions
  • Digital Transformations
  • Digital Twins
  • Digital Wallets
  • Digitals
  • Digitizations
  • Direct Debits
  • Directed Acyclic Graphs
  • Directory
  • Directory Services
  • Disaster Recovery
  • Discontinued
  • Distributed
  • Distributed Applications
  • Distributed Caches
  • Distributed Computing
  • Distributed Data Processing
  • Distributed Databases
  • Distributed Environments
  • Distributed Storage
  • Distributed Systems
  • Distributed Tracing
  • Distributed Trainings
  • Distribution Platforms
  • Distribution Systems
  • Distributions
  • Document Analysis
  • Document Creations
  • Document Databases
  • Document Libraries
  • Document Management
  • Document Management Systems
  • Document Object Models
  • Document Processing
  • Documentaries
  • Documentary Collections
  • Documentations
  • Documents
  • Domain Adaptations
  • Drift Detections
  • Due Diligence Questionnaires
  • Due Diligences
  • Dynamic Application Security Testing
  • Dynamic Contents
  • Dynamic Models
  • Dynamics
  • E-bankings
  • E-commerces
  • E-learnings
  • E-mails
  • E-procurements
  • E-signatures
  • ERP
  • ESB
  • ESG Data
  • ESG Reportings
  • Ecommerce Platforms
  • Ecommerces
  • Econometric Models
  • Econometric Techniques
  • Econometrics
  • Economic Analysis
  • Economic Data
  • Economics
  • Ecosystems
  • Edteches
  • Educational Technologies
  • Educations
  • Efficiencies
  • Elections
  • Electric Vehicles
  • Electronic Banking
  • Electronic Banking Channels
  • Electronic Communications
  • Electronic Data Interchange
  • Electronic Executions
  • Electronic Invoicings
  • Electronic Payments
  • Electronic Platforms
  • Electronic Tradings
  • Electronics
  • Email Marketing
  • Email Securities
  • Emails
  • 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 Infrastructure
  • Energy Management
  • Engineering
  • Enterprise AI
  • Enterprise Applications
  • Enterprise Architectures
  • Enterprise Communications
  • Enterprise Content Management
  • Enterprise Data
  • Enterprise IT
  • Enterprise Integrations
  • Enterprise Management
  • Enterprise Mobilities
  • Enterprise Performance Management
  • Enterprise Resource Planning
  • Enterprise Risk Management
  • Enterprise Risks
  • Enterprise Searches
  • Enterprise Securities
  • Enterprise Service Bus
  • Enterprise Software
  • Enterprise Solutions
  • Enterprise Systems
  • Enterprise Technologies
  • Enterprise-grade Architectures
  • Enterprises
  • Entertainments
  • Entity Data
  • Entity Framework Cores
  • Entity Resolutions
  • Entrepreneurships
  • Environment Management
  • Equipments
  • Equities
  • Equity Analysis
  • Equity Tradings
  • Error Handling
  • Error Tracking
  • Estate Plannings
  • Estimations
  • Ethical Hackings
  • Ethics
  • Evaluation Frameworks
  • Evaluations
  • Event Driven
  • Event Gateways
  • Event Handling
  • Event Management
  • Event Marketing
  • Event Meshes
  • Event Plannings
  • Event Processing
  • Event Registrations
  • Event Solutions
  • Event Streamings
  • Event Technologies
  • Event-driven Systems
  • Events
  • Examples
  • Excels
  • Execution Management Systems
  • Executions
  • Executive Reportings
  • Expense Management
  • Experiment Design
  • Experimentations
  • Explainable AI
  • Exploitations
  • Exploratory Data Analysis
  • Extended Detection and Responses
  • Extensions
  • External Dependencies
  • External Services
  • External Systems
  • Extract Transform Loads
  • Facilities Management
  • Fast Data
  • Fault Tolerances
  • Fault Tolerants
  • Feature Engineering
  • Feature Enhancements
  • Feature Stores
  • Feature Testing
  • Federations
  • Feedback
  • Feedback Collections
  • Feedback Systems
  • File Parsings
  • File Sharing
  • File Storage
  • 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 Indices
  • Financial Infrastructure
  • Financial Instruments
  • Financial Management
  • Financial Mathematics
  • Financial Media
  • Financial Messaging
  • Financial Modeling
  • Financial Models
  • Financial News
  • Financial Operations
  • Financial Plannings
  • Financial Policies
  • Financial Reportings
  • Financial Researches
  • Financial Risk Management
  • Financial Sanctions
  • Financial Securities
  • Financial Services
  • Financial Software
  • Financial Stabilities
  • Financial Systems
  • Financial Technologies
  • Fine-tunings
  • Fintech
  • Firewall Management
  • Firewalls
  • Firmwares
  • First-Party Data
  • Fixed Incomes
  • Flashes
  • Flexibilities
  • Flexible Workings
  • Flinks
  • Flow Data
  • Forecasting
  • Forecasting Models
  • Foreign Exchanges
  • Forexes
  • Forge
  • Form Validation
  • Formatting Objects Processors
  • Forms
  • Foundations
  • Frameworks
  • Fraud Detection Systems
  • Fraud Detection Tools
  • 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
  • Funding Activities
  • Funding Rounds
  • Futures
  • GPS Technologies
  • Gamings
  • Gateways
  • General Ledger Systems
  • General Ledgers
  • Generative AI
  • Generative Modeling
  • Generative Models
  • Geographic Information Systems
  • Geographies
  • Geolocations
  • Geospatials
  • GitHub Copilots
  • Global Custodies
  • Global Markets
  • Global Positioning Systems
  • Global Trade Solutions
  • Globalizations
  • Goal Settings
  • Google Cloud Functions
  • Governance
  • Governance And Controls
  • Governance Frameworks
  • Governance Tools
  • Government
  • Government Policies
  • Government Relations
  • Graph Databases
  • Graphic Design
  • Graphical User Interfaces
  • Graphics
  • Graphics Processing Units
  • Graphings
  • Graphs
  • Group Mailboxes
  • HCM
  • HR Management
  • HR Systems
  • HR Tech
  • HR Technologies
  • HTTP API
  • HTTP Servers
  • Hadoop Distributed File Systems
  • Hardenings
  • Hardware
  • Hbases
  • Healthcare
  • Healthcare Systems
  • Heating, Ventilation, and Air Conditionings
  • Hedging
  • Help Desks
  • High Availabilities
  • High Performance Computing
  • High Performances
  • High Throughputs
  • High-Frequency Tradings
  • Hirings
  • Hospitality
  • Hosting
  • Human Capital Management
  • Human Computer Interactions
  • Human Factors
  • Human Resources
  • Human-Centered Design
  • Hybrid Clouds
  • Hypervisors
  • Hypothesis Testing
  • IP Address Management
  • IPAM
  • IT Architectures
  • IT Audits
  • IT Governance
  • IT Infrastructure
  • IT Management
  • IT Operations
  • IT Plannings
  • IT Platforms
  • IT Project Management
  • IT Risk Management
  • IT Risks
  • IT Service Management
  • IT Services
  • IT Strategies
  • IT and Operational Risks
  • Ideas
  • Ideations
  • Identities
  • Identity And Access Management
  • Identity Management
  • Identity Providers
  • Identity Verifications
  • Illuminations
  • Image Generations
  • Implementations
  • In Memories
  • In-Memory Databases
  • In-Memory Storage
  • In-house Systems
  • Incident Management
  • Incident Management Systems
  • Incident Management Tools
  • Incident Response Management
  • Incident Responses
  • Inclusive Design
  • Incremental Processing
  • Incubation
  • Index Providers
  • Indexings
  • Industrial Engineering
  • Industry Analysis
  • Industry Reports
  • Inference Optimizations
  • Inferences
  • Informatics
  • Information Architectures
  • Information Design
  • Information Governance
  • Information Management
  • Information Protection
  • Information Retrievals
  • Information Securities
  • Information Security Controls
  • Information Security Frameworks
  • Information Security Risk Management
  • Information Sharing
  • Information Systems
  • Information Technologies
  • Infrastructure
  • Infrastructure As Codes
  • Infrastructure Components
  • Infrastructure Improvements
  • Infrastructure Management
  • Infrastructure Monitoring
  • Infrastructure Securities
  • Infrastructure-as-a-Service
  • Ingress Controllers
  • Innovation
  • Input Validation
  • Insights
  • Inspections
  • Instant Messaging
  • Institutional Finances
  • Institutional Tradings
  • Instrumentations
  • Insurance Operations
  • Insurance Software
  • Insurance Technologies
  • Insurances
  • Integrated Development Environments
  • Integrated Solutions
  • Integration Frameworks
  • Integration Platforms
  • Integration Strategies
  • Integration Testing
  • Integration Tests
  • Integration Workflows
  • Integrations
  • Integrity
  • Intellectual Properties
  • Intelligence
  • Intelligent Systems
  • Intent Data
  • Interactive Contents
  • 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 Portals
  • Internal Reporting Tools
  • Internal Systems
  • Internal Tools
  • Internal Wikis
  • International Banking
  • International Laws
  • International Markets
  • International Relations
  • International Trades
  • Internationalizations
  • Internet
  • Internet Applications
  • Internet Banking
  • Internet Securities
  • Internet Technologies
  • Internet of Things
  • Interoperabilities
  • Intraday Liquidity Management
  • Intranets
  • Intrusion Detection Systems
  • Intrusion Detections
  • Inventory Management
  • Investment Analysis
  • Investment Analytics
  • Investment Banking
  • Investment Data
  • Investment Funds
  • Investment Management
  • Investment Platforms
  • Investment Researches
  • Investment Tracking
  • Investments
  • Investor Relations
  • Invoice Processing
  • Isolations
  • Issue Tracking
  • Iterative Development
  • Ivies
  • Java Virtual Machines
  • Job Boards
  • Job Orchestration
  • Job Schedulers
  • Job Scheduling
  • Journalism
  • Journey Builders
  • Journey Design
  • Journey Mappings
  • Kernels
  • Key Lifecycle Management
  • 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 Distributed Systems
  • Large Language Model Inferences
  • Large Language Models
  • Large Scale Full Stack Systems
  • Large-Scale Backend Systems
  • Large-Scale Enterprise Platforms
  • Large-scale Data Platforms
  • Large-scale Distributed Systems
  • Latency Reductions
  • 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
  • Letters Of Credits
  • Libraries
  • License Compliances
  • License Management
  • Licensings
  • Life Cycle Management
  • Lifecycle Management
  • Lightings
  • Linear Algebras
  • Linked Data
  • Liquidity Contingency Plans
  • Liquidity Management
  • Liquidity Optimizations
  • Liquidity Risk Management
  • Liquidity Risk Management Policies
  • Liquidity Stress Testing
  • Listed Derivatives
  • Live Chats
  • Live Data
  • Live Streamings
  • Live TV
  • Load Balancers
  • Load Balancings
  • Load Testing
  • Loan Capital Markets
  • Loan Management Systems
  • Loan Processing
  • Local Custodies
  • Local Regulatory Reports
  • Localizations
  • Location Services
  • Log Analysis
  • Log Analytics
  • Log Collections
  • Log Management
  • Log Shippings
  • Logging
  • Logistic Regressions
  • Logistics
  • Loss Data
  • Loss Events
  • 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
  • Machine Learning Technologies
  • Mails
  • Mainframes
  • Maintenance
  • Major Incident Management
  • Malware Protection
  • 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 Coverages
  • Market Data
  • Market Information
  • Market Intelligence
  • Market Makers
  • Market Microstructures
  • Market Researches
  • Market Risks
  • Marketing
  • Marketing Analytics
  • Marketing Automation
  • Marketing Platforms
  • Marketing Strategies
  • Marketing Technologies
  • Marketing Tools
  • Marketplaces
  • Markets
  • Mass Notifications
  • Massively Parallel Processing
  • Master Data
  • Master Data Management
  • Mastodons
  • Material Design
  • Mathematical Modeling
  • Mathematics
  • Matrixes
  • Measurements
  • Media
  • Media Contents
  • Media Deliveries
  • Media Management
  • Media Monitoring
  • Media Productions
  • Mediations
  • Medical Devices
  • Meeting Management
  • Meetings
  • Memory Management
  • Mental Healths
  • Mentoring
  • Mergers And Acquisitions
  • Meridians
  • Message Brokers
  • Message Buses
  • Message Queues
  • Message Queuings
  • Messaging
  • Messaging Infrastructure
  • Messaging Platforms
  • Messaging Queues
  • Messaging Systems
  • Metadata
  • Metadata Management
  • Metadata Stores
  • Metrics
  • Micro-services
  • Microfinances
  • Microservice-based Architectures
  • Microservices
  • Microsoft Access
  • Middle Offices
  • Middlewares
  • Migration Plannings
  • Migrations
  • Milestone Tracking
  • Mission Critical
  • Mobile Analytics
  • Mobile Applications
  • Mobile Apps
  • Mobile Banking
  • Mobile Development
  • Mobile Device Management
  • Mobile Devices
  • Mobile Payments
  • Mobile Technologies
  • Mobile Testing
  • Mobiles
  • Mockings
  • Model Adaptations
  • Model Architectures
  • Model Calibrations
  • Model Compressions
  • Model Context Protocols
  • Model Context Protocols (MCP)
  • Model Deployments
  • Model Development
  • Model Efficiencies
  • Model Evaluations
  • Model Fine-tunings
  • Model Governance
  • Model Guidances
  • Model Hubs
  • Model Integrity
  • Model Interpretabilities
  • Model Interpretability Techniques
  • Model Lifecycle Management
  • Model Maintenance
  • Model Management
  • Model Monitoring
  • Model Observability
  • Model Optimizations
  • Model Orchestration
  • Model Performance
  • Model Performance Monitoring
  • Model Pre-training Optimizations
  • Model Risk Management Processes
  • Model Servings
  • Model Sparsifications
  • Model Testing
  • Model Trainings
  • Model Validation
  • Model Validation Techniques
  • Model Versionings
  • Modeling
  • Modeling Platforms
  • Modeling Tools
  • Modernizations
  • Modularity
  • Monetary Policies
  • Monetizations
  • Money Markets
  • Monitoring
  • Monitoring And Controls
  • Monitoring Services
  • Monitoring Software
  • Monitoring Tools
  • Monte Carlo Simulations
  • Monte Carloes
  • Monétiques
  • Ms Products
  • Multi Clouds
  • Multi-Agent Systems
  • Multi-Asset Tradings
  • Multi-channels
  • Multi-clusters
  • Multi-platforms
  • Multi-regions
  • Multi-signatures
  • Multimedia Platforms
  • Multimedias
  • Multimodals
  • Multiple Systems
  • NLP
  • Named Entity Recognitions
  • Natural Gas
  • Natural Language Processing
  • Navigation
  • Negotiations
  • Neobanks
  • Net Asset Values
  • Netwerkens
  • Network Access
  • Network Access Controls (NAC)
  • Network Analysis
  • Network Architectures
  • Network Automation
  • Network Configurations
  • Network Design
  • Network Devices
  • Network Diagnostics
  • Network Engineering
  • Network Infrastructure
  • Network Management
  • Network Monitoring
  • Network Optimizations
  • Network Performance
  • Network Performance Management
  • Network Programming
  • Network Securities
  • Network Tools
  • Network Topologies
  • Networking
  • Neural Networks
  • Neurodiversities
  • New Tabs
  • News
  • News Media
  • News Services
  • Newsletters
  • No Codes
  • NoSQL
  • Nonprofits
  • Nostro
  • Notebooks
  • Notifications
  • OIA
  • OLE for Process Controls
  • ORM
  • OSX
  • Object Relational Mappings
  • Object Storage
  • Object Stores
  • Object-Oriented
  • Observability
  • Observability Platforms
  • Observability Stacks
  • Observability Toolings
  • Observability Tools
  • Office Applications
  • Office Management
  • Office Suites
  • Omnichannels
  • On Demands
  • Onboardings
  • Online Advertising
  • Online Analytical Processing
  • Online Banking
  • Online Learning
  • Online Services
  • Online Shoppings
  • Online Tools
  • Online Transaction Processing
  • Ontologies
  • Open Data
  • Open Source
  • Open-Source Software
  • Open-Source Solutions
  • Open-source Frameworks
  • Open-source Languages
  • Open-source Programming Languages
  • Open-source Technologies
  • Open-source Tools
  • Operating System Configurations
  • Operating Systems
  • Operational Architectures
  • Operational Efficiencies
  • Operational Excellence
  • Operational Intelligence
  • Operational Metrics
  • Operational Permanent Controls
  • Operational Practices
  • Operational Reportings
  • Operational Resilience Frameworks
  • Operational Resiliences
  • Operational Risk Assessments
  • Operational Risk Frameworks
  • Operational Risk Management
  • Operational Risk Management Frameworks
  • Operational Risk Tools
  • Operational Risks
  • Operational Systems
  • Operational Technologies
  • Operations
  • Operations Management
  • Operations Researches
  • Operators
  • Optical Character Recognitions
  • Optimization Techniques
  • Optimizations
  • Options
  • Options Tradings
  • Orchestration
  • Order Books
  • Order Executions
  • Order Management
  • Order Management Systems
  • Organizational Changes
  • Organizational Design
  • Organizational Development
  • Organizational Structures
  • Organizational Transformations
  • Organizations
  • Outils Digitauxes
  • Package Management
  • Package Managers
  • Packages
  • Packaging
  • Packet Captures
  • Paid Media
  • Pair Programming
  • Panoramas
  • Paper Based
  • Parallel Computing
  • Parallel Processing
  • Patch Management
  • Pattern Recognitions
  • Patterns
  • Pay Per Clicks
  • Payment Channels
  • Payment Models
  • Payment Processing
  • Payment Solutions
  • Payment Systems
  • Payments
  • Payments And Collections
  • Payments Applications
  • Payments Securities
  • Payroll
  • Penetration Testing
  • Performance
  • Performance Analysis
  • Performance Engineering
  • Performance Evaluations
  • Performance Improvements
  • Performance Management
  • Performance Marketing
  • Performance Measurements
  • Performance Metrics
  • Performance Monitoring
  • Performance Optimizations
  • Performance Testing
  • Performance Tracking
  • Performance Tuning
  • Permanent Controls
  • Persistences
  • Personal Finances
  • Personalizations
  • Pharmaceuticals
  • Photographies
  • Physical Securities
  • Picassoes
  • Pigs
  • Pillar 3S
  • Pipeline Management
  • Pipeline Orchestration
  • Pipeline Securities
  • Pipelines
  • Pivot Tables
  • Planning Analytics
  • Plannings
  • Platform As A Services
  • Platform Development
  • Platform Ecosystems
  • Platform Engineering
  • Platform Management
  • Platform Modernizations
  • Platform Observability
  • Platform Securities
  • Platform Services
  • Platform Software
  • Platform Solutions
  • Platform Strategies
  • Platform Systems
  • Platform-as-a-Service
  • Platforms
  • Plugins
  • Point Of Sales
  • Policies
  • Policy Administration
  • Policy Administration Systems
  • Policy Advisories
  • Policy Analysis
  • Policy As Codes
  • Policy Enforcements
  • Policy Management
  • Portabilities
  • Portables
  • Portals
  • Portfolio Management
  • Portfolio Management Tools
  • Portfolio Reviews
  • Post Productions
  • Post-Trade Operations
  • Post-Trade Processing
  • Post-event Evaluations
  • Postmortems
  • Power Distributions
  • Power Generations
  • Power Tools
  • Practice Management
  • Pre-trainings
  • Predictabilities
  • Predictions
  • Predictive Analytics
  • Predictive Modeling
  • Presentation Software
  • Presentations
  • Pricing Analytics
  • Pricing Libraries
  • Pricing Models
  • Pricing Strategies
  • Pricing Systems
  • Pricing Tools
  • Pricings
  • Prioritizations
  • Privacy
  • Privacy Impact Assessments
  • Private Clouds
  • Probabilities
  • Probability Theories
  • Problem Management
  • Problem Resolutions
  • Problem Solving
  • Process Analysis
  • Process Analytics
  • Process Automation
  • Process Builders
  • Process Certification Frameworks
  • Process Controls
  • Process Design
  • Process Design Tools
  • Process Documentations
  • Process Engineering
  • Process Frameworks
  • Process Hierarchy Change Management
  • Process Improvements
  • Process Level Assessments
  • Process Management
  • Process Mapping Tools
  • Process Mappings
  • Process Maps
  • Process Mining
  • Process Modeling
  • Process Modeling Tools
  • Process Monitoring
  • Process Optimizations
  • Process Orchestration
  • Process Re-engineerings
  • Process Reengineerings
  • Process Streamlinings
  • Process Visualizations
  • Processes
  • Procurement Tools
  • Procurements
  • Product Analytics
  • Product Areas
  • Product Design
  • Product Development
  • Product Development Lifecycle
  • Product Development Roadmaps
  • Product Increment Plannings
  • Product Information Management
  • Product Integrations
  • Product Lifecycle Management
  • Product Management
  • Product Management Tools
  • Product Owners
  • Product Ownerships
  • Product Platforms
  • Product Roadmaps
  • Product Securities
  • Product Strategies
  • Product Testing
  • Production
  • Production Deployments
  • Production Environments
  • Production Management
  • Production Monitoring
  • Production Securities
  • Production Support
  • Production Systems
  • Productivity
  • Productivity Software
  • Productivity Suites
  • Productivity Tools
  • Products
  • Professional Development
  • Professional Networking
  • Professional Services
  • Professional Trainings
  • Profilings
  • Profitability Analysis
  • Program Management
  • Programmable Logic Controllers
  • Programming
  • Programming Languages
  • Progress Reports
  • Project Charters
  • Project Governance
  • Project Management
  • Project Management Processes
  • Project Management Tools
  • Project Schedules
  • Projects
  • Prompt Engineering
  • Prompt Injection Defenses
  • Promptings
  • Prompts
  • Property Management
  • Proprietary Software
  • Protection
  • Protocol Support
  • Protocols
  • Prototype Development
  • Prototyping
  • Provisioning Process
  • Provisionings
  • Proxies
  • Prunings
  • Psychologies
  • Public Affairs
  • Public Clouds
  • 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 Centers
  • Quality Controls
  • Quality Frameworks
  • Quality Management
  • Quality Metrics
  • Quality Testing
  • Quality Tools
  • Quantitative Analysis
  • Quantitative Finances
  • Quantitative Methods
  • Quantitative Modeling
  • Quantitative Models
  • Quantum Computing
  • Query Engines
  • Query Execution Plans
  • Query Languages
  • Query Optimizations
  • Query Processing
  • Query Systems
  • Query Tools
  • Question Answerings
  • Queues
  • Rapid Development
  • Rapid Prototyping
  • Rate Limitings
  • Rating Agency Methodologies
  • Rating Assignments
  • Ratings
  • Reactives
  • Real Estates
  • Real Time
  • Real-Time Communications
  • Real-Time Data Feeds
  • Real-Time Operating Systems
  • Real-Time Payments
  • Real-time Analytics
  • Real-time Applications
  • Real-time Data
  • Real-time Data And Streaming Applications
  • Real-time Data Environments
  • Real-time Environments
  • Real-time Experiences
  • Real-time Financial Decisionings
  • Real-time Inferences
  • Real-time Insights
  • Real-time Messaging Systems
  • Real-time Monitoring
  • Real-time Processing
  • Real-time Streaming Applications
  • Real-time Streamings
  • Real-time Systems
  • Real-time Visibility
  • Reasonings
  • Recipes
  • Recommendation Engines
  • Recommendation Systems
  • Reconciliation And Controls
  • Reconciliation Reports
  • Reconciliation Systems
  • Reconciliations
  • Reconnaissances
  • Record Keepings
  • Recordings
  • Records Management
  • Recruitings
  • Recruitment
  • Recurring Payments
  • Reference Data
  • Reference Data Systems
  • Reference Models
  • Referential Data
  • Registrations
  • Regression Analysis
  • Regression Testing
  • Regulatory Affairs
  • Regulatory Analysis
  • Regulatory Capital
  • Regulatory Capital Calculations
  • Regulatory Compliances
  • Regulatory Filings
  • Regulatory Intelligence
  • Regulatory Reporting Frameworks
  • Regulatory Reporting Systems
  • Regulatory Reporting Tools
  • Regulatory Reportings
  • Regulatory Solutions
  • Regulatory Technologies
  • Reinforcement Learning
  • Relational Data
  • Relational Data Stores
  • Relational Database Management Systems
  • Relational Databases
  • Relationals
  • Relationship Buildings
  • Relationship Management
  • Release Activities
  • Release Decisionings
  • Release Engineering
  • Release Governance
  • Release Management
  • Release Management Processes
  • Release Pipelines
  • Release Plannings
  • Reliabilities
  • Reliability Engineering
  • Remittances
  • Remote Access
  • Remote Collaborations
  • Remote Desktops
  • 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
  • Requirements
  • Requirements Engineering
  • Requirements Gatherings
  • Requirements Management
  • Research
  • Research Data
  • Research Methods
  • Research Tools
  • Resilience Engineering
  • Resiliences
  • Resiliency
  • Resilient Capabilities
  • Resilient Systems
  • Resource Allocations
  • Resource Management
  • Resource Plannings
  • Resource Scheduling
  • Responsive Design
  • Rest Assured
  • Retail Technologies
  • Retails
  • Retry Logics
  • Reusable Components
  • Revenue Generations
  • Revenue Management
  • Revenue Models
  • Revenue Operations
  • Revenue Optimizations
  • Revenue Strategies
  • Revenues
  • Reverse Proxies
  • Review And Approvals
  • Reviews
  • Rich Internet Applications
  • Risk Analysis
  • Risk Analysis Tools
  • Risk And Control Frameworks
  • Risk Assessments
  • Risk Control Frameworks
  • 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
  • Rule-Based Systems
  • Runtime Securities
  • Runtimes
  • SQL Databases
  • SQL Queries
  • SQL Stored Procedures
  • Safes
  • Safety
  • Safety Engineering
  • Sales
  • Sales Analytics
  • Sales Clouds
  • Sales Enablement
  • Sales Enablement Tools
  • Sales Intelligence
  • Sales Management
  • Sales Productivity
  • Sales Technologies
  • Sales Tools
  • Sales Trainings
  • Sanctions
  • Sanctions Alerts
  • Sanctions And Embargoes
  • Sanctions Compliances
  • Sanctions Policies
  • Sanctions Screenings
  • Sandboxes
  • Sanity Testing
  • Scalabilities
  • Scalability Testing
  • Scaling
  • Scannings
  • Scenario Analysis
  • Scenario Modeling
  • Scenarios
  • Scheduling
  • Scientific Computing
  • Scorings
  • Screenings
  • Scripting Languages
  • Scriptings
  • Search
  • Search Engine Optimizations
  • Search Engines
  • Secrets Management
  • Secure Architectures
  • Secure Coding Practices
  • Secure Codings
  • Secure Communications
  • Secure Configurations
  • Secure Design
  • Secure Development
  • Secure Platforms
  • Secure Proxies
  • Secure Software Development
  • Secure Web Gateways
  • Securities Lendings
  • Securities Tradings
  • Securitisations
  • Security
  • Security Administration
  • Security Analysis
  • Security Analytics
  • Security Architecture Reviews
  • Security Architectures
  • Security Assessments
  • Security Audits
  • Security Automation
  • Security Baselines
  • Security Best Practices
  • Security Compliances
  • Security Controls
  • Security Design
  • Security Development Lifecycle
  • Security Engineering
  • Security Frameworks
  • Security Governance
  • Security Groups
  • Security Incident Responses
  • Security Information and Event Management
  • Security Infrastructure
  • 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-Service Dashboards
  • Self-healings
  • Self-improvements
  • Semantic Parsings
  • Semantic Searches
  • Semantic Technologies
  • Semantic Webs
  • Sensors
  • Serializations
  • Server-Side Rendering
  • Serverless
  • Serverless Architectures
  • Servers
  • Service Bus
  • Service Catalogs
  • Service Clouds
  • Service Deliveries
  • Service Design
  • Service Desks
  • Service Discoveries
  • Service Frameworks
  • Service Governance
  • Service Level Objectives (SLOs)
  • Service Management
  • Service Mappings
  • Service Meshes
  • Service Monitoring
  • Service Operations
  • Service Recovery
  • Service Strategies
  • Services
  • Servlet Containers
  • Servlets
  • Settlement Systems
  • Settlements
  • Shared Resources
  • Shared Responsibilities
  • Shells
  • Shift-left Testing
  • Shippings
  • Short Message Services
  • Simple API for XML
  • Simulation Engines
  • Simulation Platforms
  • Simulation Tools
  • Simulations
  • Simulators
  • Site Reliability Engineering
  • Skill Development
  • Skills Development
  • Slides
  • Smart Contracts
  • Smart Grids
  • Smartphones
  • Smoke Testing
  • Snapshot Testing
  • Social
  • Social Media
  • Social Media Marketing
  • Social Networking
  • Social Networks
  • Social Recruitings
  • Software
  • Software Applications
  • Software Architectures
  • Software Asset Management
  • Software Composition Analysis
  • Software Configuration Management
  • Software Configurations
  • Software Deliveries
  • Software Delivery Life Cycles
  • Software Delivery Platforms
  • Software Deployments
  • Software Design
  • Software Development
  • Software Development Best Practices
  • Software Development Kits
  • Software Distributions
  • Software Documentations
  • Software Engineering
  • Software Infrastructure
  • Software Interfaces
  • Software Languages
  • Software Licensings
  • Software Platforms
  • Software Projects
  • Software Quality
  • Software Solutions
  • Software Systems
  • Software Technologies
  • Software Testing
  • Software Testing Methodologies
  • Software Tools
  • Software Upgrades
  • Software Version Controls
  • 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
  • Space Explorations
  • Spatial Data
  • Spend Management
  • Spitabs
  • Spreadsheets
  • Stakeholder Management
  • Standups
  • Startups
  • State Machines
  • State Management
  • Stateful Computations
  • Statefuls
  • Static Analysis
  • Static Application Security Testing
  • Static Data Management
  • Statistical Analysis
  • Statistical Analysis Software
  • Statistical Analysis Techniques
  • Statistical Analyst Software
  • Statistical Methods
  • Statistical Modeling
  • Statistical Modellings
  • Statistical Models
  • Statistical Packages
  • Statistical Predictive Models
  • Statistical Techniques
  • Statistical Testing
  • Statistical Tools
  • Statistics
  • Stochastic Calculus
  • Stochastic Processes
  • Stock Reconciliations
  • Storage
  • Storage Engines
  • Storage Management
  • Stored Procedures
  • Strategic Design
  • Strategic Plannings
  • Strategies
  • Stream Analytics
  • Stream Processing
  • Streaming Architectures
  • Streaming Data
  • Streamings
  • Stress Testing
  • Stress Testing Models
  • Stress Tests
  • String Manipulations
  • Strong Authentications
  • Strong Consistencies
  • Structured Data
  • Structured Databases
  • Structured Products
  • Structured Streamings
  • Subscription Management
  • 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
  • Surveillance Models
  • Surveillances
  • Sustainability
  • Sustainable Investings
  • Swift Messages
  • Switches
  • Synthetic Testing
  • Synthetics
  • System Administration
  • System Analysis
  • System Applications
  • System Architectures
  • System Automation
  • System Configurations
  • System Design
  • System Development
  • System Enhancements
  • System Hardenings
  • System Implementations
  • System Information
  • System Integrations
  • System Interfaces
  • System Maintenance
  • System Management
  • System Monitoring
  • System Of Records
  • System Operations
  • System Optimizations
  • System Performances
  • System Requirements
  • System Securities
  • System Services
  • System Software
  • System Solutions
  • System Stabilities
  • System Testing
  • System Tests
  • System Tools
  • System Updates
  • Systems
  • Systems Administration
  • Systems Analysis
  • Systems Architectures
  • Systems Design
  • Systems Development
  • Systems Engineering
  • Systems Enhancements
  • Systems Integrations
  • Systems Management
  • Systems Programming
  • Systems Software
  • Systems Testing
  • Systems Thinkings
  • Systems Upgrades
  • T1S
  • Tableaux De Bords
  • Tablets
  • Tag Management
  • Tainas
  • Talent Acquisition
  • Talent Management
  • Task Automation
  • Task Management
  • Task Queues
  • Tasks
  • Tax Compliances
  • Tax Laws
  • Tax Management
  • Tax Plannings
  • Tax Preparations
  • Tax Researches
  • Tax Software
  • Tax Technology Solutions
  • Taxes
  • Tcls
  • Team Collaborations
  • Team Communications
  • Team Development
  • Team Management
  • Teaps
  • Technical Debt
  • Technical Plannings
  • Technical Reviews
  • Technical Support
  • Technical Writings
  • Technologies
  • Technology Adoptions
  • Technology Architectures
  • Technology Enhancements
  • Technology Governance
  • Technology Plannings
  • Technology Platforms
  • Technology Reviews
  • Technology Risk Management
  • Technology Services
  • Technology Stacks
  • Technology Strategies
  • Technology Upgrades
  • Telecommunications
  • Telefonies
  • Telefonoes
  • Telefons
  • Telefoons
  • Telemetry
  • Telephonies
  • Telewerkens
  • Template Engines
  • Terminals
  • Territory Management
  • Test Anything Protocols
  • Test Automation
  • Test Automation Frameworks
  • Test Automation Tools
  • Test Case Management
  • Test Controls
  • Test Data Preparations
  • Test Design
  • Test Doubles
  • Test Engineering
  • Test Environments
  • Test Executions
  • Test Management
  • Test Management Tools
  • Test Plannings
  • Test Pyramids
  • Test Reportings
  • Test Scriptings
  • Test Strategies
  • Test Tools
  • Test-and-learns
  • Testing Frameworks
  • Testing Strategies
  • Testing Tools
  • Tests
  • Text Analysis
  • Text Analytics
  • Text Mining
  • Text Processing
  • Third Parties
  • Third Party Risks
  • Third Party Services
  • Third-Party Entity Data Providers
  • Third-Party Integrations
  • Third-Party Software
  • Third-Party Technologies
  • Third-party Data
  • Third-party Libraries
  • Third-party Management
  • Third-party Monitoring
  • Third-party Risk Management
  • Third-party Securities
  • Third-party Systems
  • Threat Analysis
  • Threat Detections
  • Threat Huntings
  • Threat Intelligence
  • Threat Management
  • Threat Mitigations
  • Threat Modeling
  • Threat Monitoring
  • Threat Protection
  • Ticketing
  • Ticketing Systems
  • Tickets
  • Time Management
  • Time Series
  • Time Series Analysis
  • Time Series Databases
  • Time Series Forecasting
  • Time Series Modeling
  • Timelines
  • Token Management
  • Tokenizations
  • Tokenized Assets
  • Tokens
  • Tools
  • Total Rewards
  • Tracing
  • Tracking
  • Tracking Software
  • Tracs
  • Trade Compliances
  • Trade Confirmations
  • Trade Credit Insurances
  • Trade Finance Systems
  • Trade Finances
  • Trade Life Cycles
  • Trade Lifecycle Management
  • Trade Management
  • Trade Operations
  • Trade Processing
  • Trade Processing Systems
  • Trade Services
  • Trade Settlements
  • Trade Shows
  • Trade Support
  • Trade Surveillances
  • Trade Validation
  • Trading Controls
  • Trading Platforms
  • Trading Systems
  • Trading Technologies
  • Tradings
  • Traffic Analysis
  • Traffic Management
  • Training Data
  • Training Platforms
  • Trainings
  • Transaction Banking
  • Transaction Banking Products
  • Transaction Management
  • Transaction Monitoring
  • Transaction Processing
  • Transfer Learning
  • Transformations
  • Transformers
  • Translations
  • Transparency
  • Transportation
  • Travel Management
  • Travel Technologies
  • Travels
  • Treasuries
  • Treasury Management
  • Treasury Operations
  • Treasury Solutions
  • Troubleshooting
  • Trust And Safety
  • Tuning
  • Turkishes
  • Two-factor Authentications
  • Type Safes
  • Type Safety
  • UI
  • UI Design
  • UX
  • UX Design
  • Ubixes
  • Underwritings
  • Unified Communications
  • Unit Testing
  • Unixes
  • Unstructured Data
  • Unsupervised Learning
  • Updates
  • Uptime
  • Usabilities
  • Usability Testing
  • Usage-Based Pricings
  • User Acceptance Testing
  • User Engagements
  • User Experiences
  • User Feedback
  • User Guides
  • User Insights
  • User Interface/User Experiences
  • User Interfaces
  • User Journeys
  • 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
  • Venture Capital
  • Venue Management
  • Venue Selections
  • Venue Sourcings
  • Venues
  • Verifications
  • Version Control Systems
  • Version Controls
  • Versionings
  • Video Calls
  • Video Chats
  • Video Conferences
  • Video Conferencings
  • Video Editings
  • Video Games
  • Video Platforms
  • Video Productions
  • Videogespreks
  • Videos
  • Virtual Assistants
  • Virtual Data Rooms
  • Virtual Desktop Infrastructure
  • Virtual Environments
  • Virtual Events
  • Virtual Machines
  • Virtual Meetings
  • Virtual Networks
  • Virtualizations
  • Visibility
  • Visioconférences
  • Visual Design
  • Visualizations
  • Voice
  • Voice Recognitions
  • Volume Managers
  • Votings
  • Vues
  • Vulnerability Analysis
  • Vulnerability Assessments
  • Vulnerability Management
  • Vulnerability Management Tools
  • Vulnerability Scanners
  • Vulnerability Scannings
  • Wallets
  • Warehouse Technologies
  • Wealth Management
  • Web API
  • Web Analytics
  • Web Application Development
  • Web Application Securities
  • Web Applications
  • Web Apps
  • Web Architectures
  • Web Based
  • Web Browsers
  • Web Components
  • Web Design
  • Web Development
  • Web Frameworks
  • Web Interfaces
  • Web Performances
  • Web Platforms
  • Web Proxies
  • Web Scrapings
  • Web Securities
  • Web Servers
  • Web Services
  • Web Sites
  • Web Software Development
  • Web Systems
  • Web Technologies
  • Web Tools
  • Web-based Applications
  • Web-based Technologies
  • Web-based Trainings
  • Web3s
  • Webinars
  • Webs
  • Wellbeings
  • Whiteboards
  • Wi-Fi
  • Wikis
  • Windows Servers
  • Wins
  • Words
  • Work From Homes
  • Work Life Balances
  • Workflow Analysis
  • Workflow Automation
  • Workflow Automation Platforms
  • Workflow Design
  • Workflow Enhancements
  • Workflow Management
  • Workflow Management Tools
  • Workflow Optimizations
  • Workflow Orchestration
  • Workflow Products
  • Workflow Systems
  • Workflow Toolings
  • Workflow Tools
  • Workflow Visualizations
  • Workflows
  • Workforce Management
  • Working Capital
  • Workplace Analytics
  • Workplace Safety
  • Workplace Technologies
  • Workshops
  • Workspaces
  • XML Parsers

Services — Total: 485

  • ADP
  • AWS Lambda
  • Adobe
  • Adobe Acrobat
  • Adobe Analytics
  • Adobe Campaign
  • Adobe Captivate
  • Adobe Creative Cloud
  • Adobe Creative Suite
  • Adobe Experience Cloud
  • Adobe Illustrator
  • Adobe Launch
  • Adobe Photoshop
  • Adobe Premiere Pro
  • Adobe Suite
  • Airtable
  • Alteryx
  • Amazon API Gateway
  • Amazon ECS
  • Amazon Kinesis
  • Amazon Neptune
  • Amazon Q
  • Amazon Redshift
  • Amazon S3
  • Amazon SNS
  • Amazon SQS
  • Amazon SageMaker
  • Amazon Web Services
  • Ambassador
  • Android
  • Ansible Automation Platform
  • Ansible Tower
  • Anthropic
  • Apache Airflow
  • Apache Software Foundation
  • Apigee
  • Appian
  • Apple
  • Apple Keynote
  • Apple Pay
  • Apple Safari
  • Argus Enterprise
  • Ariba
  • Artifactory
  • Aruba
  • Asana
  • Atlassian
  • AutoCAD
  • Autodesk
  • Autodesk Fusion 360
  • Autodesk Maya
  • 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 Pipelines
  • Azure Repo
  • Azure Service Bus
  • Azure Storage
  • Azure Synapse Analytics
  • Azure Virtual Desktop
  • Backstage
  • Bancomat
  • Bancontact
  • BigCommerce
  • Bitbucket
  • Bloomberg
  • Bloomberg AIM
  • Bloomberg APIs
  • Bloomberg Company Financials
  • Bloomberg Data
  • Bloomberg EMSX
  • Bloomberg Economics
  • Bloomberg Enterprise
  • Bloomberg Enterprise Data
  • Bloomberg Financial Solutions
  • Bloomberg Government (BGOV)
  • Bloomberg Index Solutions Limited (BISL)
  • Bloomberg Indices
  • Bloomberg Instant Messaging
  • Bloomberg Intelligence
  • Bloomberg News
  • Bloomberg Professional
  • Bloomberg Professional Service
  • Bloomberg Query Language (BQL)
  • Bloomberg TV
  • Bloomberg Tax (BTAX)
  • Bloomberg Television and Radio
  • Bloomberg Terminal
  • Bloomberg Tradebook
  • Bloomberg Valuation Service (BVAL)
  • Boomi
  • Box
  • Broadcom
  • Brocade
  • BrowserStack
  • Bruno
  • Burp Suite
  • Calypso
  • Camtasia
  • Canva
  • Cflow
  • ChatGPT
  • Checkmarx
  • Choreo
  • Circana
  • Cisco
  • Cisco Catalyst Center
  • Cisco Control Hub
  • Cisco Expressway
  • Cisco Firepower
  • Cisco Nexus
  • Cisco Secure Client
  • Cisco Voice Portal
  • Cisco Webex
  • Citrix
  • Citrix NetScaler
  • Claude
  • Clearstream
  • CloudFormation
  • CloudWatch
  • Cloudflare
  • Commvault
  • Concur
  • Conductor
  • Confluence
  • Cortex
  • Coupa
  • Crystal Reports
  • Cvent
  • Dagster
  • Databricks
  • Databricks Workflows
  • Datadog
  • Dataiku
  • Dealogic
  • Demandbase
  • Discord
  • DocuSign
  • DynamoDB
  • Dynatrace
  • EC2
  • EMC
  • Eloqua
  • Everbridge
  • F5 Load Balancer
  • F5 Networks
  • Facebook
  • Facebook Ads
  • FactSet
  • Factiva
  • Fargate
  • Fern
  • Figma
  • Finch
  • ForgeRock
  • Fortify
  • Fortinet
  • Fusio
  • G2
  • GCP Cloud Storage
  • Gainsight
  • Gemini
  • Geneos
  • GitHub
  • GitHub Actions
  • GitHub Copilot
  • GitLab
  • Global Relay
  • Gmail
  • Gong
  • Google
  • Google Ads
  • Google Analytics
  • Google Android
  • Google Apps Script
  • Google Campaign Manager
  • Google Chrome
  • Google Cloud Dataflow
  • Google Cloud Logging
  • Google Cloud Platform
  • Google Data Studio
  • Google Dialogflow
  • Google Docs
  • Google Drive
  • Google Forms
  • Google Maps
  • Google Marketing Platform
  • Google Optimize
  • Google Pay
  • Google Search Console
  • Google Sheets
  • Google Slides
  • Google Tag Manager
  • Google Workspace
  • HAProxy
  • Harness
  • Higress
  • Hobart
  • HubSpot
  • Hugging Face
  • Hunter
  • Hvault
  • IBM
  • IBM API Connect
  • IBM MQ
  • Indeed
  • Infoblox
  • Informatica
  • Informática
  • Insomnia
  • Instagram
  • IntelliJ IDEA
  • International Business Machines
  • Intuit
  • Istio
  • JFrog
  • JFrog Artifactory
  • JetBrains
  • Jira
  • Jitterbit
  • Juniper
  • Juniper Networks
  • Jupyter Notebook
  • Kinesis
  • Kion
  • Knit
  • Kondor
  • Konfig
  • Kong
  • Kubecost
  • Kuma
  • Lambda
  • Lightroom
  • LinkedIn
  • Linkerd
  • LiteLLM
  • Looker
  • Looker Studio
  • MATLAB
  • MailChimp
  • Make
  • Mastercard
  • Maya
  • McAfee
  • Membrane
  • Merge
  • Meta
  • Metasploit
  • Microsoft
  • Microsoft .NET
  • Microsoft 365
  • Microsoft Access
  • Microsoft Azure
  • Microsoft Bicep
  • Microsoft Configuration Manager
  • Microsoft Copilot
  • Microsoft Defender
  • Microsoft Dynamics
  • Microsoft Dynamics 365
  • Microsoft Edge
  • Microsoft Endpoint Configuration Management
  • Microsoft Endpoint Manager
  • Microsoft Entity Framework
  • Microsoft Entra
  • Microsoft Excel
  • Microsoft Exchange
  • Microsoft Graph
  • Microsoft Identity Manager
  • Microsoft Intune
  • Microsoft Office
  • Microsoft Office 365
  • Microsoft Outlook
  • Microsoft Planner
  • Microsoft Power Apps
  • Microsoft Power Automate
  • Microsoft Power Platform
  • Microsoft PowerPoint
  • Microsoft Project
  • Microsoft Purview
  • Microsoft Sentinel
  • Microsoft Teams
  • Microsoft Technologies
  • Microsoft Visio
  • Microsoft Windows
  • Microsoft Windows 10
  • Microsoft Windows Server
  • Microsoft Word
  • Microsoft Xbox
  • Mistral
  • Mixpanel
  • Montran
  • Moody's
  • MuleSoft
  • Murex
  • Nango
  • Navision
  • Nessus
  • NetApp
  • NetFlow
  • Netcool
  • Netscout
  • New Relic
  • Notion
  • Nutanix
  • OpenAI
  • OpenAI APIs
  • OpenRouter
  • OpenShift
  • Oracle
  • Oracle APEX
  • Oracle Cloud
  • Oracle Database
  • Oracle Database 19c
  • Oracle E-Business Suite
  • Oracle Enterprise Database
  • Oracle Enterprise Manager
  • Oracle Essbase
  • Oracle Exadata
  • Oracle Financials
  • Oracle Fusion
  • Oracle General Ledger
  • Oracle GoldenGate
  • Oracle Hyperion
  • Oracle Integration
  • Oracle R12
  • Oracle Siebel
  • Oracle Smart View
  • Oracle WebLogic
  • Orion
  • Palo Alto Networks
  • Panora
  • Paradox
  • Paragon
  • Paw
  • PeopleSoft
  • PeopleSoft Financials
  • Perforce
  • Perplexity
  • Photoshop
  • Pluralsight
  • Port
  • Portkey
  • Postman
  • Power Apps
  • Power BI
  • Power Platform
  • Power Query
  • Prefect
  • Prisma
  • Productiv
  • Prosci
  • Pulse
  • Qlik
  • Qlik Cloud
  • Qlik Sense
  • Qlik Sense Enterprise
  • QlikSense
  • QlikView
  • Qube
  • ReadMe
  • Red Hat
  • Red Hat Ansible Automation Platform
  • Red Hat Enterprise Linux
  • Red Hat Satellite
  • Refinitiv
  • Refinitiv Eikon
  • Reuters
  • Revert
  • Rundeck
  • SAP
  • SAP API Management
  • SAP Ariba
  • SAP BI
  • SAP BRIM (Billing and Revenue Innovation Management)
  • SAP BW
  • 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 Knowledge Management
  • Salesforce Lightning
  • Salesforce Marketing Cloud
  • Salesforce Sales Cloud
  • Salesforce Service Cloud
  • Scalar
  • Seismic
  • SendGrid
  • Sentry System
  • Service Cloud
  • ServiceNow
  • SharePoint
  • Shell
  • Shopify
  • Siebel
  • SimCorp Dimension
  • Slack
  • Snowflake
  • SolarWinds
  • Solaris
  • Solaris Zones
  • Sparx Enterprise Architect
  • Splunk
  • Spot
  • Square
  • StreamYard
  • Stripe
  • Sybase
  • TIBCO
  • Tableau
  • Tableau Desktop
  • Tableau Server
  • Talend
  • Tanium
  • TeamCity
  • Temenos
  • Temenos Transact
  • Temporal
  • Teradata
  • Torii
  • Tradeweb
  • Trellix
  • Trellix Web Gateway
  • Trioptima
  • Triton
  • Tropic
  • Tufin
  • Twilio
  • Twitch
  • Twitter
  • Tyk
  • Unity
  • Unix
  • VMware
  • Vantage
  • Vendr
  • Vercel
  • Veritas Cluster
  • Veritas InfoScale
  • Veritas NetBackup
  • Veritas Volume Manager
  • Vessel
  • Visio
  • Visualforce
  • WebLogic
  • WebSphere
  • WhatsApp
  • Windmill
  • Workday
  • Workday Extend
  • Workday Financials
  • Workday Integration
  • Workday Integrations
  • Workday Payroll
  • Workday Recruiting
  • Workday Reporting
  • Workday Security
  • Workday Studio
  • Xceptor
  • Yardi
  • Youtube
  • Zapier
  • Zendesk
  • Zoom
  • ZoomInfo
  • n8n
  • nOps

Tools — Total: 285

  • Akri
  • Angular
  • Ansible
  • Ansible Playbooks
  • Apache
  • Apache AGE
  • Apache APISIX
  • 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 Commons
  • Apache Cordova
  • Apache CouchDB
  • Apache Curator
  • Apache DB
  • Apache DataFu
  • Apache DolphinScheduler
  • Apache Doris
  • Apache Drill
  • Apache Druid
  • Apache Felix
  • Apache Flex
  • Apache Flink
  • Apache Flume
  • Apache FreeMarker
  • Apache Geode
  • Apache Gora
  • Apache Griffin
  • Apache Groovy
  • Apache HBase
  • Apache HTTP
  • Apache HTTP Server
  • 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 Juneau
  • Apache Kafka
  • Apache Knox
  • Apache Kudu
  • Apache Kylin
  • Apache Logging Services
  • Apache MINA
  • Apache Maven
  • Apache Mesos
  • Apache NetBeans
  • Apache NiFi
  • Apache OFBiz
  • Apache ORC
  • Apache Olingo
  • Apache Oozie
  • Apache OpenJPA
  • Apache OpenOffice
  • Apache OpenWebBeans
  • Apache Ozone
  • Apache POI
  • Apache Parquet
  • Apache Petri
  • Apache Phoenix
  • Apache Pig
  • Apache Pinot
  • Apache Pivot
  • Apache Portals
  • Apache Pulsar
  • Apache Ranger
  • Apache Ratis
  • Apache Roller
  • Apache Rya
  • Apache SDAP
  • Apache SINGA
  • Apache Sedona
  • Apache Serf
  • Apache ShenYu
  • Apache SkyWalking
  • Apache Sling
  • Apache Solr
  • Apache SpamAssassin
  • Apache Spark
  • Apache Spatial
  • Apache Steve
  • Apache Storm
  • Apache Streams
  • Apache Struts
  • Apache Subversion
  • Apache Superset
  • Apache Synapse
  • Apache TVM
  • Apache Tapestry
  • Apache Tcl
  • Apache Tez
  • Apache Thrift
  • Apache Tika
  • Apache TinkerPop
  • Apache Tomcat
  • Apache Traffic Control
  • Apache Traffic Server
  • Apache Turbine
  • Apache VCL
  • Apache Velocity
  • Apache Web Services
  • Apache Whimsy
  • Apache XML Graphics
  • Apache Xalan
  • Apache Xerces
  • Apache ZooKeeper
  • Appium
  • Argo
  • BFE
  • Backstage
  • Buildpacks
  • C#
  • C++
  • Chaos Mesh
  • Chef
  • ClickHouse
  • Cloud Custodian
  • Consul
  • Containerd
  • Copa
  • Cortex
  • Crossplane
  • Cucumber
  • 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
  • Istio
  • JBoss
  • JMock
  • JUnit
  • Jaeger
  • Jenkins
  • Jest
  • Jupyter
  • K3s
  • KCL
  • KEDA
  • KServe
  • Kafka Connect
  • Keycloak
  • Kibana
  • Kotlin
  • Kubeflow
  • Kubeflow Pipelines
  • Kubernetes
  • Kubernetes Operators
  • 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
  • PuTTY
  • Pulumi
  • Puppet
  • PySpark
  • PyTorch
  • Python
  • R
  • RabbitMQ
  • Radius
  • Ratify
  • React
  • React Native
  • Redis
  • Redux
  • Rook
  • Rundeck
  • SPIRE
  • SVN
  • Scala
  • Score
  • Selenium
  • Semantic Kernel
  • Sonar
  • SonarQube
  • SpecFlow
  • Spring
  • Spring Batch
  • Spring Boot
  • Spring Boot Admin Console
  • Spring Cloud
  • Spring Cloud Stream
  • Spring Data
  • Spring Framework
  • Spring Security
  • Swift
  • TensorFlow
  • Terraform
  • Thymeleaf
  • TiKV
  • Ubuntu
  • Vault
  • Vineyard
  • Vite
  • Vitess
  • Vue.js
  • WebFlux
  • Wireshark
  • WordPress
  • YARN
  • Zabbix
  • Zot
  • bootc
  • cURL
  • eBPF
  • gRPC
  • jQuery
  • kpt
  • werf

Standards — Total: 261

  • .prompt.md
  • ACID
  • AIS
  • API-First
  • 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 Compliance
  • Basel III
  • Big O Notation
  • CCPA
  • CHANGELOG.md
  • CITATION.cff
  • CNCF
  • CODE_OF_CONDUCT.md
  • CONTRIBUTING.md
  • CONTRIBUTORS.md
  • CQRS
  • CSS
  • Capital Requirements
  • Certificate Enrolment Protocols
  • Circuit Breaker
  • Code First
  • Communication Protocols
  • Component Model
  • 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 Normalization
  • 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
  • FTP
  • File Format
  • FinOps
  • Financial Regulation
  • Flowcharts
  • Functional Programming
  • GDPR
  • Gherkin
  • GitOps
  • Good Manufacturing Practices
  • Graph Query Language (GQL)
  • GraphQL
  • Gremlin
  • HIPAA
  • HTML
  • HTML5
  • HTTP
  • HTTP/2
  • IAM
  • IMAP
  • ISO
  • IT Standards
  • ITIL
  • ITSM
  • Integration Patterns
  • Interface Specifications
  • Internal Control Standards
  • Inversion Of Control
  • JAX-WS
  • JCR
  • JDBC
  • JMS
  • JPA
  • JSF
  • JSON
  • Jakarta EE
  • Java EE
  • Kanban
  • Kerberos
  • LDAP
  • LICENSE.md
  • Lakehouse Architecture
  • Lean Management
  • Lean Manufacturing
  • Lean Operations
  • Lean Six Sigma
  • Lean Six Sigma Black Belt
  • MLOps
  • MVC
  • Mandatory Reserves Requirement
  • MapReduce
  • Markup Language
  • Messaging Protocol
  • Methodology
  • Mockups
  • Modular Monolith
  • Monolithic Architecture
  • Multi-tier Architecture
  • NFC
  • NIO
  • NIST
  • Network Protocols
  • Normalization
  • OAuth
  • OCI
  • OData
  • OIDC
  • OSGi
  • OSHA
  • OWASP
  • Object-Oriented Programming
  • OpenAPI
  • OpenID Connect
  • PCI Compliance
  • PDF
  • Parquet
  • Partitioning
  • Privacy By Design
  • Process Flow Diagrams
  • Product Backlog
  • Product Backlog Items
  • Product Specifications
  • Programming Paradigm
  • Project Management Methodology
  • Protocol Buffers
  • Prototypes
  • Pub/Sub
  • QoS
  • Quality Of Service
  • Quality Standards
  • RACI
  • RBAC
  • RDF
  • RDP
  • README.md
  • REST
  • REST API
  • RESTful
  • RESTful APIs
  • RESTful Services
  • RESTful Web Services
  • RFID
  • RPC
  • Raft
  • Reactive Programming
  • Regular Expressions
  • Regulation
  • Regulatory
  • Relational Data Modeling
  • Reporting Templates
  • Reserve Requirements
  • Runbooks
  • SAFe Agile
  • SAML
  • SCADA
  • SDLC
  • SECURITY.md
  • SFTP
  • SMTP
  • SOA
  • SOAP
  • SPA
  • SPARQL
  • SQL
  • SSH
  • SSL/TLS
  • SSO
  • SUPPORT.md
  • Scaled Agile
  • Schema Design
  • Schema Evolution
  • Schema Validation
  • Scrum
  • SecOps
  • Secure Software Development Life Cycle
  • Secure Software Development Lifecycle
  • Secure Tunneling Protocols
  • Secure-by-Default
  • Secure-by-Design
  • Security By Design
  • Security Protocols
  • Security Standards
  • Security Standards And Procedures
  • Serverless Patterns
  • Service Oriented Architecture
  • Services Patterns
  • Sharding
  • Six Sigma
  • Sketches
  • Software Design Architectural Patterns
  • Software Design Patterns
  • Software Development Life Cycle
  • Software Development Lifecycle
  • Software-Defined Networking
  • Specification
  • Standard Operating Procedures
  • Standardization
  • Standards
  • Swagger
  • TCP/IP
  • Table Format
  • Technical Specifications
  • Technology Standards
  • Templates
  • Test Cases
  • Test First
  • Test Plans
  • Test Scripts
  • Test Specifications
  • Test Suites
  • Test-driven Development
  • UML
  • Underwriting Standards
  • Use Cases
  • User Stories
  • VNC
  • VPN
  • Versioning Protocols
  • WCAG
  • WSDL
  • Waterfall
  • Web Standards
  • WebSockets
  • Wireframes
  • Write Ahead Log
  • XML
  • XSLT
  • Zero Trust
  • Zero Trust Architecture
  • Zero Trust Network Access
  • Zero-Trust Security Model
  • openCypher

Why do we do this?

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

Who is this for?

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

Why become a design partner?

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

About This Research

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

About This Guidance

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

What This Means For You

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

01

Where you stand

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

See full report →
02

What to build

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

View capabilities →
03

Where to go next

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

Get your navigation →
04

Control what you build

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

First capability live in 90 days.

Become a design partner →