Comcast Capabilities
Naftiko 0.5 capability definitions for Comcast - 100 capabilities showing integration workflows and service orchestrations.
Pulls advertising campaign metrics from Snowflake, refreshes the Power BI executive dashboard, and sends the weekly report to stakeholders via Microsoft Teams.
naftiko: "0.5"
info:
label: "Ad Campaign Performance Reporter"
description: "Pulls advertising campaign metrics from Snowflake, refreshes the Power BI executive dashboard, and sends the weekly report to stakeholders via Microsoft Teams."
tags:
- advertising
- analytics
- snowflake
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: ad-performance
port: 8080
tools:
- name: generate-ad-report
description: "Given a campaign ID and date range, generate the performance report."
inputParameters:
- name: campaign_id
in: body
type: string
description: "Advertising campaign ID."
- name: date_range
in: body
type: string
description: "Reporting date range."
steps:
- name: get-metrics
type: call
call: "snowflake.query-ad-metrics"
with:
campaign_id: "{{campaign_id}}"
date_range: "{{date_range}}"
- name: refresh-dashboard
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "ad-performance"
- name: notify-stakeholders
type: call
call: "teams.post-message"
with:
channel_id: "ad-operations"
text: "Ad report: {{campaign_id}}. Impressions: {{get-metrics.impressions}}. CTR: {{get-metrics.ctr}}%. Dashboard refreshed."
consumes:
- type: http
namespace: snowflake
baseUri: "https://comcast.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query-ad-metrics
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Retrieves the status and configuration summary of a CloudFront CDN distribution used for Comcast content delivery.
naftiko: "0.5"
info:
label: "AWS CloudFront Distribution Status"
description: "Retrieves the status and configuration summary of a CloudFront CDN distribution used for Comcast content delivery."
tags:
- cdn
- cloud
- aws
capability:
exposes:
- type: mcp
namespace: cdn-status
port: 8080
tools:
- name: get-distribution-status
description: "Given a CloudFront distribution ID, return its status and domain name."
inputParameters:
- name: distribution_id
in: body
type: string
description: "CloudFront distribution ID."
call: "cloudfront.get-distribution"
with:
distribution_id: "{{distribution_id}}"
outputParameters:
- name: status
type: string
mapping: "$.Distribution.Status"
- name: domain_name
type: string
mapping: "$.Distribution.DomainName"
consumes:
- type: http
namespace: cloudfront
baseUri: "https://cloudfront.amazonaws.com/2020-05-31"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.aws_auth_token"
placement: header
resources:
- name: distributions
path: "/distribution/{{distribution_id}}"
inputParameters:
- name: distribution_id
in: path
operations:
- name: get-distribution
method: GET
When AWS Cost Anomaly Detection identifies an unexpected spend spike, creates a ServiceNow ticket and alerts the FinOps team in Microsoft Teams.
naftiko: "0.5"
info:
label: "AWS Cost Anomaly Alert Handler"
description: "When AWS Cost Anomaly Detection identifies an unexpected spend spike, creates a ServiceNow ticket and alerts the FinOps team in Microsoft Teams."
tags:
- cloud
- finops
- aws
- servicenow
- microsoft-teams
- cost-management
capability:
exposes:
- type: mcp
namespace: cloud-finops
port: 8080
tools:
- name: handle-aws-cost-anomaly
description: "Given an AWS account ID, anomalous spend amount, and service name, create a ServiceNow cost ticket and alert the FinOps team in Teams."
inputParameters:
- name: aws_account_id
in: body
type: string
description: "The AWS account ID where the anomaly occurred."
- name: anomaly_amount
in: body
type: number
description: "The anomalous incremental spend in USD."
- name: aws_service
in: body
type: string
description: "The AWS service responsible for the spend spike, e.g. EC2, S3."
steps:
- name: get-cost-details
type: call
call: "aws-cost.get-anomalies"
with:
accountId: "{{aws_account_id}}"
service: "{{aws_service}}"
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "AWS cost anomaly: {{aws_service}} in account {{aws_account_id}} +${{anomaly_amount}}"
category: "cloud_cost"
urgency: "2"
- name: alert-finops
type: call
call: "msteams.post-channel-message"
with:
channelId: "finops-team"
message: "AWS cost spike: {{aws_service}} in {{aws_account_id}} +${{anomaly_amount}} | ServiceNow: {{create-ticket.number}}"
consumes:
- type: http
namespace: aws-cost
baseUri: "https://ce.us-east-1.amazonaws.com"
authentication:
type: bearer
token: "$secrets.aws_token"
resources:
- name: anomalies
path: "/GetAnomalies"
operations:
- name: get-anomalies
method: POST
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
in: path
operations:
- name: post-channel-message
method: POST
Analyzes AWS cost data from Snowflake, identifies optimization opportunities, creates Jira tickets for the cloud team, and posts savings summary to Microsoft Teams.
naftiko: "0.5"
info:
label: "AWS Cost Optimization Recommender"
description: "Analyzes AWS cost data from Snowflake, identifies optimization opportunities, creates Jira tickets for the cloud team, and posts savings summary to Microsoft Teams."
tags:
- cloud
- cost-optimization
- aws
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: cost-optimization
port: 8080
tools:
- name: generate-cost-recommendations
description: "Given an AWS account ID, analyze costs and generate optimization recommendations."
inputParameters:
- name: aws_account_id
in: body
type: string
description: "AWS account ID."
steps:
- name: get-cost-data
type: call
call: "snowflake.query-aws-costs"
with:
aws_account_id: "{{aws_account_id}}"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project: "CLOUD"
summary: "Cost optimization: {{aws_account_id}} — ${{get-cost-data.savings_potential}}/mo"
description: "Current spend: ${{get-cost-data.monthly_spend}}. Idle resources: {{get-cost-data.idle_count}}"
- name: notify-cloud-team
type: call
call: "teams.post-message"
with:
channel_id: "cloud-finops"
text: "Cost optimization: {{aws_account_id}}. Potential savings: ${{get-cost-data.savings_potential}}/mo. Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://comcast.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query-aws-costs
method: POST
- type: http
namespace: jira
baseUri: "https://comcast.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
When Datadog detects an error spike in AWS Lambda functions, retrieves function metrics, creates a Jira ticket, and pages the on-call engineer via PagerDuty.
naftiko: "0.5"
info:
label: "AWS Lambda Error Spike Responder"
description: "When Datadog detects an error spike in AWS Lambda functions, retrieves function metrics, creates a Jira ticket, and pages the on-call engineer via PagerDuty."
tags:
- cloud
- serverless
- datadog
- jira
- pagerduty
capability:
exposes:
- type: mcp
namespace: lambda-errors
port: 8080
tools:
- name: handle-lambda-errors
description: "Given a Datadog alert for Lambda errors, investigate and escalate."
inputParameters:
- name: alert_id
in: body
type: string
description: "Datadog alert ID."
- name: function_name
in: body
type: string
description: "Lambda function name."
steps:
- name: get-alert
type: call
call: "datadog.get-monitor"
with:
alert_id: "{{alert_id}}"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project: "CLOUD"
summary: "Lambda error spike: {{function_name}}"
description: "{{get-alert.message}}"
- name: page-oncall
type: call
call: "pagerduty.create-incident"
with:
service_id: "cloud-engineering"
title: "Lambda errors: {{function_name}} — {{create-ticket.key}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor/{{alert_id}}"
operations:
- name: get-monitor
method: GET
- type: http
namespace: jira
baseUri: "https://comcast.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
When Datadog alerts on RDS storage approaching capacity, retrieves instance details, creates a ServiceNow change request for expansion, and notifies the DBA team via Microsoft Teams.
naftiko: "0.5"
info:
label: "AWS RDS Storage Capacity Handler"
description: "When Datadog alerts on RDS storage approaching capacity, retrieves instance details, creates a ServiceNow change request for expansion, and notifies the DBA team via Microsoft Teams."
tags:
- database
- cloud
- aws
- datadog
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: rds-capacity
port: 8080
tools:
- name: handle-rds-capacity
description: "Given a Datadog alert for RDS storage, initiate capacity expansion."
inputParameters:
- name: alert_id
in: body
type: string
description: "Datadog alert ID."
- name: db_instance
in: body
type: string
description: "RDS instance identifier."
steps:
- name: get-alert
type: call
call: "datadog.get-monitor"
with:
alert_id: "{{alert_id}}"
- name: create-change
type: call
call: "servicenow.create-change-request"
with:
short_description: "RDS storage expansion: {{db_instance}}"
category: "database"
priority: "2"
- name: notify-dba
type: call
call: "teams.post-message"
with:
channel_id: "dba-team"
text: "RDS storage alert: {{db_instance}}. Change: {{create-change.number}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor/{{alert_id}}"
operations:
- name: get-monitor
method: GET
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change-request
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
When a Databricks job fails, retrieves run details, creates a Jira ticket, and notifies the data engineering team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Azure Databricks Job Failure Handler"
description: "When a Databricks job fails, retrieves run details, creates a Jira ticket, and notifies the data engineering team via Microsoft Teams."
tags:
- data-engineering
- databricks
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: databricks-ops
port: 8080
tools:
- name: handle-job-failure
description: "Given a Databricks run ID, investigate the failure and escalate."
inputParameters:
- name: run_id
in: body
type: string
description: "Databricks run ID."
steps:
- name: get-run
type: call
call: "databricks.get-run"
with:
run_id: "{{run_id}}"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project: "DATA"
summary: "Databricks failure: {{get-run.run_name}}"
description: "Error: {{get-run.error_message}}. Cluster: {{get-run.cluster_id}}"
- name: notify-team
type: call
call: "teams.post-message"
with:
channel_id: "data-engineering"
text: "Databricks failed: {{get-run.run_name}}. Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: databricks
baseUri: "https://comcast.cloud.databricks.com/api/2.1"
authentication:
type: bearer
token: "$secrets.databricks_token"
resources:
- name: runs
path: "/jobs/runs/get"
operations:
- name: get-run
method: GET
- type: http
namespace: jira
baseUri: "https://comcast.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Retrieves the latest pipeline run status for a Comcast Azure DevOps project.
naftiko: "0.5"
info:
label: "Azure DevOps Pipeline Status"
description: "Retrieves the latest pipeline run status for a Comcast Azure DevOps project."
tags:
- cicd
- azure-devops
capability:
exposes:
- type: mcp
namespace: pipeline-status
port: 8080
tools:
- name: get-pipeline-run
description: "Given an Azure DevOps project name and pipeline ID, return the latest run status and result."
inputParameters:
- name: project_name
in: body
type: string
description: "Azure DevOps project name."
- name: pipeline_id
in: body
type: string
description: "Pipeline ID."
call: "azdo.get-run"
with:
project_name: "{{project_name}}"
pipeline_id: "{{pipeline_id}}"
outputParameters:
- name: state
type: string
mapping: "$.value[0].state"
- name: result
type: string
mapping: "$.value[0].result"
consumes:
- type: http
namespace: azdo
baseUri: "https://dev.azure.com/comcast"
authentication:
type: basic
username: "$secrets.azdo_user"
password: "$secrets.azdo_pat"
resources:
- name: pipelines
path: "/{{project_name}}/_apis/pipelines/{{pipeline_id}}/runs"
inputParameters:
- name: project_name
in: path
- name: pipeline_id
in: path
operations:
- name: get-run
method: GET
Aggregates broadband speed test data from Snowflake, identifies underperforming markets, and posts the report to the network engineering Teams channel.
naftiko: "0.5"
info:
label: "Broadband Speed Test Analytics Reporter"
description: "Aggregates broadband speed test data from Snowflake, identifies underperforming markets, and posts the report to the network engineering Teams channel."
tags:
- network
- analytics
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: speed-analytics
port: 8080
tools:
- name: generate-speed-report
description: "Given a market region, generate the speed test analytics report."
inputParameters:
- name: market_region
in: body
type: string
description: "Market region to analyze."
steps:
- name: get-speed-data
type: call
call: "snowflake.query-speed-tests"
with:
market_region: "{{market_region}}"
- name: notify-engineering
type: call
call: "teams.post-message"
with:
channel_id: "network-engineering"
text: "Speed report: {{market_region}}. Avg download: {{get-speed-data.avg_download_mbps}} Mbps. Below-threshold: {{get-speed-data.below_threshold_pct}}%"
consumes:
- type: http
namespace: snowflake
baseUri: "https://comcast.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query-speed-tests
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
When Datadog detects VoIP quality degradation for Comcast Business customers, retrieves metrics, creates a ServiceNow incident, and pages the voice team via PagerDuty.
naftiko: "0.5"
info:
label: "Business VoIP Quality Alert Handler"
description: "When Datadog detects VoIP quality degradation for Comcast Business customers, retrieves metrics, creates a ServiceNow incident, and pages the voice team via PagerDuty."
tags:
- voice
- business
- datadog
- servicenow
- pagerduty
capability:
exposes:
- type: mcp
namespace: voip-quality
port: 8080
tools:
- name: handle-voip-alert
description: "Given a Datadog alert for VoIP quality issues, investigate and escalate."
inputParameters:
- name: alert_id
in: body
type: string
description: "Datadog alert ID."
- name: business_account
in: body
type: string
description: "Business customer account ID."
steps:
- name: get-alert
type: call
call: "datadog.get-monitor"
with:
alert_id: "{{alert_id}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "VoIP quality: business account {{business_account}}"
urgency: "2"
description: "{{get-alert.message}}"
- name: page-voice
type: call
call: "pagerduty.create-incident"
with:
service_id: "voice-engineering"
title: "VoIP quality: {{business_account}} — {{create-incident.number}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor/{{alert_id}}"
operations:
- name: get-monitor
method: GET
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
When a cable node reaches capacity threshold, retrieves utilization data from Snowflake, creates a Jira planning epic, and notifies the network planning team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Cable Node Split Planning Workflow"
description: "When a cable node reaches capacity threshold, retrieves utilization data from Snowflake, creates a Jira planning epic, and notifies the network planning team via Microsoft Teams."
tags:
- network
- cable
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: node-planning
port: 8080
tools:
- name: plan-node-split
description: "Given a cable node ID and utilization percentage, initiate the node split planning workflow."
inputParameters:
- name: node_id
in: body
type: string
description: "Cable node identifier."
- name: utilization_pct
in: body
type: number
description: "Current utilization percentage."
steps:
- name: get-node-data
type: call
call: "snowflake.query-node-usage"
with:
node_id: "{{node_id}}"
- name: create-epic
type: call
call: "jira.create-issue"
with:
project: "NETPLAN"
summary: "Node split: {{node_id}} at {{utilization_pct}}%"
issue_type: "Epic"
description: "Subscriber count: {{get-node-data.subscriber_count}}. Peak usage: {{get-node-data.peak_gbps}} Gbps"
- name: notify-planning
type: call
call: "teams.post-message"
with:
channel_id: "network-planning"
text: "Node split needed: {{node_id}} ({{utilization_pct}}%). {{get-node-data.subscriber_count}} subscribers. Jira: {{create-epic.key}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://comcast.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query-node-usage
method: POST
- type: http
namespace: jira
baseUri: "https://comcast.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
After a ServiceNow incident is resolved, extracts lessons learned and updates the Confluence runbook, then notifies the engineering team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Confluence Incident Runbook Updater"
description: "After a ServiceNow incident is resolved, extracts lessons learned and updates the Confluence runbook, then notifies the engineering team via Microsoft Teams."
tags:
- knowledge-management
- servicenow
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: runbook-ops
port: 8080
tools:
- name: update-runbook
description: "Given a resolved ServiceNow incident, update the related Confluence runbook."
inputParameters:
- name: incident_number
in: body
type: string
description: "ServiceNow incident number."
steps:
- name: get-incident
type: call
call: "servicenow.get-incident"
with:
incident_number: "{{incident_number}}"
- name: update-page
type: call
call: "confluence.update-page"
with:
page_id: "{{get-incident.runbook_id}}"
content: "Lessons from {{incident_number}}: {{get-incident.close_notes}}"
- name: notify-team
type: call
call: "teams.post-message"
with:
channel_id: "sre-team"
text: "Runbook updated from {{incident_number}}. Page: {{get-incident.runbook_id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: incidents
path: "/table/incident/{{incident_number}}"
operations:
- name: get-incident
method: GET
- type: http
namespace: confluence
baseUri: "https://comcast.atlassian.net/wiki/api/v2"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/pages/{{page_id}}"
operations:
- name: update-page
method: PUT
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Searches the Comcast Confluence knowledge base for articles matching a given query and returns the top results.
naftiko: "0.5"
info:
label: "Confluence Knowledge Base Search"
description: "Searches the Comcast Confluence knowledge base for articles matching a given query and returns the top results."
tags:
- knowledge-management
- confluence
capability:
exposes:
- type: mcp
namespace: kb-search
port: 8080
tools:
- name: search-articles
description: "Given a search query, return the top Confluence article titles and page IDs."
inputParameters:
- name: query
in: body
type: string
description: "Search query string."
call: "confluence.search"
with:
query: "{{query}}"
outputParameters:
- name: result_count
type: number
mapping: "$.size"
- name: top_title
type: string
mapping: "$.results[0].title"
consumes:
- type: http
namespace: confluence
baseUri: "https://comcast.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: content
path: "/content/search"
inputParameters:
- name: query
in: query
operations:
- name: search
method: GET
Retrieves details of a CrowdStrike endpoint detection including severity, tactic, and affected hostname.
naftiko: "0.5"
info:
label: "CrowdStrike Endpoint Detection Lookup"
description: "Retrieves details of a CrowdStrike endpoint detection including severity, tactic, and affected hostname."
tags:
- security
- endpoint
- crowdstrike
capability:
exposes:
- type: mcp
namespace: endpoint-detections
port: 8080
tools:
- name: get-detection
description: "Given a CrowdStrike detection ID, return the severity, tactic, technique, and hostname."
inputParameters:
- name: detection_id
in: body
type: string
description: "CrowdStrike detection ID."
call: "crowdstrike.get-detection"
with:
detection_id: "{{detection_id}}"
outputParameters:
- name: severity
type: string
mapping: "$.resources[0].severity"
- name: tactic
type: string
mapping: "$.resources[0].tactic"
- name: hostname
type: string
mapping: "$.resources[0].hostname"
consumes:
- type: http
namespace: crowdstrike
baseUri: "https://api.crowdstrike.com"
authentication:
type: bearer
token: "$secrets.crowdstrike_token"
resources:
- name: detections
path: "/detects/entities/summaries/GET/v1"
operations:
- name: get-detection
method: POST
When CrowdStrike detects ransomware activity, isolates the affected endpoint, creates a ServiceNow P1 security incident, and alerts the SOC and CISO via Microsoft Teams.
naftiko: "0.5"
info:
label: "CrowdStrike Ransomware Containment"
description: "When CrowdStrike detects ransomware activity, isolates the affected endpoint, creates a ServiceNow P1 security incident, and alerts the SOC and CISO via Microsoft Teams."
tags:
- security
- ransomware
- crowdstrike
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: ransomware-response
port: 8080
tools:
- name: contain-ransomware
description: "Given a CrowdStrike detection ID, contain the ransomware and escalate."
inputParameters:
- name: detection_id
in: body
type: string
description: "CrowdStrike detection ID."
steps:
- name: get-detection
type: call
call: "crowdstrike.get-detection"
with:
detection_id: "{{detection_id}}"
- name: isolate-host
type: call
call: "crowdstrike.contain-host"
with:
host_id: "{{get-detection.host_id}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Ransomware: {{get-detection.malware_family}} on {{get-detection.hostname}}"
urgency: "1"
impact: "1"
- name: alert-soc
type: call
call: "teams.post-message"
with:
channel_id: "soc-critical"
text: "RANSOMWARE: {{get-detection.hostname}} isolated. Family: {{get-detection.malware_family}}. ServiceNow: {{create-incident.number}}"
consumes:
- type: http
namespace: crowdstrike
baseUri: "https://api.crowdstrike.com"
authentication:
type: bearer
token: "$secrets.crowdstrike_token"
resources:
- name: detections
path: "/detects/entities/summaries/GET/v1"
operations:
- name: get-detection
method: POST
- name: hosts
path: "/hosts/entities/host-actions/v1"
operations:
- name: contain-host
method: POST
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Retrieves subscriber usage patterns from Snowflake, identifies high-risk churn accounts in Salesforce, and creates a retention campaign task for the account team.
naftiko: "0.5"
info:
label: "Customer Churn Prediction Workflow"
description: "Retrieves subscriber usage patterns from Snowflake, identifies high-risk churn accounts in Salesforce, and creates a retention campaign task for the account team."
tags:
- crm
- analytics
- churn
- snowflake
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: churn-prediction
port: 8080
tools:
- name: process-churn-risk
description: "Given a market segment, identify high-risk churn subscribers and initiate retention workflows."
inputParameters:
- name: market_segment
in: body
type: string
description: "Market segment to analyze."
steps:
- name: get-usage-patterns
type: call
call: "snowflake.query-churn-risk"
with:
market_segment: "{{market_segment}}"
- name: create-campaign
type: call
call: "salesforce.create-campaign"
with:
name: "Retention: {{market_segment}} — {{get-usage-patterns.high_risk_count}} accounts"
type: "Retention"
- name: notify-retention
type: call
call: "teams.post-message"
with:
channel_id: "customer-retention"
text: "Churn risk: {{get-usage-patterns.high_risk_count}} accounts in {{market_segment}}. Campaign: {{create-campaign.id}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://comcast.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query-churn-risk
method: POST
- type: http
namespace: salesforce
baseUri: "https://comcast.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: campaigns
path: "/sobjects/Campaign"
operations:
- name: create-campaign
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Retrieves Comcast subscriber account details from Salesforce Service Cloud given an account number, returning service tier, billing status, and open cases.
naftiko: "0.5"
info:
label: "Customer Subscriber Lookup"
description: "Retrieves Comcast subscriber account details from Salesforce Service Cloud given an account number, returning service tier, billing status, and open cases."
tags:
- crm
- customer-support
- salesforce
capability:
exposes:
- type: mcp
namespace: subscriber-ops
port: 8080
tools:
- name: get-subscriber-account
description: "Given a Comcast subscriber account number, retrieve account details including service tier, billing status, equipment, and open support cases from Salesforce Service Cloud."
inputParameters:
- name: account_number
in: body
type: string
description: "The Comcast customer account number."
call: "salesforce.get-account"
with:
accountNumber: "{{account_number}}"
outputParameters:
- name: account_id
type: string
mapping: "$.records[0].Id"
- name: subscriber_name
type: string
mapping: "$.records[0].Name"
- name: service_tier
type: string
mapping: "$.records[0].ServiceTier__c"
- name: billing_status
type: string
mapping: "$.records[0].BillingStatus__c"
consumes:
- type: http
namespace: salesforce
baseUri: "https://comcast.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/query"
inputParameters:
- name: accountNumber
in: query
operations:
- name: get-account
method: GET
When Datadog detects API gateway throttling, retrieves request metrics, creates a Jira capacity ticket, and alerts the API team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Datadog API Gateway Throttle Handler"
description: "When Datadog detects API gateway throttling, retrieves request metrics, creates a Jira capacity ticket, and alerts the API team via Microsoft Teams."
tags:
- api
- observability
- datadog
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: api-throttle
port: 8080
tools:
- name: handle-throttle-alert
description: "Given a Datadog alert for API throttling, investigate and create capacity ticket."
inputParameters:
- name: alert_id
in: body
type: string
description: "Datadog alert ID."
- name: api_name
in: body
type: string
description: "API service name."
steps:
- name: get-alert
type: call
call: "datadog.get-monitor"
with:
alert_id: "{{alert_id}}"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project: "API"
summary: "Throttling: {{api_name}}"
description: "{{get-alert.message}}"
- name: notify-api-team
type: call
call: "teams.post-message"
with:
channel_id: "api-platform"
text: "API throttling: {{api_name}}. Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor/{{alert_id}}"
operations:
- name: get-monitor
method: GET
- type: http
namespace: jira
baseUri: "https://comcast.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Retrieves the CDN cache hit ratio and bandwidth metrics from Datadog for Comcast content delivery infrastructure.
naftiko: "0.5"
info:
label: "Datadog CDN Cache Hit Ratio"
description: "Retrieves the CDN cache hit ratio and bandwidth metrics from Datadog for Comcast content delivery infrastructure."
tags:
- cdn
- observability
- datadog
capability:
exposes:
- type: mcp
namespace: cdn-metrics
port: 8080
tools:
- name: get-cache-metrics
description: "Given a CDN region, return the cache hit ratio and bandwidth utilization."
inputParameters:
- name: cdn_region
in: body
type: string
description: "CDN region (e.g., us-east, us-west)."
call: "datadog.query-cdn-metrics"
with:
cdn_region: "{{cdn_region}}"
outputParameters:
- name: hit_ratio
type: number
mapping: "$.series[0].hit_ratio"
- name: bandwidth_gbps
type: number
mapping: "$.series[0].bandwidth"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: metrics
path: "/query"
inputParameters:
- name: cdn_region
in: query
operations:
- name: query-cdn-metrics
method: GET
When a new deployment is released via GitHub Actions, creates a Datadog deployment marker to annotate the release on all monitoring dashboards.
naftiko: "0.5"
info:
label: "Datadog Dashboard Annotation on Deployment"
description: "When a new deployment is released via GitHub Actions, creates a Datadog deployment marker to annotate the release on all monitoring dashboards."
tags:
- devops
- observability
- github
- datadog
- deployment
capability:
exposes:
- type: mcp
namespace: deployment-ops
port: 8080
tools:
- name: annotate-deployment
description: "Given a GitHub repository, branch, and commit SHA, create a Datadog deployment marker to annotate dashboards at the deployment timestamp."
inputParameters:
- name: repo
in: body
type: string
description: "GitHub repository name in owner/repo format."
- name: branch
in: body
type: string
description: "The branch that was deployed."
- name: commit_sha
in: body
type: string
description: "The git commit SHA being deployed."
- name: service_name
in: body
type: string
description: "The Datadog service name to annotate."
steps:
- name: create-dd-marker
type: call
call: "datadog.create-event"
with:
title: "Deployment: {{service_name}} {{commit_sha}}"
text: "Repo: {{repo}} | Branch: {{branch}} | Commit: {{commit_sha}}"
alert_type: "info"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
channelId: "deployments"
message: "Deployment annotated in Datadog: {{service_name}} {{commit_sha}} from {{branch}}."
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: events
path: "/events"
operations:
- name: create-event
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
in: path
operations:
- name: post-channel-message
method: POST
When Datadog detects database connection pool exhaustion, retrieves metrics, creates a ServiceNow incident, and notifies the DBA team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Datadog Database Connection Pool Alert"
description: "When Datadog detects database connection pool exhaustion, retrieves metrics, creates a ServiceNow incident, and notifies the DBA team via Microsoft Teams."
tags:
- database
- observability
- datadog
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: db-pool-alert
port: 8080
tools:
- name: handle-pool-exhaustion
description: "Given a Datadog alert for connection pool issues, investigate and escalate."
inputParameters:
- name: alert_id
in: body
type: string
description: "Datadog alert ID."
- name: db_host
in: body
type: string
description: "Database hostname."
steps:
- name: get-alert
type: call
call: "datadog.get-monitor"
with:
alert_id: "{{alert_id}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "DB pool exhaustion: {{db_host}}"
urgency: "2"
description: "{{get-alert.message}}"
- name: notify-dba
type: call
call: "teams.post-message"
with:
channel_id: "dba-team"
text: "DB pool alert: {{db_host}}. ServiceNow: {{create-incident.number}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor/{{alert_id}}"
operations:
- name: get-monitor
method: GET
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
When Datadog detects Kubernetes cluster health degradation, retrieves node metrics, creates a Jira ticket, and pages the platform team via PagerDuty.
naftiko: "0.5"
info:
label: "Datadog Kubernetes Cluster Health Responder"
description: "When Datadog detects Kubernetes cluster health degradation, retrieves node metrics, creates a Jira ticket, and pages the platform team via PagerDuty."
tags:
- cloud
- kubernetes
- datadog
- jira
- pagerduty
capability:
exposes:
- type: mcp
namespace: k8s-health
port: 8080
tools:
- name: handle-cluster-alert
description: "Given a Datadog alert for K8s cluster issues, investigate and escalate."
inputParameters:
- name: alert_id
in: body
type: string
description: "Datadog alert ID."
- name: cluster_name
in: body
type: string
description: "Kubernetes cluster name."
steps:
- name: get-alert
type: call
call: "datadog.get-monitor"
with:
alert_id: "{{alert_id}}"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project: "PLATFORM"
summary: "K8s cluster: {{cluster_name}}"
description: "{{get-alert.message}}"
- name: page-platform
type: call
call: "pagerduty.create-incident"
with:
service_id: "platform-engineering"
title: "K8s: {{cluster_name}} — {{create-ticket.key}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor/{{alert_id}}"
operations:
- name: get-monitor
method: GET
- type: http
namespace: jira
baseUri: "https://comcast.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
When a Datadog SLO drops below its error budget threshold, creates a ServiceNow incident and notifies the responsible engineering team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Datadog SLO Breach Alert"
description: "When a Datadog SLO drops below its error budget threshold, creates a ServiceNow incident and notifies the responsible engineering team in Microsoft Teams."
tags:
- observability
- itsm
- datadog
- servicenow
- microsoft-teams
- slo
capability:
exposes:
- type: mcp
namespace: slo-ops
port: 8080
tools:
- name: handle-slo-breach
description: "Given a Datadog SLO ID and service name, retrieve current SLO status, open a ServiceNow incident, and page the engineering team in Teams."
inputParameters:
- name: slo_id
in: body
type: string
description: "The Datadog SLO ID that is breaching its error budget."
- name: service_name
in: body
type: string
description: "The service name associated with the SLO."
steps:
- name: get-slo-status
type: call
call: "datadog.get-slo"
with:
slo_id: "{{slo_id}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "SLO breach: {{service_name}}"
description: "SLO {{slo_id}} for {{service_name}} has breached error budget. Current: {{get-slo-status.sli_value}}%"
urgency: "2"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
channelId: "engineering-alerts"
message: "SLO breach: {{service_name}} | SLO: {{slo_id}} | Current SLI: {{get-slo-status.sli_value}}% | ServiceNow: {{create-incident.number}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: slos
path: "/slo/{{slo_id}}"
inputParameters:
- name: slo_id
in: path
operations:
- name: get-slo
method: GET
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
in: path
operations:
- name: post-channel-message
method: POST
Checks the current latency and error rate for Peacock and Xfinity streaming services in Datadog.
naftiko: "0.5"
info:
label: "Datadog Streaming Service Latency Check"
description: "Checks the current latency and error rate for Peacock and Xfinity streaming services in Datadog."
tags:
- streaming
- observability
- datadog
capability:
exposes:
- type: mcp
namespace: streaming-health
port: 8080
tools:
- name: get-streaming-latency
description: "Given a streaming service name, return p50 and p99 latency and error rate."
inputParameters:
- name: service_name
in: body
type: string
description: "Streaming service name (e.g., peacock-api, xfinity-stream)."
call: "datadog.get-service-stats"
with:
service_name: "{{service_name}}"
outputParameters:
- name: p50_latency_ms
type: number
mapping: "$.series[0].p50"
- name: p99_latency_ms
type: number
mapping: "$.series[0].p99"
- name: error_rate
type: number
mapping: "$.series[0].error_rate"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: metrics
path: "/query"
inputParameters:
- name: service_name
in: query
operations:
- name: get-service-stats
method: GET
Coordinates bulk DOCSIS modem firmware upgrades by verifying compatibility, creating a ServiceNow change request, and scheduling the maintenance window via PagerDuty.
naftiko: "0.5"
info:
label: "DOCSIS Modem Firmware Upgrade Coordinator"
description: "Coordinates bulk DOCSIS modem firmware upgrades by verifying compatibility, creating a ServiceNow change request, and scheduling the maintenance window via PagerDuty."
tags:
- network
- cable
- firmware
- servicenow
- pagerduty
capability:
exposes:
- type: mcp
namespace: modem-firmware
port: 8080
tools:
- name: coordinate-modem-upgrade
description: "Given a modem model and target firmware version, coordinate the upgrade across affected devices."
inputParameters:
- name: modem_model
in: body
type: string
description: "DOCSIS modem model identifier."
- name: target_firmware
in: body
type: string
description: "Target firmware version."
steps:
- name: create-change
type: call
call: "servicenow.create-change-request"
with:
short_description: "DOCSIS firmware upgrade: {{modem_model}} to {{target_firmware}}"
category: "network"
priority: "3"
- name: schedule-maintenance
type: call
call: "pagerduty.create-maintenance-window"
with:
service_id: "cable-network-ops"
description: "Modem firmware: {{modem_model}} — CHG: {{create-change.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change-request
method: POST
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: maintenance
path: "/maintenance_windows"
operations:
- name: create-maintenance-window
method: POST
When a Workday termination is processed, deactivates the employee's Okta account, disables Microsoft 365, and resolves open ServiceNow tickets.
naftiko: "0.5"
info:
label: "Employee Offboarding Access Revocation"
description: "When a Workday termination is processed, deactivates the employee's Okta account, disables Microsoft 365, and resolves open ServiceNow tickets."
tags:
- hr
- offboarding
- workday
- okta
- servicenow
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-offboarding
description: "Given a Workday employee ID and termination date, deactivate Okta, disable Microsoft Graph account, and resolve open ServiceNow tickets."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday worker ID for the departing employee."
- name: termination_date
in: body
type: string
description: "Termination date in YYYY-MM-DD format."
steps:
- name: get-worker
type: call
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
- name: deactivate-okta
type: call
call: "okta.deactivate-user"
with:
login: "{{get-worker.work_email}}"
- name: disable-m365
type: call
call: "msgraph.update-user"
with:
userPrincipalName: "{{get-worker.work_email}}"
accountEnabled: "false"
- name: close-tickets
type: call
call: "servicenow.close-user-tickets"
with:
caller_id: "{{get-worker.work_email}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/comcast/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: okta
baseUri: "https://comcast.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users/{{login}}/lifecycle/deactivate"
inputParameters:
- name: login
in: path
operations:
- name: deactivate-user
method: POST
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users/{{userPrincipalName}}"
inputParameters:
- name: userPrincipalName
in: path
operations:
- name: update-user
method: PATCH
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: close-user-tickets
method: PATCH
Monitors enterprise internet SLA compliance via Datadog, stores metrics in Snowflake, and emails weekly SLA reports to account managers via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Enterprise Internet SLA Monitor"
description: "Monitors enterprise internet SLA compliance via Datadog, stores metrics in Snowflake, and emails weekly SLA reports to account managers via Microsoft Outlook."
tags:
- sla
- enterprise
- datadog
- snowflake
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: enterprise-sla
port: 8080
tools:
- name: generate-sla-report
description: "Given an enterprise account ID, generate the SLA compliance report."
inputParameters:
- name: account_id
in: body
type: string
description: "Enterprise account ID."
steps:
- name: get-sla-metrics
type: call
call: "datadog.get-sla"
with:
account_id: "{{account_id}}"
- name: store-metrics
type: call
call: "snowflake.insert-sla"
with:
account_id: "{{account_id}}"
uptime: "{{get-sla-metrics.uptime_pct}}"
- name: email-report
type: call
call: "outlook.send-email"
with:
to: "{{get-sla-metrics.am_email}}"
subject: "SLA Report: {{account_id}}"
body: "Uptime: {{get-sla-metrics.uptime_pct}}%. Latency: {{get-sla-metrics.latency_ms}}ms."
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: sla
path: "/slo"
operations:
- name: get-sla
method: GET
- type: http
namespace: snowflake
baseUri: "https://comcast.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: insert-sla
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
On a protected-branch GitHub Actions failure, creates a Jira bug, posts an alert to the engineering Teams channel, and logs an event in Datadog.
naftiko: "0.5"
info:
label: "GitHub Actions Pipeline Failure Handler"
description: "On a protected-branch GitHub Actions failure, creates a Jira bug, posts an alert to the engineering Teams channel, and logs an event in Datadog."
tags:
- devops
- cicd
- github
- jira
- datadog
- microsoft-teams
- incident-response
capability:
exposes:
- type: mcp
namespace: devops-cicd
port: 8080
tools:
- name: handle-pipeline-failure
description: "Given a GitHub Actions workflow failure, create a Jira bug, send a Datadog event marker, and alert the engineering Teams channel."
inputParameters:
- name: repo
in: body
type: string
description: "GitHub repository in owner/repo format."
- name: workflow_name
in: body
type: string
description: "The name of the failed GitHub Actions workflow."
- name: branch
in: body
type: string
description: "The branch on which the failure occurred."
- name: run_id
in: body
type: string
description: "The GitHub Actions workflow run ID."
steps:
- name: get-run-details
type: call
call: "github.get-workflow-run"
with:
repo: "{{repo}}"
run_id: "{{run_id}}"
- name: create-jira-bug
type: call
call: "jira.create-issue"
with:
projectKey: "ENG"
issuetype: "Bug"
summary: "[CI Failure] {{repo}} / {{branch}} — {{workflow_name}}"
description: "Run: {{run_id}}\nConclusion: {{get-run-details.conclusion}}"
- name: log-datadog
type: call
call: "datadog.create-event"
with:
title: "CI Failure: {{repo}} {{workflow_name}}"
text: "Branch: {{branch}}, Run: {{run_id}}"
alert_type: "error"
- name: alert-team
type: call
call: "msteams.post-channel-message"
with:
channelId: "engineering-alerts"
message: "CI Failure: {{repo}} | Branch: {{branch}} | Workflow: {{workflow_name}} | Jira: {{create-jira-bug.key}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: workflow-runs
path: "/repos/{{repo}}/actions/runs/{{run_id}}"
inputParameters:
- name: repo
in: path
- name: run_id
in: path
operations:
- name: get-workflow-run
method: GET
- type: http
namespace: jira
baseUri: "https://comcast.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: events
path: "/events"
operations:
- name: create-event
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
in: path
operations:
- name: post-channel-message
method: POST
When GitHub Dependabot finds a critical vulnerability, creates a Jira security ticket, notifies the owning team via Microsoft Teams, and logs the event in Splunk.
naftiko: "0.5"
info:
label: "GitHub Dependency Vulnerability Handler"
description: "When GitHub Dependabot finds a critical vulnerability, creates a Jira security ticket, notifies the owning team via Microsoft Teams, and logs the event in Splunk."
tags:
- security
- development
- github
- jira
- microsoft-teams
- splunk
capability:
exposes:
- type: mcp
namespace: dep-vuln-handler
port: 8080
tools:
- name: handle-dependency-vuln
description: "Given a GitHub repository and advisory ID, create tracking ticket and notify."
inputParameters:
- name: repo_name
in: body
type: string
description: "GitHub repository name."
- name: advisory_id
in: body
type: string
description: "GitHub security advisory ID."
steps:
- name: get-advisory
type: call
call: "github.get-advisory"
with:
repo_name: "{{repo_name}}"
advisory_id: "{{advisory_id}}"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project: "SEC"
summary: "Dependency vuln: {{repo_name}} — {{get-advisory.package}}"
description: "Severity: {{get-advisory.severity}}. CVE: {{get-advisory.cve}}"
- name: log-event
type: call
call: "splunk.index-event"
with:
source: "github-dependabot"
event: "Vulnerability: {{repo_name}} — {{get-advisory.cve}}"
- name: notify-team
type: call
call: "teams.post-message"
with:
channel_id: "appsec"
text: "Critical vuln: {{repo_name}} — {{get-advisory.package}} ({{get-advisory.severity}}). Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: advisories
path: "/repos/comcast/{{repo_name}}/security-advisories/{{advisory_id}}"
operations:
- name: get-advisory
method: GET
- type: http
namespace: jira
baseUri: "https://comcast.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: splunk
baseUri: "https://splunk.comcast.com:8088"
authentication:
type: bearer
token: "$secrets.splunk_hec_token"
resources:
- name: events
path: "/services/collector/event"
operations:
- name: index-event
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Retrieves the status and review state of a GitHub pull request in Comcast engineering repositories.
naftiko: "0.5"
info:
label: "GitHub Pull Request Status Check"
description: "Retrieves the status and review state of a GitHub pull request in Comcast engineering repositories."
tags:
- development
- github
capability:
exposes:
- type: mcp
namespace: pr-status
port: 8080
tools:
- name: get-pr-status
description: "Given a repository name and PR number, return the PR title, status, and mergeable state."
inputParameters:
- name: repo_name
in: body
type: string
description: "GitHub repository name."
- name: pr_number
in: body
type: string
description: "PR number."
call: "github.get-pr"
with:
repo_name: "{{repo_name}}"
pr_number: "{{pr_number}}"
outputParameters:
- name: title
type: string
mapping: "$.title"
- name: state
type: string
mapping: "$.state"
- name: mergeable
type: string
mapping: "$.mergeable"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: pulls
path: "/repos/comcast/{{repo_name}}/pulls/{{pr_number}}"
inputParameters:
- name: repo_name
in: path
- name: pr_number
in: path
operations:
- name: get-pr
method: GET
When a GitHub release is published, annotates the Datadog deployment dashboard, creates a Jira release ticket, and notifies the engineering team via Microsoft Teams.
naftiko: "0.5"
info:
label: "GitHub Release Deployment Tracker"
description: "When a GitHub release is published, annotates the Datadog deployment dashboard, creates a Jira release ticket, and notifies the engineering team via Microsoft Teams."
tags:
- deployment
- github
- datadog
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: release-tracking
port: 8080
tools:
- name: track-release
description: "Given a GitHub repository and release tag, track the deployment."
inputParameters:
- name: repo_name
in: body
type: string
description: "GitHub repository name."
- name: release_tag
in: body
type: string
description: "Release tag (e.g., v2.3.1)."
steps:
- name: get-release
type: call
call: "github.get-release"
with:
repo_name: "{{repo_name}}"
tag: "{{release_tag}}"
- name: annotate-datadog
type: call
call: "datadog.create-event"
with:
title: "Deploy: {{repo_name}} {{release_tag}}"
text: "{{get-release.body}}"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project: "REL"
summary: "Release: {{repo_name}} {{release_tag}}"
description: "{{get-release.body}}"
- name: notify-team
type: call
call: "teams.post-message"
with:
channel_id: "releases"
text: "Released: {{repo_name}} {{release_tag}}. Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: releases
path: "/repos/comcast/{{repo_name}}/releases/tags/{{tag}}"
operations:
- name: get-release
method: GET
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: events
path: "/events"
operations:
- name: create-event
method: POST
- type: http
namespace: jira
baseUri: "https://comcast.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Scans GitHub Dependabot alerts for critical vulnerabilities across Comcast repositories, creates Jira security tickets, and notifies the security team in Teams.
naftiko: "0.5"
info:
label: "GitHub Security Vulnerability Triage"
description: "Scans GitHub Dependabot alerts for critical vulnerabilities across Comcast repositories, creates Jira security tickets, and notifies the security team in Teams."
tags:
- security
- devops
- github
- jira
- microsoft-teams
- vulnerability-management
capability:
exposes:
- type: mcp
namespace: security-ops
port: 8080
tools:
- name: triage-vulnerability-alerts
description: "Given a GitHub repository, retrieve critical Dependabot alerts, create Jira security tickets, and post a summary to the security Teams channel."
inputParameters:
- name: repo
in: body
type: string
description: "GitHub repository in owner/repo format."
steps:
- name: get-alerts
type: call
call: "github.get-dependabot-alerts"
with:
repo: "{{repo}}"
severity: "critical"
- name: create-security-ticket
type: call
call: "jira.create-issue"
with:
projectKey: "SEC"
issuetype: "Security"
summary: "Critical vulnerability: {{get-alerts.advisory_summary}}"
description: "Package: {{get-alerts.package_name}}\nCVSS: {{get-alerts.cvss_score}}\nRepo: {{repo}}"
- name: notify-security
type: call
call: "msteams.post-channel-message"
with:
channelId: "security-team"
message: "Critical vulnerability in {{repo}}: {{get-alerts.advisory_summary}} | Jira: {{create-security-ticket.key}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: dependabot-alerts
path: "/repos/{{repo}}/dependabot/alerts"
inputParameters:
- name: repo
in: path
- name: severity
in: query
operations:
- name: get-dependabot-alerts
method: GET
- type: http
namespace: jira
baseUri: "https://comcast.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
in: path
operations:
- name: post-channel-message
method: POST
When a high-volume alert fires in Splunk, sends the log context to Anthropic Claude for root cause analysis and posts the AI-generated triage summary to the engineering Teams channel.
naftiko: "0.5"
info:
label: "Intelligent Incident Triage with Claude"
description: "When a high-volume alert fires in Splunk, sends the log context to Anthropic Claude for root cause analysis and posts the AI-generated triage summary to the engineering Teams channel."
tags:
- ai
- automation
- anthropic
- splunk
- microsoft-teams
- incident-response
capability:
exposes:
- type: mcp
namespace: ai-triage
port: 8080
tools:
- name: triage-incident-with-ai
description: "Given a Splunk alert message and affected service, send log context to Claude for root cause analysis and post the triage summary to the engineering Teams channel."
inputParameters:
- name: alert_message
in: body
type: string
description: "The full Splunk alert message text including log snippets."
- name: service_name
in: body
type: string
description: "The service or application that generated the alert."
- name: teams_channel_id
in: body
type: string
description: "The Teams channel ID to post the triage summary to."
steps:
- name: analyze-logs
type: call
call: "anthropic.create-message"
with:
model: "claude-3-5-sonnet-20241022"
content: "Analyze this Splunk alert for {{service_name}} and provide a concise root cause analysis with recommended remediation steps:\n\n{{alert_message}}"
- name: post-triage
type: call
call: "msteams.post-channel-message"
with:
channelId: "{{teams_channel_id}}"
message: "AI Triage for {{service_name}}:\n{{analyze-logs.content}}"
consumes:
- type: http
namespace: anthropic
baseUri: "https://api.anthropic.com/v1"
authentication:
type: apikey
key: "x-api-key"
value: "$secrets.anthropic_api_key"
placement: header
resources:
- name: messages
path: "/messages"
operations:
- name: create-message
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
in: path
operations:
- name: post-channel-message
method: POST
Retrieves unestimated and stale Jira backlog items for a project and posts a grooming reminder digest to the product team's Teams channel.
naftiko: "0.5"
info:
label: "Jira Backlog Grooming Report"
description: "Retrieves unestimated and stale Jira backlog items for a project and posts a grooming reminder digest to the product team's Teams channel."
tags:
- devops
- engineering
- jira
- microsoft-teams
- backlog-management
capability:
exposes:
- type: mcp
namespace: backlog-ops
port: 8080
tools:
- name: digest-backlog-health
description: "Given a Jira project key, retrieve unestimated and stale backlog issues older than 30 days and post a grooming summary to the product team's Teams channel."
inputParameters:
- name: project_key
in: body
type: string
description: "The Jira project key, e.g. XFIN."
steps:
- name: get-stale-issues
type: call
call: "jira.search-issues"
with:
jql: "project={{project_key}} AND status=Backlog AND created<=-30d AND storyPoints is EMPTY"
- name: post-reminder
type: call
call: "msteams.post-channel-message"
with:
channelId: "product-team"
message: "Backlog health for {{project_key}}: {{get-stale-issues.total}} unestimated or stale issues need grooming. Oldest: {{get-stale-issues.oldest_issue}}."
consumes:
- type: http
namespace: jira
baseUri: "https://comcast.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/search"
inputParameters:
- name: jql
in: query
operations:
- name: search-issues
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
in: path
operations:
- name: post-channel-message
method: POST
Retrieves the current sprint status and issue breakdown for a Comcast engineering Jira project.
naftiko: "0.5"
info:
label: "Jira Project Status Lookup"
description: "Retrieves the current sprint status and issue breakdown for a Comcast engineering Jira project."
tags:
- project-management
- jira
capability:
exposes:
- type: mcp
namespace: project-status
port: 8080
tools:
- name: get-project-status
description: "Given a Jira project key, return the active sprint name, total issues, and done count."
inputParameters:
- name: project_key
in: body
type: string
description: "Jira project key (e.g., XFIN, STREAM)."
call: "jira.get-board-sprint"
with:
project_key: "{{project_key}}"
outputParameters:
- name: sprint_name
type: string
mapping: "$.values[0].name"
- name: total_issues
type: number
mapping: "$.values[0].total"
- name: done_count
type: number
mapping: "$.values[0].done"
consumes:
- type: http
namespace: jira
baseUri: "https://comcast.atlassian.net/rest/agile/1.0"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprints
path: "/board/{{project_key}}/sprint"
inputParameters:
- name: project_key
in: path
operations:
- name: get-board-sprint
method: GET
Aggregates Jira epic progress across product teams, generates a quarterly roadmap digest, and posts to the product leadership Teams channel.
naftiko: "0.5"
info:
label: "Jira Quarterly Roadmap Digest"
description: "Aggregates Jira epic progress across product teams, generates a quarterly roadmap digest, and posts to the product leadership Teams channel."
tags:
- product-management
- roadmap
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: roadmap-digest
port: 8080
tools:
- name: generate-roadmap-digest
description: "Given a fiscal quarter, generate the roadmap progress digest."
inputParameters:
- name: fiscal_quarter
in: body
type: string
description: "Fiscal quarter (e.g., FY26-Q1)."
steps:
- name: get-epics
type: call
call: "jira.search-epics"
with:
quarter: "{{fiscal_quarter}}"
- name: notify-leadership
type: call
call: "teams.post-message"
with:
channel_id: "product-leadership"
text: "Roadmap digest: {{fiscal_quarter}}. Total epics: {{get-epics.total}}. On-track: {{get-epics.on_track}}. At-risk: {{get-epics.at_risk}}"
consumes:
- type: http
namespace: jira
baseUri: "https://comcast.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: search
path: "/search"
operations:
- name: search-epics
method: GET
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Checks Jira for release readiness by verifying all stories are done, creates a Confluence release notes page, and posts the go/no-go status to Microsoft Teams.
naftiko: "0.5"
info:
label: "Jira Release Readiness Checker"
description: "Checks Jira for release readiness by verifying all stories are done, creates a Confluence release notes page, and posts the go/no-go status to Microsoft Teams."
tags:
- release-management
- jira
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: release-readiness
port: 8080
tools:
- name: check-release-readiness
description: "Given a Jira release version, verify readiness and generate release notes."
inputParameters:
- name: version_name
in: body
type: string
description: "Jira fix version name."
- name: project_key
in: body
type: string
description: "Jira project key."
steps:
- name: get-version-issues
type: call
call: "jira.search-version-issues"
with:
project: "{{project_key}}"
version: "{{version_name}}"
- name: create-release-notes
type: call
call: "confluence.create-page"
with:
space_key: "REL"
title: "Release Notes: {{project_key}} {{version_name}}"
content: "Total: {{get-version-issues.total}}. Done: {{get-version-issues.done}}. Open: {{get-version-issues.open}}"
- name: post-status
type: call
call: "teams.post-message"
with:
channel_id: "release-management"
text: "Release {{version_name}}: {{get-version-issues.done}}/{{get-version-issues.total}} done. Notes: {{create-release-notes.url}}"
consumes:
- type: http
namespace: jira
baseUri: "https://comcast.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: search
path: "/search"
operations:
- name: search-version-issues
method: GET
- type: http
namespace: confluence
baseUri: "https://comcast.atlassian.net/wiki/api/v2"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/pages"
operations:
- name: create-page
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Pulls completed sprint data from Jira for an engineering team, calculates velocity, and posts the sprint summary to the team's Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Jira Sprint Velocity Report"
description: "Pulls completed sprint data from Jira for an engineering team, calculates velocity, and posts the sprint summary to the team's Microsoft Teams channel."
tags:
- devops
- engineering
- jira
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: engineering-reporting
port: 8080
tools:
- name: publish-sprint-velocity
description: "Given a Jira board ID and sprint ID, retrieve completed issues and story points, then post a velocity summary to the engineering Teams channel."
inputParameters:
- name: board_id
in: body
type: string
description: "The Jira software board ID."
- name: sprint_id
in: body
type: string
description: "The Jira sprint ID to report on."
steps:
- name: get-sprint-issues
type: call
call: "jira.get-sprint-issues"
with:
boardId: "{{board_id}}"
sprintId: "{{sprint_id}}"
- name: post-velocity
type: call
call: "msteams.post-channel-message"
with:
channelId: "engineering-team"
message: "Sprint {{sprint_id}} complete: {{get-sprint-issues.completedIssues}} issues, {{get-sprint-issues.completedPoints}} story points delivered."
consumes:
- type: http
namespace: jira
baseUri: "https://comcast.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprint-issues
path: "/board/{{boardId}}/sprint/{{sprintId}}/issue"
inputParameters:
- name: boardId
in: path
- name: sprintId
in: path
operations:
- name: get-sprint-issues
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
in: path
operations:
- name: post-channel-message
method: POST
Retrieves LinkedIn employer brand metrics, stores trends in Snowflake, and posts the weekly summary to the HR marketing Teams channel.
naftiko: "0.5"
info:
label: "LinkedIn Talent Brand Monitor"
description: "Retrieves LinkedIn employer brand metrics, stores trends in Snowflake, and posts the weekly summary to the HR marketing Teams channel."
tags:
- hr
- employer-brand
- linkedin
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: talent-brand
port: 8080
tools:
- name: monitor-talent-brand
description: "Given a reporting period, generate the LinkedIn employer brand report."
inputParameters:
- name: period
in: body
type: string
description: "Reporting period (e.g., 2026-W13)."
steps:
- name: get-brand-metrics
type: call
call: "linkedin.get-brand-stats"
with:
period: "{{period}}"
- name: store-metrics
type: call
call: "snowflake.insert-brand-metrics"
with:
period: "{{period}}"
followers: "{{get-brand-metrics.followers}}"
engagement_rate: "{{get-brand-metrics.engagement_rate}}"
- name: notify-hr
type: call
call: "teams.post-message"
with:
channel_id: "hr-marketing"
text: "LinkedIn brand: {{period}}. Followers: {{get-brand-metrics.followers}}. Engagement: {{get-brand-metrics.engagement_rate}}%"
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: brand
path: "/organizationalEntityFollowerStatistics"
operations:
- name: get-brand-stats
method: GET
- type: http
namespace: snowflake
baseUri: "https://comcast.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: insert-brand-metrics
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Checks content licensing rights expiry in Snowflake, creates a Jira task for the content operations team, and notifies stakeholders via Microsoft Teams.
naftiko: "0.5"
info:
label: "NBC Universal Content Rights Checker"
description: "Checks content licensing rights expiry in Snowflake, creates a Jira task for the content operations team, and notifies stakeholders via Microsoft Teams."
tags:
- content
- licensing
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: content-rights
port: 8080
tools:
- name: check-content-rights
description: "Given a content catalog ID, check licensing rights and flag expirations."
inputParameters:
- name: catalog_id
in: body
type: string
description: "Content catalog identifier."
steps:
- name: get-rights
type: call
call: "snowflake.query-rights"
with:
catalog_id: "{{catalog_id}}"
- name: create-task
type: call
call: "jira.create-issue"
with:
project: "CONTENT"
summary: "Rights expiry: {{get-rights.title}} — {{get-rights.expiry_date}}"
description: "Territories: {{get-rights.territories}}. License type: {{get-rights.license_type}}"
- name: notify-content-ops
type: call
call: "teams.post-message"
with:
channel_id: "content-operations"
text: "Rights expiring: {{get-rights.title}} on {{get-rights.expiry_date}}. Jira: {{create-task.key}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://comcast.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query-rights
method: POST
- type: http
namespace: jira
baseUri: "https://comcast.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
When a network outage alert fires in Datadog, creates a ServiceNow P1 incident, posts to the NOC Teams channel, and logs the event in Splunk.
naftiko: "0.5"
info:
label: "Network Outage Incident Response"
description: "When a network outage alert fires in Datadog, creates a ServiceNow P1 incident, posts to the NOC Teams channel, and logs the event in Splunk."
tags:
- itsm
- observability
- datadog
- servicenow
- splunk
- microsoft-teams
- incident-response
capability:
exposes:
- type: mcp
namespace: noc-ops
port: 8080
tools:
- name: handle-network-outage
description: "Given a Datadog monitor alert for a network outage, create a ServiceNow P1 incident, send a NOC channel alert in Teams, and index the event in Splunk."
inputParameters:
- name: monitor_id
in: body
type: string
description: "The Datadog monitor ID that triggered the alert."
- name: affected_region
in: body
type: string
description: "Geographic region or network segment affected by the outage."
- name: alert_message
in: body
type: string
description: "The alert message text from Datadog."
steps:
- name: get-monitor
type: call
call: "datadog.get-monitor"
with:
monitor_id: "{{monitor_id}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Network outage: {{affected_region}}"
description: "{{alert_message}}\nMonitor: {{monitor_id}}\nState: {{get-monitor.overall_state}}"
urgency: "1"
impact: "1"
- name: alert-noc
type: call
call: "msteams.post-channel-message"
with:
channelId: "noc-alerts"
message: "P1 Outage: {{affected_region}} | Monitor: {{monitor_id}} | ServiceNow: {{create-incident.number}} | {{alert_message}}"
- name: log-splunk
type: call
call: "splunk.index-event"
with:
source: "datadog-alert"
event: "Network outage detected in {{affected_region}}: {{alert_message}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
in: path
operations:
- name: post-channel-message
method: POST
- type: http
namespace: splunk
baseUri: "https://splunk.comcast.com:8088"
authentication:
type: bearer
token: "$secrets.splunk_hec_token"
resources:
- name: events
path: "/services/collector/event"
operations:
- name: index-event
method: POST
When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions Okta access, and sends a Microsoft Teams welcome message.
naftiko: "0.5"
info:
label: "New Employee Onboarding Orchestrator"
description: "When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions Okta access, and sends a Microsoft Teams welcome message."
tags:
- hr
- onboarding
- workday
- servicenow
- okta
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-onboarding
description: "Given a Workday employee ID and start date, orchestrate the full onboarding sequence: open a ServiceNow ticket, provision Okta, and send a Teams welcome."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday worker ID for the new hire."
- name: start_date
in: body
type: string
description: "Employee start date in YYYY-MM-DD format."
steps:
- name: get-worker
type: call
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
- name: create-snow-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "New hire onboarding: {{get-worker.full_name}}"
category: "hr_onboarding"
- name: activate-okta
type: call
call: "okta.create-user"
with:
login: "{{get-worker.work_email}}"
firstName: "{{get-worker.first_name}}"
lastName: "{{get-worker.last_name}}"
- name: send-welcome
type: call
call: "msteams.post-message"
with:
recipient: "{{get-worker.work_email}}"
message: "Welcome to Comcast, {{get-worker.first_name}}! Your onboarding ticket: {{create-snow-ticket.number}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/comcast/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: okta
baseUri: "https://comcast.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users"
operations:
- name: create-user
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/chats/messages"
operations:
- name: post-message
method: POST
Runs quarterly Okta access reviews by pulling user-app assignments, creating Jira review tasks for managers, and posting summary to the governance Teams channel.
naftiko: "0.5"
info:
label: "Okta Quarterly Access Review"
description: "Runs quarterly Okta access reviews by pulling user-app assignments, creating Jira review tasks for managers, and posting summary to the governance Teams channel."
tags:
- security
- governance
- okta
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: access-review
port: 8080
tools:
- name: run-access-review
description: "Given a department, run the quarterly access review and create review tasks."
inputParameters:
- name: department
in: body
type: string
description: "Department to review."
steps:
- name: get-assignments
type: call
call: "okta.get-department-apps"
with:
department: "{{department}}"
- name: create-review
type: call
call: "jira.create-issue"
with:
project: "GRC"
summary: "Q1 access review: {{department}}"
description: "Users: {{get-assignments.user_count}}. Apps: {{get-assignments.app_count}}"
- name: notify-governance
type: call
call: "teams.post-message"
with:
channel_id: "iam-governance"
text: "Access review: {{department}}. {{get-assignments.user_count}} users, {{get-assignments.app_count}} apps. Jira: {{create-review.key}}"
consumes:
- type: http
namespace: okta
baseUri: "https://comcast.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users"
operations:
- name: get-department-apps
method: GET
- type: http
namespace: jira
baseUri: "https://comcast.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
When Okta detects a suspicious login, retrieves user details, creates a ServiceNow security incident, and alerts the security team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Okta Suspicious Login Response"
description: "When Okta detects a suspicious login, retrieves user details, creates a ServiceNow security incident, and alerts the security team via Microsoft Teams."
tags:
- security
- identity
- okta
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: suspicious-login
port: 8080
tools:
- name: handle-suspicious-login
description: "Given an Okta event ID for a suspicious login, investigate and escalate."
inputParameters:
- name: event_id
in: body
type: string
description: "Okta system log event ID."
- name: user_email
in: body
type: string
description: "Affected user email."
steps:
- name: get-user
type: call
call: "okta.get-user"
with:
user_email: "{{user_email}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Suspicious login: {{user_email}}"
urgency: "2"
category: "security"
description: "User: {{get-user.name}}. Department: {{get-user.department}}. Event: {{event_id}}"
- name: alert-security
type: call
call: "teams.post-message"
with:
channel_id: "security-alerts"
text: "Suspicious login: {{user_email}} ({{get-user.department}}). ServiceNow: {{create-incident.number}}"
consumes:
- type: http
namespace: okta
baseUri: "https://comcast.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users/{{user_email}}"
operations:
- name: get-user
method: GET
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Retrieves Okta users with privileged group assignments for a quarterly access review and posts the report to SharePoint for compliance records.
naftiko: "0.5"
info:
label: "Okta User Access Review"
description: "Retrieves Okta users with privileged group assignments for a quarterly access review and posts the report to SharePoint for compliance records."
tags:
- identity
- security
- okta
- sharepoint
- access-management
capability:
exposes:
- type: mcp
namespace: identity-ops
port: 8080
tools:
- name: run-access-review
description: "Given an Okta group ID, retrieve all active group members and their application assignments, then upload the access review report to SharePoint."
inputParameters:
- name: group_id
in: body
type: string
description: "The Okta group ID to review for privileged access."
- name: sharepoint_site_id
in: body
type: string
description: "The SharePoint site ID where the access review report should be uploaded."
steps:
- name: get-group-members
type: call
call: "okta.get-group-members"
with:
groupId: "{{group_id}}"
- name: upload-report
type: call
call: "sharepoint.create-file"
with:
siteId: "{{sharepoint_site_id}}"
fileName: "access-review-{{group_id}}.json"
content: "{{get-group-members.members}}"
consumes:
- type: http
namespace: okta
baseUri: "https://comcast.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: group-members
path: "/groups/{{groupId}}/users"
inputParameters:
- name: groupId
in: path
operations:
- name: get-group-members
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/sites/{{siteId}}/drive/root/children"
inputParameters:
- name: siteId
in: path
operations:
- name: create-file
method: POST
Lists all applications assigned to an Okta user at Comcast, including app name, status, and last sign-on time.
naftiko: "0.5"
info:
label: "Okta User Application List"
description: "Lists all applications assigned to an Okta user at Comcast, including app name, status, and last sign-on time."
tags:
- identity
- okta
capability:
exposes:
- type: mcp
namespace: user-apps
port: 8080
tools:
- name: list-user-apps
description: "Given an Okta user email, return the list of assigned applications."
inputParameters:
- name: user_email
in: body
type: string
description: "Okta user email address."
call: "okta.list-apps"
with:
user_email: "{{user_email}}"
outputParameters:
- name: app_count
type: number
mapping: "$.length"
- name: apps
type: string
mapping: "$.apps"
consumes:
- type: http
namespace: okta
baseUri: "https://comcast.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: appLinks
path: "/users/{{user_email}}/appLinks"
inputParameters:
- name: user_email
in: path
operations:
- name: list-apps
method: GET
Looks up the current on-call engineer for a specified PagerDuty escalation policy at Comcast.
naftiko: "0.5"
info:
label: "PagerDuty On-Call Engineer Lookup"
description: "Looks up the current on-call engineer for a specified PagerDuty escalation policy at Comcast."
tags:
- incident-management
- pagerduty
capability:
exposes:
- type: mcp
namespace: oncall-lookup
port: 8080
tools:
- name: get-oncall
description: "Given a PagerDuty escalation policy ID, return the current on-call engineer name and contact."
inputParameters:
- name: policy_id
in: body
type: string
description: "PagerDuty escalation policy ID."
call: "pagerduty.get-oncall"
with:
policy_id: "{{policy_id}}"
outputParameters:
- name: engineer_name
type: string
mapping: "$.oncalls[0].user.name"
- name: email
type: string
mapping: "$.oncalls[0].user.email"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: oncalls
path: "/oncalls"
inputParameters:
- name: policy_id
in: query
operations:
- name: get-oncall
method: GET
After a PagerDuty incident resolves, retrieves the timeline, creates a Confluence postmortem page, and shares the link via Microsoft Teams.
naftiko: "0.5"
info:
label: "PagerDuty Postmortem Generator"
description: "After a PagerDuty incident resolves, retrieves the timeline, creates a Confluence postmortem page, and shares the link via Microsoft Teams."
tags:
- sre
- postmortem
- pagerduty
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: postmortem
port: 8080
tools:
- name: generate-postmortem
description: "Given a PagerDuty incident ID, create a postmortem document."
inputParameters:
- name: incident_id
in: body
type: string
description: "PagerDuty incident ID."
steps:
- name: get-incident
type: call
call: "pagerduty.get-incident"
with:
incident_id: "{{incident_id}}"
- name: create-page
type: call
call: "confluence.create-page"
with:
space_key: "SRE"
title: "Postmortem: {{get-incident.title}}"
content: "Duration: {{get-incident.duration}}. Service: {{get-incident.service_name}}"
- name: notify-sre
type: call
call: "teams.post-message"
with:
channel_id: "sre-team"
text: "Postmortem: {{get-incident.title}}. Confluence: {{create-page.url}}"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents/{{incident_id}}"
operations:
- name: get-incident
method: GET
- type: http
namespace: confluence
baseUri: "https://comcast.atlassian.net/wiki/api/v2"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/pages"
operations:
- name: create-page
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Monitors the Peacock content recommendation ML pipeline via Datadog, creates a Jira ticket when accuracy drops, and notifies the ML team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Peacock Content Recommendation Pipeline Monitor"
description: "Monitors the Peacock content recommendation ML pipeline via Datadog, creates a Jira ticket when accuracy drops, and notifies the ML team via Microsoft Teams."
tags:
- streaming
- ml-ops
- datadog
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: ml-pipeline
port: 8080
tools:
- name: handle-recommendation-alert
description: "Given a Datadog alert for recommendation pipeline degradation, investigate and escalate."
inputParameters:
- name: alert_id
in: body
type: string
description: "Datadog alert ID."
- name: pipeline_name
in: body
type: string
description: "ML pipeline name."
steps:
- name: get-metrics
type: call
call: "datadog.get-monitor"
with:
alert_id: "{{alert_id}}"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project: "MLOPS"
summary: "Recommendation accuracy drop: {{pipeline_name}}"
description: "{{get-metrics.message}}"
- name: notify-ml-team
type: call
call: "teams.post-message"
with:
channel_id: "ml-engineering"
text: "Recommendation pipeline alert: {{pipeline_name}}. Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor/{{alert_id}}"
operations:
- name: get-monitor
method: GET
- type: http
namespace: jira
baseUri: "https://comcast.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Triggers a Power BI dataset refresh for the subscriber analytics dashboard after Snowflake pipeline completion and notifies the analytics team in Teams.
naftiko: "0.5"
info:
label: "Power BI Dashboard Refresh Trigger"
description: "Triggers a Power BI dataset refresh for the subscriber analytics dashboard after Snowflake pipeline completion and notifies the analytics team in Teams."
tags:
- data
- analytics
- power-bi
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: bi-reporting
port: 8080
tools:
- name: trigger-dashboard-refresh
description: "Given a Power BI workspace ID and dataset ID, trigger a dataset refresh and notify the analytics team in Teams when complete."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Power BI workspace (group) ID."
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID to refresh."
steps:
- name: trigger-refresh
type: call
call: "powerbi.refresh-dataset"
with:
workspaceId: "{{workspace_id}}"
datasetId: "{{dataset_id}}"
- name: notify-analytics
type: call
call: "msteams.post-channel-message"
with:
channelId: "analytics-team"
message: "Power BI dataset {{dataset_id}} refresh triggered in workspace {{workspace_id}}."
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{workspaceId}}/datasets/{{datasetId}}/refreshes"
inputParameters:
- name: workspaceId
in: path
- name: datasetId
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
in: path
operations:
- name: post-channel-message
method: POST
Checks the last refresh status and duration for a Power BI dataset used in Comcast operational dashboards.
naftiko: "0.5"
info:
label: "Power BI Dataset Refresh Status"
description: "Checks the last refresh status and duration for a Power BI dataset used in Comcast operational dashboards."
tags:
- analytics
- dashboards
- power-bi
capability:
exposes:
- type: mcp
namespace: bi-refresh
port: 8080
tools:
- name: get-refresh-status
description: "Given a Power BI dataset ID, return the last refresh status, time, and duration."
inputParameters:
- name: dataset_id
in: body
type: string
description: "Power BI dataset ID."
call: "powerbi.get-refresh-history"
with:
dataset_id: "{{dataset_id}}"
outputParameters:
- name: status
type: string
mapping: "$.value[0].status"
- name: end_time
type: string
mapping: "$.value[0].endTime"
- name: duration_sec
type: number
mapping: "$.value[0].durationSeconds"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: refreshes
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: get-refresh-history
method: GET
Refreshes the subscriber analytics Power BI dashboard, verifies completion, and posts the status to the analytics Teams channel.
naftiko: "0.5"
info:
label: "Power BI Subscriber Dashboard Auto-Refresh"
description: "Refreshes the subscriber analytics Power BI dashboard, verifies completion, and posts the status to the analytics Teams channel."
tags:
- analytics
- dashboards
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: dashboard-refresh
port: 8080
tools:
- name: refresh-subscriber-dashboard
description: "Given a Power BI dataset ID, trigger refresh and report status."
inputParameters:
- name: dataset_id
in: body
type: string
description: "Power BI dataset ID."
steps:
- name: trigger-refresh
type: call
call: "powerbi.trigger-refresh"
with:
dataset_id: "{{dataset_id}}"
- name: notify-analytics
type: call
call: "teams.post-message"
with:
channel_id: "analytics-team"
text: "Subscriber dashboard refreshed. Dataset: {{dataset_id}}"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
operations:
- name: trigger-refresh
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Generates SailPoint identity governance reports, stores results in Snowflake, and posts summary to the security governance Teams channel.
naftiko: "0.5"
info:
label: "SailPoint Identity Governance Reporter"
description: "Generates SailPoint identity governance reports, stores results in Snowflake, and posts summary to the security governance Teams channel."
tags:
- security
- identity-governance
- sailpoint
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: identity-governance
port: 8080
tools:
- name: generate-governance-report
description: "Given a governance campaign ID, generate the compliance report."
inputParameters:
- name: campaign_id
in: body
type: string
description: "SailPoint certification campaign ID."
steps:
- name: get-campaign
type: call
call: "sailpoint.get-campaign"
with:
campaign_id: "{{campaign_id}}"
- name: store-results
type: call
call: "snowflake.insert-governance"
with:
campaign_id: "{{campaign_id}}"
completion_pct: "{{get-campaign.completion_pct}}"
- name: notify-governance
type: call
call: "teams.post-message"
with:
channel_id: "security-governance"
text: "Governance report: {{get-campaign.name}}. Completion: {{get-campaign.completion_pct}}%. Reviewed: {{get-campaign.decisions_made}}"
consumes:
- type: http
namespace: sailpoint
baseUri: "https://comcast.api.identitynow.com/v3"
authentication:
type: bearer
token: "$secrets.sailpoint_token"
resources:
- name: campaigns
path: "/campaigns/{{campaign_id}}"
operations:
- name: get-campaign
method: GET
- type: http
namespace: snowflake
baseUri: "https://comcast.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: insert-governance
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Retrieves Comcast Business opportunity pipeline from Salesforce, calculates weighted forecast, and posts the weekly summary to the sales leadership Teams channel.
naftiko: "0.5"
info:
label: "Salesforce Business Opportunity Pipeline"
description: "Retrieves Comcast Business opportunity pipeline from Salesforce, calculates weighted forecast, and posts the weekly summary to the sales leadership Teams channel."
tags:
- sales
- crm
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sales-pipeline
port: 8080
tools:
- name: generate-pipeline-report
description: "Given a sales region, generate the opportunity pipeline report."
inputParameters:
- name: region
in: body
type: string
description: "Sales region."
steps:
- name: get-pipeline
type: call
call: "salesforce.query-opportunities"
with:
region: "{{region}}"
- name: notify-leadership
type: call
call: "teams.post-message"
with:
channel_id: "sales-leadership"
text: "Pipeline: {{region}}. Total: ${{get-pipeline.total_value}}. Weighted: ${{get-pipeline.weighted_value}}. Deals: {{get-pipeline.deal_count}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://comcast.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/query"
operations:
- name: query-opportunities
method: GET
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
When a Salesforce service case is escalated by a high-value subscriber, creates a ServiceNow priority ticket and notifies the enterprise support team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Salesforce Case Escalation Handler"
description: "When a Salesforce service case is escalated by a high-value subscriber, creates a ServiceNow priority ticket and notifies the enterprise support team in Microsoft Teams."
tags:
- customer-support
- crm
- salesforce
- servicenow
- microsoft-teams
- escalation
capability:
exposes:
- type: mcp
namespace: support-ops
port: 8080
tools:
- name: handle-case-escalation
description: "Given a Salesforce case ID, retrieve case details and escalate to ServiceNow with a Teams notification to the enterprise support team."
inputParameters:
- name: case_id
in: body
type: string
description: "The Salesforce case record ID."
steps:
- name: get-case
type: call
call: "salesforce.get-case"
with:
caseId: "{{case_id}}"
- name: create-snow-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Escalated case: {{get-case.Subject}}"
description: "Salesforce Case: {{case_id}}\nAccount: {{get-case.AccountName}}\nDescription: {{get-case.Description}}"
urgency: "2"
- name: notify-enterprise-support
type: call
call: "msteams.post-channel-message"
with:
channelId: "enterprise-support"
message: "Case escalation: {{get-case.Subject}} | Account: {{get-case.AccountName}} | ServiceNow: {{create-snow-ticket.number}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://comcast.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case/{{caseId}}"
inputParameters:
- name: caseId
in: path
operations:
- name: get-case
method: GET
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
in: path
operations:
- name: post-channel-message
method: POST
Identifies expiring enterprise contracts in Salesforce, creates Jira renewal tasks, and notifies account managers via Microsoft Teams.
naftiko: "0.5"
info:
label: "Salesforce Contract Renewal Workflow"
description: "Identifies expiring enterprise contracts in Salesforce, creates Jira renewal tasks, and notifies account managers via Microsoft Teams."
tags:
- sales
- contracts
- salesforce
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: contract-renewal
port: 8080
tools:
- name: process-renewal
description: "Given a Salesforce contract ID nearing expiry, initiate the renewal workflow."
inputParameters:
- name: contract_id
in: body
type: string
description: "Salesforce contract ID."
steps:
- name: get-contract
type: call
call: "salesforce.get-contract"
with:
contract_id: "{{contract_id}}"
- name: create-task
type: call
call: "jira.create-issue"
with:
project: "SALES"
summary: "Renewal: {{get-contract.account_name}} — {{get-contract.end_date}}"
description: "Annual value: ${{get-contract.annual_value}}"
- name: notify-am
type: call
call: "teams.post-message"
with:
channel_id: "account-management"
text: "Renewal due: {{get-contract.account_name}}. Expires: {{get-contract.end_date}}. Value: ${{get-contract.annual_value}}. Jira: {{create-task.key}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://comcast.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contracts
path: "/sobjects/Contract/{{contract_id}}"
operations:
- name: get-contract
method: GET
- type: http
namespace: jira
baseUri: "https://comcast.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
When a new lead is created in Salesforce, enriches the record with ZoomInfo firmographic data and updates the account owner based on territory rules.
naftiko: "0.5"
info:
label: "Salesforce Lead Enrichment"
description: "When a new lead is created in Salesforce, enriches the record with ZoomInfo firmographic data and updates the account owner based on territory rules."
tags:
- crm
- sales
- salesforce
- zoominfo
- lead-management
capability:
exposes:
- type: mcp
namespace: crm-leads
port: 8080
tools:
- name: enrich-lead
description: "Given a Salesforce lead ID, fetch firmographic data from ZoomInfo and update the lead record with enriched company details and revenue information."
inputParameters:
- name: lead_id
in: body
type: string
description: "The Salesforce lead record ID."
steps:
- name: get-lead
type: call
call: "salesforce.get-lead"
with:
lead_id: "{{lead_id}}"
- name: enrich-company
type: call
call: "zoominfo.search-company"
with:
companyName: "{{get-lead.Company}}"
- name: update-lead
type: call
call: "salesforce-update.update-lead"
with:
lead_id: "{{lead_id}}"
AnnualRevenue: "{{enrich-company.revenue}}"
NumberOfEmployees: "{{enrich-company.employeeCount}}"
Industry: "{{enrich-company.industry}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://comcast.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: leads
path: "/sobjects/Lead/{{lead_id}}"
inputParameters:
- name: lead_id
in: path
operations:
- name: get-lead
method: GET
- type: http
namespace: zoominfo
baseUri: "https://api.zoominfo.com/search"
authentication:
type: bearer
token: "$secrets.zoominfo_token"
resources:
- name: companies
path: "/company"
operations:
- name: search-company
method: POST
- type: http
namespace: salesforce-update
baseUri: "https://comcast.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: leads
path: "/sobjects/Lead/{{lead_id}}"
inputParameters:
- name: lead_id
in: path
operations:
- name: update-lead
method: PATCH
When a Salesforce NPS survey returns a detractor score, retrieves subscriber details, creates a Jira follow-up task, and notifies the customer experience team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Salesforce NPS Detractor Response"
description: "When a Salesforce NPS survey returns a detractor score, retrieves subscriber details, creates a Jira follow-up task, and notifies the customer experience team via Microsoft Teams."
tags:
- customer-experience
- nps
- salesforce
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: nps-response
port: 8080
tools:
- name: handle-detractor
description: "Given a Salesforce NPS survey ID with detractor score, initiate follow-up."
inputParameters:
- name: survey_id
in: body
type: string
description: "Salesforce survey response ID."
- name: account_id
in: body
type: string
description: "Subscriber account ID."
steps:
- name: get-account
type: call
call: "salesforce.get-account"
with:
account_id: "{{account_id}}"
- name: create-followup
type: call
call: "jira.create-issue"
with:
project: "CX"
summary: "NPS detractor: {{get-account.Name}}"
description: "Survey: {{survey_id}}. Service tier: {{get-account.ServiceTier__c}}"
- name: notify-cx
type: call
call: "teams.post-message"
with:
channel_id: "customer-experience"
text: "NPS detractor: {{get-account.Name}} ({{account_id}}). Jira: {{create-followup.key}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://comcast.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/query"
operations:
- name: get-account
method: GET
- type: http
namespace: jira
baseUri: "https://comcast.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Retrieves completed NPS survey responses from Salesforce and posts a weekly satisfaction summary to the customer success Teams channel.
naftiko: "0.5"
info:
label: "Salesforce NPS Score Campaign Sync"
description: "Retrieves completed NPS survey responses from Salesforce and posts a weekly satisfaction summary to the customer success Teams channel."
tags:
- crm
- customer-success
- salesforce
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: cx-reporting
port: 8080
tools:
- name: publish-nps-digest
description: "Given a date range, retrieve NPS survey results from Salesforce and post a satisfaction score summary to the customer success Teams channel."
inputParameters:
- name: start_date
in: body
type: string
description: "Report start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "Report end date in YYYY-MM-DD format."
steps:
- name: get-nps-results
type: call
call: "salesforce.get-nps-surveys"
with:
startDate: "{{start_date}}"
endDate: "{{end_date}}"
- name: post-digest
type: call
call: "msteams.post-channel-message"
with:
channelId: "customer-success"
message: "NPS digest ({{start_date}} to {{end_date}}): Score={{get-nps-results.npsScore}}, Promoters={{get-nps-results.promoters}}, Detractors={{get-nps-results.detractors}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://comcast.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: nps-surveys
path: "/query"
inputParameters:
- name: startDate
in: query
- name: endDate
in: query
operations:
- name: get-nps-surveys
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
in: path
operations:
- name: post-channel-message
method: POST
Retrieves the current Xfinity service tier, bundle details, and contract end date for a subscriber from Salesforce.
naftiko: "0.5"
info:
label: "Salesforce Subscriber Service Tier Lookup"
description: "Retrieves the current Xfinity service tier, bundle details, and contract end date for a subscriber from Salesforce."
tags:
- crm
- subscriber
- salesforce
capability:
exposes:
- type: mcp
namespace: subscriber-tiers
port: 8080
tools:
- name: get-service-tier
description: "Given a Comcast subscriber account ID, return service tier, bundle name, and contract end date."
inputParameters:
- name: account_id
in: body
type: string
description: "Comcast subscriber account ID."
call: "salesforce.get-subscriber"
with:
account_id: "{{account_id}}"
outputParameters:
- name: service_tier
type: string
mapping: "$.records[0].ServiceTier__c"
- name: bundle_name
type: string
mapping: "$.records[0].BundleName__c"
- name: contract_end
type: string
mapping: "$.records[0].ContractEnd__c"
consumes:
- type: http
namespace: salesforce
baseUri: "https://comcast.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/query"
inputParameters:
- name: account_id
in: query
operations:
- name: get-subscriber
method: GET
When an expense report is submitted in SAP Concur, validates the amount against policy and routes the approval request to the manager via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Concur Expense Report Approval"
description: "When an expense report is submitted in SAP Concur, validates the amount against policy and routes the approval request to the manager via Microsoft Teams."
tags:
- finance
- expense-management
- sap-concur
- microsoft-teams
- approval
capability:
exposes:
- type: mcp
namespace: expense-approval
port: 8080
tools:
- name: approve-expense-report
description: "Given an SAP Concur expense report ID and manager email, retrieve report details and send an approval card to the manager in Teams."
inputParameters:
- name: report_id
in: body
type: string
description: "The SAP Concur expense report ID."
- name: manager_email
in: body
type: string
description: "The Microsoft Teams UPN of the approving manager."
steps:
- name: get-report
type: call
call: "concur.get-expense-report"
with:
reportId: "{{report_id}}"
- name: send-approval
type: call
call: "msteams.post-message"
with:
recipient: "{{manager_email}}"
message: "Expense approval needed: Report {{report_id}} for {{get-report.Total}} {{get-report.CurrencyCode}} submitted by {{get-report.OwnerName}}."
consumes:
- type: http
namespace: concur
baseUri: "https://www.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: expense-reports
path: "/expense/reports/{{reportId}}"
inputParameters:
- name: reportId
in: path
operations:
- name: get-expense-report
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/chats/messages"
operations:
- name: post-message
method: POST
Retrieves the approval status and total amount of a SAP Concur expense report at Comcast.
naftiko: "0.5"
info:
label: "SAP Concur Expense Status Lookup"
description: "Retrieves the approval status and total amount of a SAP Concur expense report at Comcast."
tags:
- finance
- expenses
- sap-concur
capability:
exposes:
- type: mcp
namespace: expense-status
port: 8080
tools:
- name: get-expense-report
description: "Given a Concur expense report ID, return its status, total amount, and approver name."
inputParameters:
- name: report_id
in: body
type: string
description: "SAP Concur expense report ID."
call: "concur.get-report"
with:
report_id: "{{report_id}}"
outputParameters:
- name: status
type: string
mapping: "$.ApprovalStatusName"
- name: total
type: number
mapping: "$.Total"
- name: approver
type: string
mapping: "$.ApproverName"
consumes:
- type: http
namespace: concur
baseUri: "https://us.api.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: reports
path: "/expense/reports/{{report_id}}"
inputParameters:
- name: report_id
in: path
operations:
- name: get-report
method: GET
When a SAP Concur expense report violates policy, retrieves violation details, creates a Jira compliance ticket, and notifies the finance team via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Concur Policy Violation Handler"
description: "When a SAP Concur expense report violates policy, retrieves violation details, creates a Jira compliance ticket, and notifies the finance team via Microsoft Teams."
tags:
- finance
- compliance
- sap-concur
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: expense-compliance
port: 8080
tools:
- name: handle-policy-violation
description: "Given a Concur report ID with policy violations, create tracking and notify."
inputParameters:
- name: report_id
in: body
type: string
description: "SAP Concur expense report ID."
steps:
- name: get-report
type: call
call: "concur.get-report"
with:
report_id: "{{report_id}}"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project: "FIN"
summary: "Expense violation: {{get-report.employee_name}} — ${{get-report.total}}"
description: "Violation: {{get-report.violation_reason}}"
- name: notify-finance
type: call
call: "teams.post-message"
with:
channel_id: "finance-compliance"
text: "Expense violation: {{get-report.employee_name}} (${{get-report.total}}). Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: concur
baseUri: "https://us.api.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: reports
path: "/expense/reports/{{report_id}}"
operations:
- name: get-report
method: GET
- type: http
namespace: jira
baseUri: "https://comcast.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Reconciles ServiceNow CMDB asset inventory against discovered assets, creates Jira tickets for unmatched items, and posts the reconciliation summary to Microsoft Teams.
naftiko: "0.5"
info:
label: "ServiceNow Asset Discovery Reconciliation"
description: "Reconciles ServiceNow CMDB asset inventory against discovered assets, creates Jira tickets for unmatched items, and posts the reconciliation summary to Microsoft Teams."
tags:
- itsm
- asset-management
- servicenow
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: asset-reconciliation
port: 8080
tools:
- name: reconcile-assets
description: "Given a ServiceNow discovery run ID, reconcile discovered vs. registered assets."
inputParameters:
- name: discovery_run_id
in: body
type: string
description: "ServiceNow discovery run ID."
steps:
- name: get-discovery
type: call
call: "servicenow.get-discovery-results"
with:
run_id: "{{discovery_run_id}}"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project: "ITAM"
summary: "Asset reconciliation: {{get-discovery.unmatched_count}} unmatched"
description: "Discovered: {{get-discovery.discovered_count}}. Matched: {{get-discovery.matched_count}}. Unmatched: {{get-discovery.unmatched_count}}"
- name: notify-team
type: call
call: "teams.post-message"
with:
channel_id: "it-asset-management"
text: "Asset reconciliation: {{get-discovery.unmatched_count}} unmatched devices found. Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: discovery
path: "/table/discovery_status/{{run_id}}"
operations:
- name: get-discovery-results
method: GET
- type: http
namespace: jira
baseUri: "https://comcast.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Creates a ServiceNow standard change request for a planned network maintenance window, associates affected CIs, and notifies the NOC team in Teams.
naftiko: "0.5"
info:
label: "ServiceNow Change Request for Network Maintenance"
description: "Creates a ServiceNow standard change request for a planned network maintenance window, associates affected CIs, and notifies the NOC team in Teams."
tags:
- itsm
- change-management
- servicenow
- microsoft-teams
- network
capability:
exposes:
- type: mcp
namespace: change-management
port: 8080
tools:
- name: open-network-change
description: "Given a maintenance description, affected network CIs, and planned time window, create a ServiceNow change request and notify the NOC team in Teams."
inputParameters:
- name: change_description
in: body
type: string
description: "Description of the planned network maintenance activity."
- name: affected_ci
in: body
type: string
description: "Comma-separated list of affected network configuration items."
- name: planned_start
in: body
type: string
description: "Planned maintenance start in ISO 8601 format."
- name: planned_end
in: body
type: string
description: "Planned maintenance end in ISO 8601 format."
steps:
- name: create-change
type: call
call: "servicenow.create-change"
with:
short_description: "{{change_description}}"
type: "standard"
start_date: "{{planned_start}}"
end_date: "{{planned_end}}"
cmdb_ci: "{{affected_ci}}"
- name: notify-noc
type: call
call: "msteams.post-channel-message"
with:
channelId: "noc-team"
message: "Network change {{create-change.number}} scheduled: {{change_description}} | Window: {{planned_start}} to {{planned_end}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: change-requests
path: "/table/change_request"
operations:
- name: create-change
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
in: path
operations:
- name: post-channel-message
method: POST
Validates ServiceNow CMDB configuration item relationships, identifies orphaned CIs, creates Jira cleanup tasks, and notifies the CMDB team via Microsoft Teams.
naftiko: "0.5"
info:
label: "ServiceNow CMDB CI Relationship Validator"
description: "Validates ServiceNow CMDB configuration item relationships, identifies orphaned CIs, creates Jira cleanup tasks, and notifies the CMDB team via Microsoft Teams."
tags:
- itsm
- cmdb
- servicenow
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: cmdb-validation
port: 8080
tools:
- name: validate-ci-relationships
description: "Given a CI class, validate relationships and identify orphans."
inputParameters:
- name: ci_class
in: body
type: string
description: "ServiceNow CI class name."
steps:
- name: get-orphans
type: call
call: "servicenow.query-orphan-cis"
with:
ci_class: "{{ci_class}}"
- name: create-cleanup
type: call
call: "jira.create-issue"
with:
project: "CMDB"
summary: "Orphan CIs: {{ci_class}} — {{get-orphans.count}} found"
description: "Class: {{ci_class}}. Orphan count: {{get-orphans.count}}"
- name: notify-team
type: call
call: "teams.post-message"
with:
channel_id: "cmdb-team"
text: "CMDB validation: {{ci_class}}. {{get-orphans.count}} orphan CIs. Jira: {{create-cleanup.key}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: cmdb
path: "/table/{{ci_class}}"
operations:
- name: query-orphan-cis
method: GET
- type: http
namespace: jira
baseUri: "https://comcast.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Retrieves full incident details including priority, assigned group, and resolution notes from ServiceNow.
naftiko: "0.5"
info:
label: "ServiceNow Incident Detail Lookup"
description: "Retrieves full incident details including priority, assigned group, and resolution notes from ServiceNow."
tags:
- itsm
- servicenow
capability:
exposes:
- type: mcp
namespace: incident-details
port: 8080
tools:
- name: get-incident-detail
description: "Given a ServiceNow incident number, return priority, assigned group, state, and resolution notes."
inputParameters:
- name: incident_number
in: body
type: string
description: "ServiceNow incident number."
call: "servicenow.get-incident"
with:
incident_number: "{{incident_number}}"
outputParameters:
- name: priority
type: string
mapping: "$.result.priority"
- name: assigned_to
type: string
mapping: "$.result.assigned_to"
- name: state
type: string
mapping: "$.result.state"
consumes:
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: incidents
path: "/table/incident/{{incident_number}}"
inputParameters:
- name: incident_number
in: path
operations:
- name: get-incident
method: GET
When a ServiceNow P1 incident is created, sets up a Teams bridge call, pages the on-call via PagerDuty, and posts status updates to the NOC channel.
naftiko: "0.5"
info:
label: "ServiceNow Major Incident Bridge Coordinator"
description: "When a ServiceNow P1 incident is created, sets up a Teams bridge call, pages the on-call via PagerDuty, and posts status updates to the NOC channel."
tags:
- incident-management
- servicenow
- microsoft-teams
- pagerduty
capability:
exposes:
- type: mcp
namespace: major-incident
port: 8080
tools:
- name: coordinate-major-incident
description: "Given a ServiceNow P1 incident number, set up the major incident bridge."
inputParameters:
- name: incident_number
in: body
type: string
description: "ServiceNow P1 incident number."
steps:
- name: get-incident
type: call
call: "servicenow.get-incident"
with:
incident_number: "{{incident_number}}"
- name: page-oncall
type: call
call: "pagerduty.create-incident"
with:
service_id: "noc-oncall"
title: "P1: {{get-incident.short_description}} — {{incident_number}}"
urgency: "high"
- name: post-bridge
type: call
call: "teams.post-message"
with:
channel_id: "noc-major-incidents"
text: "P1 BRIDGE: {{incident_number}} — {{get-incident.short_description}}. On-call paged. Join bridge immediately."
consumes:
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: incidents
path: "/table/incident/{{incident_number}}"
operations:
- name: get-incident
method: GET
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
When a ServiceNow incident SLA is about to breach, escalates via PagerDuty, updates the incident priority, and notifies management via Microsoft Teams.
naftiko: "0.5"
info:
label: "ServiceNow SLA Breach Escalation"
description: "When a ServiceNow incident SLA is about to breach, escalates via PagerDuty, updates the incident priority, and notifies management via Microsoft Teams."
tags:
- itsm
- sla
- servicenow
- pagerduty
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sla-escalation
port: 8080
tools:
- name: escalate-sla-breach
description: "Given a ServiceNow incident nearing SLA breach, escalate and notify."
inputParameters:
- name: incident_number
in: body
type: string
description: "ServiceNow incident number."
- name: minutes_remaining
in: body
type: number
description: "Minutes until SLA breach."
steps:
- name: get-incident
type: call
call: "servicenow.get-incident"
with:
incident_number: "{{incident_number}}"
- name: page-oncall
type: call
call: "pagerduty.create-incident"
with:
service_id: "itsm-escalation"
title: "SLA breach: {{incident_number}} in {{minutes_remaining}} min"
urgency: "high"
- name: notify-management
type: call
call: "teams.post-message"
with:
channel_id: "it-management"
text: "SLA breach imminent: {{incident_number}} — {{get-incident.short_description}}. {{minutes_remaining}} min remaining."
consumes:
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: incidents
path: "/table/incident/{{incident_number}}"
operations:
- name: get-incident
method: GET
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Queries Snowflake for content viewership metrics including total views, average watch time, and completion rate.
naftiko: "0.5"
info:
label: "Snowflake Content Viewership Query"
description: "Queries Snowflake for content viewership metrics including total views, average watch time, and completion rate."
tags:
- analytics
- content
- snowflake
capability:
exposes:
- type: mcp
namespace: content-analytics
port: 8080
tools:
- name: query-viewership
description: "Given a content ID and date range, return viewership analytics from Snowflake."
inputParameters:
- name: content_id
in: body
type: string
description: "Content identifier."
- name: date_range
in: body
type: string
description: "Date range (e.g., 2026-03-01:2026-03-27)."
call: "snowflake.run-query"
with:
content_id: "{{content_id}}"
date_range: "{{date_range}}"
outputParameters:
- name: total_views
type: number
mapping: "$.data[0].total_views"
- name: avg_watch_min
type: number
mapping: "$.data[0].avg_watch_minutes"
- name: completion_rate
type: number
mapping: "$.data[0].completion_rate"
consumes:
- type: http
namespace: snowflake
baseUri: "https://comcast.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
When a Snowflake data pipeline fails, retrieves error details, creates a Jira bug for the data engineering team, and posts the failure to the data-ops Teams channel.
naftiko: "0.5"
info:
label: "Snowflake Data Pipeline Failure Handler"
description: "When a Snowflake data pipeline fails, retrieves error details, creates a Jira bug for the data engineering team, and posts the failure to the data-ops Teams channel."
tags:
- data-engineering
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: data-pipeline-ops
port: 8080
tools:
- name: handle-pipeline-failure
description: "Given a Snowflake task name and error code, create a tracking ticket and notify."
inputParameters:
- name: task_name
in: body
type: string
description: "Snowflake task name."
- name: error_code
in: body
type: string
description: "Error code from the failed run."
steps:
- name: get-task-history
type: call
call: "snowflake.get-task-history"
with:
task_name: "{{task_name}}"
- name: create-bug
type: call
call: "jira.create-issue"
with:
project: "DATA"
summary: "Pipeline failure: {{task_name}}"
issue_type: "Bug"
description: "Error: {{error_code}}. Last success: {{get-task-history.last_success}}"
- name: notify-data-ops
type: call
call: "teams.post-message"
with:
channel_id: "data-ops"
text: "Pipeline failed: {{task_name}} ({{error_code}}). Jira: {{create-bug.key}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://comcast.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: tasks
path: "/statements"
operations:
- name: get-task-history
method: POST
- type: http
namespace: jira
baseUri: "https://comcast.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Runs data quality checks against Snowflake production tables and creates ServiceNow incidents for any datasets that fail freshness or completeness thresholds.
naftiko: "0.5"
info:
label: "Snowflake Data Quality Monitor"
description: "Runs data quality checks against Snowflake production tables and creates ServiceNow incidents for any datasets that fail freshness or completeness thresholds."
tags:
- data
- analytics
- snowflake
- servicenow
- data-quality
capability:
exposes:
- type: mcp
namespace: data-quality
port: 8080
tools:
- name: check-data-quality
description: "Given a Snowflake table name and freshness threshold, validate table row count and last updated timestamp, and open a ServiceNow ticket if quality checks fail."
inputParameters:
- name: table_name
in: body
type: string
description: "Fully qualified Snowflake table name in DATABASE.SCHEMA.TABLE format."
- name: freshness_hours
in: body
type: integer
description: "Maximum acceptable age in hours for the table's data."
steps:
- name: get-table-metadata
type: call
call: "snowflake.get-table-info"
with:
tableName: "{{table_name}}"
- name: create-dq-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Data quality failure: {{table_name}}"
category: "data_pipeline"
description: "Table {{table_name}} failed freshness check. Last updated: {{get-table-metadata.last_altered}}. Required: within {{freshness_hours}} hours."
consumes:
- type: http
namespace: snowflake
baseUri: "https://comcast.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: tables
path: "/databases/tables"
inputParameters:
- name: tableName
in: query
operations:
- name: get-table-info
method: GET
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
Monitors subscriber data quality in Snowflake, identifies anomalies, creates Jira tickets for the data team, and posts alerts to the data-ops Teams channel.
naftiko: "0.5"
info:
label: "Snowflake Subscriber Data Quality Monitor"
description: "Monitors subscriber data quality in Snowflake, identifies anomalies, creates Jira tickets for the data team, and posts alerts to the data-ops Teams channel."
tags:
- data-quality
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: data-quality
port: 8080
tools:
- name: check-data-quality
description: "Given a Snowflake table name, run quality checks and report anomalies."
inputParameters:
- name: table_name
in: body
type: string
description: "Snowflake table name."
steps:
- name: run-checks
type: call
call: "snowflake.run-quality-checks"
with:
table_name: "{{table_name}}"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project: "DATA"
summary: "Data quality: {{table_name}} — {{run-checks.anomaly_count}} anomalies"
description: "Null rate: {{run-checks.null_rate}}%. Duplicate rate: {{run-checks.duplicate_rate}}%"
- name: notify-team
type: call
call: "teams.post-message"
with:
channel_id: "data-ops"
text: "Data quality: {{table_name}}. {{run-checks.anomaly_count}} anomalies. Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://comcast.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-quality-checks
method: POST
- type: http
namespace: jira
baseUri: "https://comcast.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
When Splunk detects potential account fraud, retrieves subscriber details from Salesforce, creates a ServiceNow security incident, and notifies the fraud team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Splunk Fraud Detection Alert Handler"
description: "When Splunk detects potential account fraud, retrieves subscriber details from Salesforce, creates a ServiceNow security incident, and notifies the fraud team via Microsoft Teams."
tags:
- security
- fraud
- splunk
- salesforce
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: fraud-detection
port: 8080
tools:
- name: handle-fraud-alert
description: "Given a Splunk alert for potential fraud, investigate and escalate."
inputParameters:
- name: search_id
in: body
type: string
description: "Splunk search job ID."
- name: account_id
in: body
type: string
description: "Affected subscriber account ID."
steps:
- name: get-account
type: call
call: "salesforce.get-account"
with:
account_id: "{{account_id}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Potential fraud: {{account_id}} — {{get-account.Name}}"
urgency: "1"
category: "security"
- name: notify-fraud-team
type: call
call: "teams.post-message"
with:
channel_id: "fraud-investigations"
text: "Fraud alert: {{get-account.Name}} ({{account_id}}). Splunk: {{search_id}}. ServiceNow: {{create-incident.number}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://comcast.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/query"
operations:
- name: get-account
method: GET
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
When Splunk detects a log volume anomaly exceeding a threshold, creates a Jira bug for the owning team and posts an alert to the engineering Teams channel.
naftiko: "0.5"
info:
label: "Splunk Log Anomaly to Jira"
description: "When Splunk detects a log volume anomaly exceeding a threshold, creates a Jira bug for the owning team and posts an alert to the engineering Teams channel."
tags:
- observability
- devops
- splunk
- jira
- microsoft-teams
- monitoring
capability:
exposes:
- type: mcp
namespace: log-monitoring
port: 8080
tools:
- name: handle-log-anomaly
description: "Given a Splunk alert and affected service name, create a Jira bug and notify the engineering Teams channel with log anomaly details."
inputParameters:
- name: service_name
in: body
type: string
description: "The service or application generating the anomalous log volume."
- name: alert_count
in: body
type: integer
description: "Number of error events detected in the anomaly window."
- name: time_window
in: body
type: string
description: "The time window of the anomaly, e.g. last 15 minutes."
steps:
- name: create-jira-bug
type: call
call: "jira.create-issue"
with:
projectKey: "OPS"
issuetype: "Bug"
summary: "Log anomaly: {{service_name}} — {{alert_count}} errors in {{time_window}}"
description: "Service: {{service_name}}\nError count: {{alert_count}}\nWindow: {{time_window}}"
- name: alert-engineering
type: call
call: "msteams.post-channel-message"
with:
channelId: "engineering-alerts"
message: "Splunk anomaly: {{service_name}} — {{alert_count}} errors in {{time_window}} | Jira: {{create-jira-bug.key}}"
consumes:
- type: http
namespace: jira
baseUri: "https://comcast.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
in: path
operations:
- name: post-channel-message
method: POST
Searches Splunk for network events matching a given CMTS node ID to aid in troubleshooting cable network issues.
naftiko: "0.5"
info:
label: "Splunk Network Event Search"
description: "Searches Splunk for network events matching a given CMTS node ID to aid in troubleshooting cable network issues."
tags:
- network
- splunk
capability:
exposes:
- type: mcp
namespace: network-events
port: 8080
tools:
- name: search-network-events
description: "Given a CMTS node ID, search Splunk for recent events and return the count and most common event type."
inputParameters:
- name: cmts_node_id
in: body
type: string
description: "CMTS node identifier."
call: "splunk.search"
with:
cmts_node_id: "{{cmts_node_id}}"
outputParameters:
- name: event_count
type: number
mapping: "$.results.event_count"
- name: top_event_type
type: string
mapping: "$.results.top_type"
consumes:
- type: http
namespace: splunk
baseUri: "https://splunk.comcast.com:8089"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search
path: "/services/search/jobs/export"
inputParameters:
- name: cmts_node_id
in: query
operations:
- name: search
method: GET
Queries Splunk for security events matching a given source IP or user, and posts the event summary to the security operations Teams channel for investigation.
naftiko: "0.5"
info:
label: "Splunk Security Event Investigation"
description: "Queries Splunk for security events matching a given source IP or user, and posts the event summary to the security operations Teams channel for investigation."
tags:
- security
- observability
- splunk
- microsoft-teams
- investigation
capability:
exposes:
- type: mcp
namespace: security-investigation
port: 8080
tools:
- name: investigate-security-event
description: "Given a source IP address or username, query Splunk for recent security events and post a summary of findings to the security operations Teams channel."
inputParameters:
- name: search_term
in: body
type: string
description: "The IP address or username to search for in Splunk security events."
- name: lookback_hours
in: body
type: integer
description: "Number of hours to look back in Splunk for events."
steps:
- name: search-splunk
type: call
call: "splunk.run-search"
with:
search: "index=security (src_ip={{search_term}} OR user={{search_term}}) earliest=-{{lookback_hours}}h"
- name: post-findings
type: call
call: "msteams.post-channel-message"
with:
channelId: "security-operations"
message: "Security investigation for {{search_term}} (last {{lookback_hours}}h): {{search-splunk.event_count}} events found. Top events: {{search-splunk.top_events}}"
consumes:
- type: http
namespace: splunk
baseUri: "https://splunk.comcast.com:8089"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search-jobs
path: "/services/search/jobs"
operations:
- name: run-search
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/channels/{{channelId}}/messages"
inputParameters:
- name: channelId
in: path
operations:
- name: post-channel-message
method: POST
Enriches Splunk security alerts with CrowdStrike threat intelligence, creates a ServiceNow security incident, and notifies the SOC via Microsoft Teams.
naftiko: "0.5"
info:
label: "Splunk Security Incident Enrichment"
description: "Enriches Splunk security alerts with CrowdStrike threat intelligence, creates a ServiceNow security incident, and notifies the SOC via Microsoft Teams."
tags:
- security
- siem
- splunk
- crowdstrike
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: security-enrichment
port: 8080
tools:
- name: enrich-security-alert
description: "Given a Splunk alert and indicator, enrich with threat intel and escalate."
inputParameters:
- name: search_id
in: body
type: string
description: "Splunk search ID."
- name: indicator
in: body
type: string
description: "Threat indicator."
steps:
- name: get-results
type: call
call: "splunk.get-results"
with:
search_id: "{{search_id}}"
- name: check-intel
type: call
call: "crowdstrike.check-indicator"
with:
indicator: "{{indicator}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Threat: {{indicator}} — {{check-intel.verdict}}"
urgency: "1"
- name: alert-soc
type: call
call: "teams.post-message"
with:
channel_id: "soc-alerts"
text: "Threat: {{indicator}}. Verdict: {{check-intel.verdict}}. ServiceNow: {{create-incident.number}}"
consumes:
- type: http
namespace: splunk
baseUri: "https://splunk.comcast.com:8089"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search
path: "/services/search/jobs/{{search_id}}/results"
operations:
- name: get-results
method: GET
- type: http
namespace: crowdstrike
baseUri: "https://api.crowdstrike.com"
authentication:
type: bearer
token: "$secrets.crowdstrike_token"
resources:
- name: intel
path: "/intel/combined/indicators/v1"
operations:
- name: check-indicator
method: GET
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Monitors SSL certificate expiry events in Splunk, creates ServiceNow change requests for renewal, and notifies the security team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Splunk SSL Certificate Expiry Monitor"
description: "Monitors SSL certificate expiry events in Splunk, creates ServiceNow change requests for renewal, and notifies the security team via Microsoft Teams."
tags:
- security
- certificates
- splunk
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: cert-monitor
port: 8080
tools:
- name: handle-cert-expiry
description: "Given a domain with an expiring certificate detected in Splunk, initiate renewal."
inputParameters:
- name: domain
in: body
type: string
description: "Domain with expiring certificate."
- name: days_remaining
in: body
type: number
description: "Days until expiry."
steps:
- name: create-change
type: call
call: "servicenow.create-change-request"
with:
short_description: "SSL renewal: {{domain}}"
category: "security"
priority: "2"
- name: notify-security
type: call
call: "teams.post-message"
with:
channel_id: "security-ops"
text: "SSL expiring: {{domain}} in {{days_remaining}} days. Change: {{create-change.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change-request
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
When a streaming CDN failure is detected in Datadog, creates a ServiceNow P1 incident, alerts the streaming ops team via Microsoft Teams, and triggers CloudFront failover.
naftiko: "0.5"
info:
label: "Streaming Content Delivery Failure Handler"
description: "When a streaming CDN failure is detected in Datadog, creates a ServiceNow P1 incident, alerts the streaming ops team via Microsoft Teams, and triggers CloudFront failover."
tags:
- streaming
- cdn
- datadog
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: streaming-cdn-ops
port: 8080
tools:
- name: handle-cdn-failure
description: "Given a Datadog alert ID for CDN failure, create incident and trigger failover."
inputParameters:
- name: alert_id
in: body
type: string
description: "Datadog alert ID."
- name: cdn_region
in: body
type: string
description: "Affected CDN region."
steps:
- name: get-alert
type: call
call: "datadog.get-monitor"
with:
alert_id: "{{alert_id}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "CDN failure: {{cdn_region}} streaming"
urgency: "1"
impact: "1"
description: "{{get-alert.message}}"
- name: notify-ops
type: call
call: "teams.post-message"
with:
channel_id: "streaming-ops"
text: "CDN P1: {{cdn_region}}. ServiceNow: {{create-incident.number}}. Failover initiated."
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor/{{alert_id}}"
operations:
- name: get-monitor
method: GET
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Coordinates subscriber equipment swaps by updating the Salesforce account, creating a ServiceNow work order, and notifying the logistics team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Subscriber Equipment Swap Orchestrator"
description: "Coordinates subscriber equipment swaps by updating the Salesforce account, creating a ServiceNow work order, and notifying the logistics team via Microsoft Teams."
tags:
- customer-support
- equipment
- salesforce
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: equipment-swap
port: 8080
tools:
- name: process-equipment-swap
description: "Given a subscriber account and new equipment serial, orchestrate the equipment swap."
inputParameters:
- name: account_id
in: body
type: string
description: "Subscriber account ID."
- name: new_serial
in: body
type: string
description: "New equipment serial number."
steps:
- name: update-account
type: call
call: "salesforce.update-equipment"
with:
account_id: "{{account_id}}"
serial: "{{new_serial}}"
- name: create-work-order
type: call
call: "servicenow.create-work-order"
with:
short_description: "Equipment swap: account {{account_id}}"
description: "New serial: {{new_serial}}"
- name: notify-logistics
type: call
call: "teams.post-message"
with:
channel_id: "logistics"
text: "Equipment swap: {{account_id}} → {{new_serial}}. WO: {{create-work-order.number}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://comcast.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
operations:
- name: update-equipment
method: PATCH
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: work-orders
path: "/table/wm_order"
operations:
- name: create-work-order
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Triggers a Terraform Cloud workspace run to provision or update cloud infrastructure, and creates a ServiceNow change record documenting the deployment.
naftiko: "0.5"
info:
label: "Terraform Cloud Infrastructure Provisioning"
description: "Triggers a Terraform Cloud workspace run to provision or update cloud infrastructure, and creates a ServiceNow change record documenting the deployment."
tags:
- cloud
- infrastructure
- terraform
- servicenow
- change-management
capability:
exposes:
- type: mcp
namespace: infra-provisioning
port: 8080
tools:
- name: trigger-terraform-run
description: "Given a Terraform Cloud workspace ID and change description, trigger a plan and apply run and create a ServiceNow change record."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Terraform Cloud workspace ID."
- name: change_description
in: body
type: string
description: "Description of the infrastructure change being applied."
steps:
- name: create-run
type: call
call: "terraform.create-run"
with:
workspaceId: "{{workspace_id}}"
message: "{{change_description}}"
- name: create-change-record
type: call
call: "servicenow.create-change"
with:
short_description: "Terraform infra change: {{change_description}}"
description: "Workspace: {{workspace_id}}\nRun ID: {{create-run.runId}}"
category: "Infrastructure"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: runs
path: "/runs"
operations:
- name: create-run
method: POST
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: change-requests
path: "/table/change_request"
operations:
- name: create-change
method: POST
Detects infrastructure drift in Terraform Cloud, creates a Jira ticket, triggers a remediation run, and notifies the platform team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Terraform Infrastructure Drift Remediator"
description: "Detects infrastructure drift in Terraform Cloud, creates a Jira ticket, triggers a remediation run, and notifies the platform team via Microsoft Teams."
tags:
- infrastructure
- terraform
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: drift-remediation
port: 8080
tools:
- name: remediate-drift
description: "Given a Terraform workspace with drift, initiate remediation."
inputParameters:
- name: workspace_name
in: body
type: string
description: "Terraform workspace name."
- name: drift_summary
in: body
type: string
description: "Summary of detected drift."
steps:
- name: get-workspace
type: call
call: "terraform.get-workspace"
with:
workspace_name: "{{workspace_name}}"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project: "INFRA"
summary: "Drift: {{workspace_name}}"
description: "{{drift_summary}}"
- name: trigger-run
type: call
call: "terraform.create-run"
with:
workspace_id: "{{get-workspace.id}}"
message: "Drift fix — {{create-ticket.key}}"
- name: notify-team
type: call
call: "teams.post-message"
with:
channel_id: "platform-engineering"
text: "Drift: {{workspace_name}}. Jira: {{create-ticket.key}}. Run: {{trigger-run.id}}"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: workspaces
path: "/organizations/comcast/workspaces/{{workspace_name}}"
operations:
- name: get-workspace
method: GET
- name: runs
path: "/runs"
operations:
- name: create-run
method: POST
- type: http
namespace: jira
baseUri: "https://comcast.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Audits Terraform-managed security groups for overly permissive rules, creates Jira compliance tickets, and notifies the cloud security team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Terraform Security Group Audit"
description: "Audits Terraform-managed security groups for overly permissive rules, creates Jira compliance tickets, and notifies the cloud security team via Microsoft Teams."
tags:
- security
- cloud
- terraform
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sg-audit
port: 8080
tools:
- name: audit-security-groups
description: "Given a Terraform workspace, audit security group rules for compliance."
inputParameters:
- name: workspace_name
in: body
type: string
description: "Terraform workspace name."
steps:
- name: get-state
type: call
call: "terraform.get-state"
with:
workspace_name: "{{workspace_name}}"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project: "CLOUDSEC"
summary: "SG audit: {{workspace_name}}"
description: "Open rules found: {{get-state.open_rule_count}}"
- name: notify-security
type: call
call: "teams.post-message"
with:
channel_id: "cloud-security"
text: "SG audit: {{workspace_name}}. Open rules: {{get-state.open_rule_count}}. Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: state
path: "/workspaces/{{workspace_name}}/current-state-version"
operations:
- name: get-state
method: GET
- type: http
namespace: jira
baseUri: "https://comcast.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Checks the latest Terraform Cloud run status for a Comcast infrastructure workspace.
naftiko: "0.5"
info:
label: "Terraform Workspace Run Status"
description: "Checks the latest Terraform Cloud run status for a Comcast infrastructure workspace."
tags:
- infrastructure
- terraform
capability:
exposes:
- type: mcp
namespace: infra-runs
port: 8080
tools:
- name: get-run-status
description: "Given a Terraform workspace name, return the latest run status and resource change count."
inputParameters:
- name: workspace_name
in: body
type: string
description: "Terraform Cloud workspace name."
call: "terraform.get-latest-run"
with:
workspace_name: "{{workspace_name}}"
outputParameters:
- name: run_status
type: string
mapping: "$.data.attributes.status"
- name: resource_changes
type: number
mapping: "$.data.attributes.resource_changes"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: workspaces
path: "/organizations/comcast/workspaces/{{workspace_name}}"
inputParameters:
- name: workspace_name
in: path
operations:
- name: get-latest-run
method: GET
Monitors video transcoding pipeline health in Datadog, creates a Jira ticket when failure rates spike, and alerts the media engineering team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Video Transcoding Pipeline Monitor"
description: "Monitors video transcoding pipeline health in Datadog, creates a Jira ticket when failure rates spike, and alerts the media engineering team via Microsoft Teams."
tags:
- media
- transcoding
- datadog
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: transcoding-ops
port: 8080
tools:
- name: handle-transcoding-alert
description: "Given a Datadog alert for transcoding failures, investigate and escalate."
inputParameters:
- name: alert_id
in: body
type: string
description: "Datadog alert ID."
steps:
- name: get-alert
type: call
call: "datadog.get-monitor"
with:
alert_id: "{{alert_id}}"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project: "MEDIA"
summary: "Transcoding failures: {{get-alert.name}}"
description: "{{get-alert.message}}"
- name: notify-team
type: call
call: "teams.post-message"
with:
channel_id: "media-engineering"
text: "Transcoding alert: {{get-alert.name}}. Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor/{{alert_id}}"
operations:
- name: get-monitor
method: GET
- type: http
namespace: jira
baseUri: "https://comcast.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Audits compensation changes in Workday, logs them in Snowflake for compliance, and notifies the HR compliance team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Workday Compensation Change Audit"
description: "Audits compensation changes in Workday, logs them in Snowflake for compliance, and notifies the HR compliance team via Microsoft Teams."
tags:
- hr
- compensation
- compliance
- workday
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: comp-audit
port: 8080
tools:
- name: audit-comp-change
description: "Given an employee ID with a recent compensation change, audit and log."
inputParameters:
- name: employee_id
in: body
type: string
description: "Workday employee ID."
steps:
- name: get-comp-history
type: call
call: "workday.get-compensation"
with:
employee_id: "{{employee_id}}"
- name: log-audit
type: call
call: "snowflake.insert-audit"
with:
employee_id: "{{employee_id}}"
old_salary: "{{get-comp-history.previous_salary}}"
new_salary: "{{get-comp-history.current_salary}}"
- name: notify-compliance
type: call
call: "teams.post-message"
with:
channel_id: "hr-compliance"
text: "Comp change: {{employee_id}}. Previous: ${{get-comp-history.previous_salary}} → ${{get-comp-history.current_salary}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/comcast"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: compensation
path: "/workers/{{employee_id}}/compensation"
operations:
- name: get-compensation
method: GET
- type: http
namespace: snowflake
baseUri: "https://comcast.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: insert-audit
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Pulls diversity and inclusion metrics from Workday, stores trend data in Snowflake, and posts the quarterly report to the HR leadership Teams channel.
naftiko: "0.5"
info:
label: "Workday Diversity Metrics Reporter"
description: "Pulls diversity and inclusion metrics from Workday, stores trend data in Snowflake, and posts the quarterly report to the HR leadership Teams channel."
tags:
- hr
- diversity
- workday
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: diversity-metrics
port: 8080
tools:
- name: generate-diversity-report
description: "Given a fiscal quarter, generate the diversity metrics report."
inputParameters:
- name: fiscal_quarter
in: body
type: string
description: "Fiscal quarter (e.g., FY26-Q1)."
steps:
- name: get-metrics
type: call
call: "workday.get-diversity-stats"
with:
quarter: "{{fiscal_quarter}}"
- name: store-trends
type: call
call: "snowflake.insert-diversity"
with:
quarter: "{{fiscal_quarter}}"
headcount: "{{get-metrics.total_headcount}}"
- name: notify-leadership
type: call
call: "teams.post-message"
with:
channel_id: "hr-leadership"
text: "Diversity report: {{fiscal_quarter}}. Headcount: {{get-metrics.total_headcount}}. Representation: {{get-metrics.representation_pct}}%"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/comcast"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: diversity
path: "/reports/diversity"
operations:
- name: get-diversity-stats
method: GET
- type: http
namespace: snowflake
baseUri: "https://comcast.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: insert-diversity
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Retrieves an employee profile from Workday including job title, department, manager name, and hire date.
naftiko: "0.5"
info:
label: "Workday Employee Profile Lookup"
description: "Retrieves an employee profile from Workday including job title, department, manager name, and hire date."
tags:
- hr
- workday
capability:
exposes:
- type: mcp
namespace: employee-profiles
port: 8080
tools:
- name: get-employee-profile
description: "Given a Workday employee ID, return the employee profile details."
inputParameters:
- name: employee_id
in: body
type: string
description: "Workday employee ID."
call: "workday.get-worker"
with:
employee_id: "{{employee_id}}"
outputParameters:
- name: job_title
type: string
mapping: "$.jobTitle"
- name: department
type: string
mapping: "$.department"
- name: manager
type: string
mapping: "$.manager"
- name: hire_date
type: string
mapping: "$.hireDate"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/comcast"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{employee_id}}"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-worker
method: GET
Returns current active headcount by department and cost center from Workday, for workforce planning and finance reporting.
naftiko: "0.5"
info:
label: "Workday Headcount Snapshot"
description: "Returns current active headcount by department and cost center from Workday, for workforce planning and finance reporting."
tags:
- hr
- finance
- workday
- headcount
- reporting
capability:
exposes:
- type: mcp
namespace: hr-reporting
port: 8080
tools:
- name: get-headcount-snapshot
description: "Returns current active employee headcount grouped by department and cost center from Workday. Use for workforce planning, headcount budgeting, and finance period close."
call: "workday.get-headcount"
outputParameters:
- name: employees
type: array
mapping: "$.data"
items:
- name: employee_id
type: string
mapping: "$.id"
- name: full_name
type: string
mapping: "$.name"
- name: department
type: string
mapping: "$.department"
- name: cost_center
type: string
mapping: "$.costCenter"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/comcast/workers"
operations:
- name: get-headcount
method: GET
When a new hire record appears in Workday, provisions Okta account, creates a ServiceNow equipment request, and notifies the hiring manager via Microsoft Teams.
naftiko: "0.5"
info:
label: "Workday New Hire IT Provisioning"
description: "When a new hire record appears in Workday, provisions Okta account, creates a ServiceNow equipment request, and notifies the hiring manager via Microsoft Teams."
tags:
- hr
- onboarding
- workday
- okta
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hire-provisioning
port: 8080
tools:
- name: provision-new-hire
description: "Given a Workday employee ID for a new hire, provision IT resources."
inputParameters:
- name: employee_id
in: body
type: string
description: "Workday employee ID."
steps:
- name: get-worker
type: call
call: "workday.get-worker"
with:
employee_id: "{{employee_id}}"
- name: create-okta-user
type: call
call: "okta.create-user"
with:
email: "{{get-worker.email}}"
first_name: "{{get-worker.first_name}}"
last_name: "{{get-worker.last_name}}"
department: "{{get-worker.department}}"
- name: create-equipment-request
type: call
call: "servicenow.create-request"
with:
short_description: "New hire equipment: {{get-worker.name}}"
description: "Department: {{get-worker.department}}. Start date: {{get-worker.start_date}}"
- name: notify-manager
type: call
call: "teams.post-message"
with:
channel_id: "hr-onboarding"
text: "IT provisioned for {{get-worker.name}}: Okta created, equipment requested ({{create-equipment-request.number}})."
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/comcast"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{employee_id}}"
operations:
- name: get-worker
method: GET
- type: http
namespace: okta
baseUri: "https://comcast.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users"
operations:
- name: create-user
method: POST
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
When an org restructure is processed in Workday, updates Okta group memberships, adjusts ServiceNow assignments, and notifies affected managers via Microsoft Teams.
naftiko: "0.5"
info:
label: "Workday Org Restructure Sync"
description: "When an org restructure is processed in Workday, updates Okta group memberships, adjusts ServiceNow assignments, and notifies affected managers via Microsoft Teams."
tags:
- hr
- identity
- workday
- okta
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: org-sync
port: 8080
tools:
- name: sync-org-change
description: "Given an employee ID with a department transfer, sync access across systems."
inputParameters:
- name: employee_id
in: body
type: string
description: "Workday employee ID."
- name: new_department
in: body
type: string
description: "New department."
steps:
- name: get-worker
type: call
call: "workday.get-worker"
with:
employee_id: "{{employee_id}}"
- name: update-okta
type: call
call: "okta.update-groups"
with:
email: "{{get-worker.email}}"
department: "{{new_department}}"
- name: update-snow
type: call
call: "servicenow.update-user"
with:
email: "{{get-worker.email}}"
department: "{{new_department}}"
- name: notify-manager
type: call
call: "teams.post-message"
with:
channel_id: "hr-notifications"
text: "Org change: {{get-worker.name}} → {{new_department}}. Access updated."
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/comcast"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{employee_id}}"
operations:
- name: get-worker
method: GET
- type: http
namespace: okta
baseUri: "https://comcast.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: groups
path: "/users/{{email}}/groups"
operations:
- name: update-groups
method: PUT
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: users
path: "/table/sys_user"
operations:
- name: update-user
method: PATCH
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
Returns current payroll headcount grouped by department and pay grade from Workday for finance and HR reporting.
naftiko: "0.5"
info:
label: "Workday Payroll Headcount Export"
description: "Returns current payroll headcount grouped by department and pay grade from Workday for finance and HR reporting."
tags:
- hr
- finance
- workday
- payroll
- reporting
capability:
exposes:
- type: mcp
namespace: payroll-reporting
port: 8080
tools:
- name: get-payroll-headcount
description: "Returns active employees grouped by department and pay grade from Workday payroll. Use for headcount reporting, period close, and compensation analysis."
call: "workday.get-payroll-results"
outputParameters:
- name: total_gross_pay
type: number
mapping: "$.totals.grossPay"
- name: total_employees
type: number
mapping: "$.totals.headcount"
- name: period
type: string
mapping: "$.payPeriod"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: payroll-results
path: "/comcast/payrollResults"
operations:
- name: get-payroll-results
method: GET
Retrieves the candidate pipeline status for an open Workday job requisition and summarizes candidate stage counts for the recruiting team.
naftiko: "0.5"
info:
label: "Workday Recruiting Pipeline Summary"
description: "Retrieves the candidate pipeline status for an open Workday job requisition and summarizes candidate stage counts for the recruiting team."
tags:
- hr
- recruiting
- workday
- reporting
capability:
exposes:
- type: mcp
namespace: recruiting
port: 8080
tools:
- name: get-requisition-pipeline
description: "Given a Workday job requisition ID, return a stage-by-stage summary of candidates in the hiring pipeline including screened, interviewed, and offered counts."
inputParameters:
- name: requisition_id
in: body
type: string
description: "The Workday job requisition ID."
call: "workday.get-job-requisition"
with:
requisitionId: "{{requisition_id}}"
outputParameters:
- name: job_title
type: string
mapping: "$.jobRequisition.jobTitle"
- name: total_candidates
type: number
mapping: "$.jobRequisition.candidateCount"
- name: open_since
type: string
mapping: "$.jobRequisition.openDate"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: job-requisitions
path: "/comcast/jobRequisitions/{{requisitionId}}"
inputParameters:
- name: requisitionId
in: path
operations:
- name: get-job-requisition
method: GET
When an employee's role changes in Workday, updates Okta group memberships to match the new role's access profile.
naftiko: "0.5"
info:
label: "Workday Role Change Access Provisioning"
description: "When an employee's role changes in Workday, updates Okta group memberships to match the new role's access profile."
tags:
- hr
- identity
- workday
- okta
- access-management
capability:
exposes:
- type: mcp
namespace: hr-identity
port: 8080
tools:
- name: sync-role-access
description: "Given a Workday employee ID and new job profile, update Okta group memberships to reflect the new role's access entitlements."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday worker ID."
- name: new_job_profile
in: body
type: string
description: "The new Workday job profile name."
steps:
- name: get-worker
type: call
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
- name: assign-okta-group
type: call
call: "okta.add-user-to-group"
with:
userId: "{{get-worker.okta_user_id}}"
groupProfile: "{{new_job_profile}}"
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: "/comcast/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: okta
baseUri: "https://comcast.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: group-members
path: "/groups/{{groupProfile}}/users/{{userId}}"
inputParameters:
- name: groupProfile
in: path
- name: userId
in: path
operations:
- name: add-user-to-group
method: PUT
When an employee termination is processed in Workday, deactivates their Okta account, closes ServiceNow assignments, and logs the offboarding in Splunk.
naftiko: "0.5"
info:
label: "Workday Termination Access Revocation"
description: "When an employee termination is processed in Workday, deactivates their Okta account, closes ServiceNow assignments, and logs the offboarding in Splunk."
tags:
- hr
- offboarding
- workday
- okta
- servicenow
- splunk
capability:
exposes:
- type: mcp
namespace: termination-sync
port: 8080
tools:
- name: process-termination
description: "Given a Workday employee ID for a terminated employee, revoke all access."
inputParameters:
- name: employee_id
in: body
type: string
description: "Workday employee ID."
steps:
- name: get-worker
type: call
call: "workday.get-worker"
with:
employee_id: "{{employee_id}}"
- name: deactivate-okta
type: call
call: "okta.deactivate-user"
with:
user_email: "{{get-worker.email}}"
- name: close-assignments
type: call
call: "servicenow.close-user-tickets"
with:
user_email: "{{get-worker.email}}"
- name: log-offboarding
type: call
call: "splunk.index-event"
with:
source: "hr-offboarding"
event: "Terminated: {{get-worker.name}} ({{get-worker.email}}). Okta deactivated. ServiceNow closed."
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/comcast"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{employee_id}}"
operations:
- name: get-worker
method: GET
- type: http
namespace: okta
baseUri: "https://comcast.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users/{{user_email}}/lifecycle/deactivate"
operations:
- name: deactivate-user
method: POST
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: tickets
path: "/table/incident"
operations:
- name: close-user-tickets
method: PATCH
- type: http
namespace: splunk
baseUri: "https://splunk.comcast.com:8088"
authentication:
type: bearer
token: "$secrets.splunk_hec_token"
resources:
- name: events
path: "/services/collector/event"
operations:
- name: index-event
method: POST
Returns the current paid time-off and vacation accrual balances for a Comcast employee from Workday, for use in absence planning.
naftiko: "0.5"
info:
label: "Workday Time-Off Balance Lookup"
description: "Returns the current paid time-off and vacation accrual balances for a Comcast employee from Workday, for use in absence planning."
tags:
- hr
- workday
- absence-management
capability:
exposes:
- type: mcp
namespace: hr-absence
port: 8080
tools:
- name: get-time-off-balance
description: "Given a Workday employee ID, return current accrued vacation, PTO, and sick leave balances. Use when an employee or manager needs to verify available time before approving an absence request."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday worker ID."
call: "workday.get-leave-balance"
with:
worker_id: "{{employee_id}}"
outputParameters:
- name: vacation_days
type: number
mapping: "$.leaveBalances.vacation"
- name: pto_days
type: number
mapping: "$.leaveBalances.pto"
- name: sick_days
type: number
mapping: "$.leaveBalances.sick"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: leave-balances
path: "/comcast/workers/{{worker_id}}/leaveBalance"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-leave-balance
method: GET
Monitors Xfinity mobile app crash rates via Datadog, creates a Jira bug when thresholds are exceeded, and notifies the mobile engineering team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Xfinity App Crash Rate Monitor"
description: "Monitors Xfinity mobile app crash rates via Datadog, creates a Jira bug when thresholds are exceeded, and notifies the mobile engineering team via Microsoft Teams."
tags:
- mobile
- observability
- datadog
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: app-crash-monitor
port: 8080
tools:
- name: handle-crash-rate-alert
description: "Given a Datadog alert for app crash rate spike, create bug and notify."
inputParameters:
- name: alert_id
in: body
type: string
description: "Datadog alert ID."
- name: app_version
in: body
type: string
description: "App version affected."
steps:
- name: get-alert
type: call
call: "datadog.get-monitor"
with:
alert_id: "{{alert_id}}"
- name: create-bug
type: call
call: "jira.create-issue"
with:
project: "MOBILE"
summary: "Crash rate spike: Xfinity app {{app_version}}"
issue_type: "Bug"
description: "{{get-alert.message}}"
- name: notify-mobile
type: call
call: "teams.post-message"
with:
channel_id: "mobile-engineering"
text: "Crash rate alert: Xfinity app {{app_version}}. Jira: {{create-bug.key}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor/{{alert_id}}"
operations:
- name: get-monitor
method: GET
- type: http
namespace: jira
baseUri: "https://comcast.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST
When an Xfinity Mobile order is placed, provisions the SIM in the carrier system, updates Salesforce, and sends activation confirmation via the messaging platform.
naftiko: "0.5"
info:
label: "Xfinity Mobile Provisioning Orchestrator"
description: "When an Xfinity Mobile order is placed, provisions the SIM in the carrier system, updates Salesforce, and sends activation confirmation via the messaging platform."
tags:
- mobile
- provisioning
- salesforce
- servicenow
capability:
exposes:
- type: mcp
namespace: mobile-provisioning
port: 8080
tools:
- name: provision-mobile-line
description: "Given a Salesforce order ID for Xfinity Mobile, provision and activate the line."
inputParameters:
- name: order_id
in: body
type: string
description: "Salesforce mobile order ID."
steps:
- name: get-order
type: call
call: "salesforce.get-order"
with:
order_id: "{{order_id}}"
- name: create-work-order
type: call
call: "servicenow.create-work-order"
with:
short_description: "Mobile activation: {{order_id}}"
description: "Customer: {{get-order.customer_name}}. Plan: {{get-order.plan_name}}"
- name: update-order
type: call
call: "salesforce.update-order-status"
with:
order_id: "{{order_id}}"
status: "Provisioned"
consumes:
- type: http
namespace: salesforce
baseUri: "https://comcast.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: orders
path: "/sobjects/Order/{{order_id}}"
operations:
- name: get-order
method: GET
- name: update-order-status
method: PATCH
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: work-orders
path: "/table/wm_order"
operations:
- name: create-work-order
method: POST
When Datadog detects a WiFi hotspot cluster outage, retrieves affected area data, creates a ServiceNow incident, and notifies field operations via Microsoft Teams.
naftiko: "0.5"
info:
label: "Xfinity WiFi Hotspot Outage Handler"
description: "When Datadog detects a WiFi hotspot cluster outage, retrieves affected area data, creates a ServiceNow incident, and notifies field operations via Microsoft Teams."
tags:
- network
- wifi
- datadog
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: wifi-ops
port: 8080
tools:
- name: handle-hotspot-outage
description: "Given a Datadog alert for WiFi hotspot outage, create incident and notify field ops."
inputParameters:
- name: alert_id
in: body
type: string
description: "Datadog alert ID."
- name: cluster_id
in: body
type: string
description: "WiFi hotspot cluster ID."
steps:
- name: get-alert
type: call
call: "datadog.get-monitor"
with:
alert_id: "{{alert_id}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Xfinity WiFi hotspot outage: cluster {{cluster_id}}"
urgency: "2"
description: "{{get-alert.message}}"
- name: notify-field-ops
type: call
call: "teams.post-message"
with:
channel_id: "field-operations"
text: "WiFi hotspot outage: cluster {{cluster_id}}. ServiceNow: {{create-incident.number}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor/{{alert_id}}"
operations:
- name: get-monitor
method: GET
- type: http
namespace: servicenow
baseUri: "https://comcast.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: post-message
method: POST