National Hockey League Capabilities

Naftiko 0.5 capability definitions for National Hockey League - 100 capabilities showing integration workflows and service orchestrations.

Sort
Expand

Uses Anthropic Claude to analyze fan sentiment from social media data in Snowflake and posts insights to marketing.

naftiko: "0.5"
info:
  label: "AI-Assisted Fan Sentiment Analysis"
  description: "Uses Anthropic Claude to analyze fan sentiment from social media data in Snowflake and posts insights to marketing."
  tags:
    - marketing
    - anthropic
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: ai_assisted_fan_sentiment_analysis
          description: "Uses Anthropic Claude to analyze fan sentiment from social media data in Snowflake and posts insights to marketing."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "AI-Assisted Fan Sentiment Analysis: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "AI-Assisted Fan Sentiment Analysis for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Uses Anthropic Claude to analyze game event data from Snowflake and generate highlight recommendations for the content team.

naftiko: "0.5"
info:
  label: "AI-Assisted Game Highlight Tagging"
  description: "Uses Anthropic Claude to analyze game event data from Snowflake and generate highlight recommendations for the content team."
  tags:
    - content
    - anthropic
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: ai_assisted_game_highlight_tagging
          description: "Uses Anthropic Claude to analyze game event data from Snowflake and generate highlight recommendations for the content team."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "AI-Assisted Game Highlight Tagging: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "AI-Assisted Game Highlight Tagging for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Fetches game statistics from Snowflake, sends them to Anthropic Claude to generate a natural-language game recap, and publishes the recap to the official NHL social channels via Meta and LinkedIn.

naftiko: "0.5"
info:
  label: "Anthropic AI Game Recap Generator"
  description: "Fetches game statistics from Snowflake, sends them to Anthropic Claude to generate a natural-language game recap, and publishes the recap to the official NHL social channels via Meta and LinkedIn."
  tags:
    - ai
    - content
    - anthropic
    - snowflake
    - meta
    - linkedin
    - game-recap
    - fan-engagement
capability:
  exposes:
    - type: mcp
      namespace: ai-content
      port: 8080
      tools:
        - name: generate-game-recap
          description: "Given an NHL game ID, fetch final stats from Snowflake, generate a natural-language game recap with Anthropic Claude, and publish the recap to Meta and LinkedIn."
          inputParameters:
            - name: game_id
              in: body
              type: string
              description: "NHL game identifier for the completed game."
            - name: meta_page_id
              in: body
              type: string
              description: "Meta Page ID to publish the recap to."
            - name: linkedin_org_id
              in: body
              type: string
              description: "LinkedIn organization ID to publish the recap to."
          steps:
            - name: get-game-stats
              type: call
              call: "snowflake-game.run-stats-query"
              with:
                game_id: "{{game_id}}"
            - name: generate-recap
              type: call
              call: "anthropic.create-message"
              with:
                model: "claude-opus-4-5"
                content: "Write an engaging NHL game recap in 200 words based on these stats: {{get-game-stats.stats_json}}"
            - name: publish-meta
              type: call
              call: "meta-recap.create-page-post"
              with:
                page_id: "{{meta_page_id}}"
                message: "{{generate-recap.content}}"
            - name: publish-linkedin
              type: call
              call: "linkedin-recap.create-share"
              with:
                organization_id: "{{linkedin_org_id}}"
                text: "{{generate-recap.content}}"
  consumes:
    - type: http
      namespace: snowflake-game
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          inputParameters:
            - name: game_id
              in: query
          operations:
            - name: run-stats-query
              method: POST
    - type: http
      namespace: anthropic
      baseUri: "https://api.anthropic.com/v1"
      authentication:
        type: apikey
        key: "x-api-key"
        value: "$secrets.anthropic_api_key"
        placement: header
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: create-message
              method: POST
    - type: http
      namespace: meta-recap
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.meta_access_token"
      resources:
        - name: page-posts
          path: "/{{page_id}}/feed"
          inputParameters:
            - name: page_id
              in: path
          operations:
            - name: create-page-post
              method: POST
    - type: http
      namespace: linkedin-recap
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: shares
          path: "/ugcPosts"
          operations:
            - name: create-share
              method: POST

Queries Snowflake for concession sales data per arena, refreshes Power BI dashboard, and posts digest.

naftiko: "0.5"
info:
  label: "Arena Concession Sales Digest"
  description: "Queries Snowflake for concession sales data per arena, refreshes Power BI dashboard, and posts digest."
  tags:
    - arena
    - revenue
    - snowflake
    - power-bi
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: arena_concession_sales_digest
          description: "Queries Snowflake for concession sales data per arena, refreshes Power BI dashboard, and posts digest."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Arena Concession Sales Digest: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Arena Concession Sales Digest for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Pushes sponsor content updates to arena signage systems via API, validates delivery, and notifies partnerships.

naftiko: "0.5"
info:
  label: "Arena Digital Signage Content Update"
  description: "Pushes sponsor content updates to arena signage systems via API, validates delivery, and notifies partnerships."
  tags:
    - arena
    - digital-signage
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: arena_digital_signage_content_update
          description: "Pushes sponsor content updates to arena signage systems via API, validates delivery, and notifies partnerships."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Arena Digital Signage Content Update: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Arena Digital Signage Content Update for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Coordinates arena emergency drills by pulling staff lists from Workday, creating Jira tasks, and notifying teams.

naftiko: "0.5"
info:
  label: "Arena Emergency Response Drill"
  description: "Coordinates arena emergency drills by pulling staff lists from Workday, creating Jira tasks, and notifying teams."
  tags:
    - arena
    - emergency
    - workday
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: arena_emergency_response_drill
          description: "Coordinates arena emergency drills by pulling staff lists from Workday, creating Jira tasks, and notifying teams."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Arena Emergency Response Drill: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Arena Emergency Response Drill for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Tracks food safety inspection results in Jira, creates ServiceNow remediation orders, and notifies arena ops.

naftiko: "0.5"
info:
  label: "Arena Food Safety Inspection Workflow"
  description: "Tracks food safety inspection results in Jira, creates ServiceNow remediation orders, and notifies arena ops."
  tags:
    - arena
    - food-safety
    - jira
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: arena_food_safety_inspection_workflow
          description: "Tracks food safety inspection results in Jira, creates ServiceNow remediation orders, and notifies arena ops."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Arena Food Safety Inspection Workflow: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Arena Food Safety Inspection Workflow for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Monitors arena HVAC conditions via Snowflake telemetry, creates ServiceNow alerts for deviations, and notifies facilities.

naftiko: "0.5"
info:
  label: "Arena HVAC Comfort Monitoring"
  description: "Monitors arena HVAC conditions via Snowflake telemetry, creates ServiceNow alerts for deviations, and notifies facilities."
  tags:
    - arena
    - hvac
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: arena_hvac_comfort_monitoring
          description: "Monitors arena HVAC conditions via Snowflake telemetry, creates ServiceNow alerts for deviations, and notifies facilities."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Arena HVAC Comfort Monitoring: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Arena HVAC Comfort Monitoring for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Monitors ice quality metrics from Snowflake telemetry, creates ServiceNow work orders for maintenance, and notifies arena facilities team.

naftiko: "0.5"
info:
  label: "Arena Ice Quality Monitoring"
  description: "Monitors ice quality metrics from Snowflake telemetry, creates ServiceNow work orders for maintenance, and notifies arena facilities team."
  tags:
    - arena
    - ice-quality
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: arena-ops
      port: 8080
      tools:
        - name: monitor-ice-quality
          description: "Given an arena and game date, check ice quality metrics and trigger maintenance if needed."
          inputParameters:
            - name: arena_id
              type: string
              description: "Arena identifier."
            - name: game_date
              type: string
              description: "Game date."
          steps:
            - name: get-ice-metrics
              type: call
              call: snowflake.query-ice-quality
              with:
                arena_id: "{{arena_id}}"
                date: "{{game_date}}"
            - name: create-work-order
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Ice quality check: {{arena_id}} for {{game_date}}"
                category: "facilities"
            - name: notify-facilities
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_arena_facilities_channel"
                text: "Ice quality {{arena_id}} ({{game_date}}): Temp: {{get-ice-metrics.surface_temp}}F | Thickness: {{get-ice-metrics.thickness_in}} in | Work order: {{create-work-order.number}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: query-ice-quality
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/arena-facilities/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Creates a ServiceNow change request for arena IT infrastructure updates, schedules maintenance window, and notifies teams.

naftiko: "0.5"
info:
  label: "Arena IT Change Management"
  description: "Creates a ServiceNow change request for arena IT infrastructure updates, schedules maintenance window, and notifies teams."
  tags:
    - itsm
    - arena
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: arena_it_change_management
          description: "Creates a ServiceNow change request for arena IT infrastructure updates, schedules maintenance window, and notifies teams."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Arena IT Change Management: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Arena IT Change Management for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Pulls parking revenue data from Snowflake, validates against expected capacity, and posts report to operations.

naftiko: "0.5"
info:
  label: "Arena Parking Revenue Reconciliation"
  description: "Pulls parking revenue data from Snowflake, validates against expected capacity, and posts report to operations."
  tags:
    - arena
    - revenue
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: arena_parking_revenue_reconciliation
          description: "Pulls parking revenue data from Snowflake, validates against expected capacity, and posts report to operations."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Arena Parking Revenue Reconciliation: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Arena Parking Revenue Reconciliation for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

When POS systems go offline, creates ServiceNow P1 incident, pages on-call, and notifies arena operations.

naftiko: "0.5"
info:
  label: "Arena Point of Sale Outage Response"
  description: "When POS systems go offline, creates ServiceNow P1 incident, pages on-call, and notifies arena operations."
  tags:
    - arena
    - pos
    - servicenow
    - pagerduty
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: arena_point_of_sale_outage_response
          description: "When POS systems go offline, creates ServiceNow P1 incident, pages on-call, and notifies arena operations."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Arena Point of Sale Outage Response: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Arena Point of Sale Outage Response for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

When an arena security incident occurs, creates a ServiceNow P1 incident and notifies security operations via Teams.

naftiko: "0.5"
info:
  label: "Arena Security Incident Response"
  description: "When an arena security incident occurs, creates a ServiceNow P1 incident and notifies security operations via Teams."
  tags:
    - security
    - arena
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: arena_security_incident_response
          description: "When an arena security incident occurs, creates a ServiceNow P1 incident and notifies security operations via Teams."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Arena Security Incident Response: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Arena Security Incident Response for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Queries Snowflake for arena energy and waste metrics, generates sustainability report, and posts to leadership.

naftiko: "0.5"
info:
  label: "Arena Sustainability Metrics Report"
  description: "Queries Snowflake for arena energy and waste metrics, generates sustainability report, and posts to leadership."
  tags:
    - sustainability
    - arena
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: arena_sustainability_metrics_report
          description: "Queries Snowflake for arena energy and waste metrics, generates sustainability report, and posts to leadership."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Arena Sustainability Metrics Report: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Arena Sustainability Metrics Report for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

When Datadog detects arena WiFi saturation, creates a ServiceNow incident and alerts the arena IT team.

naftiko: "0.5"
info:
  label: "Arena WiFi Capacity Alert"
  description: "When Datadog detects arena WiFi saturation, creates a ServiceNow incident and alerts the arena IT team."
  tags:
    - arena
    - network
    - datadog
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: arena_wifi_capacity_alert
          description: "When Datadog detects arena WiFi saturation, creates a ServiceNow incident and alerts the arena IT team."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Arena WiFi Capacity Alert: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Arena WiFi Capacity Alert for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Retrieves cost data for an Azure resource group.

naftiko: "0.5"
info:
  label: "Azure Resource Cost Lookup"
  description: "Retrieves cost data for an Azure resource group."
  tags:
    - cloud
    - azure
    - finops
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: azure_resource_cost_lookup
          description: "Retrieves cost data for an Azure resource group."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary identifier." 
          call: primary.get-azure
          with:
            entity_id: "{{entity_id}}" 
          outputParameters:
            - name: result
              type: string
              mapping: "$.data" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

Fetches approved game highlight clips from SharePoint media storage, publishes them to the Meta (YouTube/Facebook) platform, and logs distribution metadata to Snowflake for rights management.

naftiko: "0.5"
info:
  label: "Broadcast Content Highlight Publisher"
  description: "Fetches approved game highlight clips from SharePoint media storage, publishes them to the Meta (YouTube/Facebook) platform, and logs distribution metadata to Snowflake for rights management."
  tags:
    - media
    - broadcast
    - sharepoint
    - meta
    - snowflake
    - content-distribution
    - highlights
capability:
  exposes:
    - type: mcp
      namespace: media-distribution
      port: 8080
      tools:
        - name: publish-game-highlights
          description: "Given a SharePoint document library item ID for an approved highlight clip and a Meta page ID, publish the video to Meta, and log the distribution to Snowflake for broadcast rights tracking."
          inputParameters:
            - name: sharepoint_site_id
              in: body
              type: string
              description: "SharePoint site ID where the highlight clip is stored."
            - name: media_item_id
              in: body
              type: string
              description: "SharePoint drive item ID for the video clip."
            - name: meta_page_id
              in: body
              type: string
              description: "Meta (Facebook) page ID to publish the video to."
            - name: game_id
              in: body
              type: string
              description: "NHL game ID associated with the highlights."
          steps:
            - name: get-video-url
              type: call
              call: "sharepoint-media.get-file-url"
              with:
                site_id: "{{sharepoint_site_id}}"
                item_id: "{{media_item_id}}"
            - name: publish-to-meta
              type: call
              call: "meta-video.create-video-post"
              with:
                page_id: "{{meta_page_id}}"
                file_url: "{{get-video-url.download_url}}"
            - name: log-distribution
              type: call
              call: "snowflake-media.insert-record"
              with:
                table: "MEDIA.BROADCAST_DISTRIBUTIONS"
                game_id: "{{game_id}}"
                meta_video_id: "{{publish-to-meta.video_id}}"
                published_at: "{{publish-to-meta.published_at}}"
  consumes:
    - type: http
      namespace: sharepoint-media
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/sites/{{site_id}}/drive/items/{{item_id}}"
          inputParameters:
            - name: site_id
              in: path
            - name: item_id
              in: path
          operations:
            - name: get-file-url
              method: GET
    - type: http
      namespace: meta-video
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.meta_access_token"
      resources:
        - name: video-posts
          path: "/{{page_id}}/videos"
          inputParameters:
            - name: page_id
              in: path
          operations:
            - name: create-video-post
              method: POST
    - type: http
      namespace: snowflake-media
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: insert-record
              method: POST

Validates broadcast content rights by querying Snowflake, checks Salesforce contracts, and notifies media team.

naftiko: "0.5"
info:
  label: "Broadcast Content Rights Validation"
  description: "Validates broadcast content rights by querying Snowflake, checks Salesforce contracts, and notifies media team."
  tags:
    - broadcast
    - media-rights
    - snowflake
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: broadcast_content_rights_validation
          description: "Validates broadcast content rights by querying Snowflake, checks Salesforce contracts, and notifies media team."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Broadcast Content Rights Validation: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Broadcast Content Rights Validation for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

When a broadcast system fails, creates a PagerDuty alert, opens a ServiceNow incident, and notifies the broadcast engineering team.

naftiko: "0.5"
info:
  label: "Broadcast Infrastructure Failover Response"
  description: "When a broadcast system fails, creates a PagerDuty alert, opens a ServiceNow incident, and notifies the broadcast engineering team."
  tags:
    - broadcast
    - infrastructure
    - pagerduty
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: broadcast_infrastructure_failover_response
          description: "When a broadcast system fails, creates a PagerDuty alert, opens a ServiceNow incident, and notifies the broadcast engineering team."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Broadcast Infrastructure Failover Response: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Broadcast Infrastructure Failover Response for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Queries Azure costs, identifies optimization opportunities in Snowflake, and posts recommendations to IT leadership.

naftiko: "0.5"
info:
  label: "Cloud Cost Optimization Orchestration"
  description: "Queries Azure costs, identifies optimization opportunities in Snowflake, and posts recommendations to IT leadership."
  tags:
    - cloud
    - finops
    - azure
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: cloud_cost_optimization_orchestration
          description: "Queries Azure costs, identifies optimization opportunities in Snowflake, and posts recommendations to IT leadership."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Cloud Cost Optimization Orchestration: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Cloud Cost Optimization Orchestration for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Queries Workday for overdue training, creates ServiceNow compliance ticket, and notifies managers.

naftiko: "0.5"
info:
  label: "Compliance Training Overdue Alert"
  description: "Queries Workday for overdue training, creates ServiceNow compliance ticket, and notifies managers."
  tags:
    - hr
    - compliance
    - workday
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: compliance_training_overdue_alert
          description: "Queries Workday for overdue training, creates ServiceNow compliance ticket, and notifies managers."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Compliance Training Overdue Alert: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Compliance Training Overdue Alert for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Retrieves a Confluence wiki page by ID for league documentation.

naftiko: "0.5"
info:
  label: "Confluence Page Lookup"
  description: "Retrieves a Confluence wiki page by ID for league documentation."
  tags:
    - collaboration
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: confluence_page_lookup
          description: "Retrieves a Confluence wiki page by ID for league documentation."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary identifier." 
          call: primary.get-confluence
          with:
            entity_id: "{{entity_id}}" 
          outputParameters:
            - name: result
              type: string
              mapping: "$.data" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

When CDN performance degrades, creates ServiceNow incident and alerts the streaming infrastructure team.

naftiko: "0.5"
info:
  label: "Content Delivery Network Performance Alert"
  description: "When CDN performance degrades, creates ServiceNow incident and alerts the streaming infrastructure team."
  tags:
    - streaming
    - cdn
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: content_delivery_network_performance_alert
          description: "When CDN performance degrades, creates ServiceNow incident and alerts the streaming infrastructure team."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Content Delivery Network Performance Alert: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Content Delivery Network Performance Alert for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

When a Snowflake ETL pipeline fails, creates a Jira ticket and notifies the data engineering team.

naftiko: "0.5"
info:
  label: "Data Pipeline Failure Recovery"
  description: "When a Snowflake ETL pipeline fails, creates a Jira ticket and notifies the data engineering team."
  tags:
    - data-engineering
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: data_pipeline_failure_recovery
          description: "When a Snowflake ETL pipeline fails, creates a Jira ticket and notifies the data engineering team."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Data Pipeline Failure Recovery: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Data Pipeline Failure Recovery for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

When a fan data access request is received, queries Snowflake for records, creates Jira task, and notifies legal.

naftiko: "0.5"
info:
  label: "Data Privacy Access Request Workflow"
  description: "When a fan data access request is received, queries Snowflake for records, creates Jira task, and notifies legal."
  tags:
    - privacy
    - compliance
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: data_privacy_access_request_workflow
          description: "When a fan data access request is received, queries Snowflake for records, creates Jira task, and notifies legal."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Data Privacy Access Request Workflow: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Data Privacy Access Request Workflow for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Retrieves the current status of a Datadog monitor for streaming infrastructure.

naftiko: "0.5"
info:
  label: "Datadog Monitor Status Lookup"
  description: "Retrieves the current status of a Datadog monitor for streaming infrastructure."
  tags:
    - observability
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: datadog_monitor_status_lookup
          description: "Retrieves the current status of a Datadog monitor for streaming infrastructure."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary identifier." 
          call: primary.get-datadog
          with:
            entity_id: "{{entity_id}}" 
          outputParameters:
            - name: result
              type: string
              mapping: "$.data" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

Monitors Datadog for error rate or latency anomalies on the NHL.tv streaming platform during live games, triggers a PagerDuty on-call alert, and posts diagnostics to the Broadcast Operations Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Datadog NHL.tv Streaming Platform Monitor"
  description: "Monitors Datadog for error rate or latency anomalies on the NHL.tv streaming platform during live games, triggers a PagerDuty on-call alert, and posts diagnostics to the Broadcast Operations Microsoft Teams channel."
  tags:
    - observability
    - broadcast
    - datadog
    - pagerduty
    - microsoft-teams
    - streaming
    - reliability
capability:
  exposes:
    - type: mcp
      namespace: streaming-reliability
      port: 8080
      tools:
        - name: handle-streaming-anomaly
          description: "Given a Datadog monitor ID detecting an NHL.tv streaming anomaly, fetch monitor details, page the broadcast on-call team via PagerDuty, and post diagnostics to the BroadcastOps Teams channel."
          inputParameters:
            - name: monitor_id
              in: body
              type: string
              description: "Datadog monitor ID that detected the streaming anomaly."
            - name: game_id
              in: body
              type: string
              description: "NHL game ID that was streaming when the anomaly occurred."
            - name: pagerduty_service_id
              in: body
              type: string
              description: "PagerDuty service ID for the broadcast on-call team."
          steps:
            - name: get-monitor
              type: call
              call: "datadog-streaming.get-monitor"
              with:
                monitor_id: "{{monitor_id}}"
            - name: page-oncall
              type: call
              call: "pagerduty-streaming.create-incident"
              with:
                service_id: "{{pagerduty_service_id}}"
                title: "NHL.tv streaming anomaly during game {{game_id}}: {{get-monitor.name}}"
                description: "Monitor value: {{get-monitor.current_value}} | Threshold: {{get-monitor.threshold}}"
            - name: notify-broadcast
              type: call
              call: "msteams-stream.post-channel-message"
              with:
                channel_id: "BroadcastOps"
                text: "Streaming alert: Game {{game_id}} | {{get-monitor.name}} at {{get-monitor.current_value}} (threshold {{get-monitor.threshold}}). PD: {{page-oncall.incident_id}}"
  consumes:
    - type: http
      namespace: datadog-streaming
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: monitors
          path: "/monitor/{{monitor_id}}"
          inputParameters:
            - name: monitor_id
              in: path
          operations:
            - name: get-monitor
              method: GET
    - type: http
      namespace: pagerduty-streaming
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.pagerduty_token"
        placement: header
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams-stream
      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

Queries Snowflake for prospect scouting data, refreshes Power BI dashboards, and posts summary to hockey ops.

naftiko: "0.5"
info:
  label: "Draft Prospect Analytics Report"
  description: "Queries Snowflake for prospect scouting data, refreshes Power BI dashboards, and posts summary to hockey ops."
  tags:
    - hockey-ops
    - scouting
    - snowflake
    - power-bi
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: draft_prospect_analytics_report
          description: "Queries Snowflake for prospect scouting data, refreshes Power BI dashboards, and posts summary to hockey ops."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Draft Prospect Analytics Report: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Draft Prospect Analytics Report for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

When an employee departs, revokes Okta access, updates Workday, and notifies IT and HR via Teams.

naftiko: "0.5"
info:
  label: "Employee Offboarding Workflow"
  description: "When an employee departs, revokes Okta access, updates Workday, and notifies IT and HR via Teams."
  tags:
    - hr
    - offboarding
    - workday
    - okta
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: employee_offboarding_workflow
          description: "When an employee departs, revokes Okta access, updates Workday, and notifies IT and HR via Teams."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Employee Offboarding Workflow: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Employee Offboarding Workflow for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

When a new hire is created in Workday, provisions their Okta identity, creates a ServiceNow onboarding ticket, and sends a Microsoft Teams welcome message to the new team member.

naftiko: "0.5"
info:
  label: "Employee Onboarding Provisioning"
  description: "When a new hire is created in Workday, provisions their Okta identity, creates a ServiceNow onboarding ticket, and sends a Microsoft Teams welcome message to the new team member."
  tags:
    - hr
    - onboarding
    - workday
    - okta
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-onboarding
          description: "Given a Workday employee ID and start date, provision an Okta user account, open a ServiceNow onboarding ticket, and send a Teams welcome message to the new employee."
          inputParameters:
            - name: workday_employee_id
              in: body
              type: string
              description: "Workday worker ID for the new hire."
            - name: start_date
              in: body
              type: string
              description: "Employee start date in ISO 8601 format."
            - name: department
              in: body
              type: string
              description: "Department name for Okta group assignment."
          steps:
            - name: get-worker
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{workday_employee_id}}"
            - name: create-okta-user
              type: call
              call: "okta.create-user"
              with:
                firstName: "{{get-worker.first_name}}"
                lastName: "{{get-worker.last_name}}"
                email: "{{get-worker.work_email}}"
                department: "{{department}}"
            - name: open-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "New hire onboarding: {{get-worker.full_name}}"
                category: "hr_onboarding"
                assigned_to: "IT_Onboarding"
            - name: send-welcome
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-worker.work_email}}"
                text: "Welcome to the NHL, {{get-worker.first_name}}! Your onboarding ticket: {{open-ticket.number}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/nhl/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: okta
      baseUri: "https://nhl.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_token"
        placement: header
      resources:
        - name: users
          path: "/users"
          operations:
            - name: create-user
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: user-mail
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Aggregates social media engagement metrics from LinkedIn and Meta for a given campaign period, stores the results in Snowflake, and posts a digest to the Fan Engagement Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Fan Engagement Campaign Digest"
  description: "Aggregates social media engagement metrics from LinkedIn and Meta for a given campaign period, stores the results in Snowflake, and posts a digest to the Fan Engagement Microsoft Teams channel."
  tags:
    - marketing
    - fan-engagement
    - linkedin
    - meta
    - snowflake
    - microsoft-teams
    - campaign-analytics
capability:
  exposes:
    - type: mcp
      namespace: fan-engagement-reporting
      port: 8080
      tools:
        - name: digest-campaign-engagement
          description: "Given a campaign date range and LinkedIn organization ID and Meta page ID, fetch engagement metrics from both platforms, store aggregated metrics in Snowflake, and post a campaign digest to the FanEngagement Teams channel."
          inputParameters:
            - name: campaign_start
              in: body
              type: string
              description: "Campaign start date in ISO 8601 format."
            - name: campaign_end
              in: body
              type: string
              description: "Campaign end date in ISO 8601 format."
            - name: linkedin_org_id
              in: body
              type: string
              description: "LinkedIn organization ID to pull engagement metrics for."
            - name: meta_page_id
              in: body
              type: string
              description: "Meta Page ID to pull engagement metrics for."
          steps:
            - name: get-linkedin-analytics
              type: call
              call: "linkedin-analytics.get-org-analytics"
              with:
                organization_id: "{{linkedin_org_id}}"
                start_date: "{{campaign_start}}"
                end_date: "{{campaign_end}}"
            - name: get-meta-insights
              type: call
              call: "meta-analytics.get-page-insights"
              with:
                page_id: "{{meta_page_id}}"
                since: "{{campaign_start}}"
                until: "{{campaign_end}}"
            - name: store-metrics
              type: call
              call: "snowflake-engagement.insert-record"
              with:
                table: "MARKETING.CAMPAIGN_METRICS"
                linkedin_impressions: "{{get-linkedin-analytics.impressions}}"
                meta_reach: "{{get-meta-insights.reach}}"
                period_start: "{{campaign_start}}"
                period_end: "{{campaign_end}}"
            - name: post-digest
              type: call
              call: "msteams-faneng.post-channel-message"
              with:
                channel_id: "FanEngagement"
                text: "Campaign digest {{campaign_start}} to {{campaign_end}}: LinkedIn impressions {{get-linkedin-analytics.impressions}} | Meta reach {{get-meta-insights.reach}} | Logged to Snowflake."
  consumes:
    - type: http
      namespace: linkedin-analytics
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: org-analytics
          path: "/organizationalEntityShareStatistics"
          inputParameters:
            - name: organization_id
              in: query
            - name: start_date
              in: query
            - name: end_date
              in: query
          operations:
            - name: get-org-analytics
              method: GET
    - type: http
      namespace: meta-analytics
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.meta_access_token"
      resources:
        - name: page-insights
          path: "/{{page_id}}/insights"
          inputParameters:
            - name: page_id
              in: path
            - name: since
              in: query
            - name: until
              in: query
          operations:
            - name: get-page-insights
              method: GET
    - type: http
      namespace: snowflake-engagement
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: insert-record
              method: POST
    - type: http
      namespace: msteams-faneng
      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

Launches a fan engagement campaign by pulling segments from Snowflake, creating Salesforce campaigns, and notifying marketing.

naftiko: "0.5"
info:
  label: "Fan Engagement Campaign Launch"
  description: "Launches a fan engagement campaign by pulling segments from Snowflake, creating Salesforce campaigns, and notifying marketing."
  tags:
    - marketing
    - fan-engagement
    - snowflake
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: fan_engagement_campaign_launch
          description: "Launches a fan engagement campaign by pulling segments from Snowflake, creating Salesforce campaigns, and notifying marketing."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Fan Engagement Campaign Launch: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Fan Engagement Campaign Launch for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Pulls financial and operational data from Snowflake, refreshes Power BI dashboards, and notifies the business analytics team.

naftiko: "0.5"
info:
  label: "Franchise Valuation Data Preparation"
  description: "Pulls financial and operational data from Snowflake, refreshes Power BI dashboards, and notifies the business analytics team."
  tags:
    - finance
    - analytics
    - snowflake
    - power-bi
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: franchise_valuation_data_preparation
          description: "Pulls financial and operational data from Snowflake, refreshes Power BI dashboards, and notifies the business analytics team."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Franchise Valuation Data Preparation: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Franchise Valuation Data Preparation for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Coordinates game day operations by pulling the arena checklist, creating Jira tasks, and notifying the ops team.

naftiko: "0.5"
info:
  label: "Game Day Operations Checklist"
  description: "Coordinates game day operations by pulling the arena checklist, creating Jira tasks, and notifying the ops team."
  tags:
    - operations
    - game-day
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: game_day_operations_checklist
          description: "Coordinates game day operations by pulling the arena checklist, creating Jira tasks, and notifying the ops team."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Game Day Operations Checklist: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Game Day Operations Checklist for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

On game day, fetches live game highlights from the NHL stats API, publishes posts to LinkedIn and the Meta Graph API, and logs publication metadata to Snowflake for campaign analytics.

naftiko: "0.5"
info:
  label: "Game Day Social Media Publisher"
  description: "On game day, fetches live game highlights from the NHL stats API, publishes posts to LinkedIn and the Meta Graph API, and logs publication metadata to Snowflake for campaign analytics."
  tags:
    - marketing
    - social-media
    - linkedin
    - meta
    - snowflake
    - game-day
    - fan-engagement
capability:
  exposes:
    - type: mcp
      namespace: social-publishing
      port: 8080
      tools:
        - name: publish-game-day-content
          description: "Given an NHL game ID and approved content text, publish the game day post to LinkedIn and Meta (Facebook/Instagram), then log the publication details to Snowflake for campaign tracking."
          inputParameters:
            - name: game_id
              in: body
              type: string
              description: "NHL game identifier, e.g. '2025020001'."
            - name: content_text
              in: body
              type: string
              description: "Approved game day social media post content."
            - name: linkedin_org_id
              in: body
              type: string
              description: "LinkedIn organization ID to publish the post to."
            - name: meta_page_id
              in: body
              type: string
              description: "Meta (Facebook) Page ID to publish the post to."
          steps:
            - name: publish-linkedin
              type: call
              call: "linkedin.create-share"
              with:
                organization_id: "{{linkedin_org_id}}"
                text: "{{content_text}}"
            - name: publish-meta
              type: call
              call: "meta.create-page-post"
              with:
                page_id: "{{meta_page_id}}"
                message: "{{content_text}}"
            - name: log-publications
              type: call
              call: "snowflake-social.insert-record"
              with:
                table: "MARKETING.SOCIAL_PUBLICATIONS"
                game_id: "{{game_id}}"
                linkedin_post_id: "{{publish-linkedin.post_id}}"
                meta_post_id: "{{publish-meta.post_id}}"
  consumes:
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: shares
          path: "/ugcPosts"
          operations:
            - name: create-share
              method: POST
    - type: http
      namespace: meta
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.meta_access_token"
      resources:
        - name: page-posts
          path: "/{{page_id}}/feed"
          inputParameters:
            - name: page_id
              in: path
          operations:
            - name: create-page-post
              method: POST
    - type: http
      namespace: snowflake-social
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: insert-record
              method: POST

Monitors mobile app performance via Datadog, creates ServiceNow incidents for degradation, and alerts the digital team.

naftiko: "0.5"
info:
  label: "Gameday Mobile App Performance Monitoring"
  description: "Monitors mobile app performance via Datadog, creates ServiceNow incidents for degradation, and alerts the digital team."
  tags:
    - digital
    - mobile
    - datadog
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: gameday_mobile_app_performance_monitoring
          description: "Monitors mobile app performance via Datadog, creates ServiceNow incidents for degradation, and alerts the digital team."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Gameday Mobile App Performance Monitoring: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Gameday Mobile App Performance Monitoring for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

On a GitHub Actions deployment pipeline failure, creates a Jira bug in the Technology project, posts an alert to the Engineering Microsoft Teams channel, and opens a ServiceNow change request for rollback tracking.

naftiko: "0.5"
info:
  label: "GitHub Actions Deployment Pipeline Failure"
  description: "On a GitHub Actions deployment pipeline failure, creates a Jira bug in the Technology project, posts an alert to the Engineering Microsoft Teams channel, and opens a ServiceNow change request for rollback tracking."
  tags:
    - devops
    - cicd
    - github
    - jira
    - servicenow
    - microsoft-teams
    - deployment
capability:
  exposes:
    - type: mcp
      namespace: devops-cicd
      port: 8080
      tools:
        - name: handle-deployment-failure
          description: "Given a GitHub Actions run failure on a production deployment workflow, create a Jira bug, post an alert to the Engineering Teams channel, and open a ServiceNow change request for rollback tracking."
          inputParameters:
            - name: repo
              in: body
              type: string
              description: "GitHub repository in owner/repo format."
            - name: workflow_name
              in: body
              type: string
              description: "Name of the failed GitHub Actions deployment workflow."
            - name: run_id
              in: body
              type: string
              description: "GitHub Actions run ID for the failed deployment."
            - name: branch
              in: body
              type: string
              description: "Branch on which the deployment failure occurred."
          steps:
            - name: create-jira-bug
              type: call
              call: "jira-tech.create-issue"
              with:
                project_key: "TECH"
                issuetype: "Bug"
                summary: "[Deploy Failure] {{repo}} / {{branch}} — {{workflow_name}}"
                description: "Run ID: {{run_id}}\nRepo: {{repo}}\nBranch: {{branch}}"
            - name: open-change-request
              type: call
              call: "servicenow-deploy.create-change"
              with:
                short_description: "Deployment failure rollback: {{repo}} / {{branch}}"
                category: "deployment"
                description: "Jira: {{create-jira-bug.key}}"
            - name: notify-engineering
              type: call
              call: "msteams-tech.post-channel-message"
              with:
                channel_id: "Engineering"
                text: "Deployment failure: {{workflow_name}} on {{branch}} in {{repo}}. Jira: {{create-jira-bug.key}} | SNOW: {{open-change-request.number}}"
  consumes:
    - type: http
      namespace: jira-tech
      baseUri: "https://nhl.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: servicenow-deploy
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: change-requests
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: msteams-tech
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

When Dependabot finds a vulnerability, creates Jira ticket and alerts the security team via Teams.

naftiko: "0.5"
info:
  label: "GitHub Dependabot Vulnerability Triage"
  description: "When Dependabot finds a vulnerability, creates Jira ticket and alerts the security team via Teams."
  tags:
    - security
    - github
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: github_dependabot_vulnerability_triage
          description: "When Dependabot finds a vulnerability, creates Jira ticket and alerts the security team via Teams."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "GitHub Dependabot Vulnerability Triage: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "GitHub Dependabot Vulnerability Triage for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Queries GitHub Advanced Security for open secret scanning and code scanning alerts in the NHL GitHub organization, creates Jira tickets for critical findings, and notifies the DevSecOps Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "GitHub Repository Security Scan"
  description: "Queries GitHub Advanced Security for open secret scanning and code scanning alerts in the NHL GitHub organization, creates Jira tickets for critical findings, and notifies the DevSecOps Microsoft Teams channel."
  tags:
    - security
    - devops
    - github
    - jira
    - microsoft-teams
    - code-scanning
    - devsecops
capability:
  exposes:
    - type: mcp
      namespace: devsecops-scanning
      port: 8080
      tools:
        - name: triage-github-security-alerts
          description: "Given a GitHub organization name and minimum severity, list open code scanning and secret scanning alerts, create Jira tickets for critical findings, and post a triage summary to the DevSecOps Teams channel."
          inputParameters:
            - name: github_org
              in: body
              type: string
              description: "GitHub organization to scan for security alerts."
            - name: min_severity
              in: body
              type: string
              description: "Minimum alert severity to process: 'high' or 'critical'."
          steps:
            - name: list-alerts
              type: call
              call: "github-sec.list-org-advisories"
              with:
                org: "{{github_org}}"
                severity: "{{min_severity}}"
            - name: create-jira-ticket
              type: call
              call: "jira-sec.create-issue"
              with:
                project_key: "SEC"
                issuetype: "Bug"
                summary: "Security: {{list-alerts.alert_count}} {{min_severity}} alerts in {{github_org}}"
                description: "Alerts: {{list-alerts.alert_ids}}\nSeverity: {{min_severity}}"
            - name: notify-devsecops
              type: call
              call: "msteams-devsecops.post-channel-message"
              with:
                channel_id: "DevSecOps"
                text: "Security scan: {{list-alerts.alert_count}} {{min_severity}}+ alerts in {{github_org}}. Jira: {{create-jira-ticket.key}}"
  consumes:
    - type: http
      namespace: github-sec
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: org-advisories
          path: "/orgs/{{org}}/security-advisories"
          inputParameters:
            - name: org
              in: path
            - name: severity
              in: query
          operations:
            - name: list-org-advisories
              method: GET
    - type: http
      namespace: jira-sec
      baseUri: "https://nhl.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams-devsecops
      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 CI/CD status for the latest commit on a repository.

naftiko: "0.5"
info:
  label: "GitHub Repository Status Lookup"
  description: "Retrieves CI/CD status for the latest commit on a repository."
  tags:
    - devops
    - github
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: github_repository_status_lookup
          description: "Retrieves CI/CD status for the latest commit on a repository."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary identifier." 
          call: primary.get-github
          with:
            entity_id: "{{entity_id}}" 
          outputParameters:
            - name: result
              type: string
              mapping: "$.data" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

Pulls broadcast schedules from Snowflake, validates partner contracts in Salesforce, and notifies media ops.

naftiko: "0.5"
info:
  label: "International Broadcast Schedule Coordination"
  description: "Pulls broadcast schedules from Snowflake, validates partner contracts in Salesforce, and notifies media ops."
  tags:
    - broadcast
    - international
    - snowflake
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: international_broadcast_schedule_coordination
          description: "Pulls broadcast schedules from Snowflake, validates partner contracts in Salesforce, and notifies media ops."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "International Broadcast Schedule Coordination: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "International Broadcast Schedule Coordination for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

When GitHub finds a vulnerability, creates Jira ticket, opens ServiceNow change request, and alerts security.

naftiko: "0.5"
info:
  label: "IT Security Vulnerability Remediation"
  description: "When GitHub finds a vulnerability, creates Jira ticket, opens ServiceNow change request, and alerts security."
  tags:
    - security
    - github
    - jira
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: it_security_vulnerability_remediation
          description: "When GitHub finds a vulnerability, creates Jira ticket, opens ServiceNow change request, and alerts security."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "IT Security Vulnerability Remediation: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "IT Security Vulnerability Remediation for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Retrieves a Jira issue by key, returning summary, status, and assignee.

naftiko: "0.5"
info:
  label: "Jira Issue Lookup"
  description: "Retrieves a Jira issue by key, returning summary, status, and assignee."
  tags:
    - project-management
    - jira
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: jira_issue_lookup
          description: "Retrieves a Jira issue by key, returning summary, status, and assignee."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary identifier." 
          call: primary.get-jira
          with:
            entity_id: "{{entity_id}}" 
          outputParameters:
            - name: result
              type: string
              mapping: "$.data" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

Fetches completed sprint data from Jira for the NHL Technology division, calculates velocity and bug rate metrics, and posts a sprint digest to the Engineering Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Jira Sprint Velocity Report for Technology Teams"
  description: "Fetches completed sprint data from Jira for the NHL Technology division, calculates velocity and bug rate metrics, and posts a sprint digest to the Engineering Microsoft Teams channel."
  tags:
    - devops
    - agile
    - jira
    - microsoft-teams
    - sprint-reporting
    - engineering
capability:
  exposes:
    - type: mcp
      namespace: agile-reporting
      port: 8080
      tools:
        - name: publish-sprint-velocity-digest
          description: "Given a Jira board ID and number of sprints, calculate average velocity and bug rate, then post a sprint velocity digest to the Engineering Teams channel."
          inputParameters:
            - name: board_id
              in: body
              type: string
              description: "Jira Software board ID to analyze sprint data for."
            - name: sprint_count
              in: body
              type: integer
              description: "Number of completed sprints to include in the analysis."
          steps:
            - name: get-sprint-data
              type: call
              call: "jira-eng.list-completed-sprints"
              with:
                board_id: "{{board_id}}"
                limit: "{{sprint_count}}"
            - name: post-digest
              type: call
              call: "msteams-sprint.post-channel-message"
              with:
                channel_id: "Engineering"
                text: "Sprint velocity (board {{board_id}}, last {{sprint_count}} sprints): avg {{get-sprint-data.avg_velocity}} pts | bug rate {{get-sprint-data.bug_rate}}% | last sprint: {{get-sprint-data.last_sprint_name}}"
  consumes:
    - type: http
      namespace: jira-eng
      baseUri: "https://nhl.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: board-sprints
          path: "/board/{{board_id}}/sprint"
          inputParameters:
            - name: board_id
              in: path
            - name: limit
              in: query
          operations:
            - name: list-completed-sprints
              method: GET
    - type: http
      namespace: msteams-sprint
      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

Monitors AKS deployment rollouts via Datadog, creates ServiceNow incident on failure, and alerts platform team.

naftiko: "0.5"
info:
  label: "Kubernetes Deployment Rollout Monitor"
  description: "Monitors AKS deployment rollouts via Datadog, creates ServiceNow incident on failure, and alerts platform team."
  tags:
    - devops
    - kubernetes
    - datadog
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: kubernetes_deployment_rollout_monitor
          description: "Monitors AKS deployment rollouts via Datadog, creates ServiceNow incident on failure, and alerts platform team."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Kubernetes Deployment Rollout Monitor: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Kubernetes Deployment Rollout Monitor for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Pulls open positions from Workday, creates LinkedIn postings, and posts summary to talent team.

naftiko: "0.5"
info:
  label: "LinkedIn Talent Acquisition Campaign"
  description: "Pulls open positions from Workday, creates LinkedIn postings, and posts summary to talent team."
  tags:
    - hr
    - talent-acquisition
    - workday
    - linkedin
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: linkedin_talent_acquisition_campaign
          description: "Pulls open positions from Workday, creates LinkedIn postings, and posts summary to talent team."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "LinkedIn Talent Acquisition Campaign: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "LinkedIn Talent Acquisition Campaign for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Pulls media revenue data from Snowflake, validates against contracts, and posts reconciliation to finance.

naftiko: "0.5"
info:
  label: "Media Rights Revenue Reconciliation"
  description: "Pulls media revenue data from Snowflake, validates against contracts, and posts reconciliation to finance."
  tags:
    - finance
    - media-rights
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: media_rights_revenue_reconciliation
          description: "Pulls media revenue data from Snowflake, validates against contracts, and posts reconciliation to finance."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Media Rights Revenue Reconciliation: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Media Rights Revenue Reconciliation for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Pulls merchandise sales data from Snowflake, refreshes Power BI dashboard, and posts weekly digest.

naftiko: "0.5"
info:
  label: "Merchandise Sales Analytics Digest"
  description: "Pulls merchandise sales data from Snowflake, refreshes Power BI dashboard, and posts weekly digest."
  tags:
    - retail
    - merchandise
    - snowflake
    - power-bi
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: merchandise_sales_analytics_digest
          description: "Pulls merchandise sales data from Snowflake, refreshes Power BI dashboard, and posts weekly digest."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Merchandise Sales Analytics Digest: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Merchandise Sales Analytics Digest for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Fetches Meta page insights for the NHL official Facebook and Instagram pages, stores weekly engagement metrics in Snowflake, and posts a performance report to the Digital Marketing Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Meta Social Engagement Performance Report"
  description: "Fetches Meta page insights for the NHL official Facebook and Instagram pages, stores weekly engagement metrics in Snowflake, and posts a performance report to the Digital Marketing Microsoft Teams channel."
  tags:
    - marketing
    - social-media
    - meta
    - snowflake
    - microsoft-teams
    - fan-engagement
    - performance-reporting
capability:
  exposes:
    - type: mcp
      namespace: meta-performance
      port: 8080
      tools:
        - name: report-meta-engagement
          description: "Given a Meta page ID and reporting week, fetch page insights for impressions, reach, and engagement, log metrics to Snowflake, and post a weekly social performance digest to Digital Marketing Teams."
          inputParameters:
            - name: meta_page_id
              in: body
              type: string
              description: "Meta (Facebook/Instagram) Page ID to pull insights for."
            - name: week_ending
              in: body
              type: string
              description: "End date of the reporting week in ISO 8601 format."
          steps:
            - name: get-page-insights
              type: call
              call: "meta-insights.get-insights"
              with:
                page_id: "{{meta_page_id}}"
                since: "{{week_ending}}"
                metric: "page_impressions,page_reach,page_engaged_users"
            - name: log-to-snowflake
              type: call
              call: "snowflake-meta.insert-record"
              with:
                table: "MARKETING.META_WEEKLY_METRICS"
                page_id: "{{meta_page_id}}"
                impressions: "{{get-page-insights.impressions}}"
                reach: "{{get-page-insights.reach}}"
                engaged_users: "{{get-page-insights.engaged_users}}"
                week_ending: "{{week_ending}}"
            - name: post-report
              type: call
              call: "msteams-digital.post-channel-message"
              with:
                channel_id: "DigitalMarketing"
                text: "Meta performance week ending {{week_ending}}: Impressions {{get-page-insights.impressions}} | Reach {{get-page-insights.reach}} | Engaged {{get-page-insights.engaged_users}} | Metrics logged to Snowflake."
  consumes:
    - type: http
      namespace: meta-insights
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.meta_access_token"
      resources:
        - name: page-insights
          path: "/{{page_id}}/insights"
          inputParameters:
            - name: page_id
              in: path
            - name: since
              in: query
            - name: metric
              in: query
          operations:
            - name: get-insights
              method: GET
    - type: http
      namespace: snowflake-meta
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: insert-record
              method: POST
    - type: http
      namespace: msteams-digital
      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 social media engagement metrics from Meta API for league content.

naftiko: "0.5"
info:
  label: "Meta Social Media Metrics Lookup"
  description: "Retrieves social media engagement metrics from Meta API for league content."
  tags:
    - marketing
    - social-media
    - meta
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: meta_social_media_metrics_lookup
          description: "Retrieves social media engagement metrics from Meta API for league content."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary identifier." 
          call: primary.get-meta
          with:
            entity_id: "{{entity_id}}" 
          outputParameters:
            - name: result
              type: string
              mapping: "$.data" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

Posts a notification message to a Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Microsoft Teams Channel Notification"
  description: "Posts a notification message to a Microsoft Teams channel."
  tags:
    - collaboration
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: microsoft_teams_channel_notification
          description: "Posts a notification message to a Microsoft Teams channel."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary identifier." 
          call: primary.get-microsoft
          with:
            entity_id: "{{entity_id}}" 
          outputParameters:
            - name: result
              type: string
              mapping: "$.data" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

When Datadog detects API rate limit approaching, creates a ServiceNow incident and notifies the platform team.

naftiko: "0.5"
info:
  label: "NHL API Rate Limit Alert"
  description: "When Datadog detects API rate limit approaching, creates a ServiceNow incident and notifies the platform team."
  tags:
    - devops
    - api
    - datadog
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: nhl_api_rate_limit_alert
          description: "When Datadog detects API rate limit approaching, creates a ServiceNow incident and notifies the platform team."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "NHL API Rate Limit Alert: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "NHL API Rate Limit Alert for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Fetches draft prospect scouting reports from SharePoint, summarizes them with Anthropic Claude, publishes a digest to the Hockey Operations Microsoft Teams channel, and logs the output to Snowflake.

naftiko: "0.5"
info:
  label: "NHL Draft Prospect Scouting Report Publisher"
  description: "Fetches draft prospect scouting reports from SharePoint, summarizes them with Anthropic Claude, publishes a digest to the Hockey Operations Microsoft Teams channel, and logs the output to Snowflake."
  tags:
    - ai
    - hockey-operations
    - anthropic
    - sharepoint
    - snowflake
    - microsoft-teams
    - scouting
capability:
  exposes:
    - type: mcp
      namespace: hockey-ops-ai
      port: 8080
      tools:
        - name: summarize-prospect-reports
          description: "Given a SharePoint folder containing draft prospect scouting reports and a prospect name, fetch the report, summarize with Anthropic Claude, post to Hockey Operations Teams channel, and log to Snowflake."
          inputParameters:
            - name: sharepoint_site_id
              in: body
              type: string
              description: "SharePoint site ID where scouting reports are stored."
            - name: report_item_id
              in: body
              type: string
              description: "SharePoint drive item ID for the scouting report document."
            - name: prospect_name
              in: body
              type: string
              description: "Prospect player name for logging and notification context."
          steps:
            - name: fetch-report
              type: call
              call: "sharepoint-scouting.get-file-content"
              with:
                site_id: "{{sharepoint_site_id}}"
                item_id: "{{report_item_id}}"
            - name: summarize-report
              type: call
              call: "anthropic-scouting.create-message"
              with:
                model: "claude-opus-4-5"
                content: "Summarize this NHL draft prospect scouting report into 3 key strengths, 2 areas for development, and an overall grade: {{fetch-report.text_content}}"
            - name: log-to-snowflake
              type: call
              call: "snowflake-scouting.insert-record"
              with:
                table: "HOCKEY_OPS.PROSPECT_SUMMARIES"
                prospect_name: "{{prospect_name}}"
                summary: "{{summarize-report.content}}"
            - name: post-to-hockey-ops
              type: call
              call: "msteams-hockey-ops.post-channel-message"
              with:
                channel_id: "HockeyOperations"
                text: "Prospect summary for {{prospect_name}}: {{summarize-report.content}}"
  consumes:
    - type: http
      namespace: sharepoint-scouting
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: file-content
          path: "/sites/{{site_id}}/drive/items/{{item_id}}/content"
          inputParameters:
            - name: site_id
              in: path
            - name: item_id
              in: path
          operations:
            - name: get-file-content
              method: GET
    - type: http
      namespace: anthropic-scouting
      baseUri: "https://api.anthropic.com/v1"
      authentication:
        type: apikey
        key: "x-api-key"
        value: "$secrets.anthropic_api_key"
        placement: header
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: create-message
              method: POST
    - type: http
      namespace: snowflake-scouting
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: insert-record
              method: POST
    - type: http
      namespace: msteams-hockey-ops
      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

When Datadog detects streaming latency, creates a ServiceNow incident and alerts the streaming platform team.

naftiko: "0.5"
info:
  label: "NHL.tv Streaming Latency Alert"
  description: "When Datadog detects streaming latency, creates a ServiceNow incident and alerts the streaming platform team."
  tags:
    - streaming
    - datadog
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: nhltv_streaming_latency_alert
          description: "When Datadog detects streaming latency, creates a ServiceNow incident and alerts the streaming platform team."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "NHL.tv Streaming Latency Alert: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "NHL.tv Streaming Latency Alert for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Queries Okta for users without MFA, creates ServiceNow compliance ticket, and notifies IT security.

naftiko: "0.5"
info:
  label: "Okta MFA Non-Compliance Escalation"
  description: "Queries Okta for users without MFA, creates ServiceNow compliance ticket, and notifies IT security."
  tags:
    - security
    - identity
    - okta
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: okta_mfa_non_compliance_escalation
          description: "Queries Okta for users without MFA, creates ServiceNow compliance ticket, and notifies IT security."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Okta MFA Non-Compliance Escalation: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Okta MFA Non-Compliance Escalation for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Queries Okta for users with access to media production and broadcast applications, generates an access review report in SharePoint, and posts a compliance reminder to the IT Security Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Okta User Access Review for Media Systems"
  description: "Queries Okta for users with access to media production and broadcast applications, generates an access review report in SharePoint, and posts a compliance reminder to the IT Security Microsoft Teams channel."
  tags:
    - security
    - identity
    - okta
    - sharepoint
    - microsoft-teams
    - access-review
    - media-systems
capability:
  exposes:
    - type: mcp
      namespace: media-access-review
      port: 8080
      tools:
        - name: review-media-system-access
          description: "Query Okta for all users assigned to the media production application group, export the access list to SharePoint for review, and post a compliance reminder to the ITSecurity Teams channel."
          inputParameters:
            - name: app_group_name
              in: body
              type: string
              description: "Okta application group name for the media production system to review."
            - name: sharepoint_site_id
              in: body
              type: string
              description: "SharePoint site ID for storing the access review report."
          steps:
            - name: get-group-members
              type: call
              call: "okta-media.list-group-members"
              with:
                group_name: "{{app_group_name}}"
            - name: export-report
              type: call
              call: "sharepoint-access.create-file"
              with:
                site_id: "{{sharepoint_site_id}}"
                file_name: "MediaAccessReview_{{app_group_name}}.csv"
                content: "{{get-group-members.csv_data}}"
            - name: notify-it-security
              type: call
              call: "msteams-itsec.post-channel-message"
              with:
                channel_id: "ITSecurity"
                text: "Media access review: {{get-group-members.member_count}} users in {{app_group_name}}. Review report: {{export-report.file_url}}"
  consumes:
    - type: http
      namespace: okta-media
      baseUri: "https://nhl.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_token"
        placement: header
      resources:
        - name: group-members
          path: "/groups/{{group_name}}/users"
          inputParameters:
            - name: group_name
              in: path
          operations:
            - name: list-group-members
              method: GET
    - type: http
      namespace: sharepoint-access
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/sites/{{site_id}}/drive/root/children"
          inputParameters:
            - name: site_id
              in: path
          operations:
            - name: create-file
              method: POST
    - type: http
      namespace: msteams-itsec
      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 an Okta user profile by email, returning status and last login.

naftiko: "0.5"
info:
  label: "Okta User Status Lookup"
  description: "Retrieves an Okta user profile by email, returning status and last login."
  tags:
    - identity
    - okta
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: okta_user_status_lookup
          description: "Retrieves an Okta user profile by email, returning status and last login."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary identifier." 
          call: primary.get-okta
          with:
            entity_id: "{{entity_id}}" 
          outputParameters:
            - name: result
              type: string
              mapping: "$.data" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

Retrieves a PagerDuty incident by ID for broadcast infrastructure on-call.

naftiko: "0.5"
info:
  label: "PagerDuty Incident Lookup"
  description: "Retrieves a PagerDuty incident by ID for broadcast infrastructure on-call."
  tags:
    - itsm
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: pagerduty_incident_lookup
          description: "Retrieves a PagerDuty incident by ID for broadcast infrastructure on-call."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary identifier." 
          call: primary.get-pagerduty
          with:
            entity_id: "{{entity_id}}" 
          outputParameters:
            - name: result
              type: string
              mapping: "$.data" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

Tracks player contract expiry dates in Snowflake, creates Jira tracking tasks, and notifies hockey operations.

naftiko: "0.5"
info:
  label: "Player Contract Expiry Tracking"
  description: "Tracks player contract expiry dates in Snowflake, creates Jira tracking tasks, and notifies hockey operations."
  tags:
    - hockey-ops
    - contracts
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: player_contract_expiry_tracking
          description: "Tracks player contract expiry dates in Snowflake, creates Jira tracking tasks, and notifies hockey operations."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Player Contract Expiry Tracking: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Player Contract Expiry Tracking for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

When a player injury is reported, creates a Jira tracking issue, updates Snowflake records, and notifies the hockey operations team.

naftiko: "0.5"
info:
  label: "Player Injury Reporting Workflow"
  description: "When a player injury is reported, creates a Jira tracking issue, updates Snowflake records, and notifies the hockey operations team."
  tags:
    - hockey-ops
    - player-health
    - jira
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: player_injury_reporting_workflow
          description: "When a player injury is reported, creates a Jira tracking issue, updates Snowflake records, and notifies the hockey operations team."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Player Injury Reporting Workflow: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Player Injury Reporting Workflow for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Exports current season player statistics from Snowflake and pushes the dataset to Power BI for real-time player performance dashboards used by broadcast and editorial teams.

naftiko: "0.5"
info:
  label: "Player Stats Power BI Dashboard Refresh"
  description: "Exports current season player statistics from Snowflake and pushes the dataset to Power BI for real-time player performance dashboards used by broadcast and editorial teams."
  tags:
    - data
    - analytics
    - snowflake
    - power-bi
    - reporting
    - player-stats
    - broadcast
capability:
  exposes:
    - type: mcp
      namespace: player-analytics
      port: 8080
      tools:
        - name: refresh-player-stats-dashboard
          description: "Given a Power BI dataset ID and season year, query Snowflake for current season player statistics and push the data to Power BI for live broadcast and editorial dashboards."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "Power BI streaming dataset ID to push player stats into."
            - name: season_year
              in: body
              type: string
              description: "NHL season year, e.g. '2025-2026'."
          steps:
            - name: query-player-stats
              type: call
              call: "snowflake-stats.run-stats-query"
              with:
                season: "{{season_year}}"
            - name: push-to-powerbi
              type: call
              call: "powerbi.push-rows"
              with:
                dataset_id: "{{dataset_id}}"
                rows: "{{query-player-stats.rows}}"
  consumes:
    - type: http
      namespace: snowflake-stats
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          inputParameters:
            - name: season
              in: query
          operations:
            - name: run-stats-query
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: dataset-rows
          path: "/datasets/{{dataset_id}}/rows"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: push-rows
              method: POST

Pulls travel expenses from SAP Concur, validates against team budgets in Snowflake, and posts to finance.

naftiko: "0.5"
info:
  label: "Player Travel Expense Reconciliation"
  description: "Pulls travel expenses from SAP Concur, validates against team budgets in Snowflake, and posts to finance."
  tags:
    - finance
    - travel
    - sap-concur
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: player_travel_expense_reconciliation
          description: "Pulls travel expenses from SAP Concur, validates against team budgets in Snowflake, and posts to finance."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Player Travel Expense Reconciliation: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Player Travel Expense Reconciliation for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Triggers a refresh on a Power BI dataset for league reporting.

naftiko: "0.5"
info:
  label: "Power BI Dataset Refresh Trigger"
  description: "Triggers a refresh on a Power BI dataset for league reporting."
  tags:
    - reporting
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: power_bi_dataset_refresh_trigger
          description: "Triggers a refresh on a Power BI dataset for league reporting."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary identifier." 
          call: primary.get-power
          with:
            entity_id: "{{entity_id}}" 
          outputParameters:
            - name: result
              type: string
              mapping: "$.data" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

Triggers a Power BI dataset refresh for the NHL executive scorecard dashboard, and posts refresh completion status to the Business Intelligence Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Power BI Executive Scorecard Refresh"
  description: "Triggers a Power BI dataset refresh for the NHL executive scorecard dashboard, and posts refresh completion status to the Business Intelligence Microsoft Teams channel."
  tags:
    - data
    - analytics
    - power-bi
    - microsoft-teams
    - executive-reporting
    - bi
capability:
  exposes:
    - type: mcp
      namespace: executive-reporting
      port: 8080
      tools:
        - name: refresh-executive-scorecard
          description: "Given a Power BI dataset ID for the NHL executive scorecard, trigger a dataset refresh and post the result to the BusinessIntelligence Teams channel."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "Power BI dataset ID for the NHL executive scorecard."
            - name: scorecard_name
              in: body
              type: string
              description: "Human-readable scorecard name for the Teams notification."
          steps:
            - name: trigger-refresh
              type: call
              call: "powerbi-exec.trigger-refresh"
              with:
                dataset_id: "{{dataset_id}}"
            - name: notify-bi
              type: call
              call: "msteams-exec.post-channel-message"
              with:
                channel_id: "BusinessIntelligence"
                text: "Executive scorecard refresh triggered: {{scorecard_name}} ({{dataset_id}}). Request ID: {{trigger-refresh.request_id}}"
  consumes:
    - type: http
      namespace: powerbi-exec
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: dataset-refreshes
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: trigger-refresh
              method: POST
    - type: http
      namespace: msteams-exec
      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

Coordinates quarterly close with Snowflake data validation, Power BI dashboard refresh, and finance notification.

naftiko: "0.5"
info:
  label: "Quarterly Financial Close Orchestration"
  description: "Coordinates quarterly close with Snowflake data validation, Power BI dashboard refresh, and finance notification."
  tags:
    - finance
    - snowflake
    - power-bi
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: quarterly_financial_close_orchestration
          description: "Coordinates quarterly close with Snowflake data validation, Power BI dashboard refresh, and finance notification."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Quarterly Financial Close Orchestration: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Quarterly Financial Close Orchestration for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Detects referee scheduling conflicts in Snowflake, creates Jira resolution tasks, and notifies hockey operations.

naftiko: "0.5"
info:
  label: "Referee Scheduling Conflict Resolution"
  description: "Detects referee scheduling conflicts in Snowflake, creates Jira resolution tasks, and notifies hockey operations."
  tags:
    - hockey-ops
    - scheduling
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: referee_scheduling_conflict_resolution
          description: "Detects referee scheduling conflicts in Snowflake, creates Jira resolution tasks, and notifies hockey operations."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Referee Scheduling Conflict Resolution: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Referee Scheduling Conflict Resolution for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Queries Snowflake for current payroll data, validates against cap limits, and posts compliance report to hockey ops.

naftiko: "0.5"
info:
  label: "Salary Cap Compliance Check"
  description: "Queries Snowflake for current payroll data, validates against cap limits, and posts compliance report to hockey ops."
  tags:
    - hockey-ops
    - salary-cap
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: salary_cap_compliance_check
          description: "Queries Snowflake for current payroll data, validates against cap limits, and posts compliance report to hockey ops."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Salary Cap Compliance Check: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Salary Cap Compliance Check for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Retrieves contact details from Salesforce by email for sponsor and partner management.

naftiko: "0.5"
info:
  label: "Salesforce Contact Lookup"
  description: "Retrieves contact details from Salesforce by email for sponsor and partner management."
  tags:
    - sales
    - crm
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: salesforce_contact_lookup
          description: "Retrieves contact details from Salesforce by email for sponsor and partner management."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary identifier." 
          call: primary.get-salesforce
          with:
            entity_id: "{{entity_id}}" 
          outputParameters:
            - name: result
              type: string
              mapping: "$.data" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

Fetches Salesforce season ticket holder contacts whose renewals are due in 60 days, enriches them with LinkedIn engagement data, and triggers a renewal outreach campaign via Microsoft Teams and email.

naftiko: "0.5"
info:
  label: "Salesforce Season Ticket Holder Renewal Campaign"
  description: "Fetches Salesforce season ticket holder contacts whose renewals are due in 60 days, enriches them with LinkedIn engagement data, and triggers a renewal outreach campaign via Microsoft Teams and email."
  tags:
    - sales
    - crm
    - salesforce
    - linkedin
    - microsoft-teams
    - season-tickets
    - fan-engagement
capability:
  exposes:
    - type: mcp
      namespace: renewal-campaigns
      port: 8080
      tools:
        - name: trigger-renewal-outreach
          description: "Given a renewal deadline date range, fetch Salesforce season ticket contacts due for renewal, enrich with LinkedIn profile data, and post an outreach task list to the TicketSales Teams channel."
          inputParameters:
            - name: renewal_deadline_start
              in: body
              type: string
              description: "Start of the renewal window in ISO 8601 format."
            - name: renewal_deadline_end
              in: body
              type: string
              description: "End of the renewal window in ISO 8601 format."
          steps:
            - name: get-renewal-contacts
              type: call
              call: "salesforce-renewals.list-contacts"
              with:
                renewal_date_gte: "{{renewal_deadline_start}}"
                renewal_date_lte: "{{renewal_deadline_end}}"
            - name: enrich-linkedin
              type: call
              call: "linkedin-renewals.search-profiles"
              with:
                contact_names: "{{get-renewal-contacts.names}}"
            - name: notify-sales-team
              type: call
              call: "msteams-renewals.post-channel-message"
              with:
                channel_id: "TicketSales"
                text: "Renewal outreach ready: {{get-renewal-contacts.count}} season ticket holders due for renewal between {{renewal_deadline_start}} and {{renewal_deadline_end}}. LinkedIn enrichment complete."
  consumes:
    - type: http
      namespace: salesforce-renewals
      baseUri: "https://nhl.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/sobjects/Contact"
          inputParameters:
            - name: renewal_date_gte
              in: query
            - name: renewal_date_lte
              in: query
          operations:
            - name: list-contacts
              method: GET
    - type: http
      namespace: linkedin-renewals
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: people
          path: "/people"
          inputParameters:
            - name: contact_names
              in: query
          operations:
            - name: search-profiles
              method: GET
    - type: http
      namespace: msteams-renewals
      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 sponsorship deal from Salesforce by opportunity ID.

naftiko: "0.5"
info:
  label: "Salesforce Sponsorship Deal Lookup"
  description: "Retrieves a sponsorship deal from Salesforce by opportunity ID."
  tags:
    - sales
    - sponsorship
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: salesforce_sponsorship_deal_lookup
          description: "Retrieves a sponsorship deal from Salesforce by opportunity ID."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary identifier." 
          call: primary.get-salesforce
          with:
            entity_id: "{{entity_id}}" 
          outputParameters:
            - name: result
              type: string
              mapping: "$.data" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

Queries Salesforce for open sponsorship opportunities nearing their close date, posts a sponsorship pipeline digest to the Partnerships Microsoft Teams channel, and logs the report to Snowflake.

naftiko: "0.5"
info:
  label: "Salesforce Sponsorship Opportunity Tracker"
  description: "Queries Salesforce for open sponsorship opportunities nearing their close date, posts a sponsorship pipeline digest to the Partnerships Microsoft Teams channel, and logs the report to Snowflake."
  tags:
    - sales
    - crm
    - salesforce
    - microsoft-teams
    - snowflake
    - sponsorship
    - partnerships
capability:
  exposes:
    - type: mcp
      namespace: sponsorship-pipeline
      port: 8080
      tools:
        - name: digest-sponsorship-pipeline
          description: "Given a close date threshold (days until close), fetch Salesforce sponsorship opportunities expiring within that window, post a pipeline digest to Partnerships Teams, and log the snapshot to Snowflake."
          inputParameters:
            - name: days_to_close
              in: body
              type: integer
              description: "Number of days from today to use as the close date threshold."
          steps:
            - name: get-opportunities
              type: call
              call: "salesforce-sponsorship.list-opportunities"
              with:
                days_to_close: "{{days_to_close}}"
                type: "Sponsorship"
            - name: log-snapshot
              type: call
              call: "snowflake-sponsorship.insert-record"
              with:
                table: "SALES.SPONSORSHIP_SNAPSHOTS"
                opportunity_count: "{{get-opportunities.count}}"
                total_value: "{{get-opportunities.total_value}}"
            - name: post-digest
              type: call
              call: "msteams-partnerships.post-channel-message"
              with:
                channel_id: "Partnerships"
                text: "Sponsorship pipeline: {{get-opportunities.count}} opportunities closing within {{days_to_close}} days. Total value: ${{get-opportunities.total_value}}. Logged to Snowflake."
  consumes:
    - type: http
      namespace: salesforce-sponsorship
      baseUri: "https://nhl.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity"
          inputParameters:
            - name: days_to_close
              in: query
            - name: type
              in: query
          operations:
            - name: list-opportunities
              method: GET
    - type: http
      namespace: snowflake-sponsorship
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: insert-record
              method: POST
    - type: http
      namespace: msteams-partnerships
      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 season ticket holder details from Salesforce by account ID.

naftiko: "0.5"
info:
  label: "Salesforce Ticket Holder Lookup"
  description: "Retrieves season ticket holder details from Salesforce by account ID."
  tags:
    - ticketing
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: salesforce_ticket_holder_lookup
          description: "Retrieves season ticket holder details from Salesforce by account ID."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary identifier." 
          call: primary.get-salesforce
          with:
            entity_id: "{{entity_id}}" 
          outputParameters:
            - name: result
              type: string
              mapping: "$.data" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

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

naftiko: "0.5"
info:
  label: "SAP Concur Expense Lookup"
  description: "Retrieves an SAP Concur expense report by ID, returning total and approval status."
  tags:
    - finance
    - sap-concur
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: sap_concur_expense_lookup
          description: "Retrieves an SAP Concur expense report by ID, returning total and approval status."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary identifier." 
          call: primary.get-sap
          with:
            entity_id: "{{entity_id}}" 
          outputParameters:
            - name: result
              type: string
              mapping: "$.data" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

Fetches submitted SAP Concur expense reports for a game or event travel period, aggregates totals by team and cost center, and posts a travel expense summary to the Finance Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "SAP Concur Game Day Travel Expense Summary"
  description: "Fetches submitted SAP Concur expense reports for a game or event travel period, aggregates totals by team and cost center, and posts a travel expense summary to the Finance Microsoft Teams channel."
  tags:
    - finance
    - expense-management
    - sap-concur
    - microsoft-teams
    - travel
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: travel-expense-reporting
      port: 8080
      tools:
        - name: summarize-game-travel-expenses
          description: "Given a travel period date range and team code, fetch SAP Concur expense reports, aggregate totals by category, and post a travel expense summary to the Finance Teams channel."
          inputParameters:
            - name: period_start
              in: body
              type: string
              description: "Start of the travel expense period in ISO 8601 format."
            - name: period_end
              in: body
              type: string
              description: "End of the travel expense period in ISO 8601 format."
            - name: team_code
              in: body
              type: string
              description: "Team or department cost center code to filter expenses by."
          steps:
            - name: get-expense-reports
              type: call
              call: "sap-concur-travel.list-reports"
              with:
                start_date: "{{period_start}}"
                end_date: "{{period_end}}"
                cost_center: "{{team_code}}"
            - name: post-summary
              type: call
              call: "msteams-finance.post-channel-message"
              with:
                channel_id: "Finance"
                text: "Game travel expenses for {{team_code}} ({{period_start}} to {{period_end}}): ${{get-expense-reports.total_amount}} across {{get-expense-reports.report_count}} reports. Pending approval: {{get-expense-reports.pending_count}}"
  consumes:
    - type: http
      namespace: sap-concur-travel
      baseUri: "https://www.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: expense-reports
          path: "/expense/reports"
          inputParameters:
            - name: start_date
              in: query
            - name: end_date
              in: query
            - name: cost_center
              in: query
          operations:
            - name: list-reports
              method: GET
    - type: http
      namespace: msteams-finance
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Queries SAP Concur for team travel spend, validates against budgets, and alerts finance when thresholds are exceeded.

naftiko: "0.5"
info:
  label: "SAP Concur Team Travel Budget Alert"
  description: "Queries SAP Concur for team travel spend, validates against budgets, and alerts finance when thresholds are exceeded."
  tags:
    - finance
    - travel
    - sap-concur
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: sap_concur_team_travel_budget_alert
          description: "Queries SAP Concur for team travel spend, validates against budgets, and alerts finance when thresholds are exceeded."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "SAP Concur Team Travel Budget Alert: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "SAP Concur Team Travel Budget Alert for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Queries Snowflake for ticket holder engagement patterns, generates churn risk scores, and notifies the retention team.

naftiko: "0.5"
info:
  label: "Season Ticket Holder Churn Prediction"
  description: "Queries Snowflake for ticket holder engagement patterns, generates churn risk scores, and notifies the retention team."
  tags:
    - ticketing
    - analytics
    - snowflake
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: season_ticket_holder_churn_prediction
          description: "Queries Snowflake for ticket holder engagement patterns, generates churn risk scores, and notifies the retention team."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Season Ticket Holder Churn Prediction: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Season Ticket Holder Churn Prediction for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

When Splunk detects a security event, creates ServiceNow incident, queries Okta for context, and alerts SOC.

naftiko: "0.5"
info:
  label: "Security Incident Escalation Workflow"
  description: "When Splunk detects a security event, creates ServiceNow incident, queries Okta for context, and alerts SOC."
  tags:
    - security
    - splunk
    - servicenow
    - okta
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: security_incident_escalation_workflow
          description: "When Splunk detects a security event, creates ServiceNow incident, queries Okta for context, and alerts SOC."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Security Incident Escalation Workflow: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Security Incident Escalation Workflow for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Aggregates pending ServiceNow change requests related to arena IT systems for the weekly CAB review, saves a pre-read to SharePoint, and posts the agenda to the IT Operations Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "ServiceNow Arena IT Change Advisory Board"
  description: "Aggregates pending ServiceNow change requests related to arena IT systems for the weekly CAB review, saves a pre-read to SharePoint, and posts the agenda to the IT Operations Microsoft Teams channel."
  tags:
    - itsm
    - change-management
    - servicenow
    - sharepoint
    - microsoft-teams
    - cab
    - arena-operations
capability:
  exposes:
    - type: mcp
      namespace: arena-change-management
      port: 8080
      tools:
        - name: prepare-arena-cab-agenda
          description: "Fetch all ServiceNow change requests in Scheduled state tagged for arena IT systems for the upcoming week, save a CAB pre-read to SharePoint, and post the agenda to IT Operations Teams."
          inputParameters:
            - name: cab_date
              in: body
              type: string
              description: "Date of the CAB meeting in ISO 8601 format."
            - name: sharepoint_site_id
              in: body
              type: string
              description: "SharePoint site ID where the CAB pre-read will be stored."
          steps:
            - name: get-pending-changes
              type: call
              call: "servicenow-arena-cab.list-changes"
              with:
                state: "Scheduled"
                category: "arena_it"
                cab_date: "{{cab_date}}"
            - name: save-preread
              type: call
              call: "sharepoint-cab.create-file"
              with:
                site_id: "{{sharepoint_site_id}}"
                file_name: "ArenaCAB_PreRead_{{cab_date}}.csv"
                content: "{{get-pending-changes.csv_data}}"
            - name: post-agenda
              type: call
              call: "msteams-it-ops.post-channel-message"
              with:
                channel_id: "ITOperations"
                text: "Arena IT CAB pre-read ready for {{cab_date}}: {{get-pending-changes.change_count}} changes scheduled. Pre-read: {{save-preread.file_url}}"
  consumes:
    - type: http
      namespace: servicenow-arena-cab
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: change-requests
          path: "/table/change_request"
          inputParameters:
            - name: state
              in: query
            - name: category
              in: query
            - name: cab_date
              in: query
          operations:
            - name: list-changes
              method: GET
    - type: http
      namespace: sharepoint-cab
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/sites/{{site_id}}/drive/root/children"
          inputParameters:
            - name: site_id
              in: path
          operations:
            - name: create-file
              method: POST
    - type: http
      namespace: msteams-it-ops
      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, returning state and priority.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Lookup"
  description: "Retrieves a ServiceNow incident by number, returning state and priority."
  tags:
    - itsm
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: servicenow_incident_lookup
          description: "Retrieves a ServiceNow incident by number, returning state and priority."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary identifier." 
          call: primary.get-servicenow
          with:
            entity_id: "{{entity_id}}" 
          outputParameters:
            - name: result
              type: string
              mapping: "$.data" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

When a P1 ServiceNow incident is raised for broadcast infrastructure (streaming platform or arena systems), pages the on-call engineer via PagerDuty and posts full context to the Broadcast Operations Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "ServiceNow P1 Broadcast Infrastructure Incident"
  description: "When a P1 ServiceNow incident is raised for broadcast infrastructure (streaming platform or arena systems), pages the on-call engineer via PagerDuty and posts full context to the Broadcast Operations Microsoft Teams channel."
  tags:
    - itsm
    - incident-response
    - servicenow
    - pagerduty
    - microsoft-teams
    - broadcast
    - infrastructure
capability:
  exposes:
    - type: mcp
      namespace: broadcast-ops
      port: 8080
      tools:
        - name: escalate-broadcast-p1
          description: "Given a ServiceNow P1 incident number for a broadcast infrastructure outage, trigger a PagerDuty alert to the broadcast on-call engineer and post full diagnostics to the BroadcastOps Teams channel."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "ServiceNow P1 incident number, e.g. INC0023456."
            - name: affected_system
              in: body
              type: string
              description: "Name of the affected broadcast system, e.g. 'NHL.tv streaming platform'."
            - name: pagerduty_service_id
              in: body
              type: string
              description: "PagerDuty service ID for the broadcast on-call team."
          steps:
            - name: get-incident
              type: call
              call: "servicenow-broadcast.get-incident"
              with:
                number: "{{incident_number}}"
            - name: trigger-pagerduty
              type: call
              call: "pagerduty-broadcast.create-incident"
              with:
                service_id: "{{pagerduty_service_id}}"
                title: "P1: {{affected_system}} outage — {{incident_number}}"
                description: "{{get-incident.description}}"
            - name: notify-broadcast-ops
              type: call
              call: "msteams-broadcast.post-channel-message"
              with:
                channel_id: "BroadcastOps"
                text: "P1 INCIDENT: {{affected_system}} | SNOW: {{incident_number}} | PD: {{trigger-pagerduty.incident_id}} | Description: {{get-incident.short_description}}"
  consumes:
    - type: http
      namespace: servicenow-broadcast
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident/{{number}}"
          inputParameters:
            - name: number
              in: path
          operations:
            - name: get-incident
              method: GET
    - type: http
      namespace: pagerduty-broadcast
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.pagerduty_token"
        placement: header
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams-broadcast
      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

Searches SharePoint for documents matching a keyword query.

naftiko: "0.5"
info:
  label: "SharePoint Document Search"
  description: "Searches SharePoint for documents matching a keyword query."
  tags:
    - collaboration
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: sharepoint_document_search
          description: "Searches SharePoint for documents matching a keyword query."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary identifier." 
          call: primary.get-sharepoint
          with:
            entity_id: "{{entity_id}}" 
          outputParameters:
            - name: result
              type: string
              mapping: "$.data" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

Queries Snowflake for arena attendance data across all 32 NHL arenas, compares against capacity benchmarks, and posts a weekly attendance analytics digest to the Business Intelligence Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Snowflake Arena Attendance Analytics"
  description: "Queries Snowflake for arena attendance data across all 32 NHL arenas, compares against capacity benchmarks, and posts a weekly attendance analytics digest to the Business Intelligence Microsoft Teams channel."
  tags:
    - data
    - analytics
    - snowflake
    - microsoft-teams
    - attendance
    - arena-operations
capability:
  exposes:
    - type: mcp
      namespace: arena-analytics
      port: 8080
      tools:
        - name: digest-arena-attendance
          description: "Given a reporting week, query Snowflake for attendance figures for each NHL arena, calculate occupancy rate versus capacity, and post an attendance digest to the BusinessIntelligence Teams channel."
          inputParameters:
            - name: week_ending
              in: body
              type: string
              description: "End date of the reporting week in ISO 8601 format."
          steps:
            - name: query-attendance
              type: call
              call: "snowflake-attendance.run-attendance-query"
              with:
                week_ending: "{{week_ending}}"
            - name: post-digest
              type: call
              call: "msteams-bi.post-channel-message"
              with:
                channel_id: "BusinessIntelligence"
                text: "Arena attendance digest week ending {{week_ending}}: League avg occupancy {{query-attendance.avg_occupancy_pct}}% | Highest: {{query-attendance.top_arena}} ({{query-attendance.top_pct}}%) | Lowest: {{query-attendance.bottom_arena}} ({{query-attendance.bottom_pct}}%)"
  consumes:
    - type: http
      namespace: snowflake-attendance
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          inputParameters:
            - name: week_ending
              in: query
          operations:
            - name: run-attendance-query
              method: POST
    - type: http
      namespace: msteams-bi
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Queries Snowflake for broadcast viewership and ratings data by game.

naftiko: "0.5"
info:
  label: "Snowflake Broadcast Ratings Query"
  description: "Queries Snowflake for broadcast viewership and ratings data by game."
  tags:
    - broadcast
    - analytics
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: snowflake_broadcast_ratings_query
          description: "Queries Snowflake for broadcast viewership and ratings data by game."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary identifier." 
          call: primary.get-snowflake
          with:
            entity_id: "{{entity_id}}" 
          outputParameters:
            - name: result
              type: string
              mapping: "$.data" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

Queries Snowflake for NHL.tv streaming viewership data by game, computes peak concurrent viewers and watch time, and posts a viewership report to the Digital Media Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Snowflake Broadcast Viewership Analytics"
  description: "Queries Snowflake for NHL.tv streaming viewership data by game, computes peak concurrent viewers and watch time, and posts a viewership report to the Digital Media Microsoft Teams channel."
  tags:
    - data
    - analytics
    - snowflake
    - microsoft-teams
    - broadcast
    - viewership
    - streaming
capability:
  exposes:
    - type: mcp
      namespace: viewership-analytics
      port: 8080
      tools:
        - name: report-game-viewership
          description: "Given an NHL game ID, query Snowflake for streaming viewership metrics including peak concurrent viewers and average watch time, then post the report to Digital Media Teams."
          inputParameters:
            - name: game_id
              in: body
              type: string
              description: "NHL game ID to pull viewership analytics for."
          steps:
            - name: query-viewership
              type: call
              call: "snowflake-viewership.run-viewership-query"
              with:
                game_id: "{{game_id}}"
            - name: post-report
              type: call
              call: "msteams-digital-media.post-channel-message"
              with:
                channel_id: "DigitalMedia"
                text: "Viewership report for game {{game_id}}: Peak concurrent viewers {{query-viewership.peak_concurrent}} | Avg watch time {{query-viewership.avg_watch_time_min}} min | Total streams {{query-viewership.total_streams}}"
  consumes:
    - type: http
      namespace: snowflake-viewership
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          inputParameters:
            - name: game_id
              in: query
          operations:
            - name: run-viewership-query
              method: POST
    - type: http
      namespace: msteams-digital-media
      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

Queries Snowflake for fan engagement metrics by market and campaign.

naftiko: "0.5"
info:
  label: "Snowflake Fan Engagement Query"
  description: "Queries Snowflake for fan engagement metrics by market and campaign."
  tags:
    - marketing
    - fan-engagement
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: snowflake_fan_engagement_query
          description: "Queries Snowflake for fan engagement metrics by market and campaign."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary identifier." 
          call: primary.get-snowflake
          with:
            entity_id: "{{entity_id}}" 
          outputParameters:
            - name: result
              type: string
              mapping: "$.data" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

Queries Snowflake for game statistics by team and season.

naftiko: "0.5"
info:
  label: "Snowflake Game Stats Query"
  description: "Queries Snowflake for game statistics by team and season."
  tags:
    - analytics
    - snowflake
    - game-stats
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: snowflake_game_stats_query
          description: "Queries Snowflake for game statistics by team and season."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary identifier." 
          call: primary.get-snowflake
          with:
            entity_id: "{{entity_id}}" 
          outputParameters:
            - name: result
              type: string
              mapping: "$.data" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

Pulls social media metrics from Meta API and Snowflake, generates performance report, and posts to marketing.

naftiko: "0.5"
info:
  label: "Social Media Content Performance Report"
  description: "Pulls social media metrics from Meta API and Snowflake, generates performance report, and posts to marketing."
  tags:
    - marketing
    - social-media
    - meta
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: social_media_content_performance_report
          description: "Pulls social media metrics from Meta API and Snowflake, generates performance report, and posts to marketing."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Social Media Content Performance Report: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Social Media Content Performance Report for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Executes a Splunk search against broadcast and streaming system logs.

naftiko: "0.5"
info:
  label: "Splunk Log Search"
  description: "Executes a Splunk search against broadcast and streaming system logs."
  tags:
    - observability
    - splunk
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: splunk_log_search
          description: "Executes a Splunk search against broadcast and streaming system logs."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary identifier." 
          call: primary.get-splunk
          with:
            entity_id: "{{entity_id}}" 
          outputParameters:
            - name: result
              type: string
              mapping: "$.data" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

Queries Salesforce for sponsorship activation milestones, updates Snowflake tracking, and posts status to partnerships team.

naftiko: "0.5"
info:
  label: "Sponsorship Activation Tracking"
  description: "Queries Salesforce for sponsorship activation milestones, updates Snowflake tracking, and posts status to partnerships team."
  tags:
    - sponsorship
    - salesforce
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: sponsorship_activation_tracking
          description: "Queries Salesforce for sponsorship activation milestones, updates Snowflake tracking, and posts status to partnerships team."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Sponsorship Activation Tracking: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Sponsorship Activation Tracking for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Queries Snowflake for demand and pricing data, generates optimization recommendations, and posts to revenue team.

naftiko: "0.5"
info:
  label: "Ticket Pricing Optimization Report"
  description: "Queries Snowflake for demand and pricing data, generates optimization recommendations, and posts to revenue team."
  tags:
    - ticketing
    - pricing
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: ticket_pricing_optimization_report
          description: "Queries Snowflake for demand and pricing data, generates optimization recommendations, and posts to revenue team."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Ticket Pricing Optimization Report: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Ticket Pricing Optimization Report for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Queries Snowflake for season ticket sales metrics by team and market, computes week-over-week variance, and posts the digest to the Ticket Sales Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Ticket Sales Performance Digest"
  description: "Queries Snowflake for season ticket sales metrics by team and market, computes week-over-week variance, and posts the digest to the Ticket Sales Microsoft Teams channel."
  tags:
    - sales
    - ticketing
    - snowflake
    - microsoft-teams
    - reporting
    - revenue
capability:
  exposes:
    - type: mcp
      namespace: ticketing-reporting
      port: 8080
      tools:
        - name: digest-ticket-sales
          description: "Given a reporting week and team filter, query Snowflake for ticket sales metrics, calculate week-over-week variance, and post the digest to the TicketSales Teams channel."
          inputParameters:
            - name: week_ending
              in: body
              type: string
              description: "End date of the reporting week in ISO 8601 format."
            - name: team_filter
              in: body
              type: string
              description: "Team abbreviation to filter results by, or 'ALL' for league-wide."
          steps:
            - name: query-sales-metrics
              type: call
              call: "snowflake-tickets.run-sales-query"
              with:
                week_ending: "{{week_ending}}"
                team: "{{team_filter}}"
            - name: post-digest
              type: call
              call: "msteams-sales.post-channel-message"
              with:
                channel_id: "TicketSales"
                text: "Ticket sales digest week ending {{week_ending}} ({{team_filter}}): ${{query-sales-metrics.total_revenue}} revenue | {{query-sales-metrics.tickets_sold}} tickets | WoW change: {{query-sales-metrics.wow_variance}}%"
  consumes:
    - type: http
      namespace: snowflake-tickets
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          inputParameters:
            - name: week_ending
              in: query
            - name: team
              in: query
          operations:
            - name: run-sales-query
              method: POST
    - type: http
      namespace: msteams-sales
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

When a vendor contract nears expiry, creates a Jira procurement task, notifies the business team, and logs in Snowflake.

naftiko: "0.5"
info:
  label: "Vendor Contract Renewal Workflow"
  description: "When a vendor contract nears expiry, creates a Jira procurement task, notifies the business team, and logs in Snowflake."
  tags:
    - procurement
    - jira
    - microsoft-teams
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: vendor_contract_renewal_workflow
          description: "When a vendor contract nears expiry, creates a Jira procurement task, notifies the business team, and logs in Snowflake."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Vendor Contract Renewal Workflow: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Vendor Contract Renewal Workflow for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Launches annual review by pulling headcount from Workday, creating Jira epic, and notifying HR.

naftiko: "0.5"
info:
  label: "Workday Annual Review Cycle Launch"
  description: "Launches annual review by pulling headcount from Workday, creating Jira epic, and notifying HR."
  tags:
    - hr
    - performance
    - workday
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: workday_annual_review_cycle_launch
          description: "Launches annual review by pulling headcount from Workday, creating Jira epic, and notifying HR."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Workday Annual Review Cycle Launch: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Workday Annual Review Cycle Launch for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Queries Workday for incomplete benefits enrollments and sends reminders via Teams.

naftiko: "0.5"
info:
  label: "Workday Benefits Enrollment Reminder"
  description: "Queries Workday for incomplete benefits enrollments and sends reminders via Teams."
  tags:
    - hr
    - benefits
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: workday_benefits_enrollment_reminder
          description: "Queries Workday for incomplete benefits enrollments and sends reminders via Teams."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Workday Benefits Enrollment Reminder: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Workday Benefits Enrollment Reminder for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Retrieves employee compensation details from Workday by worker ID.

naftiko: "0.5"
info:
  label: "Workday Compensation Lookup"
  description: "Retrieves employee compensation details from Workday by worker ID."
  tags:
    - hr
    - workday
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: workday_compensation_lookup
          description: "Retrieves employee compensation details from Workday by worker ID."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary identifier." 
          call: primary.get-workday
          with:
            entity_id: "{{entity_id}}" 
          outputParameters:
            - name: result
              type: string
              mapping: "$.data" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

Retrieves an employee profile from Workday by worker ID.

naftiko: "0.5"
info:
  label: "Workday Employee Profile Lookup"
  description: "Retrieves an employee profile from Workday by worker ID."
  tags:
    - hr
    - workday
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: workday_employee_profile_lookup
          description: "Retrieves an employee profile from Workday by worker ID."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary identifier." 
          call: primary.get-workday
          with:
            entity_id: "{{entity_id}}" 
          outputParameters:
            - name: result
              type: string
              mapping: "$.data" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

Exports current NHL staff headcount from Workday by department and cost center and pushes the data to Power BI for executive workforce planning dashboards.

naftiko: "0.5"
info:
  label: "Workday Headcount Report to Power BI"
  description: "Exports current NHL staff headcount from Workday by department and cost center and pushes the data to Power BI for executive workforce planning dashboards."
  tags:
    - hr
    - finance
    - workday
    - power-bi
    - reporting
    - headcount
capability:
  exposes:
    - type: mcp
      namespace: hr-reporting
      port: 8080
      tools:
        - name: publish-headcount-to-powerbi
          description: "Export current Workday headcount by department and cost center and push to a Power BI dataset for executive workforce planning dashboards."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "Power BI dataset ID to push headcount rows into."
            - name: as_of_date
              in: body
              type: string
              description: "Effective date for the headcount snapshot in ISO 8601 format."
          steps:
            - name: export-headcount
              type: call
              call: "workday-hc.export-workers"
              with:
                as_of_date: "{{as_of_date}}"
            - name: push-to-powerbi
              type: call
              call: "powerbi-hc.push-rows"
              with:
                dataset_id: "{{dataset_id}}"
                rows: "{{export-headcount.rows}}"
  consumes:
    - type: http
      namespace: workday-hc
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: worker-exports
          path: "/nhl/workers/export"
          inputParameters:
            - name: as_of_date
              in: query
          operations:
            - name: export-workers
              method: GET
    - type: http
      namespace: powerbi-hc
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: dataset-rows
          path: "/datasets/{{dataset_id}}/rows"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: push-rows
              method: POST

When a new hire is confirmed in Workday, creates Okta account, provisions access, and notifies IT support.

naftiko: "0.5"
info:
  label: "Workday New Hire IT Provisioning"
  description: "When a new hire is confirmed in Workday, creates Okta account, provisions access, and notifies IT support."
  tags:
    - hr
    - workday
    - okta
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: workday_new_hire_it_provisioning
          description: "When a new hire is confirmed in Workday, creates Okta account, provisions access, and notifies IT support."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary entity identifier." 
            - name: context
              type: string
              description: "Additional context for the workflow." 
          steps:
            - name: gather-data
              type: call
              call: snowflake.run-query
              with:
                entity_id: "{{entity_id}}" 
                context: "{{context}}" 
            - name: create-action
              type: call
              call: servicenow.create-incident
              with:
                short_description: "Workday New Hire IT Provisioning: {{entity_id}}" 
                description: "Data: {{gather-data.results}}" 
            - name: notify-team
              type: call
              call: msteams.post-channel-message
              with:
                channel_id: "$secrets.teams_ops_channel" 
                text: "Workday New Hire IT Provisioning for {{entity_id}} | Action: {{create-action.number}}" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://nhl.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/ops/channels/{{channel_id}}/messages"
          operations:
            - name: post-channel-message
              method: POST

Launches the annual performance review cycle in Workday, sends review initiation notifications to all active employees via Microsoft Teams, and creates a Jira project board for HR to track the review cycle milestones.

naftiko: "0.5"
info:
  label: "Workday Performance Review Cycle Launch"
  description: "Launches the annual performance review cycle in Workday, sends review initiation notifications to all active employees via Microsoft Teams, and creates a Jira project board for HR to track the review cycle milestones."
  tags:
    - hr
    - performance-management
    - workday
    - microsoft-teams
    - jira
    - review-cycle
capability:
  exposes:
    - type: mcp
      namespace: performance-reviews
      port: 8080
      tools:
        - name: launch-performance-review-cycle
          description: "Given a Workday review cycle ID and deadline date, activate the review cycle, notify all active employees via Teams, and create a Jira HR board for tracking review cycle milestones."
          inputParameters:
            - name: review_cycle_id
              in: body
              type: string
              description: "Workday performance review cycle identifier to launch."
            - name: deadline_date
              in: body
              type: string
              description: "Review submission deadline date in ISO 8601 format."
          steps:
            - name: launch-cycle
              type: call
              call: "workday-reviews.launch-review-cycle"
              with:
                cycle_id: "{{review_cycle_id}}"
            - name: create-jira-board
              type: call
              call: "jira-hr.create-issue"
              with:
                project_key: "HR"
                issuetype: "Epic"
                summary: "Performance Review Cycle {{review_cycle_id}} — Due {{deadline_date}}"
                description: "Review cycle launched in Workday. Deadline: {{deadline_date}}"
            - name: notify-employees
              type: call
              call: "msteams-reviews.post-channel-message"
              with:
                channel_id: "AllNHL"
                text: "Performance review cycle launched! Complete your reviews by {{deadline_date}}. Access via Workday. Tracking: Jira {{create-jira-board.key}}"
  consumes:
    - type: http
      namespace: workday-reviews
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: review-cycles
          path: "/nhl/performanceReviewCycles/{{cycle_id}}"
          inputParameters:
            - name: cycle_id
              in: path
          operations:
            - name: launch-review-cycle
              method: POST
    - type: http
      namespace: jira-hr
      baseUri: "https://nhl.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams-reviews
      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 an employee time off balance from Workday.

naftiko: "0.5"
info:
  label: "Workday Time Off Balance Lookup"
  description: "Retrieves an employee time off balance from Workday."
  tags:
    - hr
    - workday
capability:
  exposes:
    - type: mcp
      namespace: nhl-ops
      port: 8080
      tools:
        - name: workday_time_off_balance_lookup
          description: "Retrieves an employee time off balance from Workday."
          inputParameters:
            - name: entity_id
              type: string
              description: "Primary identifier." 
          call: primary.get-workday
          with:
            entity_id: "{{entity_id}}" 
          outputParameters:
            - name: result
              type: string
              mapping: "$.data" 
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nhl.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: sql-statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST