Hearst Capabilities

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

Sort
Expand

Checks ad inventory availability from Google Campaign Manager for a given publication, date range, and ad unit.

naftiko: "0.5"
info:
  label: "Ad Inventory Availability Checker"
  description: "Checks ad inventory availability from Google Campaign Manager for a given publication, date range, and ad unit."
  tags:
    - advertising
    - inventory
    - google-campaign-manager
capability:
  exposes:
    - type: mcp
      namespace: ad-inventory
      port: 8080
      tools:
        - name: check-ad-inventory
          description: "Check available ad inventory for a publication."
          inputParameters:
            - name: publication_id
              in: body
              type: string
              description: "The publication identifier."
            - name: start_date
              in: body
              type: string
              description: "Campaign start date."
            - name: end_date
              in: body
              type: string
              description: "Campaign end date."
            - name: ad_unit
              in: body
              type: string
              description: "The ad unit type."
          call: "gcm.get-availability"
          with:
            publication_id: "{{publication_id}}"
            start_date: "{{start_date}}"
            end_date: "{{end_date}}"
            ad_unit: "{{ad_unit}}"
          outputParameters:
            - name: available_impressions
              type: integer
              mapping: "$.availableImpressions"
            - name: sold_pct
              type: string
              mapping: "$.soldPercentage"
            - name: rate_card
              type: string
              mapping: "$.rateCard"
  consumes:
    - type: http
      namespace: gcm
      baseUri: "https://dfareporting.googleapis.com/dfareporting/v4"
      authentication:
        type: bearer
        token: "$secrets.google_campaign_manager_token"
      resources:
        - name: inventory
          path: "/userprofiles/{{profile_id}}/reports"
          inputParameters:
            - name: profile_id
              in: path
          operations:
            - name: get-availability
              method: POST

Queries historical data in Snowflake, generates forecasts, updates Salesforce inventory, and alerts sales via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Ad Inventory Forecasting Pipeline"
  description: "Queries historical data in Snowflake, generates forecasts, updates Salesforce inventory, and alerts sales via Microsoft Teams."
  tags:
    - advertising
    - snowflake
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: ad-inventory-forecasting-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Queries historical data in Snowflake, generates forecasts, updates Salesforce inventory, and alerts sales via Microsoft Teams."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "snowflake.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "salesforce.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "microsoft-teams.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "microsoft-teams.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://api.salesforce.com/v1"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: microsoft-teams
      baseUri: "https://api.microsoftteams.com/v1"
      authentication:
        type: bearer
        token: "$secrets.microsoft_teams_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Deploys an Adobe Launch tag library update and notifies the analytics team.

naftiko: "0.5"
info:
  label: "Adobe Launch Tag Deployment"
  description: "Deploys an Adobe Launch tag library update and notifies the analytics team."
  tags:
    - analytics
    - tag-management
    - adobe-launch
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: tag-deployment
      port: 8080
      tools:
        - name: deploy-adobe-launch
          description: "Deploy an Adobe Launch library and notify the team."
          inputParameters:
            - name: property_id
              in: body
              type: string
              description: "The Adobe Launch property ID."
            - name: environment
              in: body
              type: string
              description: "The target environment (dev, staging, production)."
          steps:
            - name: trigger-build
              type: call
              call: "adobe-launch.create-build"
              with:
                property_id: "{{property_id}}"
                environment: "{{environment}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "analytics-ops"
                text: "Adobe Launch deployed to {{environment}} for property {{property_id}}. Build ID: {{trigger-build.build_id}}."
  consumes:
    - type: http
      namespace: adobe-launch
      baseUri: "https://reactor.adobe.io"
      authentication:
        type: bearer
        token: "$secrets.adobe_launch_token"
      resources:
        - name: builds
          path: "/properties/{{property_id}}/builds"
          inputParameters:
            - name: property_id
              in: path
          operations:
            - name: create-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: send-message
              method: POST

Retrieves payroll summary from ADP for a given pay period.

naftiko: "0.5"
info:
  label: "ADP Payroll Summary"
  description: "Retrieves payroll summary from ADP for a given pay period."
  tags:
    - hr
    - payroll
    - adp
capability:
  exposes:
    - type: mcp
      namespace: hr-payroll
      port: 8080
      tools:
        - name: get-payroll-summary
          description: "Get payroll summary from ADP."
          inputParameters:
            - name: pay_period
              in: body
              type: string
              description: "The pay period identifier."
          call: "adp.get-payroll"
          with:
            pay_period: "{{pay_period}}"
          outputParameters:
            - name: total_gross
              type: string
              mapping: "$.payrollSummary.totalGross"
            - name: total_net
              type: string
              mapping: "$.payrollSummary.totalNet"
            - name: employee_count
              type: integer
              mapping: "$.payrollSummary.headcount"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token"
      resources:
        - name: payroll
          path: "/payroll-outputs?payPeriod={{pay_period}}"
          inputParameters:
            - name: pay_period
              in: query
          operations:
            - name: get-payroll
              method: GET

Creates advertiser campaign in Salesforce, sets up ad inventory in Google Ads, configures tracking in Google Analytics, and sends confirmation via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Advertiser Campaign Onboarding Pipeline"
  description: "Creates advertiser campaign in Salesforce, sets up ad inventory in Google Ads, configures tracking in Google Analytics, and sends confirmation via Microsoft Outlook."
  tags:
    - advertising
    - salesforce
    - google-ads
    - google-analytics
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: advertiser-campaign-onboarding-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Creates advertiser campaign in Salesforce, sets up ad inventory in Google Ads, configures tracking in Google Analytics, and sends confirmation via Microsoft Outlook."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "salesforce.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "google-ads.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "google-analytics.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "microsoft-outlook.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://api.salesforce.com/v1"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-ads
      baseUri: "https://api.googleads.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_ads_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-analytics
      baseUri: "https://api.googleanalytics.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: microsoft-outlook
      baseUri: "https://api.microsoftoutlook.com/v1"
      authentication:
        type: bearer
        token: "$secrets.microsoft_outlook_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Creates a Google Ads campaign linked to a Salesforce opportunity, sets up tracking in Google Tag Manager, and notifies the ad ops team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Advertising Campaign Creator"
  description: "Creates a Google Ads campaign linked to a Salesforce opportunity, sets up tracking in Google Tag Manager, and notifies the ad ops team in Microsoft Teams."
  tags:
    - advertising
    - google-ads
    - salesforce
    - google-tag-manager
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: ad-campaigns
      port: 8080
      tools:
        - name: create-ad-campaign
          description: "Set up a Google Ads campaign linked to Salesforce and GTM."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "The Salesforce opportunity ID."
            - name: budget_amount
              in: body
              type: number
              description: "The daily budget in USD."
          steps:
            - name: get-opportunity
              type: call
              call: "salesforce.get-opportunity"
              with:
                opportunity_id: "{{opportunity_id}}"
            - name: create-campaign
              type: call
              call: "googleads.create-campaign"
              with:
                name: "{{get-opportunity.Name}}"
                budget: "{{budget_amount}}"
                advertiser: "{{get-opportunity.Account.Name}}"
            - name: setup-tracking
              type: call
              call: "gtm.create-tag"
              with:
                campaign_id: "{{create-campaign.id}}"
                tag_name: "GA_{{create-campaign.id}}"
            - name: notify-adops
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "ad-ops"
                text: "New ad campaign created: {{get-opportunity.Name}}. Google Ads ID: {{create-campaign.id}}. Budget: ${{budget_amount}}/day. GTM tag: {{setup-tracking.tag_id}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://hearst.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity/{{opportunity_id}}"
          inputParameters:
            - name: opportunity_id
              in: path
          operations:
            - name: get-opportunity
              method: GET
    - type: http
      namespace: googleads
      baseUri: "https://googleads.googleapis.com/v14"
      authentication:
        type: bearer
        token: "$secrets.google_ads_token"
      resources:
        - name: campaigns
          path: "/customers/{{customer_id}}/campaigns"
          operations:
            - name: create-campaign
              method: POST
    - type: http
      namespace: gtm
      baseUri: "https://www.googleapis.com/tagmanager/v2"
      authentication:
        type: bearer
        token: "$secrets.gtm_token"
      resources:
        - name: tags
          path: "/accounts/{{account_id}}/containers/{{container_id}}/workspaces/{{workspace_id}}/tags"
          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: send-message
              method: POST

Retrieves editorial calendar entries from Airtable by publication and date range, returning article titles, authors, and deadlines.

naftiko: "0.5"
info:
  label: "Airtable Editorial Calendar Lookup"
  description: "Retrieves editorial calendar entries from Airtable by publication and date range, returning article titles, authors, and deadlines."
  tags:
    - editorial
    - airtable
capability:
  exposes:
    - type: mcp
      namespace: airtable-editorial
      port: 8080
      tools:
        - name: get-calendar
          description: "Look up editorial calendar entries in Airtable."
          inputParameters:
            - name: publication
              in: body
              type: string
              description: "The publication name."
          call: "airtable.list-records"
          with:
            filter: "{{publication}}"
          outputParameters:
            - name: title
              type: string
              mapping: "$.records[0].fields.Title"
            - name: author
              type: string
              mapping: "$.records[0].fields.Author"
  consumes:
    - type: http
      namespace: airtable
      baseUri: "https://api.airtable.com/v0/appHearst"
      authentication:
        type: bearer
        token: "$secrets.airtable_token"
      resources:
        - name: calendar
          path: "/EditorialCalendar?filterByFormula={Publication}='{{filter}}'"
          inputParameters:
            - name: filter
              in: path
          operations:
            - name: list-records
              method: GET

Retrieves spend from SAP, builds forecasts in Snowflake, creates templates in Google Sheets, and submits via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Annual Budget Planning Pipeline"
  description: "Retrieves spend from SAP, builds forecasts in Snowflake, creates templates in Google Sheets, and submits via Microsoft Teams."
  tags:
    - finance
    - sap
    - snowflake
    - google-sheets
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: annual-budget-planning-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Retrieves spend from SAP, builds forecasts in Snowflake, creates templates in Google Sheets, and submits via Microsoft Teams."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "sap.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "snowflake.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "google-sheets.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "microsoft-teams.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://api.sap.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: microsoft-teams
      baseUri: "https://api.microsoftteams.com/v1"
      authentication:
        type: bearer
        token: "$secrets.microsoft_teams_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

When a new article is approved in the CMS, publishes to WordPress, pushes to Google Analytics for tracking, distributes via MailChimp to subscribers, and posts a teaser to LinkedIn.

naftiko: "0.5"
info:
  label: "Article Publishing Orchestrator"
  description: "When a new article is approved in the CMS, publishes to WordPress, pushes to Google Analytics for tracking, distributes via MailChimp to subscribers, and posts a teaser to LinkedIn."
  tags:
    - publishing
    - content
    - wordpress
    - google-analytics
    - mailchimp
    - linkedin
capability:
  exposes:
    - type: mcp
      namespace: article-publishing
      port: 8080
      tools:
        - name: publish-article
          description: "Publish an article across website, email, and social channels."
          inputParameters:
            - name: article_id
              in: body
              type: string
              description: "The CMS article ID."
            - name: subscriber_list_id
              in: body
              type: string
              description: "The MailChimp subscriber list ID."
          steps:
            - name: get-article
              type: call
              call: "wordpress.get-post"
              with:
                post_id: "{{article_id}}"
            - name: send-newsletter
              type: call
              call: "mailchimp.create-campaign"
              with:
                list_id: "{{subscriber_list_id}}"
                subject: "{{get-article.title}}"
                body: "{{get-article.excerpt}} Read more: {{get-article.url}}"
            - name: send-campaign
              type: call
              call: "mailchimp.send-campaign"
              with:
                campaign_id: "{{send-newsletter.id}}"
            - name: post-social
              type: call
              call: "linkedin.create-post"
              with:
                author: "urn:li:organization:hearst"
                text: "{{get-article.title}} - {{get-article.excerpt}} Read more: {{get-article.url}} #Hearst #Media"
  consumes:
    - type: http
      namespace: wordpress
      baseUri: "https://hearst.com/wp-json/wp/v2"
      authentication:
        type: bearer
        token: "$secrets.wordpress_token"
      resources:
        - name: posts
          path: "/posts/{{post_id}}"
          inputParameters:
            - name: post_id
              in: path
          operations:
            - name: get-post
              method: GET
    - 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: create-campaign
              method: POST
        - name: campaign-actions
          path: "/campaigns/{{campaign_id}}/actions/send"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: send-campaign
              method: POST
    - 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 editorial project status from Asana by project GID, returning name and deadline.

naftiko: "0.5"
info:
  label: "Asana Editorial Project Lookup"
  description: "Retrieves editorial project status from Asana by project GID, returning name and deadline."
  tags:
    - project-management
    - asana
capability:
  exposes:
    - type: mcp
      namespace: asana-editorial
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves editorial project status from Asana by project GID, returning name and deadline."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "asana-editorial.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: asana-editorial
      baseUri: "https://app.asana.com/api/1.0"
      authentication:
        type: bearer
        token: "$secrets.asana_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Builds audience segments from Adobe Analytics behavior data, pushes to Salesforce for targeted campaigns, and syncs to MailChimp for email targeting.

naftiko: "0.5"
info:
  label: "Audience Segmentation Builder"
  description: "Builds audience segments from Adobe Analytics behavior data, pushes to Salesforce for targeted campaigns, and syncs to MailChimp for email targeting."
  tags:
    - marketing
    - audience
    - adobe-analytics
    - salesforce
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: audience-segments
      port: 8080
      tools:
        - name: build-audience-segment
          description: "Build and distribute an audience segment across CRM and email platforms."
          inputParameters:
            - name: segment_name
              in: body
              type: string
              description: "The audience segment name."
            - name: behavior_criteria
              in: body
              type: string
              description: "The behavioral criteria for segmentation."
          steps:
            - name: get-segment
              type: call
              call: "adobe-analytics.get-segment"
              with:
                criteria: "{{behavior_criteria}}"
            - name: update-sf
              type: call
              call: "salesforce.create-campaign"
              with:
                name: "Segment: {{segment_name}}"
                type: "Audience Segment"
                member_count: "{{get-segment.member_count}}"
            - name: sync-mailchimp
              type: call
              call: "mailchimp.create-segment"
              with:
                list_id: "main_subscriber_list"
                segment_name: "{{segment_name}}"
                member_count: "{{get-segment.member_count}}"
  consumes:
    - type: http
      namespace: adobe-analytics
      baseUri: "https://analytics.adobe.io/api"
      authentication:
        type: bearer
        token: "$secrets.adobe_analytics_token"
      resources:
        - name: segments
          path: "/hearst/segments"
          operations:
            - name: get-segment
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://hearst.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: campaigns
          path: "/sobjects/Campaign"
          operations:
            - name: create-campaign
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: basic
        username: "anystring"
        password: "$secrets.mailchimp_api_key"
      resources:
        - name: segments
          path: "/lists/{{list_id}}/segments"
          inputParameters:
            - name: list_id
              in: path
          operations:
            - name: create-segment
              method: POST

Builds audience segments in Snowflake, syncs to Salesforce, creates targeted campaigns in MailChimp, and tracks in Google Sheets.

naftiko: "0.5"
info:
  label: "Audience Segmentation Campaign Pipeline"
  description: "Builds audience segments in Snowflake, syncs to Salesforce, creates targeted campaigns in MailChimp, and tracks in Google Sheets."
  tags:
    - marketing
    - snowflake
    - salesforce
    - mailchimp
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: audience-segmentation-campaign-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Builds audience segments in Snowflake, syncs to Salesforce, creates targeted campaigns in MailChimp, and tracks in Google Sheets."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "snowflake.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "salesforce.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "mailchimp.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "google-sheets.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://api.salesforce.com/v1"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://api.mailchimp.com/v1"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Retrieves the latest build status for an Azure DevOps pipeline.

naftiko: "0.5"
info:
  label: "Azure DevOps Build Status"
  description: "Retrieves the latest build status for an Azure DevOps pipeline."
  tags:
    - devops
    - ci-cd
    - azure-devops
capability:
  exposes:
    - type: mcp
      namespace: cicd-status
      port: 8080
      tools:
        - name: get-build-status
          description: "Get the latest build status for an Azure DevOps pipeline."
          inputParameters:
            - name: project_name
              in: body
              type: string
              description: "The Azure DevOps project name."
            - name: pipeline_id
              in: body
              type: string
              description: "The pipeline definition ID."
          call: "azdo.get-builds"
          with:
            project: "{{project_name}}"
            definition_id: "{{pipeline_id}}"
          outputParameters:
            - name: build_number
              type: string
              mapping: "$.value[0].buildNumber"
            - name: result
              type: string
              mapping: "$.value[0].result"
  consumes:
    - type: http
      namespace: azdo
      baseUri: "https://dev.azure.com/hearst"
      authentication:
        type: basic
        username: ""
        password: "$secrets.azdo_pat"
      resources:
        - name: builds
          path: "/{{project}}/_apis/build/builds?definitions={{definition_id}}&$top=1&api-version=7.0"
          inputParameters:
            - name: project
              in: path
            - name: definition_id
              in: query
          operations:
            - name: get-builds
              method: GET

Archives completed editorial content from SharePoint to Box for long-term storage.

naftiko: "0.5"
info:
  label: "Box Editorial Archive"
  description: "Archives completed editorial content from SharePoint to Box for long-term storage."
  tags:
    - document-management
    - archival
    - sharepoint
    - box
capability:
  exposes:
    - type: mcp
      namespace: editorial-archive
      port: 8080
      tools:
        - name: archive-to-box
          description: "Archive editorial content to Box."
          inputParameters:
            - name: site_id
              in: body
              type: string
              description: "SharePoint site ID."
            - name: file_path
              in: body
              type: string
              description: "File path."
            - name: box_folder_id
              in: body
              type: string
              description: "Box folder ID."
          steps:
            - name: get-file
              type: call
              call: "sharepoint.get-file-content"
              with:
                site_id: "{{site_id}}"
                file_path: "{{file_path}}"
            - name: upload-to-box
              type: call
              call: "box.upload-file"
              with:
                folder_id: "{{box_folder_id}}"
                file_name: "{{file_path}}"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: get-file-content
              method: GET
    - type: http
      namespace: box
      baseUri: "https://upload.box.com/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: files
          path: "/files/content"
          operations:
            - name: upload-file
              method: POST

Creates partnership record in Salesforce, generates contract in DocuSign, sets up tracking in Google Sheets, and notifies via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Brand Partnership Pipeline"
  description: "Creates partnership record in Salesforce, generates contract in DocuSign, sets up tracking in Google Sheets, and notifies via Microsoft Teams."
  tags:
    - partnerships
    - salesforce
    - docusign
    - google-sheets
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: brand-partnership-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Creates partnership record in Salesforce, generates contract in DocuSign, sets up tracking in Google Sheets, and notifies via Microsoft Teams."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "salesforce.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "docusign.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "google-sheets.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "microsoft-teams.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://api.salesforce.com/v1"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: docusign
      baseUri: "https://api.docusign.com/v1"
      authentication:
        type: bearer
        token: "$secrets.docusign_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: microsoft-teams
      baseUri: "https://api.microsoftteams.com/v1"
      authentication:
        type: bearer
        token: "$secrets.microsoft_teams_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

On breaking news event, publishes article via CMS, distributes to social channels via Facebook and Twitter, sends push notifications via Slack, and updates Google Analytics tracking.

naftiko: "0.5"
info:
  label: "Breaking News Distribution Pipeline"
  description: "On breaking news event, publishes article via CMS, distributes to social channels via Facebook and Twitter, sends push notifications via Slack, and updates Google Analytics tracking."
  tags:
    - editorial
    - facebook
    - twitter
    - slack
    - google-analytics
capability:
  exposes:
    - type: mcp
      namespace: breaking-news-distribution-pipeline
      port: 8080
      tools:
        - name: execute
          description: "On breaking news event, publishes article via CMS, distributes to social channels via Facebook and Twitter, sends push notifications via Slack, and updates Google Analytics tracking."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "facebook.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "twitter.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "slack.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "google-analytics.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: facebook
      baseUri: "https://api.facebook.com/v1"
      authentication:
        type: bearer
        token: "$secrets.facebook_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: twitter
      baseUri: "https://api.twitter.com/v1"
      authentication:
        type: bearer
        token: "$secrets.twitter_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://api.slack.com/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-analytics
      baseUri: "https://api.googleanalytics.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Retrieves a Canva brand template by ID for Hearst editorial design teams.

naftiko: "0.5"
info:
  label: "Canva Brand Template Lookup"
  description: "Retrieves a Canva brand template by ID for Hearst editorial design teams."
  tags:
    - design
    - canva
capability:
  exposes:
    - type: mcp
      namespace: canva-templates
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves a Canva brand template by ID for Hearst editorial design teams."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "canva-templates.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: canva-templates
      baseUri: "https://api.canva.com/rest/v1"
      authentication:
        type: bearer
        token: "$secrets.canva_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Checks Cloudflare CDN performance metrics for Hearst digital properties.

naftiko: "0.5"
info:
  label: "Cloudflare CDN Performance Monitor"
  description: "Checks Cloudflare CDN performance metrics for Hearst digital properties."
  tags:
    - performance
    - cdn
    - cloudflare
capability:
  exposes:
    - type: mcp
      namespace: cdn-monitoring
      port: 8080
      tools:
        - name: check-cdn-performance
          description: "Check CDN performance for a Cloudflare zone."
          inputParameters:
            - name: zone_id
              in: body
              type: string
              description: "The Cloudflare zone ID."
          call: "cloudflare.get-zone-analytics"
          with:
            zone_id: "{{zone_id}}"
          outputParameters:
            - name: cache_hit_rate
              type: string
              mapping: "$.result.totals.requests.cached"
            - name: bandwidth_saved
              type: string
              mapping: "$.result.totals.bandwidth.cached"
            - name: total_requests
              type: integer
              mapping: "$.result.totals.requests.all"
  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"
          inputParameters:
            - name: zone_id
              in: path
          operations:
            - name: get-zone-analytics
              method: GET

Creates or updates a Confluence page for editorial guidelines and SOPs.

naftiko: "0.5"
info:
  label: "Confluence Knowledge Base Publisher"
  description: "Creates or updates a Confluence page for editorial guidelines and SOPs."
  tags:
    - knowledge-management
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: knowledge-base
      port: 8080
      tools:
        - name: publish-kb-article
          description: "Publish a knowledge base page to Confluence."
          inputParameters:
            - name: space_key
              in: body
              type: string
              description: "The Confluence space key."
            - name: title
              in: body
              type: string
              description: "The page title."
            - name: content
              in: body
              type: string
              description: "The page content."
          call: "confluence.create-page"
          with:
            space_key: "{{space_key}}"
            title: "{{title}}"
            body: "{{content}}"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://hearst.atlassian.net/wiki/api/v2"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/pages"
          operations:
            - name: create-page
              method: POST

Pulls editorial calendar entries from Jira, syncs deadlines to Microsoft Planner, and notifies editors in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Content Editorial Calendar Sync"
  description: "Pulls editorial calendar entries from Jira, syncs deadlines to Microsoft Planner, and notifies editors in Microsoft Teams."
  tags:
    - publishing
    - editorial
    - jira
    - microsoft-planner
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: editorial-calendar
      port: 8080
      tools:
        - name: sync-editorial-calendar
          description: "Sync Jira editorial tasks to Microsoft Planner and notify editors."
          inputParameters:
            - name: project_key
              in: body
              type: string
              description: "The Jira project key for editorial content."
            - name: plan_id
              in: body
              type: string
              description: "The Microsoft Planner plan ID."
          steps:
            - name: get-editorial-tasks
              type: call
              call: "jira.get-issues"
              with:
                project_key: "{{project_key}}"
                status: "In Progress"
            - name: create-planner-tasks
              type: call
              call: "planner.create-task"
              with:
                plan_id: "{{plan_id}}"
                title: "{{get-editorial-tasks.issues[0].summary}}"
                due_date: "{{get-editorial-tasks.issues[0].due_date}}"
            - name: notify-editors
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "editorial-team"
                text: "Editorial calendar synced. {{get-editorial-tasks.total}} active stories. Next deadline: {{get-editorial-tasks.issues[0].due_date}} - {{get-editorial-tasks.issues[0].summary}}."
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://hearst.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/search?jql=project={{project_key}} AND status='In Progress'"
          inputParameters:
            - name: project_key
              in: path
          operations:
            - name: get-issues
              method: GET
    - type: http
      namespace: planner
      baseUri: "https://graph.microsoft.com/v1.0/planner"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: tasks
          path: "/tasks"
          operations:
            - name: create-task
              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: send-message
              method: POST

Retrieves content from SharePoint, translates via Azure Cognitive Services, uploads to Google Drive, and notifies via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Content Localization Pipeline"
  description: "Retrieves content from SharePoint, translates via Azure Cognitive Services, uploads to Google Drive, and notifies via Microsoft Teams."
  tags:
    - localization
    - sharepoint
    - microsoft-azure
    - google-drive
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: content-localization-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Retrieves content from SharePoint, translates via Azure Cognitive Services, uploads to Google Drive, and notifies via Microsoft Teams."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "sharepoint.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "microsoft-azure.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "google-drive.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "microsoft-teams.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://api.sharepoint.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sharepoint_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: microsoft-azure
      baseUri: "https://api.microsoftazure.com/v1"
      authentication:
        type: bearer
        token: "$secrets.microsoft_azure_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-drive
      baseUri: "https://api.googledrive.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_drive_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: microsoft-teams
      baseUri: "https://api.microsoftteams.com/v1"
      authentication:
        type: bearer
        token: "$secrets.microsoft_teams_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Checks content rights in Salesforce, creates clearance request in Jira, routes contract via DocuSign, and archives in SharePoint.

naftiko: "0.5"
info:
  label: "Content Rights Clearance Pipeline"
  description: "Checks content rights in Salesforce, creates clearance request in Jira, routes contract via DocuSign, and archives in SharePoint."
  tags:
    - legal
    - salesforce
    - jira
    - docusign
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: content-rights-clearance-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Checks content rights in Salesforce, creates clearance request in Jira, routes contract via DocuSign, and archives in SharePoint."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "salesforce.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "jira.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "docusign.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "sharepoint.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://api.salesforce.com/v1"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://api.jira.com/v1"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: docusign
      baseUri: "https://api.docusign.com/v1"
      authentication:
        type: bearer
        token: "$secrets.docusign_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://api.sharepoint.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sharepoint_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Checks content rights from Salesforce, validates usage permissions, creates a Jira task for rights renewal, and notifies the legal team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Content Rights Management Pipeline"
  description: "Checks content rights from Salesforce, validates usage permissions, creates a Jira task for rights renewal, and notifies the legal team in Microsoft Teams."
  tags:
    - legal
    - content-rights
    - salesforce
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: rights-management
      port: 8080
      tools:
        - name: check-content-rights
          description: "Check content rights and flag renewals."
          inputParameters:
            - name: content_id
              in: body
              type: string
              description: "The Salesforce content rights ID."
          steps:
            - name: get-rights
              type: call
              call: "salesforce.get-content-rights"
              with:
                content_id: "{{content_id}}"
            - name: create-renewal-task
              type: call
              call: "jira.create-issue"
              with:
                project_key: "LEGAL"
                summary: "Rights renewal: {{get-rights.Content_Title__c}} - expires {{get-rights.Expiry_Date__c}}"
                issue_type: "Task"
                description: "Content: {{get-rights.Content_Title__c}}. Rights holder: {{get-rights.Rights_Holder__c}}. Type: {{get-rights.License_Type__c}}. Expiry: {{get-rights.Expiry_Date__c}}."
            - name: notify-legal
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "legal-rights"
                text: "Rights renewal needed: {{get-rights.Content_Title__c}} expires {{get-rights.Expiry_Date__c}}. Jira: {{create-renewal-task.key}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://hearst.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: rights
          path: "/sobjects/Content_Rights__c/{{content_id}}"
          inputParameters:
            - name: content_id
              in: path
          operations:
            - name: get-content-rights
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://hearst.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: send-message
              method: POST

Queries expiring rights from Salesforce, creates renewal tasks in Jira, sends reminders via Microsoft Outlook, and logs in Google Sheets.

naftiko: "0.5"
info:
  label: "Content Rights Renewal Pipeline"
  description: "Queries expiring rights from Salesforce, creates renewal tasks in Jira, sends reminders via Microsoft Outlook, and logs in Google Sheets."
  tags:
    - legal
    - salesforce
    - jira
    - microsoft-outlook
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: content-rights-renewal-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Queries expiring rights from Salesforce, creates renewal tasks in Jira, sends reminders via Microsoft Outlook, and logs in Google Sheets."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "salesforce.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "jira.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "microsoft-outlook.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "google-sheets.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://api.salesforce.com/v1"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://api.jira.com/v1"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: microsoft-outlook
      baseUri: "https://api.microsoftoutlook.com/v1"
      authentication:
        type: bearer
        token: "$secrets.microsoft_outlook_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

When an article reaches high engagement on Google Analytics, automatically syndicates to partner outlets via WordPress multisite, posts to all social channels via HubSpot, and logs syndication in Salesforce.

naftiko: "0.5"
info:
  label: "Content Syndication Pipeline"
  description: "When an article reaches high engagement on Google Analytics, automatically syndicates to partner outlets via WordPress multisite, posts to all social channels via HubSpot, and logs syndication in Salesforce."
  tags:
    - publishing
    - syndication
    - google-analytics
    - wordpress
    - hubspot
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: content-syndication
      port: 8080
      tools:
        - name: syndicate-content
          description: "Syndicate high-performing content to partner outlets and social channels."
          inputParameters:
            - name: article_id
              in: body
              type: string
              description: "The WordPress article ID."
            - name: partner_site_ids
              in: body
              type: array
              description: "List of partner WordPress site IDs."
          steps:
            - name: get-article
              type: call
              call: "wordpress.get-post"
              with:
                post_id: "{{article_id}}"
            - name: syndicate-post
              type: call
              call: "wordpress.create-post"
              with:
                site_id: "{{partner_site_ids[0]}}"
                title: "{{get-article.title}}"
                content: "{{get-article.content}}"
                source_url: "{{get-article.url}}"
            - name: social-broadcast
              type: call
              call: "hubspot.create-broadcast"
              with:
                content: "{{get-article.title}} - Read more: {{get-article.url}} #Hearst"
            - name: log-syndication
              type: call
              call: "salesforce.create-syndication-record"
              with:
                article_id: "{{article_id}}"
                partner_count: "{{partner_site_ids.length}}"
                status: "Syndicated"
  consumes:
    - type: http
      namespace: wordpress
      baseUri: "https://hearst.com/wp-json/wp/v2"
      authentication:
        type: bearer
        token: "$secrets.wordpress_token"
      resources:
        - name: posts
          path: "/posts/{{post_id}}"
          inputParameters:
            - name: post_id
              in: path
          operations:
            - name: get-post
              method: GET
            - name: create-post
              method: POST
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: broadcasts
          path: "/broadcast/v1/broadcasts"
          operations:
            - name: create-broadcast
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://hearst.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: syndication
          path: "/sobjects/Content_Syndication__c"
          operations:
            - name: create-syndication-record
              method: POST

Manages contracts in Salesforce, routes signatures via DocuSign, archives in SharePoint, and tracks in Google Sheets.

naftiko: "0.5"
info:
  label: "Contract Lifecycle Management Pipeline"
  description: "Manages contracts in Salesforce, routes signatures via DocuSign, archives in SharePoint, and tracks in Google Sheets."
  tags:
    - legal
    - salesforce
    - docusign
    - sharepoint
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: contract-lifecycle-management-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Manages contracts in Salesforce, routes signatures via DocuSign, archives in SharePoint, and tracks in Google Sheets."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "salesforce.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "docusign.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "sharepoint.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "google-sheets.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://api.salesforce.com/v1"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: docusign
      baseUri: "https://api.docusign.com/v1"
      authentication:
        type: bearer
        token: "$secrets.docusign_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://api.sharepoint.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sharepoint_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Aggregates metrics from Google Analytics across publications, stores in Snowflake, generates dashboards in Tableau, and distributes via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Cross-Publication Analytics Pipeline"
  description: "Aggregates metrics from Google Analytics across publications, stores in Snowflake, generates dashboards in Tableau, and distributes via Microsoft Teams."
  tags:
    - analytics
    - google-analytics
    - snowflake
    - tableau
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: cross-publication-analytics-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Aggregates metrics from Google Analytics across publications, stores in Snowflake, generates dashboards in Tableau, and distributes via Microsoft Teams."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "google-analytics.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "snowflake.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "tableau.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "microsoft-teams.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: google-analytics
      baseUri: "https://api.googleanalytics.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: tableau
      baseUri: "https://api.tableau.com/v1"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: microsoft-teams
      baseUri: "https://api.microsoftteams.com/v1"
      authentication:
        type: bearer
        token: "$secrets.microsoft_teams_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Collects reviews from Zendesk, analyzes sentiment via Azure ML, stores in Snowflake, and publishes to Confluence.

naftiko: "0.5"
info:
  label: "Customer Feedback Analysis Pipeline"
  description: "Collects reviews from Zendesk, analyzes sentiment via Azure ML, stores in Snowflake, and publishes to Confluence."
  tags:
    - feedback
    - zendesk
    - azure-machine-learning
    - snowflake
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: customer-feedback-analysis-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Collects reviews from Zendesk, analyzes sentiment via Azure ML, stores in Snowflake, and publishes to Confluence."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "zendesk.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "azure-machine-learning.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "snowflake.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "confluence.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://api.zendesk.com/v1"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: azure-machine-learning
      baseUri: "https://api.azuremachinelearning.com/v1"
      authentication:
        type: bearer
        token: "$secrets.azure_machine_learning_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://api.confluence.com/v1"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Audits data usage in Snowflake, generates compliance reports in Google Sheets, archives in SharePoint, and notifies legal via Slack.

naftiko: "0.5"
info:
  label: "Data Privacy Compliance Pipeline"
  description: "Audits data usage in Snowflake, generates compliance reports in Google Sheets, archives in SharePoint, and notifies legal via Slack."
  tags:
    - compliance
    - snowflake
    - google-sheets
    - sharepoint
    - slack
capability:
  exposes:
    - type: mcp
      namespace: data-privacy-compliance-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Audits data usage in Snowflake, generates compliance reports in Google Sheets, archives in SharePoint, and notifies legal via Slack."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "snowflake.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "google-sheets.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "sharepoint.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "slack.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://api.sharepoint.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sharepoint_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://api.slack.com/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Retrieves service health metrics from Datadog.

naftiko: "0.5"
info:
  label: "Datadog Service Health Check"
  description: "Retrieves service health metrics from Datadog."
  tags:
    - it-operations
    - monitoring
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: infra-monitoring
      port: 8080
      tools:
        - name: get-service-health
          description: "Get Datadog health metrics for a service."
          inputParameters:
            - name: service_name
              in: body
              type: string
              description: "The Datadog service name."
          call: "datadog.get-metrics"
          with:
            service: "{{service_name}}"
          outputParameters:
            - name: cpu_usage
              type: string
              mapping: "$.series[0].pointlist[-1][1]"
            - name: error_rate
              type: string
              mapping: "$.series[1].pointlist[-1][1]"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
        headerName: "DD-API-KEY"
      resources:
        - name: metrics
          path: "/query?query=avg:system.cpu.user{service:{{service}}}"
          inputParameters:
            - name: service
              in: path
          operations:
            - name: get-metrics
              method: GET

Pulls ad metrics from Google Ads, aggregates in Snowflake, refreshes Power BI dashboards, and alerts sales via Slack.

naftiko: "0.5"
info:
  label: "Digital Ad Performance Pipeline"
  description: "Pulls ad metrics from Google Ads, aggregates in Snowflake, refreshes Power BI dashboards, and alerts sales via Slack."
  tags:
    - advertising
    - google-ads
    - snowflake
    - power-bi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: digital-ad-performance-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Pulls ad metrics from Google Ads, aggregates in Snowflake, refreshes Power BI dashboards, and alerts sales via Slack."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "google-ads.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "snowflake.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "power-bi.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "slack.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: google-ads
      baseUri: "https://api.googleads.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_ads_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://api.slack.com/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Retrieves the status of a DocuSign media contract envelope by ID, returning signing status, sender, and completion date.

naftiko: "0.5"
info:
  label: "DocuSign Media Contract Lookup"
  description: "Retrieves the status of a DocuSign media contract envelope by ID, returning signing status, sender, and completion date."
  tags:
    - legal
    - docusign
capability:
  exposes:
    - type: mcp
      namespace: docusign-contracts
      port: 8080
      tools:
        - name: get-contract-status
          description: "Look up a DocuSign media contract envelope by ID."
          inputParameters:
            - name: envelope_id
              in: body
              type: string
              description: "The DocuSign envelope ID."
          call: "docusign.get-envelope"
          with:
            id: "{{envelope_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
            - name: sender
              type: string
              mapping: "$.sender.userName"
  consumes:
    - type: http
      namespace: docusign
      baseUri: "https://na4.docusign.net/restapi/v2.1/accounts/hearst"
      authentication:
        type: bearer
        token: "$secrets.docusign_token"
      resources:
        - name: envelopes
          path: "/envelopes/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-envelope
              method: GET

Retrieves assignment from Airtable, validates deliverables in Box, processes payment via Stripe, and logs in Google Sheets.

naftiko: "0.5"
info:
  label: "Editorial Freelancer Payment Pipeline"
  description: "Retrieves assignment from Airtable, validates deliverables in Box, processes payment via Stripe, and logs in Google Sheets."
  tags:
    - finance
    - airtable
    - box
    - stripe
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: editorial-freelancer-payment-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Retrieves assignment from Airtable, validates deliverables in Box, processes payment via Stripe, and logs in Google Sheets."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "airtable.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "box.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "stripe.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "google-sheets.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: airtable
      baseUri: "https://api.airtable.com/v1"
      authentication:
        type: bearer
        token: "$secrets.airtable_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: box
      baseUri: "https://api.box.com/v1"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Deactivates Workday profile, revokes Azure AD access, creates ServiceNow IT ticket, and archives documents in Box.

naftiko: "0.5"
info:
  label: "Employee Offboarding Pipeline"
  description: "Deactivates Workday profile, revokes Azure AD access, creates ServiceNow IT ticket, and archives documents in Box."
  tags:
    - hr
    - workday
    - azure-active-directory
    - servicenow
    - box
capability:
  exposes:
    - type: mcp
      namespace: employee-offboarding-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Deactivates Workday profile, revokes Azure AD access, creates ServiceNow IT ticket, and archives documents in Box."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "workday.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "azure-active-directory.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "servicenow.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "box.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: azure-active-directory
      baseUri: "https://api.azureactivedirectory.com/v1"
      authentication:
        type: bearer
        token: "$secrets.azure_active_directory_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://api.servicenow.com/v1"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: box
      baseUri: "https://api.box.com/v1"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder, and sends a Microsoft Teams welcome message.

naftiko: "0.5"
info:
  label: "Employee Onboarding Orchestrator"
  description: "On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder, and sends a Microsoft Teams welcome message."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-onboarding
          description: "Orchestrate onboarding for a new Hearst employee."
          inputParameters:
            - name: workday_employee_id
              in: body
              type: string
              description: "The Workday worker ID."
            - name: start_date
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{workday_employee_id}}"
            - name: open-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Onboarding: {{get-employee.full_name}}"
                category: "hr_onboarding"
                assigned_group: "IT_Onboarding"
            - name: provision-folder
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "hr_onboarding_site"
                folder_path: "OnboardingDocs/{{get-employee.full_name}}_{{start_date}}"
            - name: send-welcome
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.work_email}}"
                text: "Welcome to Hearst, {{get-employee.first_name}}! Onboarding ticket: {{open-ticket.number}}. Documents: {{provision-folder.url}}."
  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: servicenow
      baseUri: "https://hearst.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: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-folder
              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

Creates event in Airtable, assigns reporters via Asana, sets up live blog in Confluence, and promotes on Twitter.

naftiko: "0.5"
info:
  label: "Event Coverage Coordination Pipeline"
  description: "Creates event in Airtable, assigns reporters via Asana, sets up live blog in Confluence, and promotes on Twitter."
  tags:
    - editorial
    - airtable
    - asana
    - confluence
    - twitter
capability:
  exposes:
    - type: mcp
      namespace: event-coverage-coordination-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Creates event in Airtable, assigns reporters via Asana, sets up live blog in Confluence, and promotes on Twitter."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "airtable.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "asana.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "confluence.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "twitter.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: airtable
      baseUri: "https://api.airtable.com/v1"
      authentication:
        type: bearer
        token: "$secrets.airtable_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: asana
      baseUri: "https://api.asana.com/v1"
      authentication:
        type: bearer
        token: "$secrets.asana_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://api.confluence.com/v1"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: twitter
      baseUri: "https://api.twitter.com/v1"
      authentication:
        type: bearer
        token: "$secrets.twitter_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Publishes a content teaser to the Hearst Facebook page with link back to the article.

naftiko: "0.5"
info:
  label: "Facebook Content Distribution"
  description: "Publishes a content teaser to the Hearst Facebook page with link back to the article."
  tags:
    - social-media
    - content
    - facebook
capability:
  exposes:
    - type: mcp
      namespace: facebook-publishing
      port: 8080
      tools:
        - name: post-to-facebook
          description: "Publish a post to the Hearst Facebook page."
          inputParameters:
            - name: message
              in: body
              type: string
              description: "The post message."
            - name: link
              in: body
              type: string
              description: "The article URL."
          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: "/{{page_id}}/feed"
          operations:
            - name: create-post
              method: POST

Retrieves a Figma editorial layout design file by key, returning file name, last modified date, and thumbnail URL.

naftiko: "0.5"
info:
  label: "Figma Editorial Design Lookup"
  description: "Retrieves a Figma editorial layout design file by key, returning file name, last modified date, and thumbnail URL."
  tags:
    - design
    - figma
capability:
  exposes:
    - type: mcp
      namespace: figma-editorial
      port: 8080
      tools:
        - name: get-design
          description: "Look up a Figma editorial design file by key."
          inputParameters:
            - name: file_key
              in: body
              type: string
              description: "The Figma file key."
          call: "figma.get-file"
          with:
            key: "{{file_key}}"
          outputParameters:
            - name: file_name
              type: string
              mapping: "$.name"
            - name: last_modified
              type: string
              mapping: "$.lastModified"
  consumes:
    - type: http
      namespace: figma
      baseUri: "https://api.figma.com/v1"
      authentication:
        type: bearer
        token: "$secrets.figma_token"
      resources:
        - name: files
          path: "/files/{{key}}"
          inputParameters:
            - name: key
              in: path
          operations:
            - name: get-file
              method: GET

Triggers SAP period close, generates Power BI reports, archives in Box, and notifies leadership via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Financial Close Pipeline"
  description: "Triggers SAP period close, generates Power BI reports, archives in Box, and notifies leadership via Microsoft Teams."
  tags:
    - finance
    - sap
    - power-bi
    - box
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: financial-close-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Triggers SAP period close, generates Power BI reports, archives in Box, and notifies leadership via Microsoft Teams."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "sap.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "power-bi.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "box.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "microsoft-teams.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://api.sap.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: box
      baseUri: "https://api.box.com/v1"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: microsoft-teams
      baseUri: "https://api.microsoftteams.com/v1"
      authentication:
        type: bearer
        token: "$secrets.microsoft_teams_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Pulls Google Ads campaign revenue for Hearst digital properties and syncs to SAP for finance reconciliation.

naftiko: "0.5"
info:
  label: "Google Ads Revenue Tracker"
  description: "Pulls Google Ads campaign revenue for Hearst digital properties and syncs to SAP for finance reconciliation."
  tags:
    - advertising
    - revenue
    - google-ads
    - sap
capability:
  exposes:
    - type: mcp
      namespace: ad-revenue
      port: 8080
      tools:
        - name: sync-ad-revenue
          description: "Pull Google Ads revenue and sync to SAP."
          inputParameters:
            - name: period
              in: body
              type: string
              description: "The revenue period."
          steps:
            - name: get-revenue
              type: call
              call: "googleads.get-campaign-revenue"
              with:
                period: "{{period}}"
            - name: post-to-sap
              type: call
              call: "sap.post-ad-revenue"
              with:
                period: "{{period}}"
                total_revenue: "{{get-revenue.total_revenue}}"
                campaign_count: "{{get-revenue.campaign_count}}"
  consumes:
    - type: http
      namespace: googleads
      baseUri: "https://googleads.googleapis.com/v14"
      authentication:
        type: bearer
        token: "$secrets.google_ads_token"
      resources:
        - name: reports
          path: "/customers/{{customer_id}}/googleAds:searchStream"
          operations:
            - name: get-campaign-revenue
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://hearst-s4.sap.com/sap/opu/odata/sap/ZFI_AD_REVENUE_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: revenue
          path: "/AdRevenueSet"
          operations:
            - name: post-ad-revenue
              method: POST

Retrieves content performance metrics from Google Analytics for a page, returning page views, time on page, and bounce rate.

naftiko: "0.5"
info:
  label: "Google Analytics Content Performance"
  description: "Retrieves content performance metrics from Google Analytics for a page, returning page views, time on page, and bounce rate."
  tags:
    - analytics
    - content
    - google-analytics
capability:
  exposes:
    - type: mcp
      namespace: content-analytics
      port: 8080
      tools:
        - name: get-content-performance
          description: "Get Google Analytics metrics for a content page."
          inputParameters:
            - name: page_path
              in: body
              type: string
              description: "The page URL path."
          call: "ga.get-page-metrics"
          with:
            page_path: "{{page_path}}"
          outputParameters:
            - name: page_views
              type: integer
              mapping: "$.rows[0].metricValues[0].value"
            - name: avg_time_on_page
              type: string
              mapping: "$.rows[0].metricValues[1].value"
            - name: bounce_rate
              type: string
              mapping: "$.rows[0].metricValues[2].value"
  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: get-page-metrics
              method: POST

Uploads editorial assets to Google Drive.

naftiko: "0.5"
info:
  label: "Google Drive Editorial Asset Upload"
  description: "Uploads editorial assets to Google Drive."
  tags:
    - document-management
    - google-drive
capability:
  exposes:
    - type: mcp
      namespace: gdrive-assets
      port: 8080
      tools:
        - name: upload-asset
          description: "Upload an editorial asset to Google Drive."
          inputParameters:
            - name: folder_id
              in: body
              type: string
              description: "The Google Drive folder ID."
            - name: file_name
              in: body
              type: string
              description: "The file name."
            - name: content
              in: body
              type: string
              description: "The file content."
          call: "gdrive.upload-file"
          with:
            folder_id: "{{folder_id}}"
            name: "{{file_name}}"
            content: "{{content}}"
          outputParameters:
            - name: file_id
              type: string
              mapping: "$.id"
            - name: web_view_link
              type: string
              mapping: "$.webViewLink"
  consumes:
    - type: http
      namespace: gdrive
      baseUri: "https://www.googleapis.com/upload/drive/v3"
      authentication:
        type: bearer
        token: "$secrets.google_drive_token"
      resources:
        - name: files
          path: "/files?uploadType=multipart"
          operations:
            - name: upload-file
              method: POST

Retrieves search performance data from Google Search Console for Hearst properties.

naftiko: "0.5"
info:
  label: "Google Search Console SEO Lookup"
  description: "Retrieves search performance data from Google Search Console for Hearst properties."
  tags:
    - seo
    - google-search-console
capability:
  exposes:
    - type: mcp
      namespace: gsc-seo
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves search performance data from Google Search Console for Hearst properties."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "gsc-seo.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: gsc-seo
      baseUri: "https://www.googleapis.com/webmasters/v3"
      authentication:
        type: bearer
        token: "$secrets.google_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Pulls revenue data from SAP and writes to a Google Sheets dashboard.

naftiko: "0.5"
info:
  label: "Google Sheets Revenue Dashboard Sync"
  description: "Pulls revenue data from SAP and writes to a Google Sheets dashboard."
  tags:
    - reporting
    - google-sheets
    - sap
capability:
  exposes:
    - type: mcp
      namespace: sheets-revenue
      port: 8080
      tools:
        - name: sync-revenue-dashboard
          description: "Sync SAP revenue data to Google Sheets."
          inputParameters:
            - name: spreadsheet_id
              in: body
              type: string
              description: "The Google Sheets ID."
            - name: period
              in: body
              type: string
              description: "The revenue period."
          steps:
            - name: get-revenue
              type: call
              call: "sap.get-revenue-summary"
              with:
                period: "{{period}}"
            - name: update-sheet
              type: call
              call: "gsheets.update-values"
              with:
                spreadsheet_id: "{{spreadsheet_id}}"
                range: "Revenue!A2:D2"
                values:
                  - - "{{period}}"
                    - "{{get-revenue.ad_revenue}}"
                    - "{{get-revenue.subscription_revenue}}"
                    - "{{get-revenue.total_revenue}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hearst-s4.sap.com/sap/opu/odata/sap/ZFI_REVENUE_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: revenue
          path: "/RevenueSummarySet('{{period}}')"
          inputParameters:
            - name: period
              in: path
          operations:
            - name: get-revenue-summary
              method: GET
    - type: http
      namespace: gsheets
      baseUri: "https://sheets.googleapis.com/v4/spreadsheets"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: values
          path: "/{{spreadsheet_id}}/values/{{range}}"
          inputParameters:
            - name: spreadsheet_id
              in: path
            - name: range
              in: path
          operations:
            - name: update-values
              method: PUT

Captures a new advertising lead in HubSpot, enriches with Salesforce account data, and notifies the ad sales team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "HubSpot Lead Capture for Advertising"
  description: "Captures a new advertising lead in HubSpot, enriches with Salesforce account data, and notifies the ad sales team in Microsoft Teams."
  tags:
    - advertising
    - lead-management
    - hubspot
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: ad-leads
      port: 8080
      tools:
        - name: capture-ad-lead
          description: "Capture and enrich an advertising lead."
          inputParameters:
            - name: lead_email
              in: body
              type: string
              description: "The lead email address."
            - name: company_name
              in: body
              type: string
              description: "The lead company name."
          steps:
            - name: create-contact
              type: call
              call: "hubspot.create-contact"
              with:
                email: "{{lead_email}}"
                company: "{{company_name}}"
                lead_source: "Advertising Inquiry"
            - name: search-sf
              type: call
              call: "salesforce.search-account"
              with:
                company_name: "{{company_name}}"
            - name: notify-sales
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "ad-sales"
                text: "New ad lead: {{company_name}} ({{lead_email}}). HubSpot: {{create-contact.id}}. SF Account: {{search-sf.Name}}."
  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"
          operations:
            - name: create-contact
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://hearst.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/parameterizedSearch/?q={{company_name}}&sobject=Account"
          inputParameters:
            - name: company_name
              in: query
          operations:
            - name: search-account
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Creates campaign in HubSpot, generates contract in DocuSign, tracks deliverables in Asana, and monitors metrics via Instagram.

naftiko: "0.5"
info:
  label: "Influencer Partnership Pipeline"
  description: "Creates campaign in HubSpot, generates contract in DocuSign, tracks deliverables in Asana, and monitors metrics via Instagram."
  tags:
    - marketing
    - hubspot
    - docusign
    - asana
    - instagram
capability:
  exposes:
    - type: mcp
      namespace: influencer-partnership-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Creates campaign in HubSpot, generates contract in DocuSign, tracks deliverables in Asana, and monitors metrics via Instagram."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "hubspot.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "docusign.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "asana.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "instagram.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubspot.com/v1"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: docusign
      baseUri: "https://api.docusign.com/v1"
      authentication:
        type: bearer
        token: "$secrets.docusign_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: asana
      baseUri: "https://api.asana.com/v1"
      authentication:
        type: bearer
        token: "$secrets.asana_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: instagram
      baseUri: "https://api.instagram.com/v1"
      authentication:
        type: bearer
        token: "$secrets.instagram_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Retrieves engagement metrics for a Hearst Instagram post by media ID.

naftiko: "0.5"
info:
  label: "Instagram Content Metrics Lookup"
  description: "Retrieves engagement metrics for a Hearst Instagram post by media ID."
  tags:
    - social-media
    - instagram
capability:
  exposes:
    - type: mcp
      namespace: instagram-metrics
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves engagement metrics for a Hearst Instagram post by media ID."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "instagram-metrics.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: instagram-metrics
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.instagram_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Publishes a visual story to the Hearst Instagram account with a linked article.

naftiko: "0.5"
info:
  label: "Instagram Story Publisher"
  description: "Publishes a visual story to the Hearst Instagram account with a linked article."
  tags:
    - social-media
    - visual-content
    - instagram
capability:
  exposes:
    - type: mcp
      namespace: instagram-publishing
      port: 8080
      tools:
        - name: post-instagram-story
          description: "Publish visual content to Instagram."
          inputParameters:
            - name: image_url
              in: body
              type: string
              description: "The image URL."
            - name: caption
              in: body
              type: string
              description: "The 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: "/{{ig_user_id}}/media"
          operations:
            - name: create-media
              method: POST

Collects public records data, stores in Snowflake, creates research project in Confluence, and assigns tasks in Jira.

naftiko: "0.5"
info:
  label: "Investigative Story Research Pipeline"
  description: "Collects public records data, stores in Snowflake, creates research project in Confluence, and assigns tasks in Jira."
  tags:
    - editorial
    - snowflake
    - confluence
    - jira
capability:
  exposes:
    - type: mcp
      namespace: investigative-story-research-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Collects public records data, stores in Snowflake, creates research project in Confluence, and assigns tasks in Jira."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "snowflake.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "confluence.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "jira.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "jira.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://api.confluence.com/v1"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://api.jira.com/v1"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

On critical alert from Datadog, creates ServiceNow incident, pages on-call via Slack, and opens Zoom bridge.

naftiko: "0.5"
info:
  label: "IT Incident Response Pipeline"
  description: "On critical alert from Datadog, creates ServiceNow incident, pages on-call via Slack, and opens Zoom bridge."
  tags:
    - incident
    - datadog
    - servicenow
    - slack
    - zoom
capability:
  exposes:
    - type: mcp
      namespace: it-incident-response-pipeline
      port: 8080
      tools:
        - name: execute
          description: "On critical alert from Datadog, creates ServiceNow incident, pages on-call via Slack, and opens Zoom bridge."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "datadog.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "servicenow.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "slack.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "zoom.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadog.com/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://api.servicenow.com/v1"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://api.slack.com/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: zoom
      baseUri: "https://api.zoom.com/v1"
      authentication:
        type: bearer
        token: "$secrets.zoom_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Retrieves the status of editorial tasks from a Jira project.

naftiko: "0.5"
info:
  label: "Jira Editorial Task Tracker"
  description: "Retrieves the status of editorial tasks from a Jira project."
  tags:
    - editorial
    - jira
    - project-management
capability:
  exposes:
    - type: mcp
      namespace: editorial-tasks
      port: 8080
      tools:
        - name: get-editorial-status
          description: "Get editorial task status from Jira."
          inputParameters:
            - name: project_key
              in: body
              type: string
              description: "The Jira project key."
          call: "jira.get-project-summary"
          with:
            project_key: "{{project_key}}"
          outputParameters:
            - name: total_issues
              type: integer
              mapping: "$.total"
            - name: open_issues
              type: integer
              mapping: "$.open_count"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://hearst.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: search
          path: "/search?jql=project={{project_key}}"
          inputParameters:
            - name: project_key
              in: path
          operations:
            - name: get-project-summary
              method: GET

Publishes a branded post to the Hearst LinkedIn company page.

naftiko: "0.5"
info:
  label: "LinkedIn Brand Post Publisher"
  description: "Publishes a branded post to the Hearst LinkedIn company page."
  tags:
    - marketing
    - social-media
    - linkedin
capability:
  exposes:
    - type: mcp
      namespace: linkedin-publishing
      port: 8080
      tools:
        - name: publish-linkedin-post
          description: "Publish a post to the Hearst LinkedIn page."
          inputParameters:
            - name: post_text
              in: body
              type: string
              description: "The post content."
          call: "linkedin.create-post"
          with:
            author: "urn:li:organization:hearst"
            text: "{{post_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

Coordinates magazine production by syncing editorial calendar from Airtable, tracking layouts in Figma, uploading to SharePoint, and notifying editors via Slack.

naftiko: "0.5"
info:
  label: "Magazine Issue Production Pipeline"
  description: "Coordinates magazine production by syncing editorial calendar from Airtable, tracking layouts in Figma, uploading to SharePoint, and notifying editors via Slack."
  tags:
    - editorial
    - airtable
    - figma
    - sharepoint
    - slack
capability:
  exposes:
    - type: mcp
      namespace: magazine-issue-production-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Coordinates magazine production by syncing editorial calendar from Airtable, tracking layouts in Figma, uploading to SharePoint, and notifying editors via Slack."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "airtable.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "figma.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "sharepoint.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "slack.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: airtable
      baseUri: "https://api.airtable.com/v1"
      authentication:
        type: bearer
        token: "$secrets.airtable_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: figma
      baseUri: "https://api.figma.com/v1"
      authentication:
        type: bearer
        token: "$secrets.figma_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://api.sharepoint.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sharepoint_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://api.slack.com/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Sends a formatted email via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Microsoft Outlook Email Sender"
  description: "Sends a formatted email via Microsoft Outlook."
  tags:
    - communications
    - email
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: email-sending
      port: 8080
      tools:
        - name: send-email
          description: "Send an email via Microsoft Outlook."
          inputParameters:
            - name: to_address
              in: body
              type: string
              description: "Recipient email."
            - name: subject
              in: body
              type: string
              description: "Email subject."
            - name: body_text
              in: body
              type: string
              description: "Email body."
          call: "outlook.send-mail"
          with:
            to: "{{to_address}}"
            subject: "{{subject}}"
            body: "{{body_text}}"
  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 formatted message to a Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Microsoft Teams Channel Notifier"
  description: "Sends a formatted message to a Microsoft Teams channel."
  tags:
    - communications
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: team-notifications
      port: 8080
      tools:
        - name: send-channel-notification
          description: "Send a message to a Microsoft Teams channel."
          inputParameters:
            - name: channel_id
              in: body
              type: string
              description: "The Teams channel ID."
            - name: message_text
              in: body
              type: string
              description: "The message text."
          call: "msteams.send-channel-message"
          with:
            channel_id: "{{channel_id}}"
            text: "{{message_text}}"
  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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

On new hire from Workday, provisions Azure AD account, creates ServiceNow equipment request, and sends welcome via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "New Hire IT Provisioning Pipeline"
  description: "On new hire from Workday, provisions Azure AD account, creates ServiceNow equipment request, and sends welcome via Microsoft Outlook."
  tags:
    - it
    - workday
    - azure-active-directory
    - servicenow
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: new-hire-it-provisioning-pipeline
      port: 8080
      tools:
        - name: execute
          description: "On new hire from Workday, provisions Azure AD account, creates ServiceNow equipment request, and sends welcome via Microsoft Outlook."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "workday.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "azure-active-directory.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "servicenow.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "microsoft-outlook.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: azure-active-directory
      baseUri: "https://api.azureactivedirectory.com/v1"
      authentication:
        type: bearer
        token: "$secrets.azure_active_directory_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://api.servicenow.com/v1"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: microsoft-outlook
      baseUri: "https://api.microsoftoutlook.com/v1"
      authentication:
        type: bearer
        token: "$secrets.microsoft_outlook_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Retrieves digital platform performance metrics from New Relic by application ID, returning response time and error rate.

naftiko: "0.5"
info:
  label: "New Relic Platform Health Lookup"
  description: "Retrieves digital platform performance metrics from New Relic by application ID, returning response time and error rate."
  tags:
    - monitoring
    - new-relic
capability:
  exposes:
    - type: mcp
      namespace: newrelic-health
      port: 8080
      tools:
        - name: get-platform-health
          description: "Look up platform health metrics in New Relic."
          inputParameters:
            - name: app_id
              in: body
              type: string
              description: "The New Relic application ID."
          call: "newrelic.get-app"
          with:
            id: "{{app_id}}"
          outputParameters:
            - name: response_time
              type: string
              mapping: "$.application.application_summary.response_time"
            - name: error_rate
              type: string
              mapping: "$.application.application_summary.error_rate"
  consumes:
    - type: http
      namespace: newrelic
      baseUri: "https://api.newrelic.com/v2"
      authentication:
        type: bearer
        token: "$secrets.newrelic_api_key"
      resources:
        - name: applications
          path: "/applications/{{id}}.json"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-app
              method: GET

Pulls email metrics from MailChimp, stores in Snowflake, refreshes Tableau dashboards, and shares insights via Slack.

naftiko: "0.5"
info:
  label: "Newsletter Performance Pipeline"
  description: "Pulls email metrics from MailChimp, stores in Snowflake, refreshes Tableau dashboards, and shares insights via Slack."
  tags:
    - email
    - mailchimp
    - snowflake
    - tableau
    - slack
capability:
  exposes:
    - type: mcp
      namespace: newsletter-performance-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Pulls email metrics from MailChimp, stores in Snowflake, refreshes Tableau dashboards, and shares insights via Slack."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "mailchimp.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "snowflake.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "tableau.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "slack.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: mailchimp
      baseUri: "https://api.mailchimp.com/v1"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: tableau
      baseUri: "https://api.tableau.com/v1"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://api.slack.com/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Combines paywall conversion data from Adobe Analytics with subscriber data from Salesforce, and pushes to Power BI for paywall optimization insights.

naftiko: "0.5"
info:
  label: "Paywall Analytics Pipeline"
  description: "Combines paywall conversion data from Adobe Analytics with subscriber data from Salesforce, and pushes to Power BI for paywall optimization insights."
  tags:
    - subscriptions
    - analytics
    - adobe-analytics
    - salesforce
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: paywall-analytics
      port: 8080
      tools:
        - name: analyze-paywall
          description: "Analyze paywall performance and push insights to Power BI."
          inputParameters:
            - name: publication
              in: body
              type: string
              description: "The publication name."
            - name: period
              in: body
              type: string
              description: "The analysis period."
          steps:
            - name: get-paywall-data
              type: call
              call: "adobe-analytics.get-paywall-metrics"
              with:
                publication: "{{publication}}"
                period: "{{period}}"
            - name: get-subscriber-data
              type: call
              call: "salesforce.get-subscriber-metrics"
              with:
                publication: "{{publication}}"
            - name: push-to-bi
              type: call
              call: "powerbi.push-rows"
              with:
                dataset_id: "paywall_analytics_ds"
                table_name: "Paywall"
                rows:
                  - publication: "{{publication}}"
                    period: "{{period}}"
                    paywall_hits: "{{get-paywall-data.paywall_hits}}"
                    conversion_rate: "{{get-paywall-data.conversion_rate}}"
                    new_subscribers: "{{get-subscriber-data.new_count}}"
  consumes:
    - type: http
      namespace: adobe-analytics
      baseUri: "https://analytics.adobe.io/api"
      authentication:
        type: bearer
        token: "$secrets.adobe_analytics_token"
      resources:
        - name: reports
          path: "/hearst/reports"
          operations:
            - name: get-paywall-metrics
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://hearst.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: subscribers
          path: "/sobjects/Subscriber_Metrics__c"
          operations:
            - name: get-subscriber-metrics
              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: "/datasets/{{dataset_id}}/tables/{{table_name}}/rows"
          inputParameters:
            - name: dataset_id
              in: path
            - name: table_name
              in: path
          operations:
            - name: push-rows
              method: POST

Creates photo assignments in Asana, uploads to Google Drive, routes approvals via Slack, and publishes to CMS via SharePoint.

naftiko: "0.5"
info:
  label: "Photo Editorial Workflow Pipeline"
  description: "Creates photo assignments in Asana, uploads to Google Drive, routes approvals via Slack, and publishes to CMS via SharePoint."
  tags:
    - editorial
    - asana
    - google-drive
    - slack
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: photo-editorial-workflow-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Creates photo assignments in Asana, uploads to Google Drive, routes approvals via Slack, and publishes to CMS via SharePoint."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "asana.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "google-drive.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "slack.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "sharepoint.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: asana
      baseUri: "https://api.asana.com/v1"
      authentication:
        type: bearer
        token: "$secrets.asana_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-drive
      baseUri: "https://api.googledrive.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_drive_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://api.slack.com/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://api.sharepoint.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sharepoint_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Uploads episode to Amazon S3, updates RSS feed, promotes on Instagram, and tracks downloads in Google Analytics.

naftiko: "0.5"
info:
  label: "Podcast Episode Publishing Pipeline"
  description: "Uploads episode to Amazon S3, updates RSS feed, promotes on Instagram, and tracks downloads in Google Analytics."
  tags:
    - content
    - amazon-s3
    - instagram
    - google-analytics
capability:
  exposes:
    - type: mcp
      namespace: podcast-episode-publishing-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Uploads episode to Amazon S3, updates RSS feed, promotes on Instagram, and tracks downloads in Google Analytics."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "amazon-s3.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "instagram.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "google-analytics.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "google-analytics.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: amazon-s3
      baseUri: "https://api.amazons3.com/v1"
      authentication:
        type: bearer
        token: "$secrets.amazon_s3_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: instagram
      baseUri: "https://api.instagram.com/v1"
      authentication:
        type: bearer
        token: "$secrets.instagram_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-analytics
      baseUri: "https://api.googleanalytics.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Retrieves the Power BI advertising revenue dashboard status and last refresh time.

naftiko: "0.5"
info:
  label: "Power BI Revenue Dashboard"
  description: "Retrieves the Power BI advertising revenue dashboard status and last refresh time."
  tags:
    - analytics
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: powerbi-revenue
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves the Power BI advertising revenue dashboard status and last refresh time."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "powerbi-revenue.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: powerbi-revenue
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Creates ad booking in Salesforce, routes creative approval via Asana, archives assets in Box, and tracks revenue in Google Sheets.

naftiko: "0.5"
info:
  label: "Print Advertising Pipeline"
  description: "Creates ad booking in Salesforce, routes creative approval via Asana, archives assets in Box, and tracks revenue in Google Sheets."
  tags:
    - advertising
    - salesforce
    - asana
    - box
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: print-advertising-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Creates ad booking in Salesforce, routes creative approval via Asana, archives assets in Box, and tracks revenue in Google Sheets."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "salesforce.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "asana.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "box.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "google-sheets.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://api.salesforce.com/v1"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: asana
      baseUri: "https://api.asana.com/v1"
      authentication:
        type: bearer
        token: "$secrets.asana_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: box
      baseUri: "https://api.box.com/v1"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Pulls bid data from Google Ads, optimizes using Snowflake models, updates campaigns, and reports via Google Sheets.

naftiko: "0.5"
info:
  label: "Programmatic Ad Optimization Pipeline"
  description: "Pulls bid data from Google Ads, optimizes using Snowflake models, updates campaigns, and reports via Google Sheets."
  tags:
    - advertising
    - google-ads
    - snowflake
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: programmatic-ad-optimization-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Pulls bid data from Google Ads, optimizes using Snowflake models, updates campaigns, and reports via Google Sheets."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "google-ads.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "snowflake.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "google-sheets.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "google-sheets.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: google-ads
      baseUri: "https://api.googleads.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_ads_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Aggregates revenue from Snowflake, generates reports in Google Sheets, uploads to SharePoint, and distributes via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Quarterly Revenue Reporting Pipeline"
  description: "Aggregates revenue from Snowflake, generates reports in Google Sheets, uploads to SharePoint, and distributes via Microsoft Outlook."
  tags:
    - finance
    - snowflake
    - google-sheets
    - sharepoint
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: quarterly-revenue-reporting-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Aggregates revenue from Snowflake, generates reports in Google Sheets, uploads to SharePoint, and distributes via Microsoft Outlook."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "snowflake.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "google-sheets.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "sharepoint.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "microsoft-outlook.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://api.sharepoint.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sharepoint_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: microsoft-outlook
      baseUri: "https://api.microsoftoutlook.com/v1"
      authentication:
        type: bearer
        token: "$secrets.microsoft_outlook_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Aggregates reader behavior from Snowflake, scores engagement via Azure ML, syncs to Salesforce, and reports in Tableau.

naftiko: "0.5"
info:
  label: "Reader Engagement Scoring Pipeline"
  description: "Aggregates reader behavior from Snowflake, scores engagement via Azure ML, syncs to Salesforce, and reports in Tableau."
  tags:
    - engagement
    - snowflake
    - azure-machine-learning
    - salesforce
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: reader-engagement-scoring-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Aggregates reader behavior from Snowflake, scores engagement via Azure ML, syncs to Salesforce, and reports in Tableau."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "snowflake.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "azure-machine-learning.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "salesforce.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "tableau.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: azure-machine-learning
      baseUri: "https://api.azuremachinelearning.com/v1"
      authentication:
        type: bearer
        token: "$secrets.azure_machine_learning_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://api.salesforce.com/v1"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: tableau
      baseUri: "https://api.tableau.com/v1"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Retrieves an advertiser account from Salesforce by ID, returning company name, industry, annual spend, and account manager.

naftiko: "0.5"
info:
  label: "Salesforce Advertiser Account Lookup"
  description: "Retrieves an advertiser account from Salesforce by ID, returning company name, industry, annual spend, and account manager."
  tags:
    - advertising
    - crm
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: advertiser-accounts
      port: 8080
      tools:
        - name: get-advertiser-account
          description: "Look up a Salesforce advertiser account."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The Salesforce account ID."
          call: "salesforce.get-account"
          with:
            account_id: "{{account_id}}"
          outputParameters:
            - name: company_name
              type: string
              mapping: "$.Name"
            - name: industry
              type: string
              mapping: "$.Industry"
            - name: annual_spend
              type: string
              mapping: "$.Annual_Ad_Spend__c"
            - name: account_manager
              type: string
              mapping: "$.Owner.Name"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://hearst.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account
              method: GET

Retrieves a Salesforce advertising opportunity by ID, returning deal stage, amount, close date, and account name.

naftiko: "0.5"
info:
  label: "Salesforce Opportunity Lookup"
  description: "Retrieves a Salesforce advertising opportunity by ID, returning deal stage, amount, close date, and account name."
  tags:
    - sales
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: salesforce-opps
      port: 8080
      tools:
        - name: get-opportunity
          description: "Look up a Salesforce advertising opportunity by ID."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "The Salesforce opportunity ID."
          call: "salesforce.get-opportunity"
          with:
            id: "{{opportunity_id}}"
          outputParameters:
            - name: stage
              type: string
              mapping: "$.StageName"
            - name: amount
              type: string
              mapping: "$.Amount"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://hearst.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-opportunity
              method: GET

Retrieves a travel expense report from SAP Concur and creates a Jira approval task.

naftiko: "0.5"
info:
  label: "SAP Concur Travel Expense Processor"
  description: "Retrieves a travel expense report from SAP Concur and creates a Jira approval task."
  tags:
    - finance
    - travel
    - sap-concur
    - jira
capability:
  exposes:
    - type: mcp
      namespace: travel-expenses
      port: 8080
      tools:
        - name: process-expense-report
          description: "Validate a Concur expense report and route for approval."
          inputParameters:
            - name: report_id
              in: body
              type: string
              description: "The SAP Concur expense report ID."
          steps:
            - name: get-report
              type: call
              call: "concur.get-expense-report"
              with:
                report_id: "{{report_id}}"
            - name: create-approval
              type: call
              call: "jira.create-issue"
              with:
                project_key: "FIN"
                summary: "Expense review: {{get-report.employee_name}} - {{get-report.total_amount}} {{get-report.currency}}"
                issue_type: "Task"
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://us.api.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: reports
          path: "/expense/reports/{{report_id}}"
          inputParameters:
            - name: report_id
              in: path
          operations:
            - name: get-expense-report
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://hearst.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

Looks up a SAP purchase order and returns status, vendor, total value, and delivery date.

naftiko: "0.5"
info:
  label: "SAP Purchase Order Status"
  description: "Looks up a SAP purchase order and returns status, vendor, total value, and delivery date."
  tags:
    - procurement
    - sap
    - purchase-order
capability:
  exposes:
    - type: mcp
      namespace: erp-procurement
      port: 8080
      tools:
        - name: get-purchase-order
          description: "Look up a SAP purchase order by PO number."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number."
          call: "sap.get-po"
          with:
            po_number: "{{po_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.d.OverallStatus"
            - name: vendor
              type: string
              mapping: "$.d.Supplier.CompanyName"
            - name: total_value
              type: string
              mapping: "$.d.TotalAmount"
            - name: delivery_date
              type: string
              mapping: "$.d.DeliveryDate"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hearst-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{po_number}}')"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET

Retrieves vendor master data from SAP by vendor number for Hearst procurement.

naftiko: "0.5"
info:
  label: "SAP Vendor Master Lookup"
  description: "Retrieves vendor master data from SAP by vendor number for Hearst procurement."
  tags:
    - procurement
    - sap
capability:
  exposes:
    - type: mcp
      namespace: sap-vendors
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves vendor master data from SAP by vendor number for Hearst procurement."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "sap-vendors.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: sap-vendors
      baseUri: "https://hearst-s4.sap.com/sap/opu/odata/sap/ZVENDOR_SRV"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Detects vulnerabilities via Splunk, creates Jira tickets, notifies security team via Slack, and triggers patches in Azure DevOps.

naftiko: "0.5"
info:
  label: "Security Vulnerability Pipeline"
  description: "Detects vulnerabilities via Splunk, creates Jira tickets, notifies security team via Slack, and triggers patches in Azure DevOps."
  tags:
    - security
    - splunk
    - jira
    - slack
    - azure-devops
capability:
  exposes:
    - type: mcp
      namespace: security-vulnerability-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Detects vulnerabilities via Splunk, creates Jira tickets, notifies security team via Slack, and triggers patches in Azure DevOps."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "splunk.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "jira.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "slack.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "azure-devops.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: splunk
      baseUri: "https://api.splunk.com/v1"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://api.jira.com/v1"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://api.slack.com/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: azure-devops
      baseUri: "https://api.azuredevops.com/v1"
      authentication:
        type: bearer
        token: "$secrets.azure_devops_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Pulls search data from Google Search Console, identifies opportunities in Snowflake, updates CMS, and reports via Google Sheets.

naftiko: "0.5"
info:
  label: "SEO Content Optimization Pipeline"
  description: "Pulls search data from Google Search Console, identifies opportunities in Snowflake, updates CMS, and reports via Google Sheets."
  tags:
    - seo
    - google-search-console
    - snowflake
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: seo-content-optimization-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Pulls search data from Google Search Console, identifies opportunities in Snowflake, updates CMS, and reports via Google Sheets."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "google-search-console.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "snowflake.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "google-sheets.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "google-sheets.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: google-search-console
      baseUri: "https://api.googlesearchconsole.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_search_console_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Pulls search performance data from Google Search Console, enriches with Google Analytics traffic, and publishes an SEO report to Confluence.

naftiko: "0.5"
info:
  label: "SEO Performance Tracker"
  description: "Pulls search performance data from Google Search Console, enriches with Google Analytics traffic, and publishes an SEO report to Confluence."
  tags:
    - seo
    - analytics
    - google-search-console
    - google-analytics
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: seo-tracking
      port: 8080
      tools:
        - name: track-seo-performance
          description: "Track SEO performance and publish a report."
          inputParameters:
            - name: site_url
              in: body
              type: string
              description: "The site URL for Search Console."
            - name: period
              in: body
              type: string
              description: "The analysis period."
          steps:
            - name: get-search-data
              type: call
              call: "gsc.get-search-analytics"
              with:
                site_url: "{{site_url}}"
                period: "{{period}}"
            - name: get-traffic
              type: call
              call: "ga.get-organic-traffic"
              with:
                site_url: "{{site_url}}"
            - name: publish-report
              type: call
              call: "confluence.create-page"
              with:
                space_key: "SEO"
                title: "SEO Report: {{site_url}} - {{period}}"
                body: "Total clicks: {{get-search-data.total_clicks}}. Impressions: {{get-search-data.total_impressions}}. Avg position: {{get-search-data.avg_position}}. Organic sessions: {{get-traffic.organic_sessions}}."
  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: get-search-analytics
              method: POST
    - 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: get-organic-traffic
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://hearst.atlassian.net/wiki/api/v2"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/pages"
          operations:
            - name: create-page
              method: POST

Retrieves a ServiceNow incident by number, returning state, priority, and assigned group.

naftiko: "0.5"
info:
  label: "ServiceNow IT Ticket Status"
  description: "Retrieves a ServiceNow incident by number, returning state, priority, and assigned group."
  tags:
    - it-service
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: itsm-tickets
      port: 8080
      tools:
        - name: get-ticket-status
          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[0].state"
            - name: priority
              type: string
              mapping: "$.result[0].priority"
            - name: assigned_group
              type: string
              mapping: "$.result[0].assignment_group.display_value"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://hearst.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: path
          operations:
            - name: get-incident
              method: GET

Retrieves a document from SharePoint by path.

naftiko: "0.5"
info:
  label: "SharePoint Document Retrieval"
  description: "Retrieves a document from SharePoint by path."
  tags:
    - document-management
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: doc-management
      port: 8080
      tools:
        - name: get-document
          description: "Retrieve a document from SharePoint."
          inputParameters:
            - name: site_id
              in: body
              type: string
              description: "The SharePoint site ID."
            - name: file_path
              in: body
              type: string
              description: "The file path."
          call: "sharepoint.get-file"
          with:
            site_id: "{{site_id}}"
            file_path: "{{file_path}}"
          outputParameters:
            - name: download_url
              type: string
              mapping: "$.['@microsoft.graph.downloadUrl']"
            - 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: drive-items
          path: "/{{site_id}}/drive/root:/{{file_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: get-file
              method: GET

Sends a message to a specified Slack editorial channel, returning the message timestamp and confirmation.

naftiko: "0.5"
info:
  label: "Slack Editorial Channel Sender"
  description: "Sends a message to a specified Slack editorial channel, returning the message timestamp and confirmation."
  tags:
    - communications
    - slack
capability:
  exposes:
    - type: mcp
      namespace: slack-editorial
      port: 8080
      tools:
        - name: send-message
          description: "Send a message to a Slack editorial channel."
          inputParameters:
            - name: channel_name
              in: body
              type: string
              description: "The Slack channel name."
            - name: message_text
              in: body
              type: string
              description: "The message content."
          call: "slack.post-message"
          with:
            channel: "{{channel_name}}"
            text: "{{message_text}}"
          outputParameters:
            - name: timestamp
              type: string
              mapping: "$.ts"
  consumes:
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Executes a parameterized query against Snowflake to retrieve audience engagement metrics by content vertical and date range.

naftiko: "0.5"
info:
  label: "Snowflake Audience Data Query"
  description: "Executes a parameterized query against Snowflake to retrieve audience engagement metrics by content vertical and date range."
  tags:
    - analytics
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: snowflake-audience
      port: 8080
      tools:
        - name: query-audience
          description: "Query audience data from Snowflake by content vertical."
          inputParameters:
            - name: vertical
              in: body
              type: string
              description: "The content vertical."
          call: "snowflake.run-query"
          with:
            vertical: "{{vertical}}"
          outputParameters:
            - name: total_pageviews
              type: string
              mapping: "$.data[0].TOTAL_PAGEVIEWS"
            - name: unique_visitors
              type: string
              mapping: "$.data[0].UNIQUE_VISITORS"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://hearst.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

Detects negative sentiment via Snowflake, pauses campaigns in Facebook, alerts PR team via Slack, and creates Jira incident.

naftiko: "0.5"
info:
  label: "Social Media Crisis Response Pipeline"
  description: "Detects negative sentiment via Snowflake, pauses campaigns in Facebook, alerts PR team via Slack, and creates Jira incident."
  tags:
    - crisis
    - snowflake
    - facebook
    - slack
    - jira
capability:
  exposes:
    - type: mcp
      namespace: social-media-crisis-response-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Detects negative sentiment via Snowflake, pauses campaigns in Facebook, alerts PR team via Slack, and creates Jira incident."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "snowflake.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "facebook.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "slack.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "jira.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: facebook
      baseUri: "https://api.facebook.com/v1"
      authentication:
        type: bearer
        token: "$secrets.facebook_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://api.slack.com/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://api.jira.com/v1"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Retrieves security event logs from Splunk by event ID for Hearst infrastructure.

naftiko: "0.5"
info:
  label: "Splunk Security Event Lookup"
  description: "Retrieves security event logs from Splunk by event ID for Hearst infrastructure."
  tags:
    - security
    - splunk
capability:
  exposes:
    - type: mcp
      namespace: splunk-events
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves security event logs from Splunk by event ID for Hearst infrastructure."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "splunk-events.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: splunk-events
      baseUri: "https://hearst.splunkcloud.com:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Retrieves a Stripe subscription by ID, returning plan name, status, billing cycle, and next payment date.

naftiko: "0.5"
info:
  label: "Stripe Subscription Payment Lookup"
  description: "Retrieves a Stripe subscription by ID, returning plan name, status, billing cycle, and next payment date."
  tags:
    - payments
    - stripe
capability:
  exposes:
    - type: mcp
      namespace: stripe-subscriptions
      port: 8080
      tools:
        - name: get-subscription
          description: "Look up a Stripe subscription by ID."
          inputParameters:
            - name: subscription_id
              in: body
              type: string
              description: "The Stripe subscription ID."
          call: "stripe.get-subscription"
          with:
            id: "{{subscription_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
            - name: plan
              type: string
              mapping: "$.plan.nickname"
  consumes:
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_secret_key"
      resources:
        - name: subscriptions
          path: "/subscriptions/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-subscription
              method: GET

Pulls subscriber churn data from Salesforce, analyzes engagement patterns from Adobe Analytics, and publishes a retention report to Confluence.

naftiko: "0.5"
info:
  label: "Subscriber Churn Analysis"
  description: "Pulls subscriber churn data from Salesforce, analyzes engagement patterns from Adobe Analytics, and publishes a retention report to Confluence."
  tags:
    - subscriptions
    - analytics
    - salesforce
    - adobe-analytics
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: churn-analysis
      port: 8080
      tools:
        - name: analyze-churn
          description: "Analyze subscriber churn patterns and publish a retention report."
          inputParameters:
            - name: publication
              in: body
              type: string
              description: "The publication name."
            - name: period
              in: body
              type: string
              description: "The analysis period."
          steps:
            - name: get-churn-data
              type: call
              call: "salesforce.get-churn-metrics"
              with:
                publication: "{{publication}}"
                period: "{{period}}"
            - name: get-engagement
              type: call
              call: "adobe-analytics.get-engagement"
              with:
                publication: "{{publication}}"
            - name: publish-report
              type: call
              call: "confluence.create-page"
              with:
                space_key: "SUB"
                title: "Churn Analysis: {{publication}} - {{period}}"
                body: "Churn rate: {{get-churn-data.churn_rate}}. Churned subscribers: {{get-churn-data.churned_count}}. Avg engagement before churn: {{get-engagement.avg_sessions}}. Top churn reason: {{get-churn-data.top_reason}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://hearst.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: churn
          path: "/sobjects/Churn_Metrics__c?publication={{publication}}&period={{period}}"
          inputParameters:
            - name: publication
              in: query
            - name: period
              in: query
          operations:
            - name: get-churn-metrics
              method: GET
    - type: http
      namespace: adobe-analytics
      baseUri: "https://analytics.adobe.io/api"
      authentication:
        type: bearer
        token: "$secrets.adobe_analytics_token"
      resources:
        - name: reports
          path: "/hearst/reports"
          operations:
            - name: get-engagement
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://hearst.atlassian.net/wiki/api/v2"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/pages"
          operations:
            - name: create-page
              method: POST

Enrolls new subscriber in Stripe, creates contact in Salesforce, triggers welcome series in MailChimp, and logs in Snowflake.

naftiko: "0.5"
info:
  label: "Subscriber Onboarding Pipeline"
  description: "Enrolls new subscriber in Stripe, creates contact in Salesforce, triggers welcome series in MailChimp, and logs in Snowflake."
  tags:
    - subscriptions
    - stripe
    - salesforce
    - mailchimp
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: subscriber-onboarding-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Enrolls new subscriber in Stripe, creates contact in Salesforce, triggers welcome series in MailChimp, and logs in Snowflake."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "stripe.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "salesforce.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "mailchimp.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "snowflake.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://api.salesforce.com/v1"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://api.mailchimp.com/v1"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Identifies expiring subscriptions in Stripe, creates renewal campaigns in MailChimp, tracks in Salesforce, and logs in Snowflake.

naftiko: "0.5"
info:
  label: "Subscription Renewal Campaign Pipeline"
  description: "Identifies expiring subscriptions in Stripe, creates renewal campaigns in MailChimp, tracks in Salesforce, and logs in Snowflake."
  tags:
    - subscriptions
    - stripe
    - mailchimp
    - salesforce
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: subscription-renewal-campaign-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Identifies expiring subscriptions in Stripe, creates renewal campaigns in MailChimp, tracks in Salesforce, and logs in Snowflake."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "stripe.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "mailchimp.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "salesforce.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "snowflake.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://api.mailchimp.com/v1"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://api.salesforce.com/v1"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Pulls subscription revenue data from SAP, enriches with Salesforce subscriber counts, and pushes to Power BI for finance visibility.

naftiko: "0.5"
info:
  label: "Subscription Revenue Dashboard Sync"
  description: "Pulls subscription revenue data from SAP, enriches with Salesforce subscriber counts, and pushes to Power BI for finance visibility."
  tags:
    - subscriptions
    - finance
    - sap
    - salesforce
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: subscription-revenue
      port: 8080
      tools:
        - name: sync-subscription-revenue
          description: "Sync subscription revenue from SAP and Salesforce to Power BI."
          inputParameters:
            - name: period
              in: body
              type: string
              description: "The revenue period (e.g. 2026-03)."
          steps:
            - name: get-revenue
              type: call
              call: "sap.get-subscription-revenue"
              with:
                period: "{{period}}"
            - name: get-subscribers
              type: call
              call: "salesforce.get-subscriber-count"
              with:
                period: "{{period}}"
            - name: push-to-bi
              type: call
              call: "powerbi.push-rows"
              with:
                dataset_id: "subscription_revenue_ds"
                table_name: "Revenue"
                rows:
                  - period: "{{period}}"
                    revenue: "{{get-revenue.total_revenue}}"
                    subscribers: "{{get-subscribers.active_count}}"
                    churn_rate: "{{get-subscribers.churn_rate}}"
                    arpu: "{{get-revenue.arpu}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hearst-s4.sap.com/sap/opu/odata/sap/ZFI_SUBSCRIPTION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: revenue
          path: "/SubscriptionRevenueSet('{{period}}')"
          inputParameters:
            - name: period
              in: path
          operations:
            - name: get-subscription-revenue
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://hearst.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: subscribers
          path: "/sobjects/Subscriber_Metrics__c?period={{period}}"
          inputParameters:
            - name: period
              in: query
          operations:
            - name: get-subscriber-count
              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: "/datasets/{{dataset_id}}/tables/{{table_name}}/rows"
          inputParameters:
            - name: dataset_id
              in: path
            - name: table_name
              in: path
          operations:
            - name: push-rows
              method: POST

Collects environmental data from SAP, aggregates in Snowflake, generates reports in Google Sheets, and publishes to Confluence.

naftiko: "0.5"
info:
  label: "Sustainability Reporting Pipeline"
  description: "Collects environmental data from SAP, aggregates in Snowflake, generates reports in Google Sheets, and publishes to Confluence."
  tags:
    - sustainability
    - sap
    - snowflake
    - google-sheets
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: sustainability-reporting-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Collects environmental data from SAP, aggregates in Snowflake, generates reports in Google Sheets, and publishes to Confluence."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "sap.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "snowflake.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "google-sheets.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "confluence.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://api.sap.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://api.confluence.com/v1"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Retrieves a Tableau audience analytics dashboard view for Hearst digital properties.

naftiko: "0.5"
info:
  label: "Tableau Audience Report"
  description: "Retrieves a Tableau audience analytics dashboard view for Hearst digital properties."
  tags:
    - analytics
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: tableau-audience
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves a Tableau audience analytics dashboard view for Hearst digital properties."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "tableau-audience.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: tableau-audience
      baseUri: "https://tableau.hearst.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Posts jobs to LinkedIn, syncs applicants to Workday, schedules interviews via Zoom, and notifies hiring managers via Slack.

naftiko: "0.5"
info:
  label: "Talent Acquisition Pipeline"
  description: "Posts jobs to LinkedIn, syncs applicants to Workday, schedules interviews via Zoom, and notifies hiring managers via Slack."
  tags:
    - recruiting
    - linkedin
    - workday
    - zoom
    - slack
capability:
  exposes:
    - type: mcp
      namespace: talent-acquisition-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Posts jobs to LinkedIn, syncs applicants to Workday, schedules interviews via Zoom, and notifies hiring managers via Slack."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "linkedin.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "workday.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "zoom.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "slack.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v1"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: workday
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: zoom
      baseUri: "https://api.zoom.com/v1"
      authentication:
        type: bearer
        token: "$secrets.zoom_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://api.slack.com/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Queries the Teradata data warehouse for audience demographics and behavior data for content personalization.

naftiko: "0.5"
info:
  label: "Teradata Audience Data Query"
  description: "Queries the Teradata data warehouse for audience demographics and behavior data for content personalization."
  tags:
    - analytics
    - data-warehouse
    - teradata
    - audience
capability:
  exposes:
    - type: mcp
      namespace: audience-dwh
      port: 8080
      tools:
        - name: query-audience-data
          description: "Query Teradata for audience demographics and behavior."
          inputParameters:
            - name: publication
              in: body
              type: string
              description: "The publication name."
            - name: segment
              in: body
              type: string
              description: "The audience segment."
          call: "teradata.query-audience"
          with:
            publication: "{{publication}}"
            segment: "{{segment}}"
          outputParameters:
            - name: total_readers
              type: integer
              mapping: "$.results.total_readers"
            - name: avg_age
              type: number
              mapping: "$.results.avg_age"
            - name: top_interests
              type: array
              mapping: "$.results.top_interests"
  consumes:
    - type: http
      namespace: teradata
      baseUri: "https://hearst-td.teradata.com/api/query/v1"
      authentication:
        type: bearer
        token: "$secrets.teradata_token"
      resources:
        - name: queries
          path: "/execute"
          operations:
            - name: query-audience
              method: POST

Pulls completions from Pluralsight, syncs with Workday, generates reports in Google Sheets, and alerts managers via Slack.

naftiko: "0.5"
info:
  label: "Training Compliance Pipeline"
  description: "Pulls completions from Pluralsight, syncs with Workday, generates reports in Google Sheets, and alerts managers via Slack."
  tags:
    - training
    - pluralsight
    - workday
    - google-sheets
    - slack
capability:
  exposes:
    - type: mcp
      namespace: training-compliance-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Pulls completions from Pluralsight, syncs with Workday, generates reports in Google Sheets, and alerts managers via Slack."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "pluralsight.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "workday.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "google-sheets.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "slack.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: pluralsight
      baseUri: "https://api.pluralsight.com/v1"
      authentication:
        type: bearer
        token: "$secrets.pluralsight_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: workday
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://api.slack.com/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Posts article teasers and breaking news alerts to the Hearst Twitter account.

naftiko: "0.5"
info:
  label: "Twitter Content Amplifier"
  description: "Posts article teasers and breaking news alerts to the Hearst Twitter account."
  tags:
    - social-media
    - content
    - twitter
capability:
  exposes:
    - type: mcp
      namespace: twitter-publishing
      port: 8080
      tools:
        - name: post-tweet
          description: "Post a tweet to the Hearst Twitter account."
          inputParameters:
            - name: tweet_text
              in: body
              type: string
              description: "The tweet content."
          call: "twitter.create-tweet"
          with:
            text: "{{tweet_text}}"
  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

Matches invoices from SAP, validates against contracts in Salesforce, processes payments, and logs in Google Sheets.

naftiko: "0.5"
info:
  label: "Vendor Invoice Reconciliation Pipeline"
  description: "Matches invoices from SAP, validates against contracts in Salesforce, processes payments, and logs in Google Sheets."
  tags:
    - finance
    - sap
    - salesforce
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: vendor-invoice-reconciliation-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Matches invoices from SAP, validates against contracts in Salesforce, processes payments, and logs in Google Sheets."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "sap.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "salesforce.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "google-sheets.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "google-sheets.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://api.sap.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://api.salesforce.com/v1"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Creates video project in Asana, uploads raw footage to Box, publishes to YouTube, and tracks metrics in Google Analytics.

naftiko: "0.5"
info:
  label: "Video Content Production Pipeline"
  description: "Creates video project in Asana, uploads raw footage to Box, publishes to YouTube, and tracks metrics in Google Analytics."
  tags:
    - content
    - asana
    - box
    - youtube
    - google-analytics
capability:
  exposes:
    - type: mcp
      namespace: video-content-production-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Creates video project in Asana, uploads raw footage to Box, publishes to YouTube, and tracks metrics in Google Analytics."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "asana.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "box.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "youtube.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "google-analytics.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: asana
      baseUri: "https://api.asana.com/v1"
      authentication:
        type: bearer
        token: "$secrets.asana_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: box
      baseUri: "https://api.box.com/v1"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: youtube
      baseUri: "https://api.youtube.com/v1"
      authentication:
        type: bearer
        token: "$secrets.youtube_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-analytics
      baseUri: "https://api.googleanalytics.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

When a video is uploaded to YouTube, creates a content record in Salesforce, embeds in WordPress, and shares via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Video Content Workflow"
  description: "When a video is uploaded to YouTube, creates a content record in Salesforce, embeds in WordPress, and shares via Microsoft Teams."
  tags:
    - video
    - publishing
    - youtube
    - salesforce
    - wordpress
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: video-workflow
      port: 8080
      tools:
        - name: process-video-upload
          description: "Process a new video by linking to CMS, CRM, and notifying teams."
          inputParameters:
            - name: video_id
              in: body
              type: string
              description: "The YouTube video ID."
            - name: article_id
              in: body
              type: string
              description: "The WordPress article to embed in."
          steps:
            - name: get-video
              type: call
              call: "youtube.get-video"
              with:
                video_id: "{{video_id}}"
            - name: create-content-record
              type: call
              call: "salesforce.create-content"
              with:
                title: "{{get-video.title}}"
                type: "Video"
                url: "https://www.youtube.com/watch?v={{video_id}}"
            - name: update-article
              type: call
              call: "wordpress.update-post"
              with:
                post_id: "{{article_id}}"
                video_embed: "{{video_id}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "content-team"
                text: "New video published: {{get-video.title}}. Embedded in article {{article_id}}. Watch: https://www.youtube.com/watch?v={{video_id}}"
  consumes:
    - type: http
      namespace: youtube
      baseUri: "https://www.googleapis.com/youtube/v3"
      authentication:
        type: bearer
        token: "$secrets.youtube_token"
      resources:
        - name: videos
          path: "/videos?id={{video_id}}&part=snippet"
          inputParameters:
            - name: video_id
              in: query
          operations:
            - name: get-video
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://hearst.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: content
          path: "/sobjects/Content__c"
          operations:
            - name: create-content
              method: POST
    - type: http
      namespace: wordpress
      baseUri: "https://hearst.com/wp-json/wp/v2"
      authentication:
        type: bearer
        token: "$secrets.wordpress_token"
      resources:
        - name: posts
          path: "/posts/{{post_id}}"
          inputParameters:
            - name: post_id
              in: path
          operations:
            - name: update-post
              method: PATCH
    - 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: send-message
              method: POST

Pulls metrics from Google Analytics, identifies issues via New Relic, creates optimization tickets in Jira, and notifies via Slack.

naftiko: "0.5"
info:
  label: "Website Performance Optimization Pipeline"
  description: "Pulls metrics from Google Analytics, identifies issues via New Relic, creates optimization tickets in Jira, and notifies via Slack."
  tags:
    - performance
    - google-analytics
    - new-relic
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: website-performance-optimization-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Pulls metrics from Google Analytics, identifies issues via New Relic, creates optimization tickets in Jira, and notifies via Slack."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "google-analytics.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "new-relic.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "jira.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "slack.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: google-analytics
      baseUri: "https://api.googleanalytics.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: new-relic
      baseUri: "https://api.newrelic.com/v1"
      authentication:
        type: bearer
        token: "$secrets.new_relic_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://api.jira.com/v1"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://api.slack.com/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Aggregates content metrics from Snowflake, generates Power BI reports, creates Confluence summaries, and distributes via Slack.

naftiko: "0.5"
info:
  label: "Weekly Editorial Digest Pipeline"
  description: "Aggregates content metrics from Snowflake, generates Power BI reports, creates Confluence summaries, and distributes via Slack."
  tags:
    - editorial
    - snowflake
    - power-bi
    - confluence
    - slack
capability:
  exposes:
    - type: mcp
      namespace: weekly-editorial-digest-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Aggregates content metrics from Snowflake, generates Power BI reports, creates Confluence summaries, and distributes via Slack."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "snowflake.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "power-bi.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "confluence.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "slack.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://api.confluence.com/v1"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://api.slack.com/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Retrieves an employee benefits enrollment summary from Workday by employee ID, returning plan name and coverage level.

naftiko: "0.5"
info:
  label: "Workday Employee Benefits Lookup"
  description: "Retrieves an employee benefits enrollment summary from Workday by employee ID, returning plan name and coverage level."
  tags:
    - hr
    - workday
capability:
  exposes:
    - type: mcp
      namespace: workday-benefits
      port: 8080
      tools:
        - name: get-benefits
          description: "Look up employee benefits in Workday."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID."
          call: "workday.get-benefits"
          with:
            id: "{{employee_id}}"
          outputParameters:
            - name: plan_name
              type: string
              mapping: "$.Benefit_Plan"
            - name: coverage_level
              type: string
              mapping: "$.Coverage_Level"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl-services1.workday.com/ccx/service/hearst"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: benefits
          path: "/Benefits/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-benefits
              method: GET

Retrieves headcount data from Workday by department.

naftiko: "0.5"
info:
  label: "Workday Headcount Report"
  description: "Retrieves headcount data from Workday by department."
  tags:
    - hr
    - workforce
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hr-reporting
      port: 8080
      tools:
        - name: get-headcount
          description: "Get headcount metrics from Workday."
          inputParameters:
            - name: department_id
              in: body
              type: string
              description: "The Workday department ID."
          call: "workday.get-headcount"
          with:
            department_id: "{{department_id}}"
          outputParameters:
            - name: employee_count
              type: integer
              mapping: "$.total_count"
            - name: open_positions
              type: integer
              mapping: "$.open_positions"
            - name: turnover_rate
              type: string
              mapping: "$.turnover_rate"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: headcount
          path: "/departments/{{department_id}}/headcount"
          inputParameters:
            - name: department_id
              in: path
          operations:
            - name: get-headcount
              method: GET

Retrieves a Zendesk subscriber support ticket by ID, returning status, priority, assignee, and resolution details.

naftiko: "0.5"
info:
  label: "Zendesk Subscriber Ticket Lookup"
  description: "Retrieves a Zendesk subscriber support ticket by ID, returning status, priority, assignee, and resolution details."
  tags:
    - support
    - zendesk
capability:
  exposes:
    - type: mcp
      namespace: zendesk-tickets
      port: 8080
      tools:
        - name: get-ticket
          description: "Look up a Zendesk subscriber ticket by ID."
          inputParameters:
            - name: ticket_id
              in: body
              type: string
              description: "The Zendesk ticket ID."
          call: "zendesk.get-ticket"
          with:
            id: "{{ticket_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.ticket.status"
            - name: priority
              type: string
              mapping: "$.ticket.priority"
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://hearst.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: tickets
          path: "/tickets/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-ticket
              method: GET

Creates a Zoom meeting and sends calendar invites via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Zoom Meeting Scheduler"
  description: "Creates a Zoom meeting and sends calendar invites via Microsoft Outlook."
  tags:
    - communications
    - meetings
    - zoom
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: meeting-scheduler
      port: 8080
      tools:
        - name: schedule-meeting
          description: "Create a Zoom meeting and send invites."
          inputParameters:
            - name: topic
              in: body
              type: string
              description: "Meeting topic."
            - name: start_time
              in: body
              type: string
              description: "Start time in ISO 8601."
            - name: attendee_emails
              in: body
              type: array
              description: "Attendee email list."
          steps:
            - name: create-meeting
              type: call
              call: "zoom.create-meeting"
              with:
                topic: "{{topic}}"
                start_time: "{{start_time}}"
            - name: send-invite
              type: call
              call: "outlook.send-email"
              with:
                to: "{{attendee_emails}}"
                subject: "Meeting: {{topic}}"
                body: "Join Zoom: {{create-meeting.join_url}}"
  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: outlook
      baseUri: "https://graph.microsoft.com/v1.0/me"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/sendMail"
          operations:
            - name: send-email
              method: POST