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