Booz Allen Capabilities

Naftiko 0.5 capability definitions for Booz Allen - 100 capabilities showing integration workflows and service orchestrations.

Sort
Expand

Retrieves ADP payroll data for consultant compensation management.

naftiko: "0.5"
info:
  label: "ADP Payroll Lookup"
  description: "Retrieves ADP payroll data for consultant compensation management."
  tags:
    - hr
    - adp
    - payroll
capability:
  exposes:
    - type: mcp
      namespace: hr-payroll
      port: 8080
      tools:
        - name: get-payroll-data
          description: "Look up ADP payroll by employee ID."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The ADP employee ID."
          call: "adp.get-payroll"
          with:
            employee_id: "{{employee_id}}"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token"
      resources:
        - name: payroll
          path: "/workers/{{employee_id}}/pay-distributions"
          inputParameters:
            - name: employee_id
              in: path
          operations:
            - name: get-payroll
              method: GET

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

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

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

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

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

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

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

naftiko: "0.5"
info:
  label: "Amazon API Gateway Usage Report"
  description: "Retrieves usage data from Amazon API Gateway for government API management."
  tags:
    - cloud
    - amazon-api-gateway
    - api-management
capability:
  exposes:
    - type: mcp
      namespace: api-management
      port: 8080
      tools:
        - name: get-api-usage
          description: "Look up API Gateway usage by usage plan ID."
          inputParameters:
            - name: usage_plan_id
              in: body
              type: string
              description: "API Gateway usage plan ID."
            - name: start_date
              in: body
              type: string
              description: "Start date (YYYY-MM-DD)."
            - name: end_date
              in: body
              type: string
              description: "End date (YYYY-MM-DD)."
          call: "apigateway.get-usage"
          with:
            usage_plan_id: "{{usage_plan_id}}"
            start_date: "{{start_date}}"
            end_date: "{{end_date}}"
  consumes:
    - type: http
      namespace: apigateway
      baseUri: "https://apigateway.us-east-1.amazonaws.com"
      authentication:
        type: aws-sigv4
        accessKeyId: "$secrets.aws_access_key"
        secretAccessKey: "$secrets.aws_secret_key"
      resources:
        - name: usage
          path: "/usageplans/{{usage_plan_id}}/usage?startDate={{start_date}}&endDate={{end_date}}"
          inputParameters:
            - name: usage_plan_id
              in: path
            - name: start_date
              in: query
            - name: end_date
              in: query
          operations:
            - name: get-usage
              method: GET

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Invokes an AWS Lambda function for serverless government data processing.

naftiko: "0.5"
info:
  label: "AWS Lambda Function Invocation"
  description: "Invokes an AWS Lambda function for serverless government data processing."
  tags:
    - cloud
    - aws-lambda
    - serverless
capability:
  exposes:
    - type: mcp
      namespace: serverless-compute
      port: 8080
      tools:
        - name: invoke-lambda
          description: "Invoke an AWS Lambda function."
          inputParameters:
            - name: function_name
              in: body
              type: string
              description: "The Lambda function name."
            - name: payload
              in: body
              type: string
              description: "JSON payload to pass to the function."
          call: "lambda.invoke-function"
          with:
            function_name: "{{function_name}}"
            payload: "{{payload}}"
  consumes:
    - type: http
      namespace: lambda
      baseUri: "https://lambda.us-east-1.amazonaws.com/2015-03-31"
      authentication:
        type: aws-sigv4
        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-function
              method: POST

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

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

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

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

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

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

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

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

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

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

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

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

Manages change requests by creating a ServiceNow change record, requesting CAB approval via Microsoft Teams, running a pre-change Terraform plan, and updating the change with results.

naftiko: "0.5"
info:
  label: "Change Management Approval Pipeline"
  description: "Manages change requests by creating a ServiceNow change record, requesting CAB approval via Microsoft Teams, running a pre-change Terraform plan, and updating the change with results."
  tags:
    - change-management
    - servicenow
    - microsoft-teams
    - terraform
capability:
  exposes:
    - type: mcp
      namespace: change-management
      port: 8080
      tools:
        - name: submit-change
          description: "Submit and track a change request across ServiceNow, Teams, and Terraform."
          inputParameters:
            - name: change_summary
              in: body
              type: string
              description: "Change request summary."
            - name: environment
              in: body
              type: string
              description: "Target environment."
            - name: terraform_workspace
              in: body
              type: string
              description: "Terraform workspace name."
          steps:
            - name: create-change
              type: call
              call: "servicenow.create-record"
              with:
                table: "change_request"
                short_description: "{{change_summary}}"
                environment: "{{environment}}"
            - name: request-approval
              type: call
              call: "msteams.post-adaptive-card"
              with:
                channel_id: "change-advisory-board"
                title: "Change Request: {{create-change.number}}"
                body: "{{change_summary}} | Environment: {{environment}}"
            - name: run-plan
              type: call
              call: "terraform.run-plan"
              with:
                workspace: "{{terraform_workspace}}"
            - name: update-change
              type: call
              call: "servicenow.update-record"
              with:
                table: "change_request"
                sys_id: "{{create-change.sys_id}}"
                terraform_plan: "{{run-plan.resource_count}} resources affected"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://boozallen.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-record
              method: POST
            - name: update-record
              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/cab/channels/general/messages"
          operations:
            - name: post-adaptive-card
              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: run-plan
              method: POST

Retrieves Cisco network device status for government facility network infrastructure.

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

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

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

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

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

Retrieves AWS CloudWatch alarm status for government application monitoring.

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

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

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

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

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

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

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

On new consultant hire in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint project folder, grants Azure DevOps access, and sends a Microsoft Teams welcome message.

naftiko: "0.5"
info:
  label: "Consultant Onboarding Orchestrator"
  description: "On new consultant hire in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint project folder, grants Azure DevOps access, and sends a Microsoft Teams welcome message."
  tags:
    - hr
    - onboarding
    - consulting
    - workday
    - servicenow
    - sharepoint
    - azure-devops
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-consultant-onboarding
          description: "Given a Workday employee ID and project assignment, orchestrate the full onboarding sequence."
          inputParameters:
            - name: workday_employee_id
              in: body
              type: string
              description: "The Workday worker ID."
            - name: project_name
              in: body
              type: string
              description: "The assigned project name."
            - name: start_date
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
            - name: devops_project
              in: body
              type: string
              description: "Azure DevOps project for access."
          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: "Consultant onboarding: {{get-employee.full_name}}"
                category: "hr_onboarding"
                assigned_group: "IT_Onboarding"
                description: "Onboarding for {{get-employee.full_name}} starting {{start_date}} on project {{project_name}}."
            - name: provision-folder
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "consulting_projects_site"
                folder_path: "{{project_name}}/Team/{{get-employee.full_name}}"
            - name: grant-devops-access
              type: call
              call: "azuredevops.add-user"
              with:
                project: "{{devops_project}}"
                user_email: "{{get-employee.work_email}}"
            - name: send-welcome
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.work_email}}"
                text: "Welcome to Booz Allen, {{get-employee.first_name}}! Project: {{project_name}}. IT ticket: {{open-ticket.number}}. Docs: {{provision-folder.url}}. Azure DevOps access granted."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://boozallen.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: 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: azuredevops
      baseUri: "https://vsaex.dev.azure.com/boozallen/_apis"
      authentication:
        type: bearer
        token: "$secrets.azuredevops_pat"
      resources:
        - name: users
          path: "/userentitlements"
          operations:
            - name: add-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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Retrieves a Figma file for government application UX design review.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Retrieves a snapshot of a Grafana dashboard by dashboard UID for a government program.

naftiko: "0.5"
info:
  label: "Grafana Dashboard Snapshot"
  description: "Retrieves a snapshot of a Grafana dashboard by dashboard UID for a government program."
  tags:
    - monitoring
    - grafana
capability:
  exposes:
    - type: mcp
      namespace: observability
      port: 8080
      tools:
        - name: get-dashboard
          description: "Retrieve a Grafana dashboard snapshot by UID."
          inputParameters:
            - name: dashboard_uid
              in: body
              type: string
              description: "Grafana dashboard UID."
          call: "grafana.get-dashboard"
          with:
            uid: "{{dashboard_uid}}"
  consumes:
    - type: http
      namespace: grafana
      baseUri: "https://grafana.boozallen.com/api"
      authentication:
        type: bearer
        token: "$secrets.grafana_token"
      resources:
        - name: dashboards
          path: "/dashboards/uid/{{dashboard_uid}}"
          inputParameters:
            - name: dashboard_uid
              in: path
          operations:
            - name: get-dashboard
              method: GET

Retrieves Grafana dashboard for government infrastructure monitoring.

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

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

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

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

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

Creates a job posting on Indeed for government consulting positions.

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

Detects infrastructure drift by comparing Terraform state against live AWS resources, logging deviations in Splunk, creating remediation tasks in Jira, and alerting the SRE team via Teams.

naftiko: "0.5"
info:
  label: "Infrastructure Drift Detection Pipeline"
  description: "Detects infrastructure drift by comparing Terraform state against live AWS resources, logging deviations in Splunk, creating remediation tasks in Jira, and alerting the SRE team via Teams."
  tags:
    - infrastructure
    - drift-detection
    - terraform
    - splunk
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: drift-detection
      port: 8080
      tools:
        - name: detect-drift
          description: "Detect infrastructure drift across Terraform, Splunk, Jira, and Teams."
          inputParameters:
            - name: terraform_workspace
              in: body
              type: string
              description: "Terraform workspace name."
            - name: aws_account
              in: body
              type: string
              description: "AWS account ID."
          steps:
            - name: check-drift
              type: call
              call: "terraform.plan-drift"
              with:
                workspace: "{{terraform_workspace}}"
            - name: log-deviations
              type: call
              call: "splunk.index-event"
              with:
                index: "infra_drift"
                event: "workspace={{terraform_workspace}} drifted_resources={{check-drift.drifted_count}}"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project_key: "SRE"
                summary: "Drift detected: {{terraform_workspace}}"
                issue_type: "Task"
                description: "Drifted resources: {{check-drift.drifted_count}}. Account: {{aws_account}}."
            - name: alert-sre
              type: call
              call: "msteams.post-channel-message"
              with:
                channel_id: "sre-alerts"
                text: "Infrastructure drift detected in {{terraform_workspace}}. Drifted resources: {{check-drift.drifted_count}}. Jira: {{create-task.key}}."
  consumes:
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: plans
          path: "/workspaces/{{workspace}}/runs"
          inputParameters:
            - name: workspace
              in: path
          operations:
            - name: plan-drift
              method: POST
    - type: http
      namespace: splunk
      baseUri: "https://splunk.boozallen.com:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: events
          path: "/receivers/simple"
          operations:
            - name: index-event
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://boozallen.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/sre/channels/alerts/messages"
          operations:
            - name: post-channel-message
              method: POST

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

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

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

naftiko: "0.5"
info:
  label: "Jira Issue Retrieval"
  description: "Fetches a Jira issue by key and returns summary, status, assignee, and priority for government consulting project management."
  tags:
    - project-management
    - jira
    - consulting
capability:
  exposes:
    - type: mcp
      namespace: project-tracking
      port: 8080
      tools:
        - name: get-jira-issue
          description: "Look up a Jira issue by key."
          inputParameters:
            - name: issue_key
              in: body
              type: string
              description: "The Jira issue key."
          call: "jira.get-issue"
          with:
            issue_key: "{{issue_key}}"
          outputParameters:
            - name: summary
              type: string
              mapping: "$.fields.summary"
            - name: status
              type: string
              mapping: "$.fields.status.name"
            - name: assignee
              type: string
              mapping: "$.fields.assignee.displayName"
            - name: priority
              type: string
              mapping: "$.fields.priority.name"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://boozallen.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue/{{issue_key}}"
          inputParameters:
            - name: issue_key
              in: path
          operations:
            - name: get-issue
              method: GET

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

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

Retrieves Azure Kubernetes Service cluster health status for government application deployments.

naftiko: "0.5"
info:
  label: "Kubernetes Cluster Health Check"
  description: "Retrieves Azure Kubernetes Service cluster health status for government application deployments."
  tags:
    - cloud
    - azure-kubernetes-service
    - kubernetes
capability:
  exposes:
    - type: mcp
      namespace: k8s-monitoring
      port: 8080
      tools:
        - name: get-cluster-health
          description: "Look up AKS cluster health."
          inputParameters:
            - name: subscription_id
              in: body
              type: string
              description: "Azure subscription ID."
            - name: resource_group
              in: body
              type: string
              description: "Azure resource group."
            - name: cluster_name
              in: body
              type: string
              description: "AKS cluster name."
          call: "aks.get-cluster"
          with:
            subscription_id: "{{subscription_id}}"
            resource_group: "{{resource_group}}"
            cluster_name: "{{cluster_name}}"
  consumes:
    - type: http
      namespace: aks
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_mgmt_token"
      resources:
        - name: clusters
          path: "/subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.ContainerService/managedClusters/{{cluster_name}}?api-version=2023-05-01"
          inputParameters:
            - name: subscription_id
              in: path
            - name: resource_group
              in: path
            - name: cluster_name
              in: path
          operations:
            - name: get-cluster
              method: GET

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

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

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

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

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

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

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

naftiko: "0.5"
info:
  label: "Microsoft Intune Device Compliance"
  description: "Retrieves Microsoft Intune device compliance status for government consultant endpoint management."
  tags:
    - endpoint-management
    - microsoft-intune
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: endpoint-compliance
      port: 8080
      tools:
        - name: get-device-compliance
          description: "Look up Intune device compliance by device ID."
          inputParameters:
            - name: device_id
              in: body
              type: string
              description: "Intune managed device ID."
          call: "intune.get-device"
          with:
            device_id: "{{device_id}}"
  consumes:
    - type: http
      namespace: intune
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: devices
          path: "/deviceManagement/managedDevices/{{device_id}}"
          inputParameters:
            - name: device_id
              in: path
          operations:
            - name: get-device
              method: GET

Sends an email via Microsoft Outlook for consulting project communications.

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

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

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

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

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

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

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

Retrieves Microsoft Sentinel security alerts for government SOC operations.

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

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

naftiko: "0.5"
info:
  label: "Microsoft Teams Channel Message"
  description: "Sends a message to a Microsoft Teams channel for project communications."
  tags:
    - collaboration
    - microsoft-teams
    - notification
capability:
  exposes:
    - type: mcp
      namespace: team-comms
      port: 8080
      tools:
        - name: send-channel-message
          description: "Post a message to a Microsoft Teams channel."
          inputParameters:
            - name: team_id
              in: body
              type: string
              description: "The Teams team ID."
            - name: channel_id
              in: body
              type: string
              description: "The channel ID."
            - name: message
              in: body
              type: string
              description: "Message text."
          call: "msteams.post-channel-message"
          with:
            team_id: "{{team_id}}"
            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/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Retrieves a Salesforce opportunity by ID for government contract pipeline management.

naftiko: "0.5"
info:
  label: "Salesforce Opportunity Lookup"
  description: "Retrieves a Salesforce opportunity by ID for government contract pipeline management."
  tags:
    - sales
    - salesforce
    - government
capability:
  exposes:
    - type: mcp
      namespace: sales-pipeline
      port: 8080
      tools:
        - name: get-opportunity
          description: "Look up a Salesforce opportunity by ID."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "The Salesforce opportunity ID."
          call: "salesforce.get-opportunity"
          with:
            opportunity_id: "{{opportunity_id}}"
          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://boozallen.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity/{{opportunity_id}}"
          inputParameters:
            - name: opportunity_id
              in: path
          operations:
            - name: get-opportunity
              method: GET

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

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

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

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

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

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

Retrieves a ServiceNow incident by number for IT service management.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Lookup"
  description: "Retrieves a ServiceNow incident by number for IT service management."
  tags:
    - itsm
    - servicenow
    - incident
capability:
  exposes:
    - type: mcp
      namespace: itsm-incidents
      port: 8080
      tools:
        - name: get-incident
          description: "Look up a ServiceNow incident by number."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number."
          call: "servicenow.get-incident"
          with:
            incident_number: "{{incident_number}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.result.state"
            - name: priority
              type: string
              mapping: "$.result.priority"
            - name: assigned_group
              type: string
              mapping: "$.result.assignment_group.display_value"
            - name: short_description
              type: string
              mapping: "$.result.short_description"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://boozallen.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident?sysparm_query=number={{incident_number}}"
          inputParameters:
            - name: incident_number
              in: query
          operations:
            - name: get-incident
              method: GET

Retrieves metadata for a SharePoint document for consulting project documentation.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Retrieves employee details from Workday by worker ID.

naftiko: "0.5"
info:
  label: "Workday Employee Directory Lookup"
  description: "Retrieves employee details from Workday by worker ID."
  tags:
    - hr
    - workday
    - employee
capability:
  exposes:
    - type: mcp
      namespace: hr-directory
      port: 8080
      tools:
        - name: get-employee
          description: "Look up an employee in Workday."
          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: "$.fullName"
            - name: department
              type: string
              mapping: "$.department"
            - name: title
              type: string
              mapping: "$.jobTitle"
            - name: email
              type: string
              mapping: "$.workEmail"
  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

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

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

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

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

Creates a Zoom meeting for government client consultations.

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