Blizzard Entertainment Capabilities

Naftiko 0.5 capability definitions for Blizzard Entertainment - 100 capabilities showing integration workflows and service orchestrations.

Sort
Expand

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