Blizzard Entertainment Capabilities
Naftiko 0.5 capability definitions for Blizzard Entertainment - 100 capabilities showing integration workflows and service orchestrations.
Pulls campaign attribution data from Adobe Analytics, enriches with Google Analytics cross-channel data, stores in Snowflake, and reports to leadership via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Adobe Analytics Marketing Attribution Pipeline"
description: "Pulls campaign attribution data from Adobe Analytics, enriches with Google Analytics cross-channel data, stores in Snowflake, and reports to leadership via Microsoft Outlook."
tags:
- marketing-analytics
- adobe-analytics
- google-analytics
- snowflake
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: marketing-attribution
port: 8080
tools:
- name: generate-attribution
description: "Orchestrate marketing attribution analysis across channels."
inputParameters:
- name: campaign_id
in: body
type: string
description: "Campaign identifier."
- name: date_range
in: body
type: string
description: "Date range for analysis."
steps:
- name: get-adobe-data
type: call
call: "adobe-analytics.get-report"
with:
report_suite: "$secrets.adobe_report_suite"
campaign_id: "{{campaign_id}}"
date_range: "{{date_range}}"
- name: get-ga-data
type: call
call: "google-analytics.run-report"
with:
property: "$secrets.ga_property_id"
campaign: "{{campaign_id}}"
date_range: "{{date_range}}"
- name: store-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO MARKETING.ATTRIBUTION VALUES ('{{campaign_id}}', '{{date_range}}', '{{get-adobe-data.conversions}}', '{{get-ga-data.sessions}}')"
- name: email-report
type: call
call: "outlook.send-email"
with:
to: "$secrets.marketing_leadership_email"
subject: "Marketing Attribution: Campaign {{campaign_id}}"
body: "Adobe conversions: {{get-adobe-data.conversions}}. GA sessions: {{get-ga-data.sessions}}. Data stored in Snowflake."
consumes:
- type: http
namespace: adobe-analytics
baseUri: "https://analytics.adobe.io/api"
authentication:
type: bearer
token: "$secrets.adobe_analytics_token"
resources:
- name: reports
path: "/{{report_suite}}/reports"
inputParameters:
- name: report_suite
in: path
operations:
- name: get-report
method: POST
- type: http
namespace: google-analytics
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/properties/{{property}}:runReport"
inputParameters:
- name: property
in: path
operations:
- name: run-report
method: POST
- type: http
namespace: snowflake
baseUri: "https://blizzard.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Retrieves payroll summary data from ADP for game development staff compensation management.
naftiko: "0.5"
info:
label: "ADP Payroll Data Lookup"
description: "Retrieves payroll summary data from ADP for game development staff compensation management."
tags:
- hr
- adp
- payroll
capability:
exposes:
- type: mcp
namespace: hr-payroll
port: 8080
tools:
- name: get-payroll-summary
description: "Look up ADP payroll summary by employee ID."
inputParameters:
- name: employee_id
in: body
type: string
description: "The ADP employee ID."
call: "adp.get-payroll"
with:
employee_id: "{{employee_id}}"
consumes:
- type: http
namespace: adp
baseUri: "https://api.adp.com/hr/v2"
authentication:
type: bearer
token: "$secrets.adp_token"
resources:
- name: payroll
path: "/workers/{{employee_id}}/pay-distributions"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-payroll
method: GET
Detects payroll discrepancies by comparing ADP data with Workday records, creates a Jira ticket for investigation, and notifies HR via Microsoft Teams.
naftiko: "0.5"
info:
label: "ADP Payroll Discrepancy Pipeline"
description: "Detects payroll discrepancies by comparing ADP data with Workday records, creates a Jira ticket for investigation, and notifies HR via Microsoft Teams."
tags:
- payroll
- adp
- workday
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: payroll-discrepancy
port: 8080
tools:
- name: check-discrepancies
description: "Compare ADP and Workday payroll data and flag discrepancies."
inputParameters:
- name: pay_period
in: body
type: string
description: "Pay period identifier."
- name: department
in: body
type: string
description: "Department to audit."
steps:
- name: get-adp-data
type: call
call: "adp.get-payroll-summary"
with:
pay_period: "{{pay_period}}"
department: "{{department}}"
- name: get-workday-data
type: call
call: "workday.get-payroll-report"
with:
pay_period: "{{pay_period}}"
department: "{{department}}"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project: "PAYROLL"
summary: "Payroll discrepancy: {{department}} - {{pay_period}}"
description: "ADP total: {{get-adp-data.total}}. Workday total: {{get-workday-data.total}}. Variance: requires investigation."
issuetype: "Bug"
- name: notify-hr
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.hr_payroll_channel"
text: "Payroll discrepancy detected: {{department}} for {{pay_period}}. Jira: {{create-ticket.key}}."
consumes:
- type: http
namespace: adp
baseUri: "https://api.adp.com/hr/v2"
authentication:
type: bearer
token: "$secrets.adp_token"
resources:
- name: payroll
path: "/workers/payroll-summaries"
operations:
- name: get-payroll-summary
method: GET
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/service/blizzard"
authentication:
type: basic
username: "$secrets.workday_user"
password: "$secrets.workday_password"
resources:
- name: reports
path: "/Payroll/Payroll_Report"
operations:
- name: get-payroll-report
method: GET
- type: http
namespace: jira
baseUri: "https://blizzard.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Executes a SQL query against Amazon Redshift for deep player behavior analytics.
naftiko: "0.5"
info:
label: "Amazon Redshift Player Data Query"
description: "Executes a SQL query against Amazon Redshift for deep player behavior analytics."
tags:
- data
- analytics
- amazon-redshift
- gaming
capability:
exposes:
- type: mcp
namespace: player-data
port: 8080
tools:
- name: run-redshift-query
description: "Execute a SQL query against the Blizzard Redshift cluster."
inputParameters:
- name: sql_statement
in: body
type: string
description: "The SQL statement."
- name: database
in: body
type: string
description: "The Redshift database name."
call: "redshift.execute-statement"
with:
sql: "{{sql_statement}}"
database: "{{database}}"
consumes:
- type: http
namespace: redshift
baseUri: "https://redshift-data.us-west-2.amazonaws.com"
authentication:
type: aws-sigv4
accessKeyId: "$secrets.aws_access_key"
secretAccessKey: "$secrets.aws_secret_key"
resources:
- name: statements
path: "/"
operations:
- name: execute-statement
method: POST
Retrieves metadata for an S3 object containing game assets, returning content type, size, and last modified date.
naftiko: "0.5"
info:
label: "Amazon S3 Game Asset Retrieval"
description: "Retrieves metadata for an S3 object containing game assets, returning content type, size, and last modified date."
tags:
- cloud-storage
- amazon-s3
- game-assets
capability:
exposes:
- type: mcp
namespace: s3-storage
port: 8080
tools:
- name: get-s3-asset-info
description: "Look up an S3 object by bucket and key."
inputParameters:
- name: bucket
in: body
type: string
description: "The S3 bucket name."
- name: key
in: body
type: string
description: "The object key."
call: "s3.head-object"
with:
bucket: "{{bucket}}"
key: "{{key}}"
outputParameters:
- name: content_type
type: string
mapping: "$.ContentType"
- name: content_length
type: integer
mapping: "$.ContentLength"
- name: last_modified
type: string
mapping: "$.LastModified"
consumes:
- type: http
namespace: s3
baseUri: "https://{{bucket}}.s3.amazonaws.com"
authentication:
type: aws-sigv4
accessKeyId: "$secrets.aws_access_key"
secretAccessKey: "$secrets.aws_secret_key"
resources:
- name: objects
path: "/{{key}}"
inputParameters:
- name: bucket
in: path
- name: key
in: path
operations:
- name: head-object
method: HEAD
Retrieves Maya project file metadata for game 3D asset pipeline management.
naftiko: "0.5"
info:
label: "Autodesk Maya 3D Asset Checkout"
description: "Retrieves Maya project file metadata for game 3D asset pipeline management."
tags:
- 3d
- autodesk-maya
- game-assets
capability:
exposes:
- type: mcp
namespace: 3d-assets
port: 8080
tools:
- name: get-maya-project
description: "Look up a Maya project file in the asset library."
inputParameters:
- name: project_id
in: body
type: string
description: "The Maya project ID."
call: "maya.get-project"
with:
project_id: "{{project_id}}"
consumes:
- type: http
namespace: maya
baseUri: "https://assets.blizzard.com/api/v1"
authentication:
type: bearer
token: "$secrets.maya_token"
resources:
- name: projects
path: "/projects/{{project_id}}"
inputParameters:
- name: project_id
in: path
operations:
- name: get-project
method: GET
Retrieves the latest build status for a game project pipeline in Azure DevOps.
naftiko: "0.5"
info:
label: "Azure DevOps Build Status"
description: "Retrieves the latest build status for a game project pipeline in Azure DevOps."
tags:
- ci-cd
- azure-devops
- builds
capability:
exposes:
- type: mcp
namespace: build-status
port: 8080
tools:
- name: get-build-status
description: "Look up the latest build result for a given pipeline."
inputParameters:
- name: project
in: body
type: string
description: "Azure DevOps project name."
- name: pipeline_id
in: body
type: string
description: "Pipeline definition ID."
call: "azuredevops.get-builds"
with:
project: "{{project}}"
pipeline_id: "{{pipeline_id}}"
outputParameters:
- name: build_number
type: string
mapping: "$.value[0].buildNumber"
- name: status
type: string
mapping: "$.value[0].status"
- name: result
type: string
mapping: "$.value[0].result"
consumes:
- type: http
namespace: azuredevops
baseUri: "https://dev.azure.com/blizzard"
authentication:
type: basic
username: ""
password: "$secrets.azure_devops_pat"
resources:
- name: builds
path: "/{{project}}/_apis/build/builds"
inputParameters:
- name: project
in: path
operations:
- name: get-builds
method: GET
Searches and retrieves game design documents stored in Box by keyword and folder.
naftiko: "0.5"
info:
label: "Box Design Document Retrieval"
description: "Searches and retrieves game design documents stored in Box by keyword and folder."
tags:
- documentation
- box
- design
capability:
exposes:
- type: mcp
namespace: design-docs
port: 8080
tools:
- name: search-design-docs
description: "Search Box for game design documents by keyword."
inputParameters:
- name: query
in: body
type: string
description: "Search keyword."
- name: folder_id
in: body
type: string
description: "Box folder ID to search within."
call: "box.search-files"
with:
query: "{{query}}"
ancestor_folder_ids: "{{folder_id}}"
outputParameters:
- name: files
type: array
mapping: "$.entries"
consumes:
- type: http
namespace: box
baseUri: "https://api.box.com/2.0"
authentication:
type: bearer
token: "$secrets.box_access_token"
resources:
- name: search
path: "/search"
operations:
- name: search-files
method: GET
Purges Cloudflare CDN cache for game assets, verifies propagation via Datadog, and logs the operation in ServiceNow.
naftiko: "0.5"
info:
label: "CDN Cache Purge Pipeline"
description: "Purges Cloudflare CDN cache for game assets, verifies propagation via Datadog, and logs the operation in ServiceNow."
tags:
- cdn
- cloudflare
- datadog
- servicenow
capability:
exposes:
- type: mcp
namespace: cdn-cache-purge
port: 8080
tools:
- name: purge-and-verify
description: "Purge CDN cache and verify propagation."
inputParameters:
- name: zone_id
in: body
type: string
description: "Cloudflare zone ID."
- name: purge_urls
in: body
type: string
description: "Comma-separated URLs to purge."
steps:
- name: purge-cache
type: call
call: "cloudflare.purge-cache"
with:
zone_id: "{{zone_id}}"
files: "{{purge_urls}}"
- name: verify-propagation
type: call
call: "datadog.query-metrics"
with:
query: "avg:cloudflare.cache.hits{zone:{{zone_id}}}.rollup(avg, 300)"
- name: log-operation
type: call
call: "servicenow.create-record"
with:
table: "change_request"
short_description: "CDN cache purge for zone {{zone_id}}"
description: "URLs purged: {{purge_urls}}. Purge ID: {{purge-cache.id}}."
consumes:
- type: http
namespace: cloudflare
baseUri: "https://api.cloudflare.com/client/v4"
authentication:
type: bearer
token: "$secrets.cloudflare_api_token"
resources:
- name: cache
path: "/zones/{{zone_id}}/purge_cache"
inputParameters:
- name: zone_id
in: path
operations:
- name: purge-cache
method: POST
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
appKey: "$secrets.datadog_app_key"
resources:
- name: metrics
path: "/query"
operations:
- name: query-metrics
method: GET
- type: http
namespace: servicenow
baseUri: "https://blizzard.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
Retrieves Cloudflare analytics for game content delivery, returning total requests, bandwidth, and cache hit ratio.
naftiko: "0.5"
info:
label: "Cloudflare CDN Analytics"
description: "Retrieves Cloudflare analytics for game content delivery, returning total requests, bandwidth, and cache hit ratio."
tags:
- cdn
- cloudflare
- analytics
capability:
exposes:
- type: mcp
namespace: cdn-analytics
port: 8080
tools:
- name: get-cdn-analytics
description: "Retrieve Cloudflare zone analytics for game content delivery."
inputParameters:
- name: zone_id
in: body
type: string
description: "The Cloudflare zone ID."
- name: since
in: body
type: string
description: "Start time in ISO 8601 format."
call: "cloudflare.get-analytics"
with:
zone_id: "{{zone_id}}"
since: "{{since}}"
consumes:
- type: http
namespace: cloudflare
baseUri: "https://api.cloudflare.com/client/v4"
authentication:
type: bearer
token: "$secrets.cloudflare_token"
resources:
- name: analytics
path: "/zones/{{zone_id}}/analytics/dashboard?since={{since}}"
inputParameters:
- name: zone_id
in: path
- name: since
in: query
operations:
- name: get-analytics
method: GET
Lists active CloudWatch alarms for game service infrastructure in AWS.
naftiko: "0.5"
info:
label: "CloudWatch Game Service Alarms"
description: "Lists active CloudWatch alarms for game service infrastructure in AWS."
tags:
- monitoring
- cloudwatch
- aws
capability:
exposes:
- type: mcp
namespace: cloudwatch-alarms
port: 8080
tools:
- name: list-active-alarms
description: "Retrieve all active CloudWatch alarms filtered by a namespace prefix."
inputParameters:
- name: namespace_prefix
in: body
type: string
description: "CloudWatch namespace prefix to filter alarms."
call: "cloudwatch.describe-alarms"
with:
state_value: "ALARM"
namespace_prefix: "{{namespace_prefix}}"
outputParameters:
- name: alarms
type: array
mapping: "$.MetricAlarms"
consumes:
- type: http
namespace: cloudwatch
baseUri: "https://monitoring.us-west-2.amazonaws.com"
authentication:
type: awsSigV4
accessKeyId: "$secrets.aws_access_key_id"
secretAccessKey: "$secrets.aws_secret_access_key"
resources:
- name: alarms
path: "/"
operations:
- name: describe-alarms
method: POST
Resets ranked leaderboards via Amazon Redshift, updates game configuration in S3, publishes season announcement on Twitter and Facebook, and alerts the game team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Competitive Season Launch Pipeline"
description: "Resets ranked leaderboards via Amazon Redshift, updates game configuration in S3, publishes season announcement on Twitter and Facebook, and alerts the game team in Microsoft Teams."
tags:
- competitive
- amazon-redshift
- amazon-s3
- twitter
- facebook
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: season-launch
port: 8080
tools:
- name: launch-season
description: "Orchestrate competitive season reset and announcements."
inputParameters:
- name: season_name
in: body
type: string
description: "Season name."
- name: game_title
in: body
type: string
description: "Game title."
steps:
- name: reset-leaderboards
type: call
call: "redshift.execute-query"
with:
query: "CALL ranked.reset_season_leaderboard('{{game_title}}', '{{season_name}}')"
- name: update-config
type: call
call: "s3.put-object"
with:
bucket: "game-configs"
key: "{{game_title}}/season/current.json"
body: "{\"season\": \"{{season_name}}\", \"status\": \"active\"}"
- name: announce-twitter
type: call
call: "twitter.create-tweet"
with:
text: "{{season_name}} is LIVE in {{game_title}}! Climb the ranks and earn exclusive rewards. #Blizzard #{{game_title}}"
- name: announce-facebook
type: call
call: "facebook.create-post"
with:
message: "{{season_name}} has begun in {{game_title}}! New rewards, new challenges. Get in the game!"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.game_team_channel"
text: "{{season_name}} launched for {{game_title}}. Leaderboards reset. Config updated. Social posts published."
consumes:
- type: http
namespace: redshift
baseUri: "https://redshift-data.us-west-2.amazonaws.com"
authentication:
type: awsSigV4
accessKeyId: "$secrets.aws_access_key_id"
secretAccessKey: "$secrets.aws_secret_access_key"
resources:
- name: statements
path: "/"
operations:
- name: execute-query
method: POST
- type: http
namespace: s3
baseUri: "https://s3.us-west-2.amazonaws.com"
authentication:
type: awsSigV4
accessKeyId: "$secrets.aws_access_key_id"
secretAccessKey: "$secrets.aws_secret_access_key"
resources:
- name: objects
path: "/{{bucket}}/{{key}}"
inputParameters:
- name: bucket
in: path
- name: key
in: path
operations:
- name: put-object
method: PUT
- type: http
namespace: twitter
baseUri: "https://api.twitter.com/2"
authentication:
type: bearer
token: "$secrets.twitter_bearer_token"
resources:
- name: tweets
path: "/tweets"
operations:
- name: create-tweet
method: POST
- type: http
namespace: facebook
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.facebook_page_token"
resources:
- name: posts
path: "/me/feed"
operations:
- name: create-post
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves a Confluence page by ID for game design documentation access, returning title, body content, and version.
naftiko: "0.5"
info:
label: "Confluence Game Design Document Retrieval"
description: "Retrieves a Confluence page by ID for game design documentation access, returning title, body content, and version."
tags:
- documentation
- confluence
- game-design
capability:
exposes:
- type: mcp
namespace: design-docs
port: 8080
tools:
- name: get-confluence-page
description: "Look up a Confluence page by ID."
inputParameters:
- name: page_id
in: body
type: string
description: "The Confluence page ID."
call: "confluence.get-page"
with:
page_id: "{{page_id}}"
outputParameters:
- name: title
type: string
mapping: "$.title"
- name: version
type: integer
mapping: "$.version.number"
- name: last_updated
type: string
mapping: "$.version.when"
consumes:
- type: http
namespace: confluence
baseUri: "https://blizzard.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: pages
path: "/content/{{page_id}}?expand=version"
inputParameters:
- name: page_id
in: path
operations:
- name: get-page
method: GET
Searches Confluence for a wiki page by title and returns its content and metadata.
naftiko: "0.5"
info:
label: "Confluence Wiki Page Lookup"
description: "Searches Confluence for a wiki page by title and returns its content and metadata."
tags:
- documentation
- confluence
- knowledge-base
capability:
exposes:
- type: mcp
namespace: wiki-lookup
port: 8080
tools:
- name: search-wiki
description: "Search for a Confluence page by title."
inputParameters:
- name: title
in: body
type: string
description: "Page title to search for."
- name: space_key
in: body
type: string
description: "Confluence space key."
call: "confluence.search-content"
with:
title: "{{title}}"
spaceKey: "{{space_key}}"
outputParameters:
- name: page_id
type: string
mapping: "$.results[0].id"
- name: page_title
type: string
mapping: "$.results[0].title"
- name: web_url
type: string
mapping: "$.results[0]._links.webui"
consumes:
- type: http
namespace: confluence
baseUri: "https://blizzard.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: content
path: "/content"
operations:
- name: search-content
method: GET
Looks up a creator in HubSpot, generates a partnership agreement in SharePoint, sends an invite via Microsoft Outlook, and logs the partnership in Salesforce.
naftiko: "0.5"
info:
label: "Content Creator Partnership Pipeline"
description: "Looks up a creator in HubSpot, generates a partnership agreement in SharePoint, sends an invite via Microsoft Outlook, and logs the partnership in Salesforce."
tags:
- partnerships
- hubspot
- sharepoint
- microsoft-outlook
- salesforce
capability:
exposes:
- type: mcp
namespace: creator-partnerships
port: 8080
tools:
- name: onboard-creator
description: "Orchestrate content creator partnership onboarding."
inputParameters:
- name: creator_email
in: body
type: string
description: "Content creator email."
- name: game_title
in: body
type: string
description: "Game title for partnership."
steps:
- name: lookup-contact
type: call
call: "hubspot.get-contact"
with:
email: "{{creator_email}}"
- name: create-agreement
type: call
call: "sharepoint.create-document"
with:
site: "partnerships"
folder: "agreements"
name: "{{lookup-contact.name}}-{{game_title}}-agreement.docx"
- name: send-invite
type: call
call: "outlook.send-email"
with:
to: "{{creator_email}}"
subject: "Blizzard Content Creator Partnership - {{game_title}}"
body: "Welcome to the {{game_title}} creator program! Agreement: {{create-agreement.web_url}}"
- name: log-partnership
type: call
call: "salesforce.create-opportunity"
with:
name: "Creator Partnership - {{lookup-contact.name}} - {{game_title}}"
stage: "Onboarding"
contact_id: "{{lookup-contact.id}}"
consumes:
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: contacts
path: "/contacts/v1/contact/email/{{email}}/profile"
inputParameters:
- name: email
in: path
operations:
- name: get-contact
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: documents
path: "/sites/{{site}}/drive/root:/{{folder}}:/children"
inputParameters:
- name: site
in: path
- name: folder
in: path
operations:
- name: create-document
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/me/sendMail"
operations:
- name: send-email
method: POST
- type: http
namespace: salesforce
baseUri: "https://blizzard.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity"
operations:
- name: create-opportunity
method: POST
Runs database migration scripts via GitHub Actions, validates data in Amazon Redshift, creates a ServiceNow change record, and notifies the DBA team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Database Migration Pipeline"
description: "Runs database migration scripts via GitHub Actions, validates data in Amazon Redshift, creates a ServiceNow change record, and notifies the DBA team in Microsoft Teams."
tags:
- database
- github-actions
- amazon-redshift
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: db-migration
port: 8080
tools:
- name: run-migration
description: "Orchestrate database migration with validation and tracking."
inputParameters:
- name: repo
in: body
type: string
description: "Migration repository."
- name: migration_version
in: body
type: string
description: "Migration version tag."
steps:
- name: trigger-workflow
type: call
call: "github.create-workflow-dispatch"
with:
repo: "{{repo}}"
workflow: "migrate.yml"
ref: "{{migration_version}}"
- name: validate-data
type: call
call: "redshift.execute-query"
with:
query: "SELECT schema_version, migration_status FROM admin.migration_log ORDER BY applied_at DESC LIMIT 1"
- name: create-change
type: call
call: "servicenow.create-record"
with:
table: "change_request"
short_description: "DB migration {{migration_version}} applied"
description: "Validation: {{validate-data.results}}."
- name: notify-dba
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.dba_channel_id"
text: "Migration {{migration_version}} complete. Status: {{validate-data.results[0].migration_status}}. Change: {{create-change.number}}."
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: workflows
path: "/repos/{{repo}}/actions/workflows/{{workflow}}/dispatches"
inputParameters:
- name: repo
in: path
- name: workflow
in: path
operations:
- name: create-workflow-dispatch
method: POST
- type: http
namespace: redshift
baseUri: "https://redshift-data.us-west-2.amazonaws.com"
authentication:
type: awsSigV4
accessKeyId: "$secrets.aws_access_key_id"
secretAccessKey: "$secrets.aws_secret_access_key"
resources:
- name: statements
path: "/"
operations:
- name: execute-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://blizzard.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves the current status of a Datadog monitor for game server health, returning state, name, and last triggered timestamp.
naftiko: "0.5"
info:
label: "Datadog Game Server Monitoring"
description: "Retrieves the current status of a Datadog monitor for game server health, returning state, name, and last triggered timestamp."
tags:
- monitoring
- datadog
- game-servers
capability:
exposes:
- type: mcp
namespace: server-monitoring
port: 8080
tools:
- name: get-monitor-status
description: "Look up a Datadog monitor by ID for game server health."
inputParameters:
- name: monitor_id
in: body
type: string
description: "The Datadog monitor ID."
call: "datadog.get-monitor"
with:
monitor_id: "{{monitor_id}}"
outputParameters:
- name: name
type: string
mapping: "$.name"
- name: state
type: string
mapping: "$.overall_state"
- name: last_triggered
type: string
mapping: "$.overall_state_modified"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
appKey: "$secrets.datadog_app_key"
resources:
- name: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
Receives a Dynatrace performance alert, enriches with Splunk log data, creates a ServiceNow incident, and notifies the SRE team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Dynatrace APM Alert Response Pipeline"
description: "Receives a Dynatrace performance alert, enriches with Splunk log data, creates a ServiceNow incident, and notifies the SRE team via Microsoft Teams."
tags:
- apm
- dynatrace
- splunk
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: apm-alert-response
port: 8080
tools:
- name: respond-to-alert
description: "Orchestrate APM alert investigation and incident creation."
inputParameters:
- name: problem_id
in: body
type: string
description: "Dynatrace problem ID."
- name: service_name
in: body
type: string
description: "Affected service name."
steps:
- name: get-problem
type: call
call: "dynatrace.get-problem"
with:
problem_id: "{{problem_id}}"
- name: search-logs
type: call
call: "splunk.search"
with:
query: "index=application service={{service_name}} level=ERROR earliest=-30m | head 50"
- name: create-incident
type: call
call: "servicenow.create-record"
with:
table: "incident"
short_description: "APM Alert: {{get-problem.title}} on {{service_name}}"
description: "Dynatrace problem: {{problem_id}}. Root cause: {{get-problem.root_cause}}. Recent errors: {{search-logs.result_count}}."
urgency: "2"
- name: notify-sre
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.sre_channel_id"
text: "APM Alert on {{service_name}}: {{get-problem.title}}. Incident: {{create-incident.number}}. Errors in last 30m: {{search-logs.result_count}}."
consumes:
- type: http
namespace: dynatrace
baseUri: "https://blizzard.live.dynatrace.com/api/v2"
authentication:
type: apiKey
key: "$secrets.dynatrace_api_token"
resources:
- name: problems
path: "/problems/{{problem_id}}"
inputParameters:
- name: problem_id
in: path
operations:
- name: get-problem
method: GET
- type: http
namespace: splunk
baseUri: "https://splunk.blizzard.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search
path: "/search/jobs"
operations:
- name: search
method: POST
- type: http
namespace: servicenow
baseUri: "https://blizzard.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves Dynatrace application performance data for game microservices.
naftiko: "0.5"
info:
label: "Dynatrace Game Service Performance"
description: "Retrieves Dynatrace application performance data for game microservices."
tags:
- monitoring
- dynatrace
- performance
capability:
exposes:
- type: mcp
namespace: apm-monitoring
port: 8080
tools:
- name: get-service-metrics
description: "Look up Dynatrace service metrics."
inputParameters:
- name: entity_id
in: body
type: string
description: "The Dynatrace service entity ID."
call: "dynatrace.get-entity"
with:
entity_id: "{{entity_id}}"
consumes:
- type: http
namespace: dynatrace
baseUri: "https://blizzard.live.dynatrace.com/api/v2"
authentication:
type: bearer
token: "$secrets.dynatrace_token"
resources:
- name: entities
path: "/entities/{{entity_id}}"
inputParameters:
- name: entity_id
in: path
operations:
- name: get-entity
method: GET
Deactivates Workday profile, revokes access in ServiceNow, removes from Microsoft Teams groups, and archives Perforce workspace.
naftiko: "0.5"
info:
label: "Employee Offboarding Pipeline"
description: "Deactivates Workday profile, revokes access in ServiceNow, removes from Microsoft Teams groups, and archives Perforce workspace."
tags:
- hr
- workday
- servicenow
- microsoft-teams
- perforce
capability:
exposes:
- type: mcp
namespace: employee-offboarding
port: 8080
tools:
- name: offboard-employee
description: "Orchestrate employee offboarding across all systems."
inputParameters:
- name: employee_id
in: body
type: string
description: "Workday employee ID."
- name: email
in: body
type: string
description: "Employee email."
steps:
- name: deactivate-workday
type: call
call: "workday.update-worker"
with:
employee_id: "{{employee_id}}"
status: "inactive"
- name: revoke-access
type: call
call: "servicenow.create-request"
with:
short_description: "Offboarding access revocation for {{email}}"
category: "Access Revocation"
employee_id: "{{employee_id}}"
- name: remove-teams
type: call
call: "msteams.remove-member"
with:
email: "{{email}}"
- name: archive-workspace
type: call
call: "perforce.archive-workspace"
with:
workspace: "{{employee_id}}-workspace"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/service/blizzard"
authentication:
type: basic
username: "$secrets.workday_user"
password: "$secrets.workday_password"
resources:
- name: workers
path: "/Human_Resources/Worker/{{employee_id}}"
inputParameters:
- name: employee_id
in: path
operations:
- name: update-worker
method: PUT
- type: http
namespace: servicenow
baseUri: "https://blizzard.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: members
path: "/users/{{email}}"
inputParameters:
- name: email
in: path
operations:
- name: remove-member
method: DELETE
- type: http
namespace: perforce
baseUri: "https://perforce.blizzard.com/api/v1"
authentication:
type: basic
username: "$secrets.perforce_user"
password: "$secrets.perforce_password"
resources:
- name: workspaces
path: "/workspaces/{{workspace}}"
inputParameters:
- name: workspace
in: path
operations:
- name: archive-workspace
method: DELETE
Creates a tournament event in the internal system, schedules Zoom broadcast rooms, posts announcements to Twitter and Facebook, and notifies the esports team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Esports Tournament Setup Pipeline"
description: "Creates a tournament event in the internal system, schedules Zoom broadcast rooms, posts announcements to Twitter and Facebook, and notifies the esports team via Microsoft Teams."
tags:
- esports
- tournament
- zoom
- twitter
- facebook
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: esports-tournament
port: 8080
tools:
- name: setup-tournament
description: "Given tournament details, orchestrate setup across Zoom, Twitter, Facebook, and Microsoft Teams."
inputParameters:
- name: tournament_name
in: body
type: string
description: "Name of the tournament."
- name: game_title
in: body
type: string
description: "The game being played."
- name: start_time
in: body
type: string
description: "Tournament start time in ISO 8601."
- name: esports_channel
in: body
type: string
description: "Microsoft Teams channel for esports team."
steps:
- name: create-broadcast-room
type: call
call: "zoom.create-meeting"
with:
topic: "{{tournament_name}} - {{game_title}} Broadcast"
duration: "480"
start_time: "{{start_time}}"
- name: announce-twitter
type: call
call: "twitter.create-tweet"
with:
text: "{{tournament_name}} for {{game_title}} starts soon! Watch live: {{create-broadcast-room.join_url}} #Blizzard #Esports"
- name: announce-facebook
type: call
call: "facebook.create-post"
with:
message: "{{tournament_name}} for {{game_title}} is coming! Tune in: {{create-broadcast-room.join_url}}"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{esports_channel}}"
text: "Tournament setup complete: {{tournament_name}}. Broadcast room: {{create-broadcast-room.join_url}}. Social posts published."
consumes:
- type: http
namespace: zoom
baseUri: "https://api.zoom.us/v2"
authentication:
type: bearer
token: "$secrets.zoom_token"
resources:
- name: meetings
path: "/users/me/meetings"
operations:
- name: create-meeting
method: POST
- type: http
namespace: twitter
baseUri: "https://api.twitter.com/2"
authentication:
type: bearer
token: "$secrets.twitter_bearer_token"
resources:
- name: tweets
path: "/tweets"
operations:
- name: create-tweet
method: POST
- type: http
namespace: facebook
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.facebook_page_token"
resources:
- name: posts
path: "/me/feed"
operations:
- name: create-post
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Creates a Facebook page post for game community updates and engagement.
naftiko: "0.5"
info:
label: "Facebook Community Post"
description: "Creates a Facebook page post for game community updates and engagement."
tags:
- marketing
- facebook
- community
capability:
exposes:
- type: mcp
namespace: social-facebook
port: 8080
tools:
- name: create-facebook-post
description: "Create a Facebook page post."
inputParameters:
- name: message
in: body
type: string
description: "The post message."
- name: link
in: body
type: string
description: "Optional link to attach."
call: "facebook.create-post"
with:
message: "{{message}}"
link: "{{link}}"
consumes:
- type: http
namespace: facebook
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.facebook_page_token"
resources:
- name: posts
path: "/me/feed"
operations:
- name: create-post
method: POST
Retrieves a Figma file by key for game UI/UX design asset management, returning file name, last modified date, and thumbnail URL.
naftiko: "0.5"
info:
label: "Figma Asset Export"
description: "Retrieves a Figma file by key for game UI/UX design asset management, returning file name, last modified date, and thumbnail URL."
tags:
- design
- figma
- ui
- gaming
capability:
exposes:
- type: mcp
namespace: design-assets
port: 8080
tools:
- name: get-figma-file
description: "Look up a Figma file by key."
inputParameters:
- name: file_key
in: body
type: string
description: "The Figma file key."
call: "figma.get-file"
with:
file_key: "{{file_key}}"
outputParameters:
- name: name
type: string
mapping: "$.name"
- name: last_modified
type: string
mapping: "$.lastModified"
- name: thumbnail_url
type: string
mapping: "$.thumbnailUrl"
consumes:
- type: http
namespace: figma
baseUri: "https://api.figma.com/v1"
authentication:
type: bearer
token: "$secrets.figma_token"
resources:
- name: files
path: "/files/{{file_key}}"
inputParameters:
- name: file_key
in: path
operations:
- name: get-file
method: GET
Pulls weekly KPIs from Looker, refreshes a Power BI dashboard, generates a summary in Confluence, and sends the digest via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Game Analytics Weekly Digest Pipeline"
description: "Pulls weekly KPIs from Looker, refreshes a Power BI dashboard, generates a summary in Confluence, and sends the digest via Microsoft Outlook."
tags:
- analytics
- looker
- power-bi
- confluence
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: analytics-digest
port: 8080
tools:
- name: generate-weekly-digest
description: "Orchestrate weekly analytics report generation and distribution."
inputParameters:
- name: game_title
in: body
type: string
description: "Game title."
- name: week_ending
in: body
type: string
description: "Week ending date in YYYY-MM-DD."
steps:
- name: pull-kpis
type: call
call: "looker.run-look"
with:
look_id: "$secrets.weekly_kpi_look_id"
filters: "{\"game_title\": \"{{game_title}}\", \"week_ending\": \"{{week_ending}}\"}"
- name: refresh-dashboard
type: call
call: "powerbi.refresh-dataset"
with:
group_id: "$secrets.powerbi_workspace_id"
dataset_id: "$secrets.powerbi_dataset_id"
- name: create-summary
type: call
call: "confluence.create-page"
with:
space: "ANALYTICS"
title: "{{game_title}} Weekly Digest - {{week_ending}}"
body: "DAU: {{pull-kpis.dau}}. WAU: {{pull-kpis.wau}}. Revenue: {{pull-kpis.revenue}}. Retention D7: {{pull-kpis.d7_retention}}."
- name: send-digest
type: call
call: "outlook.send-email"
with:
to: "$secrets.game_leadership_dl"
subject: "{{game_title}} Weekly Analytics - {{week_ending}}"
body: "Weekly digest published: {{create-summary.web_url}}. Dashboard refreshed."
consumes:
- type: http
namespace: looker
baseUri: "https://blizzard.looker.com/api/4.0"
authentication:
type: bearer
token: "$secrets.looker_token"
resources:
- name: looks
path: "/looks/{{look_id}}/run/json"
inputParameters:
- name: look_id
in: path
operations:
- name: run-look
method: GET
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: confluence
baseUri: "https://blizzard.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Fetches art assets from Figma, creates a review task in Jira, uploads approved assets to Amazon S3, and notifies the art director via Microsoft Teams.
naftiko: "0.5"
info:
label: "Game Art Review Pipeline"
description: "Fetches art assets from Figma, creates a review task in Jira, uploads approved assets to Amazon S3, and notifies the art director via Microsoft Teams."
tags:
- art-production
- figma
- jira
- amazon-s3
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: art-review
port: 8080
tools:
- name: submit-art-review
description: "Orchestrate art asset review from Figma to approval."
inputParameters:
- name: figma_file_id
in: body
type: string
description: "Figma file ID containing art assets."
- name: asset_category
in: body
type: string
description: "Asset category for review."
steps:
- name: get-figma-assets
type: call
call: "figma.get-file"
with:
file_key: "{{figma_file_id}}"
- name: create-review-task
type: call
call: "jira.create-issue"
with:
project: "ART"
summary: "Art review: {{asset_category}} from Figma {{figma_file_id}}"
description: "Review assets in Figma file. Components: {{get-figma-assets.component_count}}."
issuetype: "Review"
- name: notify-director
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.art_director_channel"
text: "New art review submitted: {{asset_category}}. Figma: https://figma.com/file/{{figma_file_id}}. Jira: {{create-review-task.key}}"
consumes:
- type: http
namespace: figma
baseUri: "https://api.figma.com/v1"
authentication:
type: bearer
token: "$secrets.figma_token"
resources:
- name: files
path: "/files/{{file_key}}"
inputParameters:
- name: file_key
in: path
operations:
- name: get-file
method: GET
- type: http
namespace: jira
baseUri: "https://blizzard.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Deploys balance changes from Perforce to staging, validates via automated tests in Jenkins, pushes config to Amazon S3, and publishes patch notes on Confluence.
naftiko: "0.5"
info:
label: "Game Balance Patch Rollout Pipeline"
description: "Deploys balance changes from Perforce to staging, validates via automated tests in Jenkins, pushes config to Amazon S3, and publishes patch notes on Confluence."
tags:
- game-balance
- perforce
- jenkins
- amazon-s3
- confluence
capability:
exposes:
- type: mcp
namespace: balance-patch
port: 8080
tools:
- name: rollout-patch
description: "Orchestrate game balance patch from build to release notes."
inputParameters:
- name: changelist
in: body
type: string
description: "Perforce changelist with balance changes."
- name: game_title
in: body
type: string
description: "Game title."
steps:
- name: get-changes
type: call
call: "perforce.get-changelist"
with:
changelist: "{{changelist}}"
- name: run-validation
type: call
call: "jenkins.trigger-build"
with:
job_name: "balance-validation-{{game_title}}"
changelist: "{{changelist}}"
- name: deploy-config
type: call
call: "s3.put-object"
with:
bucket: "game-configs"
key: "{{game_title}}/balance/latest.json"
body: "{{get-changes.files}}"
- name: publish-notes
type: call
call: "confluence.create-page"
with:
space: "GAME"
title: "{{game_title}} Balance Patch - CL{{changelist}}"
body: "Balance changes deployed. Files: {{get-changes.file_count}}. Validation: {{run-validation.status}}."
consumes:
- type: http
namespace: perforce
baseUri: "https://perforce.blizzard.com/api/v1"
authentication:
type: basic
username: "$secrets.perforce_user"
password: "$secrets.perforce_password"
resources:
- name: changelists
path: "/changelists/{{changelist}}"
inputParameters:
- name: changelist
in: path
operations:
- name: get-changelist
method: GET
- type: http
namespace: jenkins
baseUri: "https://jenkins.blizzard.com"
authentication:
type: basic
username: "$secrets.jenkins_user"
password: "$secrets.jenkins_api_token"
resources:
- name: jobs
path: "/job/{{job_name}}/buildWithParameters"
inputParameters:
- name: job_name
in: path
operations:
- name: trigger-build
method: POST
- type: http
namespace: s3
baseUri: "https://s3.us-west-2.amazonaws.com"
authentication:
type: awsSigV4
accessKeyId: "$secrets.aws_access_key_id"
secretAccessKey: "$secrets.aws_secret_access_key"
resources:
- name: objects
path: "/{{bucket}}/{{key}}"
inputParameters:
- name: bucket
in: path
- name: key
in: path
operations:
- name: put-object
method: PUT
- type: http
namespace: confluence
baseUri: "https://blizzard.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
When a game build is triggered in Jenkins, monitors the build status, publishes artifacts to Perforce, creates a Jira build report, and notifies the development team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Game Build Pipeline Orchestrator"
description: "When a game build is triggered in Jenkins, monitors the build status, publishes artifacts to Perforce, creates a Jira build report, and notifies the development team via Microsoft Teams."
tags:
- game-development
- ci
- jenkins
- perforce
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: game-build
port: 8080
tools:
- name: trigger-game-build
description: "Given a Jenkins job name and branch, orchestrate a game build pipeline across Jenkins, Perforce, Jira, and Microsoft Teams."
inputParameters:
- name: job_name
in: body
type: string
description: "The Jenkins job name for the game build."
- name: branch
in: body
type: string
description: "The Perforce branch or stream to build."
- name: jira_project_key
in: body
type: string
description: "Jira project key for build tracking."
- name: team_channel_id
in: body
type: string
description: "Microsoft Teams channel for build notifications."
steps:
- name: start-build
type: call
call: "jenkins.trigger-build"
with:
job_name: "{{job_name}}"
parameters: "{\"BRANCH\": \"{{branch}}\"}"
- name: create-build-ticket
type: call
call: "jira.create-issue"
with:
project_key: "{{jira_project_key}}"
summary: "Build: {{job_name}} - {{branch}} #{{start-build.build_number}}"
issue_type: "Task"
description: "Jenkins build #{{start-build.build_number}} triggered for {{branch}}."
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{team_channel_id}}"
text: "Game build started: {{job_name}} #{{start-build.build_number}} ({{branch}}). Tracking: {{create-build-ticket.key}}."
consumes:
- type: http
namespace: jenkins
baseUri: "https://jenkins.blizzard.com"
authentication:
type: basic
username: "$secrets.jenkins_user"
password: "$secrets.jenkins_api_token"
resources:
- name: jobs
path: "/job/{{job_name}}/build"
inputParameters:
- name: job_name
in: path
operations:
- name: trigger-build
method: POST
- type: http
namespace: jira
baseUri: "https://blizzard.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Pulls player data handling logs from Splunk, generates an audit report in Confluence, creates a compliance ticket in Jira, and sends the report to legal via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Game Compliance Audit Pipeline"
description: "Pulls player data handling logs from Splunk, generates an audit report in Confluence, creates a compliance ticket in Jira, and sends the report to legal via Microsoft Outlook."
tags:
- compliance
- splunk
- confluence
- jira
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: compliance-audit
port: 8080
tools:
- name: run-audit
description: "Orchestrate compliance audit from data collection to reporting."
inputParameters:
- name: audit_scope
in: body
type: string
description: "Audit scope description."
- name: date_range
in: body
type: string
description: "Audit date range."
steps:
- name: search-logs
type: call
call: "splunk.search"
with:
query: "index=player_data action=* earliest={{date_range}} | stats count by action, data_category"
- name: create-report
type: call
call: "confluence.create-page"
with:
space: "COMPLIANCE"
title: "Compliance Audit: {{audit_scope}} - {{date_range}}"
body: "Data handling summary: {{search-logs.results}}."
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project: "COMPLY"
summary: "Audit: {{audit_scope}}"
description: "Report: {{create-report.web_url}}."
issuetype: "Task"
- name: send-report
type: call
call: "outlook.send-email"
with:
to: "$secrets.legal_compliance_email"
subject: "Compliance Audit Report: {{audit_scope}}"
body: "Audit complete. Report: {{create-report.web_url}}. Jira: {{create-ticket.key}}."
consumes:
- type: http
namespace: splunk
baseUri: "https://splunk.blizzard.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search
path: "/search/jobs"
operations:
- name: search
method: POST
- type: http
namespace: confluence
baseUri: "https://blizzard.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: jira
baseUri: "https://blizzard.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: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Aggregates crash reports from Splunk, creates a Jira bug with stack trace, correlates with Grafana dashboards, and alerts the engineering lead in Microsoft Teams.
naftiko: "0.5"
info:
label: "Game Crash Report Triage Pipeline"
description: "Aggregates crash reports from Splunk, creates a Jira bug with stack trace, correlates with Grafana dashboards, and alerts the engineering lead in Microsoft Teams."
tags:
- crash-reporting
- splunk
- jira
- grafana
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: crash-triage
port: 8080
tools:
- name: triage-crash
description: "Orchestrate crash report investigation and bug filing."
inputParameters:
- name: game_title
in: body
type: string
description: "Game title."
- name: time_range
in: body
type: string
description: "Time range for crash aggregation."
steps:
- name: search-crashes
type: call
call: "splunk.search"
with:
query: "index=game_crashes game_title={{game_title}} earliest={{time_range}} | top limit=5 crash_signature"
- name: get-dashboard
type: call
call: "grafana.get-dashboard"
with:
uid: "$secrets.crash_dashboard_uid"
- name: create-bug
type: call
call: "jira.create-issue"
with:
project: "CRASH"
summary: "Top crashes in {{game_title}} - {{time_range}}"
description: "Top crash signatures: {{search-crashes.results}}. Dashboard: {{get-dashboard.url}}."
issuetype: "Bug"
priority: "Critical"
- name: alert-lead
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.eng_lead_channel"
text: "Crash spike in {{game_title}}. Top crashes filed: {{create-bug.key}}. Dashboard: {{get-dashboard.url}}"
consumes:
- type: http
namespace: splunk
baseUri: "https://splunk.blizzard.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search
path: "/search/jobs"
operations:
- name: search
method: POST
- type: http
namespace: grafana
baseUri: "https://grafana.blizzard.com/api"
authentication:
type: bearer
token: "$secrets.grafana_token"
resources:
- name: dashboards
path: "/dashboards/uid/{{uid}}"
inputParameters:
- name: uid
in: path
operations:
- name: get-dashboard
method: GET
- type: http
namespace: jira
baseUri: "https://blizzard.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Triggers a hotfix build in Jenkins, runs automated tests, deploys to staging via Azure DevOps, and notifies the team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Game Hotfix Deployment Pipeline"
description: "Triggers a hotfix build in Jenkins, runs automated tests, deploys to staging via Azure DevOps, and notifies the team in Microsoft Teams."
tags:
- deployment
- jenkins
- azure-devops
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hotfix-deployment
port: 8080
tools:
- name: deploy-hotfix
description: "Orchestrate a hotfix from build through staging deployment with team notification."
inputParameters:
- name: repo
in: body
type: string
description: "Repository name."
- name: branch
in: body
type: string
description: "Hotfix branch name."
- name: team_channel
in: body
type: string
description: "Microsoft Teams channel ID."
steps:
- name: trigger-build
type: call
call: "jenkins.trigger-build"
with:
job_name: "{{repo}}-hotfix"
branch: "{{branch}}"
- name: run-tests
type: call
call: "azuredevops.trigger-pipeline"
with:
project: "{{repo}}"
pipeline: "automated-tests"
branch: "{{branch}}"
- name: deploy-staging
type: call
call: "azuredevops.trigger-pipeline"
with:
project: "{{repo}}"
pipeline: "deploy-staging"
build_id: "{{trigger-build.build_id}}"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{team_channel}}"
text: "Hotfix deployed to staging: {{repo}}/{{branch}}. Build: {{trigger-build.build_id}}. Tests: {{run-tests.status}}."
consumes:
- type: http
namespace: jenkins
baseUri: "https://jenkins.blizzard.com"
authentication:
type: basic
username: "$secrets.jenkins_user"
password: "$secrets.jenkins_api_token"
resources:
- name: jobs
path: "/job/{{job_name}}/buildWithParameters"
inputParameters:
- name: job_name
in: path
operations:
- name: trigger-build
method: POST
- type: http
namespace: azuredevops
baseUri: "https://dev.azure.com/blizzard"
authentication:
type: basic
username: ""
password: "$secrets.azure_devops_pat"
resources:
- name: pipelines
path: "/{{project}}/_apis/pipelines/{{pipeline}}/runs"
inputParameters:
- name: project
in: path
- name: pipeline
in: path
operations:
- name: trigger-pipeline
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
On game launch day, verifies server fleet health via Datadog, checks CDN status via Cloudflare, creates a ServiceNow launch event ticket, and posts a go/no-go status to Microsoft Teams.
naftiko: "0.5"
info:
label: "Game Launch Day Readiness Pipeline"
description: "On game launch day, verifies server fleet health via Datadog, checks CDN status via Cloudflare, creates a ServiceNow launch event ticket, and posts a go/no-go status to Microsoft Teams."
tags:
- game-launch
- datadog
- cloudflare
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: launch-readiness
port: 8080
tools:
- name: check-launch-readiness
description: "Given a game title and launch configuration, verify readiness across monitoring, CDN, ticketing, and communication."
inputParameters:
- name: game_title
in: body
type: string
description: "The game title being launched."
- name: monitor_group
in: body
type: string
description: "Datadog monitor group tag for the game servers."
- name: zone_id
in: body
type: string
description: "Cloudflare zone ID for the game CDN."
- name: launch_channel_id
in: body
type: string
description: "Microsoft Teams channel for launch coordination."
steps:
- name: check-servers
type: call
call: "datadog.search-monitors"
with:
query: "tag:{{monitor_group}}"
- name: check-cdn
type: call
call: "cloudflare.get-zone-status"
with:
zone_id: "{{zone_id}}"
- name: create-launch-ticket
type: call
call: "servicenow.create-change-request"
with:
short_description: "Game launch: {{game_title}}"
description: "Server health: {{check-servers.overall_status}}. CDN status: {{check-cdn.status}}."
category: "game_launch"
- name: post-status
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{launch_channel_id}}"
text: "LAUNCH READINESS for {{game_title}}: Servers: {{check-servers.overall_status}}. CDN: {{check-cdn.status}}. CR: {{create-launch-ticket.number}}."
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
appKey: "$secrets.datadog_app_key"
resources:
- name: monitors
path: "/monitor/search?query={{query}}"
inputParameters:
- name: query
in: query
operations:
- name: search-monitors
method: GET
- type: http
namespace: cloudflare
baseUri: "https://api.cloudflare.com/client/v4"
authentication:
type: bearer
token: "$secrets.cloudflare_token"
resources:
- name: zones
path: "/zones/{{zone_id}}"
inputParameters:
- name: zone_id
in: path
operations:
- name: get-zone-status
method: GET
- type: http
namespace: servicenow
baseUri: "https://blizzard.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: change-requests
path: "/table/change_request"
operations:
- name: create-change-request
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Creates a Salesforce opportunity, generates a licensing agreement in SharePoint, sends for review via Microsoft Outlook, and tracks in Jira.
naftiko: "0.5"
info:
label: "Game Licensing Deal Pipeline"
description: "Creates a Salesforce opportunity, generates a licensing agreement in SharePoint, sends for review via Microsoft Outlook, and tracks in Jira."
tags:
- licensing
- salesforce
- sharepoint
- microsoft-outlook
- jira
capability:
exposes:
- type: mcp
namespace: licensing-deal
port: 8080
tools:
- name: create-deal
description: "Orchestrate game licensing deal creation and tracking."
inputParameters:
- name: partner_name
in: body
type: string
description: "Licensing partner name."
- name: game_title
in: body
type: string
description: "Game being licensed."
- name: deal_value
in: body
type: string
description: "Deal value."
steps:
- name: create-opportunity
type: call
call: "salesforce.create-opportunity"
with:
name: "License: {{partner_name}} - {{game_title}}"
amount: "{{deal_value}}"
stage: "Negotiation"
- name: generate-agreement
type: call
call: "sharepoint.create-document"
with:
site: "legal"
folder: "licensing-agreements"
name: "{{partner_name}}-{{game_title}}-license.docx"
- name: send-review
type: call
call: "outlook.send-email"
with:
to: "$secrets.legal_team_email"
subject: "License Agreement Review: {{partner_name}} - {{game_title}}"
body: "Agreement: {{generate-agreement.web_url}}. Salesforce: {{create-opportunity.id}}. Value: {{deal_value}}."
- name: track-deal
type: call
call: "jira.create-issue"
with:
project: "LEGAL"
summary: "License deal: {{partner_name}} - {{game_title}}"
description: "SF Opportunity: {{create-opportunity.id}}. Agreement: {{generate-agreement.web_url}}."
issuetype: "Task"
consumes:
- type: http
namespace: salesforce
baseUri: "https://blizzard.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity"
operations:
- name: create-opportunity
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: documents
path: "/sites/{{site}}/drive/root:/{{folder}}:/children"
inputParameters:
- name: site
in: path
- name: folder
in: path
operations:
- name: create-document
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/me/sendMail"
operations:
- name: send-email
method: POST
- type: http
namespace: jira
baseUri: "https://blizzard.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
Creates a Zoom broadcast, schedules YouTube livestream, posts announcements to Facebook and Twitter, and tracks the event in Jira.
naftiko: "0.5"
info:
label: "Game Livestream Event Pipeline"
description: "Creates a Zoom broadcast, schedules YouTube livestream, posts announcements to Facebook and Twitter, and tracks the event in Jira."
tags:
- livestream
- zoom
- youtube
- facebook
- twitter
- jira
capability:
exposes:
- type: mcp
namespace: livestream-event
port: 8080
tools:
- name: setup-livestream
description: "Orchestrate livestream setup across platforms."
inputParameters:
- name: event_name
in: body
type: string
description: "Livestream event name."
- name: start_time
in: body
type: string
description: "Start time in ISO 8601."
- name: game_title
in: body
type: string
description: "Game being showcased."
steps:
- name: create-zoom
type: call
call: "zoom.create-meeting"
with:
topic: "{{event_name}} - {{game_title}}"
start_time: "{{start_time}}"
type: "6"
- name: schedule-youtube
type: call
call: "youtube.create-broadcast"
with:
title: "{{event_name}} - {{game_title}}"
scheduled_start: "{{start_time}}"
- name: post-twitter
type: call
call: "twitter.create-tweet"
with:
text: "Join us for {{event_name}}! {{game_title}} livestream starting {{start_time}}. YouTube: {{schedule-youtube.watch_url}} #Blizzard"
- name: post-facebook
type: call
call: "facebook.create-post"
with:
message: "{{event_name}} for {{game_title}}! Watch live: {{schedule-youtube.watch_url}}"
- name: track-event
type: call
call: "jira.create-issue"
with:
project: "EVENTS"
summary: "Livestream: {{event_name}}"
description: "Zoom: {{create-zoom.join_url}}. YouTube: {{schedule-youtube.watch_url}}."
issuetype: "Task"
consumes:
- type: http
namespace: zoom
baseUri: "https://api.zoom.us/v2"
authentication:
type: bearer
token: "$secrets.zoom_token"
resources:
- name: meetings
path: "/users/me/meetings"
operations:
- name: create-meeting
method: POST
- type: http
namespace: youtube
baseUri: "https://www.googleapis.com/youtube/v3"
authentication:
type: bearer
token: "$secrets.youtube_token"
resources:
- name: broadcasts
path: "/liveBroadcasts"
operations:
- name: create-broadcast
method: POST
- type: http
namespace: twitter
baseUri: "https://api.twitter.com/2"
authentication:
type: bearer
token: "$secrets.twitter_bearer_token"
resources:
- name: tweets
path: "/tweets"
operations:
- name: create-tweet
method: POST
- type: http
namespace: facebook
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.facebook_page_token"
resources:
- name: posts
path: "/me/feed"
operations:
- name: create-post
method: POST
- type: http
namespace: jira
baseUri: "https://blizzard.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
Extracts new game strings from Perforce, creates translation tasks in Jira, uploads source files to Box, and notifies the localization team via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Game Localization Workflow Pipeline"
description: "Extracts new game strings from Perforce, creates translation tasks in Jira, uploads source files to Box, and notifies the localization team via Microsoft Outlook."
tags:
- localization
- perforce
- jira
- box
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: localization-workflow
port: 8080
tools:
- name: start-localization
description: "Orchestrate localization from string extraction to translation task assignment."
inputParameters:
- name: changelist
in: body
type: string
description: "Perforce changelist number with new strings."
- name: target_languages
in: body
type: string
description: "Comma-separated list of target language codes."
steps:
- name: get-changelist
type: call
call: "perforce.get-changelist"
with:
changelist: "{{changelist}}"
- name: create-tasks
type: call
call: "jira.create-issue"
with:
project: "LOC"
summary: "Localize changelist {{changelist}} to {{target_languages}}"
description: "Files: {{get-changelist.file_count}} modified. Languages: {{target_languages}}."
issuetype: "Task"
- name: upload-source
type: call
call: "box.upload-file"
with:
folder_id: "$secrets.loc_source_folder_id"
content: "{{get-changelist.files}}"
- name: notify-team
type: call
call: "outlook.send-email"
with:
to: "$secrets.loc_team_email"
subject: "New localization task: CL {{changelist}}"
body: "Translation required for {{target_languages}}. Jira: {{create-tasks.key}}. Source files in Box."
consumes:
- type: http
namespace: perforce
baseUri: "https://perforce.blizzard.com/api/v1"
authentication:
type: basic
username: "$secrets.perforce_user"
password: "$secrets.perforce_password"
resources:
- name: changelists
path: "/changelists/{{changelist}}"
inputParameters:
- name: changelist
in: path
operations:
- name: get-changelist
method: GET
- type: http
namespace: jira
baseUri: "https://blizzard.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: box
baseUri: "https://upload.box.com/api/2.0"
authentication:
type: bearer
token: "$secrets.box_access_token"
resources:
- name: uploads
path: "/files/content"
operations:
- name: upload-file
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Compares Datadog game performance metrics between builds, creates a Jira bug if regression detected, and posts findings to Confluence.
naftiko: "0.5"
info:
label: "Game Performance Regression Pipeline"
description: "Compares Datadog game performance metrics between builds, creates a Jira bug if regression detected, and posts findings to Confluence."
tags:
- performance
- datadog
- jira
- confluence
capability:
exposes:
- type: mcp
namespace: perf-regression
port: 8080
tools:
- name: check-regression
description: "Compare performance metrics between two builds and report regressions."
inputParameters:
- name: game_title
in: body
type: string
description: "Game title."
- name: current_build
in: body
type: string
description: "Current build version."
- name: previous_build
in: body
type: string
description: "Previous build version."
steps:
- name: get-current-metrics
type: call
call: "datadog.query-metrics"
with:
query: "avg:game.frame_time{game:{{game_title}},build:{{current_build}}}"
- name: get-previous-metrics
type: call
call: "datadog.query-metrics"
with:
query: "avg:game.frame_time{game:{{game_title}},build:{{previous_build}}}"
- name: create-bug
type: call
call: "jira.create-issue"
with:
project: "PERF"
summary: "Performance regression in {{game_title}} build {{current_build}}"
description: "Current avg frame time: {{get-current-metrics.value}}ms vs previous: {{get-previous-metrics.value}}ms."
issuetype: "Bug"
- name: document-findings
type: call
call: "confluence.create-page"
with:
space: "PERF"
title: "{{game_title}} Perf Regression - {{current_build}}"
body: "Build {{current_build}} shows regression vs {{previous_build}}. Jira: {{create-bug.key}}."
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
appKey: "$secrets.datadog_app_key"
resources:
- name: metrics
path: "/query"
operations:
- name: query-metrics
method: GET
- type: http
namespace: jira
baseUri: "https://blizzard.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: confluence
baseUri: "https://blizzard.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Triggers a Unity build, creates a Jira test cycle, runs automated tests via Jenkins, and publishes results to Confluence.
naftiko: "0.5"
info:
label: "Game QA Test Cycle Pipeline"
description: "Triggers a Unity build, creates a Jira test cycle, runs automated tests via Jenkins, and publishes results to Confluence."
tags:
- qa
- unity
- jira
- jenkins
- confluence
capability:
exposes:
- type: mcp
namespace: qa-test-cycle
port: 8080
tools:
- name: run-test-cycle
description: "Orchestrate a full QA test cycle from build to results."
inputParameters:
- name: build_target
in: body
type: string
description: "Unity build target."
- name: test_suite
in: body
type: string
description: "Test suite name."
steps:
- name: trigger-build
type: call
call: "unity.create-build"
with:
target: "{{build_target}}"
- name: create-test-cycle
type: call
call: "jira.create-issue"
with:
project: "QA"
summary: "Test cycle: {{test_suite}} on {{build_target}}"
description: "Build ID: {{trigger-build.build_id}}."
issuetype: "Test Cycle"
- name: run-tests
type: call
call: "jenkins.trigger-build"
with:
job_name: "automated-tests-{{test_suite}}"
build_id: "{{trigger-build.build_id}}"
- name: publish-results
type: call
call: "confluence.create-page"
with:
space: "QA"
title: "Test Results: {{test_suite}} - Build {{trigger-build.build_id}}"
body: "Tests passed: {{run-tests.passed}}. Failed: {{run-tests.failed}}. Jira: {{create-test-cycle.key}}."
consumes:
- type: http
namespace: unity
baseUri: "https://build-api.cloud.unity3d.com/api/v1"
authentication:
type: apiKey
key: "$secrets.unity_api_key"
resources:
- name: builds
path: "/orgs/blizzard/projects/game/buildtargets/{{target}}/builds"
inputParameters:
- name: target
in: path
operations:
- name: create-build
method: POST
- type: http
namespace: jira
baseUri: "https://blizzard.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: jenkins
baseUri: "https://jenkins.blizzard.com"
authentication:
type: basic
username: "$secrets.jenkins_user"
password: "$secrets.jenkins_api_token"
resources:
- name: jobs
path: "/job/{{job_name}}/buildWithParameters"
inputParameters:
- name: job_name
in: path
operations:
- name: trigger-build
method: POST
- type: http
namespace: confluence
baseUri: "https://blizzard.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
When Datadog detects a game server outage, creates a P1 ServiceNow incident, pages the on-call engineer via Microsoft Teams, posts to the game status Twitter account, and creates a Jira tracking issue.
naftiko: "0.5"
info:
label: "Game Server Incident Response Pipeline"
description: "When Datadog detects a game server outage, creates a P1 ServiceNow incident, pages the on-call engineer via Microsoft Teams, posts to the game status Twitter account, and creates a Jira tracking issue."
tags:
- incident-response
- datadog
- servicenow
- microsoft-teams
- twitter
- jira
capability:
exposes:
- type: mcp
namespace: server-incident
port: 8080
tools:
- name: trigger-server-incident-response
description: "Given a Datadog alert for game server outage, orchestrate incident response across ServiceNow, Microsoft Teams, Twitter, and Jira."
inputParameters:
- name: alert_id
in: body
type: string
description: "The Datadog alert event ID."
- name: game_title
in: body
type: string
description: "Affected game title."
- name: on_call_email
in: body
type: string
description: "Email of the on-call engineer."
- name: project_key
in: body
type: string
description: "Jira project key."
steps:
- name: get-alert
type: call
call: "datadog.get-event"
with:
event_id: "{{alert_id}}"
- name: create-p1
type: call
call: "servicenow.create-incident"
with:
short_description: "P1: {{game_title}} server outage - {{get-alert.title}}"
priority: "1"
category: "game_infrastructure"
description: "{{get-alert.text}}"
- name: page-oncall
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{on_call_email}}"
text: "P1 SERVER OUTAGE: {{game_title}} - {{get-alert.title}}. ServiceNow: {{create-p1.number}}."
- name: post-status
type: call
call: "twitter.create-tweet"
with:
text: "We are aware of issues affecting {{game_title}} services. Our team is investigating. Updates to follow."
- name: create-tracker
type: call
call: "jira.create-issue"
with:
project_key: "{{project_key}}"
summary: "P1: {{game_title}} server outage"
issue_type: "Bug"
priority: "Highest"
description: "ServiceNow: {{create-p1.number}}. Alert: {{get-alert.text}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
appKey: "$secrets.datadog_app_key"
resources:
- name: events
path: "/events/{{event_id}}"
inputParameters:
- name: event_id
in: path
operations:
- name: get-event
method: GET
- type: http
namespace: servicenow
baseUri: "https://blizzard.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
- type: http
namespace: twitter
baseUri: "https://api.twitter.com/2"
authentication:
type: bearer
token: "$secrets.twitter_bearer_token"
resources:
- name: tweets
path: "/tweets"
operations:
- name: create-tweet
method: POST
- type: http
namespace: jira
baseUri: "https://blizzard.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
Creates a ServiceNow change request, posts maintenance notice to Twitter and Facebook, sends player email via MailChimp, and schedules server downtime in Datadog.
naftiko: "0.5"
info:
label: "Game Server Maintenance Window Pipeline"
description: "Creates a ServiceNow change request, posts maintenance notice to Twitter and Facebook, sends player email via MailChimp, and schedules server downtime in Datadog."
tags:
- maintenance
- servicenow
- twitter
- facebook
- mailchimp
- datadog
capability:
exposes:
- type: mcp
namespace: maintenance-window
port: 8080
tools:
- name: schedule-maintenance
description: "Orchestrate game server maintenance window communications."
inputParameters:
- name: game_title
in: body
type: string
description: "Game title."
- name: start_time
in: body
type: string
description: "Maintenance start time in ISO 8601."
- name: duration_hours
in: body
type: number
description: "Expected duration in hours."
steps:
- name: create-change
type: call
call: "servicenow.create-change"
with:
short_description: "Scheduled maintenance: {{game_title}}"
start_date: "{{start_time}}"
duration: "{{duration_hours}}"
- name: post-twitter
type: call
call: "twitter.create-tweet"
with:
text: "Scheduled maintenance for {{game_title}} starting {{start_time}} (~{{duration_hours}}h). We'll update you when servers are back. #BlizzardCS"
- name: post-facebook
type: call
call: "facebook.create-post"
with:
message: "{{game_title}} maintenance begins {{start_time}} for approximately {{duration_hours}} hours. Thank you for your patience!"
- name: send-email
type: call
call: "mailchimp.send-campaign"
with:
list_id: "$secrets.player_list_id"
subject: "{{game_title}} Scheduled Maintenance"
body: "Maintenance starts {{start_time}} for ~{{duration_hours}} hours."
- name: schedule-downtime
type: call
call: "datadog.create-downtime"
with:
scope: "game:{{game_title}}"
start: "{{start_time}}"
duration: "{{duration_hours}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://blizzard.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change
method: POST
- type: http
namespace: twitter
baseUri: "https://api.twitter.com/2"
authentication:
type: bearer
token: "$secrets.twitter_bearer_token"
resources:
- name: tweets
path: "/tweets"
operations:
- name: create-tweet
method: POST
- type: http
namespace: facebook
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.facebook_page_token"
resources:
- name: posts
path: "/me/feed"
operations:
- name: create-post
method: POST
- type: http
namespace: mailchimp
baseUri: "https://us1.api.mailchimp.com/3.0"
authentication:
type: basic
username: "anystring"
password: "$secrets.mailchimp_api_key"
resources:
- name: campaigns
path: "/campaigns"
operations:
- name: send-campaign
method: POST
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
appKey: "$secrets.datadog_app_key"
resources:
- name: downtimes
path: "/downtime"
operations:
- name: create-downtime
method: POST
Monitors Datadog for high player concurrency, triggers AWS Auto Scaling, updates Cloudflare load balancer, and posts status to Microsoft Teams.
naftiko: "0.5"
info:
label: "Game Server Scaling Pipeline"
description: "Monitors Datadog for high player concurrency, triggers AWS Auto Scaling, updates Cloudflare load balancer, and posts status to Microsoft Teams."
tags:
- scaling
- datadog
- aws
- cloudflare
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: server-scaling
port: 8080
tools:
- name: scale-game-servers
description: "Orchestrate game server scaling based on player concurrency thresholds."
inputParameters:
- name: game_region
in: body
type: string
description: "Game region identifier."
- name: target_capacity
in: body
type: number
description: "Desired server instance count."
steps:
- name: check-metrics
type: call
call: "datadog.query-metrics"
with:
query: "avg:game.concurrent_players{region:{{game_region}}}"
- name: scale-instances
type: call
call: "aws.update-auto-scaling"
with:
auto_scaling_group: "game-servers-{{game_region}}"
desired_capacity: "{{target_capacity}}"
- name: update-lb
type: call
call: "cloudflare.update-load-balancer"
with:
zone_id: "$secrets.cloudflare_zone_id"
region: "{{game_region}}"
- name: notify-ops
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.ops_channel_id"
text: "Server scaling complete for {{game_region}}. New capacity: {{target_capacity}}. Current players: {{check-metrics.value}}."
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
appKey: "$secrets.datadog_app_key"
resources:
- name: metrics
path: "/query"
operations:
- name: query-metrics
method: GET
- type: http
namespace: aws
baseUri: "https://autoscaling.us-west-2.amazonaws.com"
authentication:
type: awsSigV4
accessKeyId: "$secrets.aws_access_key_id"
secretAccessKey: "$secrets.aws_secret_access_key"
resources:
- name: auto-scaling
path: "/"
operations:
- name: update-auto-scaling
method: POST
- type: http
namespace: cloudflare
baseUri: "https://api.cloudflare.com/client/v4"
authentication:
type: bearer
token: "$secrets.cloudflare_api_token"
resources:
- name: load-balancers
path: "/zones/{{zone_id}}/load_balancers"
inputParameters:
- name: zone_id
in: path
operations:
- name: update-load-balancer
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Pulls sprint velocity from Jira, generates a summary in Confluence, refreshes a Tableau dashboard, and sends the review to stakeholders via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Game Studio Sprint Review Pipeline"
description: "Pulls sprint velocity from Jira, generates a summary in Confluence, refreshes a Tableau dashboard, and sends the review to stakeholders via Microsoft Outlook."
tags:
- agile
- jira
- confluence
- tableau
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: sprint-review
port: 8080
tools:
- name: generate-sprint-review
description: "Orchestrate sprint review report generation."
inputParameters:
- name: board_id
in: body
type: string
description: "Jira board ID."
- name: sprint_id
in: body
type: string
description: "Sprint ID."
steps:
- name: get-sprint-data
type: call
call: "jira.get-sprint-report"
with:
board_id: "{{board_id}}"
sprint_id: "{{sprint_id}}"
- name: create-summary
type: call
call: "confluence.create-page"
with:
space: "AGILE"
title: "Sprint Review - Sprint {{sprint_id}}"
body: "Completed: {{get-sprint-data.completed_issues}}. Velocity: {{get-sprint-data.velocity}}. Carried over: {{get-sprint-data.incomplete_issues}}."
- name: refresh-dashboard
type: call
call: "tableau.refresh-extract"
with:
workbook_id: "$secrets.sprint_workbook_id"
- name: send-review
type: call
call: "outlook.send-email"
with:
to: "$secrets.stakeholders_email"
subject: "Sprint {{sprint_id}} Review"
body: "Sprint review: {{create-summary.web_url}}. Velocity: {{get-sprint-data.velocity}}."
consumes:
- type: http
namespace: jira
baseUri: "https://blizzard.atlassian.net/rest/agile/1.0"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprints
path: "/board/{{board_id}}/sprint/{{sprint_id}}/report"
inputParameters:
- name: board_id
in: path
- name: sprint_id
in: path
operations:
- name: get-sprint-report
method: GET
- type: http
namespace: confluence
baseUri: "https://blizzard.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: tableau
baseUri: "https://tableau.blizzard.com/api/3.19"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: extracts
path: "/sites/default/workbooks/{{workbook_id}}/refresh"
inputParameters:
- name: workbook_id
in: path
operations:
- name: refresh-extract
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Uploads a trailer to YouTube, creates social media posts on Twitter and Instagram, updates the game website via Google Tag Manager, and notifies PR via Microsoft Teams.
naftiko: "0.5"
info:
label: "Game Trailer Release Pipeline"
description: "Uploads a trailer to YouTube, creates social media posts on Twitter and Instagram, updates the game website via Google Tag Manager, and notifies PR via Microsoft Teams."
tags:
- marketing
- youtube
- twitter
- instagram
- google-tag-manager
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: trailer-release
port: 8080
tools:
- name: release-trailer
description: "Orchestrate trailer release across platforms with tracking."
inputParameters:
- name: video_title
in: body
type: string
description: "Trailer title."
- name: game_title
in: body
type: string
description: "Game title."
- name: youtube_video_id
in: body
type: string
description: "YouTube video ID after upload."
steps:
- name: announce-twitter
type: call
call: "twitter.create-tweet"
with:
text: "Watch the new {{video_title}} for {{game_title}}! https://youtube.com/watch?v={{youtube_video_id}} #Blizzard"
- name: announce-instagram
type: call
call: "instagram.create-media"
with:
caption: "{{video_title}} is HERE. Link in bio. #{{game_title}} #Blizzard"
- name: update-tags
type: call
call: "gtm.create-tag"
with:
container_id: "$secrets.gtm_container_id"
name: "trailer-{{game_title}}"
video_id: "{{youtube_video_id}}"
- name: notify-pr
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.pr_channel_id"
text: "Trailer released: {{video_title}} for {{game_title}}. YouTube: https://youtube.com/watch?v={{youtube_video_id}}. Social posts live."
consumes:
- type: http
namespace: twitter
baseUri: "https://api.twitter.com/2"
authentication:
type: bearer
token: "$secrets.twitter_bearer_token"
resources:
- name: tweets
path: "/tweets"
operations:
- name: create-tweet
method: POST
- type: http
namespace: instagram
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.instagram_token"
resources:
- name: media
path: "/me/media"
operations:
- name: create-media
method: POST
- type: http
namespace: gtm
baseUri: "https://www.googleapis.com/tagmanager/v2"
authentication:
type: bearer
token: "$secrets.google_tagmanager_token"
resources:
- name: tags
path: "/accounts/blizzard/containers/{{container_id}}/workspaces/default/tags"
inputParameters:
- name: container_id
in: path
operations:
- name: create-tag
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves open pull requests for a game repository with review status and author information.
naftiko: "0.5"
info:
label: "GitHub Pull Request Summary"
description: "Retrieves open pull requests for a game repository with review status and author information."
tags:
- development
- github
- code-review
capability:
exposes:
- type: mcp
namespace: pr-summary
port: 8080
tools:
- name: list-open-prs
description: "List open pull requests for a repository."
inputParameters:
- name: repo
in: body
type: string
description: "Repository name in owner/repo format."
call: "github.list-pulls"
with:
repo: "{{repo}}"
state: "open"
outputParameters:
- name: pull_requests
type: array
mapping: "$.items"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: pulls
path: "/repos/{{repo}}/pulls"
inputParameters:
- name: repo
in: path
operations:
- name: list-pulls
method: GET
Fetches repository metadata from GitHub for Blizzard open-source game tools, returning open issues count, stars, and default branch.
naftiko: "0.5"
info:
label: "GitHub Repository Insights"
description: "Fetches repository metadata from GitHub for Blizzard open-source game tools, returning open issues count, stars, and default branch."
tags:
- development
- github
- repository
capability:
exposes:
- type: mcp
namespace: dev-insights
port: 8080
tools:
- name: get-repo-info
description: "Look up a GitHub repository by owner and name."
inputParameters:
- name: repo_name
in: body
type: string
description: "The repository name (e.g., Blizzard/heroprotocol)."
call: "github.get-repo"
with:
repo_name: "{{repo_name}}"
outputParameters:
- name: open_issues
type: integer
mapping: "$.open_issues_count"
- name: stars
type: integer
mapping: "$.stargazers_count"
- name: default_branch
type: string
mapping: "$.default_branch"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: repos
path: "/repos/{{repo_name}}"
inputParameters:
- name: repo_name
in: path
operations:
- name: get-repo
method: GET
Retrieves Google Analytics traffic metrics for Blizzard game websites.
naftiko: "0.5"
info:
label: "Google Analytics Game Website Traffic"
description: "Retrieves Google Analytics traffic metrics for Blizzard game websites."
tags:
- marketing
- google-analytics
- web-traffic
capability:
exposes:
- type: mcp
namespace: web-analytics
port: 8080
tools:
- name: get-traffic-report
description: "Retrieve GA4 traffic metrics for a game website."
inputParameters:
- name: property_id
in: body
type: string
description: "The GA4 property ID."
- name: start_date
in: body
type: string
description: "Start date (YYYY-MM-DD)."
- name: end_date
in: body
type: string
description: "End date (YYYY-MM-DD)."
call: "ga.run-report"
with:
property_id: "{{property_id}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
consumes:
- type: http
namespace: ga
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/properties/{{property_id}}:runReport"
inputParameters:
- name: property_id
in: path
operations:
- name: run-report
method: POST
Lists files in a Google Drive folder used for sharing game art assets and concept materials.
naftiko: "0.5"
info:
label: "Google Drive Asset Folder Listing"
description: "Lists files in a Google Drive folder used for sharing game art assets and concept materials."
tags:
- storage
- google-drive
- game-assets
capability:
exposes:
- type: mcp
namespace: asset-folder
port: 8080
tools:
- name: list-folder-contents
description: "List files in a Google Drive folder by folder ID."
inputParameters:
- name: folder_id
in: body
type: string
description: "Google Drive folder ID."
call: "googledrive.list-files"
with:
q: "'{{folder_id}}' in parents"
outputParameters:
- name: files
type: array
mapping: "$.files"
consumes:
- type: http
namespace: googledrive
baseUri: "https://www.googleapis.com/drive/v3"
authentication:
type: bearer
token: "$secrets.google_drive_token"
resources:
- name: files
path: "/files"
operations:
- name: list-files
method: GET
Retrieves Google Search Console data for Blizzard game websites.
naftiko: "0.5"
info:
label: "Google Search Console Performance"
description: "Retrieves Google Search Console data for Blizzard game websites."
tags:
- seo
- google-search-console
- marketing
capability:
exposes:
- type: mcp
namespace: seo-analytics
port: 8080
tools:
- name: get-search-performance
description: "Retrieve Google Search Console performance."
inputParameters:
- name: site_url
in: body
type: string
description: "The site URL."
- name: start_date
in: body
type: string
description: "Start date."
- name: end_date
in: body
type: string
description: "End date."
call: "gsc.query"
with:
site_url: "{{site_url}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
consumes:
- type: http
namespace: gsc
baseUri: "https://www.googleapis.com/webmasters/v3"
authentication:
type: bearer
token: "$secrets.google_search_console_token"
resources:
- name: search-analytics
path: "/sites/{{site_url}}/searchAnalytics/query"
inputParameters:
- name: site_url
in: path
operations:
- name: query
method: POST
Retrieves Grafana dashboard for game server performance monitoring.
naftiko: "0.5"
info:
label: "Grafana Server Metrics Dashboard"
description: "Retrieves Grafana dashboard for game server performance monitoring."
tags:
- monitoring
- grafana
- dashboards
capability:
exposes:
- type: mcp
namespace: metrics-dashboards
port: 8080
tools:
- name: get-grafana-dashboard
description: "Look up a Grafana dashboard by UID."
inputParameters:
- name: dashboard_uid
in: body
type: string
description: "Grafana dashboard UID."
call: "grafana.get-dashboard"
with:
dashboard_uid: "{{dashboard_uid}}"
consumes:
- type: http
namespace: grafana
baseUri: "https://grafana.blizzard.com/api"
authentication:
type: bearer
token: "$secrets.grafana_token"
resources:
- name: dashboards
path: "/dashboards/uid/{{dashboard_uid}}"
inputParameters:
- name: dashboard_uid
in: path
operations:
- name: get-dashboard
method: GET
Retrieves HAProxy load balancer statistics for game server traffic distribution.
naftiko: "0.5"
info:
label: "HAProxy Game Load Balancer Status"
description: "Retrieves HAProxy load balancer statistics for game server traffic distribution."
tags:
- infrastructure
- haproxy
- load-balancing
capability:
exposes:
- type: mcp
namespace: lb-monitoring
port: 8080
tools:
- name: get-haproxy-stats
description: "Look up HAProxy backend statistics."
inputParameters:
- name: backend_name
in: body
type: string
description: "The HAProxy backend name."
call: "haproxy.get-stats"
with:
backend_name: "{{backend_name}}"
consumes:
- type: http
namespace: haproxy
baseUri: "https://haproxy.blizzard.com/api/v2"
authentication:
type: basic
username: "$secrets.haproxy_user"
password: "$secrets.haproxy_password"
resources:
- name: stats
path: "/services/haproxy/stats/backends/{{backend_name}}"
inputParameters:
- name: backend_name
in: path
operations:
- name: get-stats
method: GET
Retrieves a HubSpot contact by email for game community marketing outreach.
naftiko: "0.5"
info:
label: "HubSpot Community Marketing Contact"
description: "Retrieves a HubSpot contact by email for game community marketing outreach."
tags:
- marketing
- hubspot
- community
capability:
exposes:
- type: mcp
namespace: marketing-crm
port: 8080
tools:
- name: get-contact
description: "Look up a HubSpot contact by email."
inputParameters:
- name: email
in: body
type: string
description: "The contact email."
call: "hubspot.get-contact-by-email"
with:
email: "{{email}}"
consumes:
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/crm/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: contacts
path: "/objects/contacts/{{email}}?idProperty=email"
inputParameters:
- name: email
in: path
operations:
- name: get-contact-by-email
method: GET
Queries Snowflake for economy health metrics, updates game config in Amazon S3, creates a Jira tracking ticket, and notifies designers via Microsoft Teams.
naftiko: "0.5"
info:
label: "In-Game Economy Rebalance Pipeline"
description: "Queries Snowflake for economy health metrics, updates game config in Amazon S3, creates a Jira tracking ticket, and notifies designers via Microsoft Teams."
tags:
- game-economy
- snowflake
- amazon-s3
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: economy-rebalance
port: 8080
tools:
- name: rebalance-economy
description: "Analyze economy metrics and push balance updates."
inputParameters:
- name: game_title
in: body
type: string
description: "Game title."
- name: config_path
in: body
type: string
description: "S3 config key for economy settings."
steps:
- name: get-economy-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT currency_type, total_supply, inflation_rate, sink_rate FROM ECONOMY.HEALTH_METRICS WHERE game_title = '{{game_title}}'"
- name: push-config
type: call
call: "s3.put-object"
with:
bucket: "game-configs"
key: "{{config_path}}"
body: "{{get-economy-data.results}}"
- name: create-tracker
type: call
call: "jira.create-issue"
with:
project: "ECON"
summary: "Economy rebalance for {{game_title}}"
description: "Updated economy config based on health metrics. Inflation: {{get-economy-data.results[0].inflation_rate}}."
issuetype: "Task"
- name: notify-designers
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.design_channel_id"
text: "Economy rebalance deployed for {{game_title}}. Tracker: {{create-tracker.key}}."
consumes:
- type: http
namespace: snowflake
baseUri: "https://blizzard.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: s3
baseUri: "https://s3.us-west-2.amazonaws.com"
authentication:
type: awsSigV4
accessKeyId: "$secrets.aws_access_key_id"
secretAccessKey: "$secrets.aws_secret_access_key"
resources:
- name: objects
path: "/{{bucket}}/{{key}}"
inputParameters:
- name: bucket
in: path
- name: key
in: path
operations:
- name: put-object
method: PUT
- type: http
namespace: jira
baseUri: "https://blizzard.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Pulls AWS cost data, correlates with Datadog usage metrics, generates recommendations in Confluence, and alerts finance via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Infrastructure Cost Optimization Pipeline"
description: "Pulls AWS cost data, correlates with Datadog usage metrics, generates recommendations in Confluence, and alerts finance via Microsoft Outlook."
tags:
- finops
- aws
- datadog
- confluence
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: cost-optimization
port: 8080
tools:
- name: analyze-costs
description: "Analyze infrastructure costs and generate optimization recommendations."
inputParameters:
- name: month
in: body
type: string
description: "Month in YYYY-MM format."
- name: service_filter
in: body
type: string
description: "AWS service filter."
steps:
- name: get-costs
type: call
call: "aws.get-cost-and-usage"
with:
time_period: "{{month}}"
granularity: "DAILY"
filter: "{{service_filter}}"
- name: get-usage
type: call
call: "datadog.query-metrics"
with:
query: "avg:aws.ec2.cpuutilization{*} by {instance-type}"
- name: create-report
type: call
call: "confluence.create-page"
with:
space: "FINOPS"
title: "Cost Optimization Report - {{month}}"
body: "Total spend: {{get-costs.total}}. Avg CPU utilization: {{get-usage.value}}%. Underutilized instances identified."
- name: alert-finance
type: call
call: "outlook.send-email"
with:
to: "$secrets.finance_team_email"
subject: "Infrastructure Cost Report - {{month}}"
body: "Report published: {{create-report.web_url}}. Total spend: {{get-costs.total}}."
consumes:
- type: http
namespace: aws
baseUri: "https://ce.us-east-1.amazonaws.com"
authentication:
type: awsSigV4
accessKeyId: "$secrets.aws_access_key_id"
secretAccessKey: "$secrets.aws_secret_access_key"
resources:
- name: cost
path: "/"
operations:
- name: get-cost-and-usage
method: POST
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
appKey: "$secrets.datadog_app_key"
resources:
- name: metrics
path: "/query"
operations:
- name: query-metrics
method: GET
- type: http
namespace: confluence
baseUri: "https://blizzard.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Creates an Instagram post with a game screenshot for community engagement.
naftiko: "0.5"
info:
label: "Instagram Game Screenshot Post"
description: "Creates an Instagram post with a game screenshot for community engagement."
tags:
- marketing
- instagram
- social-media
capability:
exposes:
- type: mcp
namespace: social-media
port: 8080
tools:
- name: create-instagram-post
description: "Create an Instagram media post."
inputParameters:
- name: image_url
in: body
type: string
description: "URL of the image to post."
- name: caption
in: body
type: string
description: "Post caption."
call: "instagram.create-media"
with:
image_url: "{{image_url}}"
caption: "{{caption}}"
consumes:
- type: http
namespace: instagram
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.instagram_token"
resources:
- name: media
path: "/me/media"
operations:
- name: create-media
method: POST
Retrieves the latest Jenkins build status for a game project pipeline.
naftiko: "0.5"
info:
label: "Jenkins Build Status Lookup"
description: "Retrieves the latest Jenkins build status for a game project pipeline."
tags:
- ci
- jenkins
- build
capability:
exposes:
- type: mcp
namespace: ci-builds
port: 8080
tools:
- name: get-build-status
description: "Look up the latest Jenkins build for a job."
inputParameters:
- name: job_name
in: body
type: string
description: "The Jenkins job name."
call: "jenkins.get-last-build"
with:
job_name: "{{job_name}}"
outputParameters:
- name: build_number
type: integer
mapping: "$.number"
- name: result
type: string
mapping: "$.result"
- name: duration
type: integer
mapping: "$.duration"
consumes:
- type: http
namespace: jenkins
baseUri: "https://jenkins.blizzard.com"
authentication:
type: basic
username: "$secrets.jenkins_user"
password: "$secrets.jenkins_api_token"
resources:
- name: builds
path: "/job/{{job_name}}/lastBuild/api/json"
inputParameters:
- name: job_name
in: path
operations:
- name: get-last-build
method: GET
Fetches a Jira issue by key and returns summary, status, assignee, and priority for game bug tracking.
naftiko: "0.5"
info:
label: "Jira Bug Retrieval"
description: "Fetches a Jira issue by key and returns summary, status, assignee, and priority for game bug tracking."
tags:
- project-management
- jira
- game-development
- qa
capability:
exposes:
- type: mcp
namespace: bug-tracking
port: 8080
tools:
- name: get-jira-issue
description: "Look up a Jira issue by key."
inputParameters:
- name: issue_key
in: body
type: string
description: "The Jira issue key (e.g., WOW-1234)."
call: "jira.get-issue"
with:
issue_key: "{{issue_key}}"
outputParameters:
- name: summary
type: string
mapping: "$.fields.summary"
- name: status
type: string
mapping: "$.fields.status.name"
- name: assignee
type: string
mapping: "$.fields.assignee.displayName"
- name: priority
type: string
mapping: "$.fields.priority.name"
consumes:
- type: http
namespace: jira
baseUri: "https://blizzard.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue/{{issue_key}}"
inputParameters:
- name: issue_key
in: path
operations:
- name: get-issue
method: GET
Creates a LinkedIn company page post for Blizzard game developer recruitment.
naftiko: "0.5"
info:
label: "LinkedIn Recruitment Post"
description: "Creates a LinkedIn company page post for Blizzard game developer recruitment."
tags:
- hr
- recruitment
- linkedin
capability:
exposes:
- type: mcp
namespace: recruitment-social
port: 8080
tools:
- name: create-linkedin-post
description: "Create a LinkedIn company page post for recruitment."
inputParameters:
- name: text
in: body
type: string
description: "The post text content."
call: "linkedin.create-post"
with:
text: "{{text}}"
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: posts
path: "/ugcPosts"
operations:
- name: create-post
method: POST
Retrieves a Looker report for player engagement metrics including daily active users and session duration.
naftiko: "0.5"
info:
label: "Looker Player Engagement Report"
description: "Retrieves a Looker report for player engagement metrics including daily active users and session duration."
tags:
- analytics
- looker
- player-engagement
capability:
exposes:
- type: mcp
namespace: engagement-analytics
port: 8080
tools:
- name: get-engagement-report
description: "Run a Looker query for player engagement metrics."
inputParameters:
- name: look_id
in: body
type: string
description: "The Looker Look ID."
call: "looker.run-look"
with:
look_id: "{{look_id}}"
consumes:
- type: http
namespace: looker
baseUri: "https://blizzard.cloud.looker.com/api/4.0"
authentication:
type: bearer
token: "$secrets.looker_token"
resources:
- name: looks
path: "/looks/{{look_id}}/run/json"
inputParameters:
- name: look_id
in: path
operations:
- name: run-look
method: GET
Triggers a Metasploit penetration test scan for game server security.
naftiko: "0.5"
info:
label: "Metasploit Security Scan"
description: "Triggers a Metasploit penetration test scan for game server security."
tags:
- security
- metasploit
- penetration-testing
capability:
exposes:
- type: mcp
namespace: security-pentest
port: 8080
tools:
- name: run-pentest-scan
description: "Launch a Metasploit scan."
inputParameters:
- name: workspace
in: body
type: string
description: "Metasploit workspace."
- name: target_hosts
in: body
type: string
description: "Target IPs."
call: "metasploit.create-scan"
with:
workspace: "{{workspace}}"
targets: "{{target_hosts}}"
consumes:
- type: http
namespace: metasploit
baseUri: "https://metasploit.blizzard.com/api/v1"
authentication:
type: bearer
token: "$secrets.metasploit_token"
resources:
- name: scans
path: "/scans"
operations:
- name: create-scan
method: POST
Sends an email via Microsoft Outlook for game development communications.
naftiko: "0.5"
info:
label: "Microsoft Outlook Email Notification"
description: "Sends an email via Microsoft Outlook for game development communications."
tags:
- communication
- microsoft-outlook
- email
capability:
exposes:
- type: mcp
namespace: email-comms
port: 8080
tools:
- name: send-email
description: "Send an email via Microsoft Outlook."
inputParameters:
- name: to
in: body
type: string
description: "Recipient email."
- name: subject
in: body
type: string
description: "Subject line."
- name: body
in: body
type: string
description: "Email body."
call: "outlook.send-mail"
with:
to: "{{to}}"
subject: "{{subject}}"
body: "{{body}}"
consumes:
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0/me"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/sendMail"
operations:
- name: send-mail
method: POST
Sends a message to a Microsoft Teams channel for game development team notifications.
naftiko: "0.5"
info:
label: "Microsoft Teams Channel Message"
description: "Sends a message to a Microsoft Teams channel for game development team notifications."
tags:
- collaboration
- microsoft-teams
- notification
capability:
exposes:
- type: mcp
namespace: team-comms
port: 8080
tools:
- name: send-channel-message
description: "Post a message to a Microsoft Teams channel."
inputParameters:
- name: team_id
in: body
type: string
description: "The Microsoft Teams team ID."
- name: channel_id
in: body
type: string
description: "The channel ID."
- name: message
in: body
type: string
description: "The message text."
call: "msteams.post-channel-message"
with:
team_id: "{{team_id}}"
channel_id: "{{channel_id}}"
text: "{{message}}"
consumes:
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Queries Grafana for network latency spikes, checks HAProxy backend health, creates a ServiceNow incident, and pages on-call via PagerDuty.
naftiko: "0.5"
info:
label: "Network Latency Investigation Pipeline"
description: "Queries Grafana for network latency spikes, checks HAProxy backend health, creates a ServiceNow incident, and pages on-call via PagerDuty."
tags:
- networking
- grafana
- haproxy
- servicenow
- pagerduty
capability:
exposes:
- type: mcp
namespace: latency-investigation
port: 8080
tools:
- name: investigate-latency
description: "Orchestrate network latency investigation across monitoring tools."
inputParameters:
- name: region
in: body
type: string
description: "Game server region."
- name: threshold_ms
in: body
type: number
description: "Latency threshold in milliseconds."
steps:
- name: check-grafana
type: call
call: "grafana.query-datasource"
with:
query: "SELECT mean(latency) FROM network WHERE region = '{{region}}' AND time > now() - 1h"
- name: check-haproxy
type: call
call: "haproxy.get-backend-status"
with:
backend: "game-servers-{{region}}"
- name: create-incident
type: call
call: "servicenow.create-record"
with:
table: "incident"
short_description: "Network latency spike in {{region}} (>{{threshold_ms}}ms)"
urgency: "2"
impact: "2"
- name: page-oncall
type: call
call: "pagerduty.create-incident"
with:
title: "Network latency spike: {{region}} - {{check-grafana.value}}ms"
service_id: "$secrets.network_service_id"
consumes:
- type: http
namespace: grafana
baseUri: "https://grafana.blizzard.com/api"
authentication:
type: bearer
token: "$secrets.grafana_token"
resources:
- name: datasources
path: "/ds/query"
operations:
- name: query-datasource
method: POST
- type: http
namespace: haproxy
baseUri: "https://haproxy.blizzard.com/api/v2"
authentication:
type: basic
username: "$secrets.haproxy_user"
password: "$secrets.haproxy_password"
resources:
- name: backends
path: "/services/haproxy/runtime/backends/{{backend}}"
inputParameters:
- name: backend
in: path
operations:
- name: get-backend-status
method: GET
- type: http
namespace: servicenow
baseUri: "https://blizzard.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
On new game developer hire in Workday, provisions Perforce workspace, adds to GitHub teams, creates a ServiceNow equipment request, and sends a welcome message via Microsoft Teams.
naftiko: "0.5"
info:
label: "New Developer Onboarding Pipeline"
description: "On new game developer hire in Workday, provisions Perforce workspace, adds to GitHub teams, creates a ServiceNow equipment request, and sends a welcome message via Microsoft Teams."
tags:
- hr
- onboarding
- workday
- perforce
- github
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: dev-onboarding
port: 8080
tools:
- name: onboard-developer
description: "Given a Workday employee ID and game team, provision development tools and notify."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID."
- name: game_team
in: body
type: string
description: "The game team name (e.g., wow, diablo, overwatch)."
- name: github_team
in: body
type: string
description: "GitHub team slug."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{workday_employee_id}}"
- name: add-to-github
type: call
call: "github.add-team-member"
with:
team_slug: "{{github_team}}"
username: "{{get-employee.github_username}}"
- name: create-equipment-request
type: call
call: "servicenow.create-request"
with:
short_description: "Dev workstation for {{get-employee.full_name}} - {{game_team}}"
category: "hardware_request"
description: "High-performance dev workstation needed for {{game_team}} team. GPU, 64GB RAM, multi-monitor setup."
- name: send-welcome
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-employee.work_email}}"
text: "Welcome to Blizzard {{game_team}} team, {{get-employee.first_name}}! GitHub access granted. Equipment request: {{create-equipment-request.number}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: team-members
path: "/orgs/Blizzard/teams/{{team_slug}}/memberships/{{username}}"
inputParameters:
- name: team_slug
in: path
- name: username
in: path
operations:
- name: add-team-member
method: PUT
- type: http
namespace: servicenow
baseUri: "https://blizzard.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
When new game content is ready, creates a Jira release task, triggers a Jenkins deployment build, updates the Confluence release notes, and announces via Microsoft Teams and Twitter.
naftiko: "0.5"
info:
label: "New Game Content Release Pipeline"
description: "When new game content is ready, creates a Jira release task, triggers a Jenkins deployment build, updates the Confluence release notes, and announces via Microsoft Teams and Twitter."
tags:
- content-release
- jira
- jenkins
- confluence
- microsoft-teams
- twitter
capability:
exposes:
- type: mcp
namespace: content-release
port: 8080
tools:
- name: trigger-content-release
description: "Given content release details, orchestrate the release pipeline across Jira, Jenkins, Confluence, Microsoft Teams, and Twitter."
inputParameters:
- name: content_name
in: body
type: string
description: "Name of the content update."
- name: game_title
in: body
type: string
description: "The game title."
- name: version
in: body
type: string
description: "The content version number."
- name: jira_project_key
in: body
type: string
description: "Jira project key."
- name: jenkins_job
in: body
type: string
description: "Jenkins deployment job name."
- name: release_channel
in: body
type: string
description: "Microsoft Teams release channel."
steps:
- name: create-release-task
type: call
call: "jira.create-issue"
with:
project_key: "{{jira_project_key}}"
summary: "Release: {{content_name}} v{{version}}"
issue_type: "Task"
description: "Content release for {{game_title}}: {{content_name}} version {{version}}."
- name: deploy-content
type: call
call: "jenkins.trigger-build"
with:
job_name: "{{jenkins_job}}"
parameters: "{\"VERSION\": \"{{version}}\", \"CONTENT\": \"{{content_name}}\"}"
- name: announce-team
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{release_channel}}"
text: "Content release initiated: {{game_title}} - {{content_name}} v{{version}}. Build: #{{deploy-content.build_number}}. Jira: {{create-release-task.key}}."
- name: announce-public
type: call
call: "twitter.create-tweet"
with:
text: "New content update for {{game_title}}! {{content_name}} (v{{version}}) is now rolling out. #{{game_title}} #GameUpdate"
consumes:
- type: http
namespace: jira
baseUri: "https://blizzard.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: jenkins
baseUri: "https://jenkins.blizzard.com"
authentication:
type: basic
username: "$secrets.jenkins_user"
password: "$secrets.jenkins_api_token"
resources:
- name: jobs
path: "/job/{{job_name}}/build"
inputParameters:
- name: job_name
in: path
operations:
- name: trigger-build
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
- type: http
namespace: twitter
baseUri: "https://api.twitter.com/2"
authentication:
type: bearer
token: "$secrets.twitter_bearer_token"
resources:
- name: tweets
path: "/tweets"
operations:
- name: create-tweet
method: POST
Retrieves average response time and error rate for a game API endpoint from New Relic.
naftiko: "0.5"
info:
label: "New Relic Game API Latency"
description: "Retrieves average response time and error rate for a game API endpoint from New Relic."
tags:
- monitoring
- new-relic
- game-servers
capability:
exposes:
- type: mcp
namespace: api-latency
port: 8080
tools:
- name: get-api-latency
description: "Look up average latency and error rate for a game API endpoint."
inputParameters:
- name: app_id
in: body
type: string
description: "New Relic application ID."
- name: endpoint
in: body
type: string
description: "API endpoint path."
call: "newrelic.get-app-metrics"
with:
app_id: "{{app_id}}"
endpoint: "{{endpoint}}"
outputParameters:
- name: avg_response_time
type: number
mapping: "$.metric_data.metrics[0].timeslices[0].values.average_response_time"
- name: error_rate
type: number
mapping: "$.metric_data.metrics[0].timeslices[0].values.error_percentage"
consumes:
- type: http
namespace: newrelic
baseUri: "https://api.newrelic.com/v2"
authentication:
type: apiKey
key: "$secrets.newrelic_api_key"
resources:
- name: app-metrics
path: "/applications/{{app_id}}/metrics/data.json"
inputParameters:
- name: app_id
in: path
operations:
- name: get-app-metrics
method: GET
Executes an Oracle Essbase query for game franchise financial analysis.
naftiko: "0.5"
info:
label: "Oracle Essbase Game Finance Query"
description: "Executes an Oracle Essbase query for game franchise financial analysis."
tags:
- finance
- oracle-essbase
- reporting
capability:
exposes:
- type: mcp
namespace: finance-analytics
port: 8080
tools:
- name: run-essbase-query
description: "Execute an Oracle Essbase MDX query."
inputParameters:
- name: application
in: body
type: string
description: "Essbase application name."
- name: database
in: body
type: string
description: "Essbase database name."
- name: query
in: body
type: string
description: "MDX query."
call: "essbase.execute-mdx"
with:
application: "{{application}}"
database: "{{database}}"
query: "{{query}}"
consumes:
- type: http
namespace: essbase
baseUri: "https://essbase.blizzard.com/essbase/rest/v1"
authentication:
type: basic
username: "$secrets.essbase_user"
password: "$secrets.essbase_password"
resources:
- name: mdx
path: "/applications/{{application}}/databases/{{database}}/mdx"
inputParameters:
- name: application
in: path
- name: database
in: path
operations:
- name: execute-mdx
method: POST
Queries Oracle E-Business Suite for game title revenue summary by region and period.
naftiko: "0.5"
info:
label: "Oracle Game Revenue Query"
description: "Queries Oracle E-Business Suite for game title revenue summary by region and period."
tags:
- finance
- oracle
- revenue
capability:
exposes:
- type: mcp
namespace: game-revenue
port: 8080
tools:
- name: get-revenue-summary
description: "Look up revenue summary for a game by region and fiscal period."
inputParameters:
- name: game_title
in: body
type: string
description: "Game title."
- name: fiscal_period
in: body
type: string
description: "Fiscal period in YYYY-QN format."
call: "oracle.get-revenue-report"
with:
game_title: "{{game_title}}"
fiscal_period: "{{fiscal_period}}"
outputParameters:
- name: total_revenue
type: number
mapping: "$.items[0].total_revenue"
- name: by_region
type: array
mapping: "$.items[0].region_breakdown"
consumes:
- type: http
namespace: oracle
baseUri: "https://blizzard-ebs.oracle.com/webservices/rest"
authentication:
type: basic
username: "$secrets.oracle_user"
password: "$secrets.oracle_password"
resources:
- name: revenue
path: "/finance/revenue-summary"
operations:
- name: get-revenue-report
method: GET
Retrieves the current on-call engineer for a specified game service escalation policy.
naftiko: "0.5"
info:
label: "PagerDuty On-Call Lookup"
description: "Retrieves the current on-call engineer for a specified game service escalation policy."
tags:
- incident-management
- pagerduty
- on-call
capability:
exposes:
- type: mcp
namespace: oncall-lookup
port: 8080
tools:
- name: get-oncall
description: "Look up who is currently on-call for a given escalation policy."
inputParameters:
- name: escalation_policy_id
in: body
type: string
description: "PagerDuty escalation policy ID."
call: "pagerduty.get-oncalls"
with:
escalation_policy_ids: "{{escalation_policy_id}}"
outputParameters:
- name: oncall_name
type: string
mapping: "$.oncalls[0].user.name"
- name: oncall_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"
operations:
- name: get-oncalls
method: GET
When game patch notes are finalized, publishes to Confluence, posts to Twitter and Facebook, and notifies the community team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Patch Notes Distribution Pipeline"
description: "When game patch notes are finalized, publishes to Confluence, posts to Twitter and Facebook, and notifies the community team via Microsoft Teams."
tags:
- content-release
- patch-notes
- confluence
- twitter
- facebook
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: patch-distribution
port: 8080
tools:
- name: distribute-patch-notes
description: "Given patch notes content, distribute across all channels."
inputParameters:
- name: game_title
in: body
type: string
description: "Game title."
- name: version
in: body
type: string
description: "Patch version."
- name: confluence_space
in: body
type: string
description: "Confluence space key."
- name: community_channel
in: body
type: string
description: "Microsoft Teams channel."
steps:
- name: publish-confluence
type: call
call: "confluence.create-page"
with:
space_key: "{{confluence_space}}"
title: "{{game_title}} Patch Notes v{{version}}"
- name: tweet-notes
type: call
call: "twitter.create-tweet"
with:
text: "{{game_title}} Patch v{{version}} is live! #{{game_title}} #PatchNotes"
- name: post-facebook
type: call
call: "facebook.create-post"
with:
message: "{{game_title}} Patch v{{version}} is now live!"
- name: notify-community
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{community_channel}}"
text: "Patch notes published: {{game_title}} v{{version}}. Social posts live."
consumes:
- type: http
namespace: confluence
baseUri: "https://blizzard.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: twitter
baseUri: "https://api.twitter.com/2"
authentication:
type: bearer
token: "$secrets.twitter_bearer_token"
resources:
- name: tweets
path: "/tweets"
operations:
- name: create-tweet
method: POST
- type: http
namespace: facebook
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.facebook_page_token"
resources:
- name: posts
path: "/me/feed"
operations:
- name: create-post
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves the latest changelist from a Perforce depot path for game asset version tracking.
naftiko: "0.5"
info:
label: "Perforce Changelist Lookup"
description: "Retrieves the latest changelist from a Perforce depot path for game asset version tracking."
tags:
- version-control
- perforce
- game-assets
capability:
exposes:
- type: mcp
namespace: vcs-perforce
port: 8080
tools:
- name: get-latest-changelist
description: "Look up the latest Perforce changelist for a depot path."
inputParameters:
- name: depot_path
in: body
type: string
description: "The Perforce depot path (e.g., //depot/wow/main/...)."
call: "perforce.get-changes"
with:
depot_path: "{{depot_path}}"
consumes:
- type: http
namespace: perforce
baseUri: "https://perforce.blizzard.com/api/v1"
authentication:
type: bearer
token: "$secrets.perforce_token"
resources:
- name: changes
path: "/changes?max=1&path={{depot_path}}"
inputParameters:
- name: depot_path
in: query
operations:
- name: get-changes
method: GET
Verifies player identity via Salesforce, retrieves account history from Snowflake, resets credentials, and sends recovery confirmation via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Player Account Recovery Pipeline"
description: "Verifies player identity via Salesforce, retrieves account history from Snowflake, resets credentials, and sends recovery confirmation via Microsoft Outlook."
tags:
- account-recovery
- salesforce
- snowflake
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: account-recovery
port: 8080
tools:
- name: recover-account
description: "Orchestrate player account recovery with identity verification."
inputParameters:
- name: email
in: body
type: string
description: "Player email address."
- name: verification_code
in: body
type: string
description: "Identity verification code."
steps:
- name: verify-identity
type: call
call: "salesforce.query-contact"
with:
query: "SELECT Id, Name, Account_Status__c FROM Contact WHERE Email = '{{email}}'"
- name: get-history
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT last_login, purchase_count, account_created FROM SUPPORT.ACCOUNT_HISTORY WHERE email = '{{email}}'"
- name: send-confirmation
type: call
call: "outlook.send-email"
with:
to: "{{email}}"
subject: "Blizzard Account Recovery Confirmation"
body: "Your account has been verified and recovered. Account status: {{verify-identity.records[0].Account_Status__c}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://blizzard.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: queries
path: "/query"
operations:
- name: query-contact
method: GET
- type: http
namespace: snowflake
baseUri: "https://blizzard.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/me/sendMail"
operations:
- name: send-email
method: POST
When a player ban is issued, logs it in Snowflake, creates a Zendesk internal ticket, updates the player record, and notifies the community safety team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Player Ban Enforcement Pipeline"
description: "When a player ban is issued, logs it in Snowflake, creates a Zendesk internal ticket, updates the player record, and notifies the community safety team via Microsoft Teams."
tags:
- moderation
- safety
- snowflake
- zendesk
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: player-moderation
port: 8080
tools:
- name: enforce-player-ban
description: "Given a player ID and ban reason, enforce the ban across tracking systems and notify."
inputParameters:
- name: player_id
in: body
type: string
description: "The player account ID."
- name: game_title
in: body
type: string
description: "The game where the ban applies."
- name: ban_reason
in: body
type: string
description: "Reason for the ban."
- name: ban_duration
in: body
type: string
description: "Ban duration (e.g., 7d, 30d, permanent)."
- name: safety_channel
in: body
type: string
description: "Microsoft Teams channel for community safety."
steps:
- name: log-ban
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO PLAYER_BANS (player_id, game_title, ban_reason, ban_duration, banned_at) VALUES ('{{player_id}}', '{{game_title}}', '{{ban_reason}}', '{{ban_duration}}', CURRENT_TIMESTAMP())"
warehouse: "MODERATION_WH"
- name: create-internal-ticket
type: call
call: "zendesk.create-ticket"
with:
subject: "Player ban: {{player_id}} - {{game_title}}"
description: "Ban enforced for player {{player_id}} in {{game_title}}. Reason: {{ban_reason}}. Duration: {{ban_duration}}."
priority: "normal"
- name: notify-safety
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{safety_channel}}"
text: "Player ban enforced: {{player_id}} in {{game_title}}. Reason: {{ban_reason}}. Duration: {{ban_duration}}. Zendesk: {{create-internal-ticket.ticket_id}}."
consumes:
- type: http
namespace: snowflake
baseUri: "https://blizzard.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: zendesk
baseUri: "https://blizzard.zendesk.com/api/v2"
authentication:
type: bearer
token: "$secrets.zendesk_token"
resources:
- name: tickets
path: "/tickets"
operations:
- name: create-ticket
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Queries Snowflake for anomalous player behavior, creates a Jira investigation ticket, and flags the account in the internal anti-cheat system via ServiceNow.
naftiko: "0.5"
info:
label: "Player Cheat Detection Pipeline"
description: "Queries Snowflake for anomalous player behavior, creates a Jira investigation ticket, and flags the account in the internal anti-cheat system via ServiceNow."
tags:
- anti-cheat
- snowflake
- jira
- servicenow
capability:
exposes:
- type: mcp
namespace: cheat-detection
port: 8080
tools:
- name: investigate-player
description: "Detect cheating patterns and create investigation workflow."
inputParameters:
- name: player_id
in: body
type: string
description: "Player account ID."
- name: game_title
in: body
type: string
description: "Game title."
steps:
- name: query-anomalies
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT event_type, count, z_score FROM SECURITY.PLAYER_ANOMALIES WHERE player_id = '{{player_id}}' AND game_title = '{{game_title}}' AND z_score > 3.0"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project: "ANTICHEAT"
summary: "Anomaly detected for player {{player_id}} in {{game_title}}"
description: "Anomalous events: {{query-anomalies.row_count}} flagged behaviors. Review required."
issuetype: "Investigation"
- name: flag-account
type: call
call: "servicenow.create-record"
with:
table: "u_anticheat_flags"
player_id: "{{player_id}}"
jira_ticket: "{{create-ticket.key}}"
status: "under_review"
consumes:
- type: http
namespace: snowflake
baseUri: "https://blizzard.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://blizzard.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: servicenow
baseUri: "https://blizzard.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
Monitors Twitter mentions for a game title, analyzes sentiment via Azure Machine Learning, logs trends in Snowflake, and posts a daily summary to the community management Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Player Community Sentiment Pipeline"
description: "Monitors Twitter mentions for a game title, analyzes sentiment via Azure Machine Learning, logs trends in Snowflake, and posts a daily summary to the community management Microsoft Teams channel."
tags:
- community
- sentiment
- twitter
- azure-machine-learning
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: community-sentiment
port: 8080
tools:
- name: analyze-player-sentiment
description: "Given a game title and date, analyze player sentiment across Twitter, Azure ML, Snowflake, and Microsoft Teams."
inputParameters:
- name: game_title
in: body
type: string
description: "The game title to monitor."
- name: date
in: body
type: string
description: "Analysis date (YYYY-MM-DD)."
- name: community_channel
in: body
type: string
description: "Microsoft Teams channel for community management."
steps:
- name: get-mentions
type: call
call: "twitter.search-tweets"
with:
query: "{{game_title}} lang:en"
max_results: "100"
- name: analyze-sentiment
type: call
call: "azureml.score-sentiment"
with:
texts: "{{get-mentions.tweets}}"
- name: log-trends
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO COMMUNITY_SENTIMENT (game_title, analysis_date, positive_pct, negative_pct, neutral_pct, total_mentions) VALUES ('{{game_title}}', '{{date}}', '{{analyze-sentiment.positive_pct}}', '{{analyze-sentiment.negative_pct}}', '{{analyze-sentiment.neutral_pct}}', '{{get-mentions.result_count}}')"
warehouse: "COMMUNITY_WH"
- name: post-summary
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{community_channel}}"
text: "Sentiment for {{game_title}} ({{date}}): Positive {{analyze-sentiment.positive_pct}}%, Negative {{analyze-sentiment.negative_pct}}%, Neutral {{analyze-sentiment.neutral_pct}}%. Total mentions: {{get-mentions.result_count}}."
consumes:
- type: http
namespace: twitter
baseUri: "https://api.twitter.com/2"
authentication:
type: bearer
token: "$secrets.twitter_bearer_token"
resources:
- name: tweets
path: "/tweets/search/recent?query={{query}}&max_results={{max_results}}"
inputParameters:
- name: query
in: query
- name: max_results
in: query
operations:
- name: search-tweets
method: GET
- type: http
namespace: azureml
baseUri: "https://blizzard-ml.westus2.inference.ml.azure.com"
authentication:
type: bearer
token: "$secrets.azureml_token"
resources:
- name: sentiment
path: "/score"
operations:
- name: score-sentiment
method: POST
- type: http
namespace: snowflake
baseUri: "https://blizzard.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Collects player feedback from Zendesk, runs sentiment analysis via Azure Machine Learning, stores results in Snowflake, and posts a summary to Confluence.
naftiko: "0.5"
info:
label: "Player Feedback Analysis Pipeline"
description: "Collects player feedback from Zendesk, runs sentiment analysis via Azure Machine Learning, stores results in Snowflake, and posts a summary to Confluence."
tags:
- feedback
- zendesk
- azure-machine-learning
- snowflake
- confluence
capability:
exposes:
- type: mcp
namespace: feedback-analysis
port: 8080
tools:
- name: analyze-feedback
description: "Orchestrate feedback collection, sentiment analysis, and reporting."
inputParameters:
- name: game_title
in: body
type: string
description: "Game to analyze feedback for."
- name: date_range
in: body
type: string
description: "Date range for feedback collection."
steps:
- name: fetch-tickets
type: call
call: "zendesk.search-tickets"
with:
query: "type:ticket tags:{{game_title}} created>{{date_range}}"
- name: run-sentiment
type: call
call: "azureml.score-endpoint"
with:
endpoint: "sentiment-analysis"
data: "{{fetch-tickets.results}}"
- name: store-results
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO ANALYTICS.SENTIMENT_RESULTS SELECT * FROM TABLE(RESULT_SET_FROM_JSON('{{run-sentiment.predictions}}'))"
- name: update-wiki
type: call
call: "confluence.create-page"
with:
space: "GAME"
title: "{{game_title}} Feedback Analysis - {{date_range}}"
body: "Analyzed {{fetch-tickets.count}} tickets. Positive: {{run-sentiment.positive_pct}}%. Negative: {{run-sentiment.negative_pct}}%."
consumes:
- type: http
namespace: zendesk
baseUri: "https://blizzard.zendesk.com/api/v2"
authentication:
type: basic
username: "$secrets.zendesk_user"
password: "$secrets.zendesk_api_token"
resources:
- name: search
path: "/search.json"
operations:
- name: search-tickets
method: GET
- type: http
namespace: azureml
baseUri: "https://blizzard-ml.azureml.net"
authentication:
type: bearer
token: "$secrets.azure_ml_token"
resources:
- name: endpoints
path: "/score"
operations:
- name: score-endpoint
method: POST
- type: http
namespace: snowflake
baseUri: "https://blizzard.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: confluence
baseUri: "https://blizzard.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Escalates a Zendesk ticket to a Jira issue, looks up player history in Snowflake, and notifies the support lead in Microsoft Teams.
naftiko: "0.5"
info:
label: "Player Support Escalation Pipeline"
description: "Escalates a Zendesk ticket to a Jira issue, looks up player history in Snowflake, and notifies the support lead in Microsoft Teams."
tags:
- support
- zendesk
- jira
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: support-escalation
port: 8080
tools:
- name: escalate-ticket
description: "Escalate a player support ticket with context enrichment."
inputParameters:
- name: ticket_id
in: body
type: string
description: "Zendesk ticket ID."
- name: player_id
in: body
type: string
description: "Player account ID."
steps:
- name: get-ticket
type: call
call: "zendesk.get-ticket"
with:
ticket_id: "{{ticket_id}}"
- name: get-player-history
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT account_age_days, total_spend, previous_tickets, vip_status FROM SUPPORT.PLAYER_PROFILES WHERE player_id = '{{player_id}}'"
- name: create-jira
type: call
call: "jira.create-issue"
with:
project: "SUPPORT"
summary: "Escalated: {{get-ticket.subject}}"
description: "Player: {{player_id}}. VIP: {{get-player-history.results[0].vip_status}}. Spend: {{get-player-history.results[0].total_spend}}. Original ticket: {{ticket_id}}."
issuetype: "Bug"
priority: "High"
- name: notify-lead
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.support_lead_channel"
text: "Ticket {{ticket_id}} escalated to Jira {{create-jira.key}}. Player {{player_id}} (VIP: {{get-player-history.results[0].vip_status}})."
consumes:
- type: http
namespace: zendesk
baseUri: "https://blizzard.zendesk.com/api/v2"
authentication:
type: basic
username: "$secrets.zendesk_user"
password: "$secrets.zendesk_api_token"
resources:
- name: tickets
path: "/tickets/{{ticket_id}}.json"
inputParameters:
- name: ticket_id
in: path
operations:
- name: get-ticket
method: GET
- type: http
namespace: snowflake
baseUri: "https://blizzard.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://blizzard.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Triggers a Power BI dataset refresh for player behavior and engagement analytics dashboards.
naftiko: "0.5"
info:
label: "Power BI Player Analytics Dashboard Refresh"
description: "Triggers a Power BI dataset refresh for player behavior and engagement analytics dashboards."
tags:
- analytics
- power-bi
- gaming
capability:
exposes:
- type: mcp
namespace: player-analytics
port: 8080
tools:
- name: refresh-player-dashboard
description: "Trigger a Power BI dataset refresh for player analytics."
inputParameters:
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID."
- name: group_id
in: body
type: string
description: "The Power BI workspace ID."
call: "powerbi.refresh-dataset"
with:
group_id: "{{group_id}}"
dataset_id: "{{dataset_id}}"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
At QA sprint end, aggregates bug statistics from Jira, uploads the report to SharePoint, refreshes the Power BI QA dashboard, and posts a summary to the QA Microsoft Teams channel.
naftiko: "0.5"
info:
label: "QA Sprint Bug Report Pipeline"
description: "At QA sprint end, aggregates bug statistics from Jira, uploads the report to SharePoint, refreshes the Power BI QA dashboard, and posts a summary to the QA Microsoft Teams channel."
tags:
- qa
- sprint
- jira
- sharepoint
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: qa-reporting
port: 8080
tools:
- name: generate-qa-sprint-report
description: "Given a Jira sprint ID, generate QA bug statistics and distribute."
inputParameters:
- name: sprint_id
in: body
type: string
description: "The Jira sprint ID."
- name: board_id
in: body
type: string
description: "The Jira board ID."
- name: bi_dataset_id
in: body
type: string
description: "Power BI dataset ID for QA metrics."
- name: bi_group_id
in: body
type: string
description: "Power BI workspace ID."
- name: qa_channel
in: body
type: string
description: "Microsoft Teams QA channel."
steps:
- name: get-sprint-data
type: call
call: "jira.get-sprint-report"
with:
board_id: "{{board_id}}"
sprint_id: "{{sprint_id}}"
- name: upload-report
type: call
call: "sharepoint.upload-file"
with:
site_id: "qa_team_site"
folder_path: "SprintReports/Sprint_{{sprint_id}}"
file_name: "qa_bugs_sprint_{{sprint_id}}.pdf"
- name: refresh-dashboard
type: call
call: "powerbi.refresh-dataset"
with:
group_id: "{{bi_group_id}}"
dataset_id: "{{bi_dataset_id}}"
- name: post-summary
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{qa_channel}}"
text: "QA Sprint {{sprint_id}} report: Bugs found: {{get-sprint-data.completed_issues}}. Open: {{get-sprint-data.incomplete_issues}}. Report: {{upload-report.url}}. Dashboard refreshed."
consumes:
- type: http
namespace: jira
baseUri: "https://blizzard.atlassian.net/rest/agile/1.0"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprint-reports
path: "/board/{{board_id}}/sprint/{{sprint_id}}/report"
inputParameters:
- name: board_id
in: path
- name: sprint_id
in: path
operations:
- name: get-sprint-report
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
- name: file_name
in: path
operations:
- name: upload-file
method: PUT
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Triggers a Qlik Sense report reload for game performance KPIs and returns the reload status.
naftiko: "0.5"
info:
label: "Qlik Sense Game Performance Report"
description: "Triggers a Qlik Sense report reload for game performance KPIs and returns the reload status."
tags:
- analytics
- qlik-sense
- reporting
capability:
exposes:
- type: mcp
namespace: qlik-reporting
port: 8080
tools:
- name: reload-report
description: "Trigger a Qlik Sense app reload for game performance data."
inputParameters:
- name: app_id
in: body
type: string
description: "Qlik Sense app ID."
call: "qliksense.reload-app"
with:
appId: "{{app_id}}"
outputParameters:
- name: reload_id
type: string
mapping: "$.id"
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: qliksense
baseUri: "https://blizzard.us.qlikcloud.com/api/v1"
authentication:
type: bearer
token: "$secrets.qlik_api_key"
resources:
- name: reloads
path: "/reloads"
operations:
- name: reload-app
method: POST
Retrieves a Salesforce case by ID for game licensing and partnership inquiries.
naftiko: "0.5"
info:
label: "Salesforce Licensing Inquiry Lookup"
description: "Retrieves a Salesforce case by ID for game licensing and partnership inquiries."
tags:
- sales
- salesforce
- licensing
capability:
exposes:
- type: mcp
namespace: sales-cases
port: 8080
tools:
- name: get-case
description: "Look up a Salesforce case by ID."
inputParameters:
- name: case_id
in: body
type: string
description: "The Salesforce case ID."
call: "salesforce.get-case"
with:
case_id: "{{case_id}}"
outputParameters:
- name: subject
type: string
mapping: "$.Subject"
- name: status
type: string
mapping: "$.Status"
- name: priority
type: string
mapping: "$.Priority"
- name: contact_name
type: string
mapping: "$.Contact.Name"
consumes:
- type: http
namespace: salesforce
baseUri: "https://blizzard.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case/{{case_id}}"
inputParameters:
- name: case_id
in: path
operations:
- name: get-case
method: GET
Receives a Metasploit scan result, creates a Jira security ticket, assigns severity via Splunk log correlation, and notifies the security team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Security Vulnerability Triage Pipeline"
description: "Receives a Metasploit scan result, creates a Jira security ticket, assigns severity via Splunk log correlation, and notifies the security team in Microsoft Teams."
tags:
- security
- metasploit
- jira
- splunk
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: vuln-triage
port: 8080
tools:
- name: triage-vulnerability
description: "Orchestrate vulnerability triage from scan to ticket to notification."
inputParameters:
- name: scan_id
in: body
type: string
description: "Metasploit scan ID."
- name: host
in: body
type: string
description: "Affected host."
steps:
- name: get-scan-results
type: call
call: "metasploit.get-scan"
with:
scan_id: "{{scan_id}}"
- name: correlate-logs
type: call
call: "splunk.search"
with:
query: "index=security host={{host}} earliest=-24h | stats count by severity"
- name: create-security-ticket
type: call
call: "jira.create-issue"
with:
project: "SEC"
summary: "Vulnerability on {{host}} - Scan {{scan_id}}"
description: "Findings: {{get-scan-results.vulnerability_count}} vulns. Log correlation: {{correlate-logs.results}}."
issuetype: "Bug"
priority: "High"
- name: notify-security
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.security_channel_id"
text: "Security triage: {{host}} - {{get-scan-results.vulnerability_count}} vulns found. Jira: {{create-security-ticket.key}}"
consumes:
- type: http
namespace: metasploit
baseUri: "https://metasploit.blizzard.com/api/v1"
authentication:
type: apiKey
key: "$secrets.metasploit_api_key"
resources:
- name: scans
path: "/scans/{{scan_id}}"
inputParameters:
- name: scan_id
in: path
operations:
- name: get-scan
method: GET
- type: http
namespace: splunk
baseUri: "https://splunk.blizzard.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search
path: "/search/jobs"
operations:
- name: search
method: POST
- type: http
namespace: jira
baseUri: "https://blizzard.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves details of a ServiceNow change request by number for game infrastructure changes.
naftiko: "0.5"
info:
label: "ServiceNow Change Request Lookup"
description: "Retrieves details of a ServiceNow change request by number for game infrastructure changes."
tags:
- itsm
- servicenow
- change-management
capability:
exposes:
- type: mcp
namespace: change-request
port: 8080
tools:
- name: get-change-request
description: "Look up a change request by its number."
inputParameters:
- name: change_number
in: body
type: string
description: "ServiceNow change request number."
call: "servicenow.get-change"
with:
number: "{{change_number}}"
outputParameters:
- name: state
type: string
mapping: "$.result[0].state"
- name: short_description
type: string
mapping: "$.result[0].short_description"
- name: assigned_to
type: string
mapping: "$.result[0].assigned_to.display_value"
consumes:
- type: http
namespace: servicenow
baseUri: "https://blizzard.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: get-change
method: GET
Retrieves a ServiceNow incident by number for game infrastructure support.
naftiko: "0.5"
info:
label: "ServiceNow Incident Lookup"
description: "Retrieves a ServiceNow incident by number for game infrastructure support."
tags:
- itsm
- servicenow
- incident
capability:
exposes:
- type: mcp
namespace: itsm-incidents
port: 8080
tools:
- name: get-incident
description: "Look up a ServiceNow incident by number."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number."
call: "servicenow.get-incident"
with:
incident_number: "{{incident_number}}"
outputParameters:
- name: state
type: string
mapping: "$.result.state"
- name: priority
type: string
mapping: "$.result.priority"
- name: assigned_group
type: string
mapping: "$.result.assignment_group.display_value"
- name: short_description
type: string
mapping: "$.result.short_description"
consumes:
- type: http
namespace: servicenow
baseUri: "https://blizzard.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident?sysparm_query=number={{incident_number}}"
inputParameters:
- name: incident_number
in: query
operations:
- name: get-incident
method: GET
Retrieves metadata for a SharePoint document for game development documentation.
naftiko: "0.5"
info:
label: "SharePoint Document Retrieval"
description: "Retrieves metadata for a SharePoint document for game development documentation."
tags:
- collaboration
- sharepoint
- documents
capability:
exposes:
- type: mcp
namespace: doc-management
port: 8080
tools:
- name: get-document
description: "Look up a SharePoint document by site and path."
inputParameters:
- name: site_id
in: body
type: string
description: "The SharePoint site ID."
- name: file_path
in: body
type: string
description: "The path to the file."
call: "sharepoint.get-file"
with:
site_id: "{{site_id}}"
file_path: "{{file_path}}"
outputParameters:
- name: file_name
type: string
mapping: "$.name"
- name: size
type: integer
mapping: "$.size"
- name: last_modified
type: string
mapping: "$.lastModifiedDateTime"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{file_path}}"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: get-file
method: GET
Executes a SQL query against the Blizzard Snowflake data warehouse for player behavior and game telemetry analytics.
naftiko: "0.5"
info:
label: "Snowflake Game Analytics Query"
description: "Executes a SQL query against the Blizzard Snowflake data warehouse for player behavior and game telemetry analytics."
tags:
- data
- analytics
- snowflake
- gaming
capability:
exposes:
- type: mcp
namespace: game-analytics
port: 8080
tools:
- name: run-analytics-query
description: "Execute a SQL query against the Blizzard Snowflake warehouse."
inputParameters:
- name: sql_statement
in: body
type: string
description: "The SQL statement to execute."
- name: warehouse
in: body
type: string
description: "The Snowflake warehouse name."
call: "snowflake.execute-statement"
with:
statement: "{{sql_statement}}"
warehouse: "{{warehouse}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://blizzard.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
Runs a player retention cohort query in Snowflake for a specified game and time period.
naftiko: "0.5"
info:
label: "Snowflake Player Retention Query"
description: "Runs a player retention cohort query in Snowflake for a specified game and time period."
tags:
- analytics
- snowflake
- player-retention
capability:
exposes:
- type: mcp
namespace: player-retention
port: 8080
tools:
- name: query-retention
description: "Execute a retention cohort query for a game title."
inputParameters:
- name: game_title
in: body
type: string
description: "Name of the game."
- name: cohort_month
in: body
type: string
description: "Cohort month in YYYY-MM format."
call: "snowflake.execute-statement"
with:
statement: "SELECT cohort_date, day_n, retained_players, retention_rate FROM ANALYTICS.PLAYER_RETENTION WHERE game_title = '{{game_title}}' AND cohort_month = '{{cohort_month}}' ORDER BY day_n"
outputParameters:
- name: results
type: array
mapping: "$.data"
consumes:
- type: http
namespace: snowflake
baseUri: "https://blizzard.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
Schedules posts across Twitter, Facebook, Instagram, and YouTube, tracks campaign in HubSpot, and reports metrics to Google Analytics.
naftiko: "0.5"
info:
label: "Social Media Campaign Launch Pipeline"
description: "Schedules posts across Twitter, Facebook, Instagram, and YouTube, tracks campaign in HubSpot, and reports metrics to Google Analytics."
tags:
- marketing
- twitter
- facebook
- instagram
- youtube
- hubspot
capability:
exposes:
- type: mcp
namespace: social-campaign
port: 8080
tools:
- name: launch-campaign
description: "Orchestrate multi-platform social media campaign launch."
inputParameters:
- name: campaign_name
in: body
type: string
description: "Campaign name."
- name: game_title
in: body
type: string
description: "Game title."
- name: message
in: body
type: string
description: "Campaign message."
steps:
- name: post-twitter
type: call
call: "twitter.create-tweet"
with:
text: "{{message}} #{{game_title}} #Blizzard"
- name: post-facebook
type: call
call: "facebook.create-post"
with:
message: "{{message}}"
- name: post-instagram
type: call
call: "instagram.create-media"
with:
caption: "{{message}} #{{game_title}}"
- name: track-campaign
type: call
call: "hubspot.create-campaign"
with:
name: "{{campaign_name}}"
game: "{{game_title}}"
consumes:
- type: http
namespace: twitter
baseUri: "https://api.twitter.com/2"
authentication:
type: bearer
token: "$secrets.twitter_bearer_token"
resources:
- name: tweets
path: "/tweets"
operations:
- name: create-tweet
method: POST
- type: http
namespace: facebook
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.facebook_page_token"
resources:
- name: posts
path: "/me/feed"
operations:
- name: create-post
method: POST
- type: http
namespace: instagram
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.instagram_token"
resources:
- name: media
path: "/me/media"
operations:
- name: create-media
method: POST
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: campaigns
path: "/marketing/v3/campaigns"
operations:
- name: create-campaign
method: POST
Retrieves Solaris server health for legacy game server infrastructure.
naftiko: "0.5"
info:
label: "Solaris Legacy Server Health"
description: "Retrieves Solaris server health for legacy game server infrastructure."
tags:
- infrastructure
- solaris
- servers
capability:
exposes:
- type: mcp
namespace: server-health
port: 8080
tools:
- name: get-solaris-health
description: "Look up Solaris server health."
inputParameters:
- name: hostname
in: body
type: string
description: "Server hostname."
call: "solaris.get-health"
with:
hostname: "{{hostname}}"
consumes:
- type: http
namespace: solaris
baseUri: "https://monitoring.blizzard.com/api/v1"
authentication:
type: bearer
token: "$secrets.monitoring_token"
resources:
- name: servers
path: "/servers/{{hostname}}/health"
inputParameters:
- name: hostname
in: path
operations:
- name: get-health
method: GET
Searches Splunk for game event logs by query string, returning matching events for debugging and analytics.
naftiko: "0.5"
info:
label: "Splunk Game Event Log Search"
description: "Searches Splunk for game event logs by query string, returning matching events for debugging and analytics."
tags:
- logging
- splunk
- game-events
capability:
exposes:
- type: mcp
namespace: log-search
port: 8080
tools:
- name: search-game-logs
description: "Search Splunk for game event logs."
inputParameters:
- name: search_query
in: body
type: string
description: "The Splunk search query (SPL)."
- name: earliest
in: body
type: string
description: "Earliest time for the search (e.g., -24h)."
call: "splunk.create-search"
with:
search: "{{search_query}}"
earliest_time: "{{earliest}}"
consumes:
- type: http
namespace: splunk
baseUri: "https://splunk.blizzard.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search-jobs
path: "/search/jobs"
operations:
- name: create-search
method: POST
Retrieves a Tableau workbook for game performance metrics, returning views and last updated timestamp.
naftiko: "0.5"
info:
label: "Tableau Game Metrics Dashboard"
description: "Retrieves a Tableau workbook for game performance metrics, returning views and last updated timestamp."
tags:
- analytics
- tableau
- gaming
capability:
exposes:
- type: mcp
namespace: game-metrics
port: 8080
tools:
- name: get-tableau-workbook
description: "Look up a Tableau workbook by ID."
inputParameters:
- name: workbook_id
in: body
type: string
description: "The Tableau workbook ID."
call: "tableau.get-workbook"
with:
workbook_id: "{{workbook_id}}"
outputParameters:
- name: name
type: string
mapping: "$.workbook.name"
- name: updated_at
type: string
mapping: "$.workbook.updatedAt"
consumes:
- type: http
namespace: tableau
baseUri: "https://tableau.blizzard.com/api/3.19"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: workbooks
path: "/sites/blizzard/workbooks/{{workbook_id}}"
inputParameters:
- name: workbook_id
in: path
operations:
- name: get-workbook
method: GET
Posts a job to LinkedIn, creates a Workday requisition, sets up an interview channel in Microsoft Teams, and tracks the position in Jira.
naftiko: "0.5"
info:
label: "Talent Acquisition Pipeline"
description: "Posts a job to LinkedIn, creates a Workday requisition, sets up an interview channel in Microsoft Teams, and tracks the position in Jira."
tags:
- recruiting
- linkedin
- workday
- microsoft-teams
- jira
capability:
exposes:
- type: mcp
namespace: talent-acquisition
port: 8080
tools:
- name: open-position
description: "Orchestrate job opening across recruiting platforms."
inputParameters:
- name: job_title
in: body
type: string
description: "Job title."
- name: department
in: body
type: string
description: "Hiring department."
- name: description
in: body
type: string
description: "Job description."
steps:
- name: create-requisition
type: call
call: "workday.create-requisition"
with:
title: "{{job_title}}"
department: "{{department}}"
description: "{{description}}"
- name: post-linkedin
type: call
call: "linkedin.create-job-post"
with:
title: "{{job_title}}"
company: "Blizzard Entertainment"
description: "{{description}}"
- name: create-channel
type: call
call: "msteams.create-channel"
with:
team_id: "$secrets.recruiting_team_id"
name: "hire-{{job_title}}"
description: "Interview coordination for {{job_title}}"
- name: track-position
type: call
call: "jira.create-issue"
with:
project: "HIRE"
summary: "Open position: {{job_title}} - {{department}}"
description: "Workday req: {{create-requisition.id}}. LinkedIn posting live."
issuetype: "Task"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/service/blizzard"
authentication:
type: basic
username: "$secrets.workday_user"
password: "$secrets.workday_password"
resources:
- name: requisitions
path: "/Recruiting/Job_Requisition"
operations:
- name: create-requisition
method: POST
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: jobs
path: "/simpleJobPostings"
operations:
- name: create-job-post
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{team_id}}/channels"
inputParameters:
- name: team_id
in: path
operations:
- name: create-channel
method: POST
- type: http
namespace: jira
baseUri: "https://blizzard.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
Runs a player segmentation query in Teradata to classify players by spending tier and activity level.
naftiko: "0.5"
info:
label: "Teradata Player Segmentation Query"
description: "Runs a player segmentation query in Teradata to classify players by spending tier and activity level."
tags:
- analytics
- teradata
- player-segmentation
capability:
exposes:
- type: mcp
namespace: player-segmentation
port: 8080
tools:
- name: query-segments
description: "Retrieve player segment distribution for a game."
inputParameters:
- name: game_id
in: body
type: string
description: "Internal game identifier."
call: "teradata.execute-query"
with:
query: "SELECT segment_name, player_count, avg_spend FROM ANALYTICS.PLAYER_SEGMENTS WHERE game_id = '{{game_id}}' ORDER BY player_count DESC"
outputParameters:
- name: segments
type: array
mapping: "$.results"
consumes:
- type: http
namespace: teradata
baseUri: "https://blizzard-td.teradata.com/api/query/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
resources:
- name: queries
path: "/systems/blizzard/queries"
operations:
- name: execute-query
method: POST
Retrieves Unity Cloud Build status for game prototyping projects.
naftiko: "0.5"
info:
label: "Unity Game Engine Build Status"
description: "Retrieves Unity Cloud Build status for game prototyping projects."
tags:
- game-development
- unity
- build
capability:
exposes:
- type: mcp
namespace: unity-builds
port: 8080
tools:
- name: get-unity-build
description: "Look up a Unity Cloud Build."
inputParameters:
- name: org_id
in: body
type: string
description: "Unity organization ID."
- name: project_id
in: body
type: string
description: "Unity project ID."
call: "unity.get-latest-build"
with:
org_id: "{{org_id}}"
project_id: "{{project_id}}"
consumes:
- type: http
namespace: unity
baseUri: "https://build-api.cloud.unity3d.com/api/v1"
authentication:
type: bearer
token: "$secrets.unity_token"
resources:
- name: builds
path: "/orgs/{{org_id}}/projects/{{project_id}}/buildtargets/_all/builds?per_page=1"
inputParameters:
- name: org_id
in: path
- name: project_id
in: path
operations:
- name: get-latest-build
method: GET
Retrieves contract details from Salesforce, generates renewal document in SharePoint, creates an approval task in Jira, and notifies procurement via Microsoft Teams.
naftiko: "0.5"
info:
label: "Vendor Contract Renewal Pipeline"
description: "Retrieves contract details from Salesforce, generates renewal document in SharePoint, creates an approval task in Jira, and notifies procurement via Microsoft Teams."
tags:
- procurement
- salesforce
- sharepoint
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: contract-renewal
port: 8080
tools:
- name: renew-contract
description: "Orchestrate vendor contract renewal workflow."
inputParameters:
- name: contract_id
in: body
type: string
description: "Salesforce contract ID."
- name: vendor_name
in: body
type: string
description: "Vendor name."
steps:
- name: get-contract
type: call
call: "salesforce.get-record"
with:
object: "Contract"
id: "{{contract_id}}"
- name: create-renewal-doc
type: call
call: "sharepoint.create-document"
with:
site: "procurement"
folder: "renewals"
name: "{{vendor_name}}-renewal-{{contract_id}}.docx"
- name: create-approval
type: call
call: "jira.create-issue"
with:
project: "PROC"
summary: "Contract renewal: {{vendor_name}}"
description: "Contract: {{contract_id}}. Current value: {{get-contract.Amount}}. Renewal doc: {{create-renewal-doc.web_url}}."
issuetype: "Approval"
- name: notify-procurement
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.procurement_channel"
text: "Contract renewal initiated: {{vendor_name}}. Approval: {{create-approval.key}}. Doc: {{create-renewal-doc.web_url}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://blizzard.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: records
path: "/sobjects/{{object}}/{{id}}"
inputParameters:
- name: object
in: path
- name: id
in: path
operations:
- name: get-record
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: documents
path: "/sites/{{site}}/drive/root:/{{folder}}:/children"
inputParameters:
- name: site
in: path
- name: folder
in: path
operations:
- name: create-document
method: POST
- type: http
namespace: jira
baseUri: "https://blizzard.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves employee details from Workday by worker ID for game development team management.
naftiko: "0.5"
info:
label: "Workday Employee Directory Lookup"
description: "Retrieves employee details from Workday by worker ID for game development team management."
tags:
- hr
- workday
- employee
capability:
exposes:
- type: mcp
namespace: hr-directory
port: 8080
tools:
- name: get-employee
description: "Look up an employee in Workday by worker ID."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
call: "workday.get-worker"
with:
worker_id: "{{worker_id}}"
outputParameters:
- name: full_name
type: string
mapping: "$.fullName"
- name: department
type: string
mapping: "$.department"
- name: title
type: string
mapping: "$.jobTitle"
- name: email
type: string
mapping: "$.workEmail"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
Retrieves current headcount data from Workday for a specified game studio or department.
naftiko: "0.5"
info:
label: "Workday Headcount Report"
description: "Retrieves current headcount data from Workday for a specified game studio or department."
tags:
- hr
- workday
- headcount
capability:
exposes:
- type: mcp
namespace: hr-headcount
port: 8080
tools:
- name: get-headcount
description: "Look up headcount for a department or studio."
inputParameters:
- name: department
in: body
type: string
description: "Department or studio name."
call: "workday.get-headcount-report"
with:
department: "{{department}}"
outputParameters:
- name: total_headcount
type: number
mapping: "$.Report_Entry[0].Total_Headcount"
- name: open_positions
type: number
mapping: "$.Report_Entry[0].Open_Positions"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl-services1.workday.com/ccx/service/blizzard"
authentication:
type: basic
username: "$secrets.workday_user"
password: "$secrets.workday_password"
resources:
- name: reports
path: "/Human_Resources/Headcount_Report"
operations:
- name: get-headcount-report
method: GET
Packages the build from Jenkins, uploads to Azure Blob Storage, creates a certification tracking ticket in Jira, and notifies the console team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Xbox Certification Submission Pipeline"
description: "Packages the build from Jenkins, uploads to Azure Blob Storage, creates a certification tracking ticket in Jira, and notifies the console team via Microsoft Teams."
tags:
- certification
- jenkins
- azure-devops
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: xbox-certification
port: 8080
tools:
- name: submit-certification
description: "Orchestrate Xbox certification submission process."
inputParameters:
- name: build_number
in: body
type: string
description: "Build number to submit."
- name: game_title
in: body
type: string
description: "Game title."
steps:
- name: get-build
type: call
call: "jenkins.get-build"
with:
job_name: "{{game_title}}-xbox"
build_number: "{{build_number}}"
- name: upload-build
type: call
call: "azuredevops.upload-artifact"
with:
project: "{{game_title}}"
build_id: "{{build_number}}"
artifact_name: "xbox-cert-{{build_number}}"
- name: create-tracker
type: call
call: "jira.create-issue"
with:
project: "CERT"
summary: "Xbox certification: {{game_title}} build {{build_number}}"
description: "Build submitted. Artifact: {{upload-build.url}}. Status: Pending."
issuetype: "Task"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.console_team_channel"
text: "Xbox certification submitted: {{game_title}} build {{build_number}}. Tracker: {{create-tracker.key}}."
consumes:
- type: http
namespace: jenkins
baseUri: "https://jenkins.blizzard.com"
authentication:
type: basic
username: "$secrets.jenkins_user"
password: "$secrets.jenkins_api_token"
resources:
- name: builds
path: "/job/{{job_name}}/{{build_number}}/api/json"
inputParameters:
- name: job_name
in: path
- name: build_number
in: path
operations:
- name: get-build
method: GET
- type: http
namespace: azuredevops
baseUri: "https://dev.azure.com/blizzard"
authentication:
type: basic
username: ""
password: "$secrets.azure_devops_pat"
resources:
- name: artifacts
path: "/{{project}}/_apis/build/builds/{{build_id}}/artifacts"
inputParameters:
- name: project
in: path
- name: build_id
in: path
operations:
- name: upload-artifact
method: POST
- type: http
namespace: jira
baseUri: "https://blizzard.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
When an Xbox cert submission is filed, creates a Jira task and notifies the cert team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Xbox Certification Tracking Pipeline"
description: "When an Xbox cert submission is filed, creates a Jira task and notifies the cert team via Microsoft Teams."
tags:
- certification
- microsoft-xbox
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: cert-tracking
port: 8080
tools:
- name: track-xbox-certification
description: "Given cert details, create tracking across Jira and Microsoft Teams."
inputParameters:
- name: game_title
in: body
type: string
description: "Game title."
- name: build_version
in: body
type: string
description: "Build version."
- name: cert_channel
in: body
type: string
description: "Microsoft Teams cert channel."
steps:
- name: create-cert-task
type: call
call: "jira.create-issue"
with:
project_key: "CERT"
summary: "Xbox Cert: {{game_title}} v{{build_version}}"
issue_type: "Task"
- name: notify-cert-team
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{cert_channel}}"
text: "Xbox cert submitted: {{game_title}} v{{build_version}}. Jira: {{create-cert-task.key}}."
consumes:
- type: http
namespace: jira
baseUri: "https://blizzard.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Uploads a game trailer to YouTube, creates a Jira marketing task, and posts announcements to Twitter, Facebook, and the marketing Microsoft Teams channel.
naftiko: "0.5"
info:
label: "YouTube Game Trailer Upload Pipeline"
description: "Uploads a game trailer to YouTube, creates a Jira marketing task, and posts announcements to Twitter, Facebook, and the marketing Microsoft Teams channel."
tags:
- marketing
- youtube
- twitter
- facebook
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: trailer-release
port: 8080
tools:
- name: release-game-trailer
description: "Given trailer details, upload to YouTube and announce across social media and internal channels."
inputParameters:
- name: video_title
in: body
type: string
description: "The video title."
- name: game_title
in: body
type: string
description: "The game title."
- name: description
in: body
type: string
description: "Video description."
- name: jira_project_key
in: body
type: string
description: "Jira project key for marketing."
- name: marketing_channel
in: body
type: string
description: "Microsoft Teams marketing channel."
steps:
- name: upload-video
type: call
call: "youtube.upload-video"
with:
title: "{{video_title}}"
description: "{{description}}"
tags: "{{game_title}},Blizzard,Gaming,Trailer"
- name: create-marketing-task
type: call
call: "jira.create-issue"
with:
project_key: "{{jira_project_key}}"
summary: "Trailer released: {{video_title}}"
issue_type: "Task"
description: "YouTube: {{upload-video.video_url}}. Promote across channels."
- name: tweet-announcement
type: call
call: "twitter.create-tweet"
with:
text: "Watch the new {{game_title}} trailer! {{upload-video.video_url}} #{{game_title}} #Blizzard"
- name: notify-marketing
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{marketing_channel}}"
text: "Trailer live: {{video_title}} - {{upload-video.video_url}}. Jira: {{create-marketing-task.key}}. Social posts published."
consumes:
- type: http
namespace: youtube
baseUri: "https://www.googleapis.com/upload/youtube/v3"
authentication:
type: bearer
token: "$secrets.youtube_token"
resources:
- name: videos
path: "/videos?part=snippet,status"
operations:
- name: upload-video
method: POST
- type: http
namespace: jira
baseUri: "https://blizzard.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: twitter
baseUri: "https://api.twitter.com/2"
authentication:
type: bearer
token: "$secrets.twitter_bearer_token"
resources:
- name: tweets
path: "/tweets"
operations:
- name: create-tweet
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves a Zendesk support ticket by ID for player customer service, returning subject, status, and priority.
naftiko: "0.5"
info:
label: "Zendesk Player Support Ticket Lookup"
description: "Retrieves a Zendesk support ticket by ID for player customer service, returning subject, status, and priority."
tags:
- customer-service
- zendesk
- player-support
capability:
exposes:
- type: mcp
namespace: player-support
port: 8080
tools:
- name: get-support-ticket
description: "Look up a Zendesk ticket by ID."
inputParameters:
- name: ticket_id
in: body
type: string
description: "The Zendesk ticket ID."
call: "zendesk.get-ticket"
with:
ticket_id: "{{ticket_id}}"
outputParameters:
- name: subject
type: string
mapping: "$.ticket.subject"
- name: status
type: string
mapping: "$.ticket.status"
- name: priority
type: string
mapping: "$.ticket.priority"
- name: requester
type: string
mapping: "$.ticket.requester.name"
consumes:
- type: http
namespace: zendesk
baseUri: "https://blizzard.zendesk.com/api/v2"
authentication:
type: bearer
token: "$secrets.zendesk_token"
resources:
- name: tickets
path: "/tickets/{{ticket_id}}"
inputParameters:
- name: ticket_id
in: path
operations:
- name: get-ticket
method: GET
Searches Zendesk for player support tickets by game title and issue category.
naftiko: "0.5"
info:
label: "Zendesk Ticket Search"
description: "Searches Zendesk for player support tickets by game title and issue category."
tags:
- support
- zendesk
- tickets
capability:
exposes:
- type: mcp
namespace: ticket-search
port: 8080
tools:
- name: search-tickets
description: "Search for support tickets by game and category."
inputParameters:
- name: game_title
in: body
type: string
description: "Game title to filter tickets."
- name: category
in: body
type: string
description: "Issue category."
call: "zendesk.search-tickets"
with:
query: "type:ticket tags:{{game_title}} tags:{{category}}"
outputParameters:
- name: tickets
type: array
mapping: "$.results"
- name: count
type: number
mapping: "$.count"
consumes:
- type: http
namespace: zendesk
baseUri: "https://blizzard.zendesk.com/api/v2"
authentication:
type: basic
username: "$secrets.zendesk_user"
password: "$secrets.zendesk_api_token"
resources:
- name: search
path: "/search.json"
operations:
- name: search-tickets
method: GET
Creates a Zoom meeting for game development team standups and reviews.
naftiko: "0.5"
info:
label: "Zoom Meeting Scheduler"
description: "Creates a Zoom meeting for game development team standups and reviews."
tags:
- collaboration
- zoom
- meetings
capability:
exposes:
- type: mcp
namespace: meeting-scheduler
port: 8080
tools:
- name: create-zoom-meeting
description: "Create a Zoom meeting."
inputParameters:
- name: topic
in: body
type: string
description: "The meeting topic."
- name: duration
in: body
type: integer
description: "Duration in minutes."
- name: start_time
in: body
type: string
description: "Start time in ISO 8601."
call: "zoom.create-meeting"
with:
topic: "{{topic}}"
duration: "{{duration}}"
start_time: "{{start_time}}"
outputParameters:
- name: join_url
type: string
mapping: "$.join_url"
- name: meeting_id
type: string
mapping: "$.id"
consumes:
- type: http
namespace: zoom
baseUri: "https://api.zoom.us/v2"
authentication:
type: bearer
token: "$secrets.zoom_token"
resources:
- name: meetings
path: "/users/me/meetings"
operations:
- name: create-meeting
method: POST