National Hockey League Capabilities
Naftiko 0.5 capability definitions for National Hockey League - 100 capabilities showing integration workflows and service orchestrations.
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