Peloton Capabilities
Naftiko 0.5 capability definitions for Peloton - 100 capabilities showing integration workflows and service orchestrations.
Checks class content for accessibility compliance including captions and audio descriptions, and creates remediation tasks.
naftiko: "0.5"
info:
label: "Accessibility Compliance Checker"
description: "Checks class content for accessibility compliance including captions and audio descriptions, and creates remediation tasks."
tags:
- accessibility
- peloton
- jira
- slack
capability:
exposes:
- type: mcp
namespace: accessibility
port: 8080
tools:
- name: accessibility-compliance-checker
description: "Checks class content for accessibility compliance including captions and audio descriptions, and creates remediation tasks."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: step-1
type: call
call: "peloton.execute"
with:
action: "process"
- name: step-2
type: call
call: "jira.execute"
with:
action: "process"
- name: step-3
type: call
call: "slack.execute"
with:
action: "process"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: peloton-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: jira
baseUri: "https://peloton.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: jira-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: slack-resource
path: "/execute"
operations:
- name: execute
method: POST
Retrieves payroll summary from ADP for a pay period. Returns total payroll, headcount, and department breakdowns.
naftiko: "0.5"
info:
label: "ADP Payroll Summary"
description: "Retrieves payroll summary from ADP for a pay period. Returns total payroll, headcount, and department breakdowns."
tags:
- hr
- adp
capability:
exposes:
- type: mcp
namespace: payroll-ops
port: 8080
tools:
- name: get-payroll-summary
description: "Get ADP payroll summary."
inputParameters:
- name: pay_period_end
in: body
type: string
description: "Pay period end date."
call: "adp.get-summary"
with:
period_end: "{{pay_period_end}}"
outputParameters:
- name: total_payroll
type: number
mapping: "$.data.total_amount"
- name: headcount
type: integer
mapping: "$.data.employee_count"
consumes:
- type: http
namespace: adp
baseUri: "https://api.adp.com/hr/v2"
authentication:
type: bearer
token: "$secrets.adp_token"
resources:
- name: payroll
path: "/payroll-summaries"
operations:
- name: get-summary
method: GET
Forecasts apparel demand from e-commerce data, updates inventory targets, and triggers reorder alerts in the supply chain system.
naftiko: "0.5"
info:
label: "Apparel Demand Forecasting Pipeline"
description: "Forecasts apparel demand from e-commerce data, updates inventory targets, and triggers reorder alerts in the supply chain system."
tags:
- e-commerce
- peloton
- snowflake
- slack
capability:
exposes:
- type: mcp
namespace: apparel
port: 8080
tools:
- name: apparel-demand-forecasting-pipeline
description: "Forecasts apparel demand from e-commerce data, updates inventory targets, and triggers reorder alerts in the supply chain system."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: step-1
type: call
call: "snowflake.execute"
with:
action: "process"
- name: step-2
type: call
call: "shopify.execute"
with:
action: "process"
- name: step-3
type: call
call: "slack.execute"
with:
action: "process"
consumes:
- type: http
namespace: snowflake
baseUri: "https://peloton.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: snowflake-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: shopify
baseUri: "https://peloton-apparel.myshopify.com/admin/api/2024-01"
authentication:
type: bearer
token: "$secrets.shopify_access_token"
resources:
- name: shopify-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: slack-resource
path: "/execute"
operations:
- name: execute
method: POST
Pulls current apparel inventory levels from the warehouse management system, syncs to the e-commerce platform, and alerts the merchandising team in Slack if stock is low.
naftiko: "0.5"
info:
label: "Apparel Inventory Sync"
description: "Pulls current apparel inventory levels from the warehouse management system, syncs to the e-commerce platform, and alerts the merchandising team in Slack if stock is low."
tags:
- hardware
- e-commerce
- slack
capability:
exposes:
- type: mcp
namespace: inventory-ops
port: 8080
tools:
- name: sync-apparel-inventory
description: "Sync apparel inventory and alert on low stock."
inputParameters:
- name: product_category
in: body
type: string
description: "The product category to sync."
- name: low_stock_threshold
in: body
type: integer
description: "Alert threshold for low stock units."
steps:
- name: get-inventory
type: call
call: "warehouse-api.get-inventory"
with:
category: "{{product_category}}"
- name: sync-ecommerce
type: call
call: "ecommerce-api.update-inventory"
with:
products: "{{get-inventory.products}}"
- name: alert-low-stock
type: call
call: "slack.post-message"
with:
channel: "merchandising"
text: "Inventory sync for {{product_category}}: {{get-inventory.low_stock_count}} items below {{low_stock_threshold}} units."
consumes:
- type: http
namespace: warehouse-api
baseUri: "https://api.onepeloton.com/warehouse/v1"
authentication:
type: bearer
token: "$secrets.peloton_warehouse_token"
resources:
- name: inventory
path: "/inventory"
operations:
- name: get-inventory
method: GET
- type: http
namespace: ecommerce-api
baseUri: "https://api.onepeloton.com/ecommerce/v1"
authentication:
type: bearer
token: "$secrets.peloton_ecommerce_token"
resources:
- name: inventory
path: "/inventory/bulk-update"
operations:
- name: update-inventory
method: PUT
- 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
Retrieves CloudWatch alarm status for Peloton's AWS infrastructure. Returns alarm name, state, and reason.
naftiko: "0.5"
info:
label: "AWS CloudWatch Alarm Status"
description: "Retrieves CloudWatch alarm status for Peloton's AWS infrastructure. Returns alarm name, state, and reason."
tags:
- operations
- monitoring
- cloudwatch
capability:
exposes:
- type: mcp
namespace: aws-monitoring
port: 8080
tools:
- name: get-alarm-status
description: "Check CloudWatch alarm status for AWS infrastructure."
inputParameters:
- name: alarm_name
in: body
type: string
description: "The CloudWatch alarm name."
call: "cloudwatch.describe-alarm"
with:
alarm_name: "{{alarm_name}}"
outputParameters:
- name: state
type: string
mapping: "$.MetricAlarms[0].StateValue"
- name: reason
type: string
mapping: "$.MetricAlarms[0].StateReason"
consumes:
- type: http
namespace: cloudwatch
baseUri: "https://monitoring.us-east-1.amazonaws.com"
authentication:
type: aws-sigv4
region: "us-east-1"
service: "monitoring"
access_key: "$secrets.aws_access_key"
secret_key: "$secrets.aws_secret_key"
resources:
- name: alarms
path: "/?Action=DescribeAlarms&AlarmNames.member.1={{alarm_name}}"
inputParameters:
- name: alarm_name
in: query
operations:
- name: describe-alarm
method: GET
Coordinates beta feature rollouts by selecting member cohorts, enabling feature flags, and monitoring adoption metrics.
naftiko: "0.5"
info:
label: "Beta Feature Rollout Coordinator"
description: "Coordinates beta feature rollouts by selecting member cohorts, enabling feature flags, and monitoring adoption metrics."
tags:
- features
- peloton
- datadog
- slack
capability:
exposes:
- type: mcp
namespace: beta
port: 8080
tools:
- name: beta-feature-rollout-coordinator
description: "Coordinates beta feature rollouts by selecting member cohorts, enabling feature flags, and monitoring adoption metrics."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: step-1
type: call
call: "peloton.execute"
with:
action: "process"
- name: step-2
type: call
call: "datadog.execute"
with:
action: "process"
- name: step-3
type: call
call: "slack.execute"
with:
action: "process"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: peloton-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v2"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: datadog-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: slack-resource
path: "/execute"
operations:
- name: execute
method: POST
Uploads a file to Box and creates a shared link for team distribution.
naftiko: "0.5"
info:
label: "Box File Sharing"
description: "Uploads a file to Box and creates a shared link for team distribution."
tags:
- document-management
- box
capability:
exposes:
- type: mcp
namespace: file-sharing
port: 8080
tools:
- name: upload-and-share
description: "Upload to Box and create shared link."
inputParameters:
- name: folder_id
in: body
type: string
description: "Box folder ID."
- name: file_name
in: body
type: string
description: "File name."
steps:
- name: upload
type: call
call: "box.upload-file"
with:
folder_id: "{{folder_id}}"
file_name: "{{file_name}}"
- name: share
type: call
call: "box.create-link"
with:
file_id: "{{upload.id}}"
consumes:
- type: http
namespace: box
baseUri: "https://api.box.com/2.0"
authentication:
type: bearer
token: "$secrets.box_token"
resources:
- name: files
path: "/files/content"
operations:
- name: upload-file
method: POST
- name: links
path: "/files/{{file_id}}?fields=shared_link"
inputParameters:
- name: file_id
in: path
operations:
- name: create-link
method: PUT
Identifies at-risk members from Snowflake churn models, triggers personalized retention emails via SendGrid, creates Salesforce tasks for the retention team, and sends alerts to Slack.
naftiko: "0.5"
info:
label: "Churn Risk Intervention Pipeline"
description: "Identifies at-risk members from Snowflake churn models, triggers personalized retention emails via SendGrid, creates Salesforce tasks for the retention team, and sends alerts to Slack."
tags:
- subscription
- member-engagement
- snowflake
- sendgrid
- salesforce
- slack
capability:
exposes:
- type: mcp
namespace: retention-ops
port: 8080
tools:
- name: intervene-churn-risk
description: "Execute churn intervention for at-risk members across email, CRM, and notifications."
inputParameters:
- name: risk_threshold
in: body
type: number
description: "Minimum churn probability score to trigger intervention (0-1)."
- name: segment
in: body
type: string
description: "The member segment to analyze."
steps:
- name: get-at-risk-members
type: call
call: "snowflake.execute-query"
with:
query: "SELECT * FROM churn_predictions WHERE segment='{{segment}}' AND churn_probability >= {{risk_threshold}}"
- name: send-retention-emails
type: call
call: "sendgrid.send-batch"
with:
recipients: "{{get-at-risk-members.emails}}"
template_id: "retention_offer"
- name: create-sf-tasks
type: call
call: "salesforce.create-bulk-tasks"
with:
subject: "Retention outreach - Churn risk"
member_ids: "{{get-at-risk-members.member_ids}}"
- name: alert-team
type: call
call: "slack.post-message"
with:
channel: "retention-team"
text: "Churn intervention triggered for {{get-at-risk-members.count}} members in segment {{segment}}."
consumes:
- type: http
namespace: snowflake
baseUri: "https://peloton.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: mail
path: "/mail/send"
operations:
- name: send-batch
method: POST
- type: http
namespace: salesforce
baseUri: "https://peloton.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: tasks
path: "/sobjects/Task"
operations:
- name: create-bulk-tasks
method: POST
- 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
Generates personalized class recommendations by analyzing workout history in Snowflake and delivering via push notification.
naftiko: "0.5"
info:
label: "Class Recommendation Engine Pipeline"
description: "Generates personalized class recommendations by analyzing workout history in Snowflake and delivering via push notification."
tags:
- recommendations
- peloton
- snowflake
- sendgrid
capability:
exposes:
- type: mcp
namespace: class
port: 8080
tools:
- name: class-recommendation-engine-pipeline
description: "Generates personalized class recommendations by analyzing workout history in Snowflake and delivering via push notification."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: step-1
type: call
call: "snowflake.execute"
with:
action: "process"
- name: step-2
type: call
call: "peloton.execute"
with:
action: "process"
- name: step-3
type: call
call: "sendgrid.execute"
with:
action: "process"
consumes:
- type: http
namespace: snowflake
baseUri: "https://peloton.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: snowflake-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: peloton-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: sendgrid-resource
path: "/execute"
operations:
- name: execute
method: POST
Retrieves class viewership metrics from the content analytics platform. Returns total rides, unique riders, average output, and completion rate.
naftiko: "0.5"
info:
label: "Class Viewership Metrics Lookup"
description: "Retrieves class viewership metrics from the content analytics platform. Returns total rides, unique riders, average output, and completion rate."
tags:
- content
- analytics
capability:
exposes:
- type: mcp
namespace: content-analytics
port: 8080
tools:
- name: get-class-metrics
description: "Look up viewership metrics for a specific Peloton class."
inputParameters:
- name: class_id
in: body
type: string
description: "The Peloton class identifier."
call: "content-api.get-class-metrics"
with:
class_id: "{{class_id}}"
outputParameters:
- name: total_rides
type: integer
mapping: "$.data.total_completions"
- name: unique_riders
type: integer
mapping: "$.data.unique_members"
- name: avg_output
type: number
mapping: "$.data.avg_output_kj"
- name: completion_rate
type: number
mapping: "$.data.completion_rate"
consumes:
- type: http
namespace: content-api
baseUri: "https://api.onepeloton.com/content/v1"
authentication:
type: bearer
token: "$secrets.peloton_content_token"
resources:
- name: classes
path: "/classes/{{class_id}}/metrics"
inputParameters:
- name: class_id
in: path
operations:
- name: get-class-metrics
method: GET
Creates a new fitness challenge on the platform, sets up leaderboard tracking in Snowflake, and promotes it via push notifications and Slack announcements.
naftiko: "0.5"
info:
label: "Community Challenge Creator"
description: "Creates a new fitness challenge on the platform, sets up leaderboard tracking in Snowflake, and promotes it via push notifications and Slack announcements."
tags:
- member-engagement
- content
- snowflake
- slack
capability:
exposes:
- type: mcp
namespace: challenge-ops
port: 8080
tools:
- name: create-community-challenge
description: "Create a community fitness challenge with leaderboard and promotion."
inputParameters:
- name: challenge_name
in: body
type: string
description: "Name of the challenge."
- name: start_date
in: body
type: string
description: "Challenge start date."
- name: end_date
in: body
type: string
description: "Challenge end date."
- name: challenge_type
in: body
type: string
description: "Type of challenge (distance, classes, minutes, streak)."
steps:
- name: create-challenge
type: call
call: "platform-api.create-challenge"
with:
name: "{{challenge_name}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
type: "{{challenge_type}}"
- name: setup-leaderboard
type: call
call: "snowflake.execute-query"
with:
query: "CALL create_challenge_leaderboard('{{create-challenge.challenge_id}}', '{{challenge_type}}')"
- name: announce
type: call
call: "slack.post-message"
with:
channel: "community"
text: "New challenge launched: {{challenge_name}}! {{start_date}} - {{end_date}}. Type: {{challenge_type}}"
consumes:
- type: http
namespace: platform-api
baseUri: "https://api.onepeloton.com/platform/v1"
authentication:
type: bearer
token: "$secrets.peloton_platform_token"
resources:
- name: challenges
path: "/challenges"
operations:
- name: create-challenge
method: POST
- type: http
namespace: snowflake
baseUri: "https://peloton.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- 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
Searches Confluence for knowledge base articles. Returns titles, URLs, and dates.
naftiko: "0.5"
info:
label: "Confluence Knowledge Base Search"
description: "Searches Confluence for knowledge base articles. Returns titles, URLs, and dates."
tags:
- operations
- confluence
capability:
exposes:
- type: mcp
namespace: knowledge-base
port: 8080
tools:
- name: search-kb
description: "Search Confluence articles."
inputParameters:
- name: query
in: body
type: string
description: "Search query."
call: "confluence.search"
with:
query: "{{query}}"
outputParameters:
- name: results
type: array
mapping: "$.results"
consumes:
- type: http
namespace: confluence
baseUri: "https://peloton.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: search
path: "/search?cql=text~'{{query}}'"
inputParameters:
- name: query
in: query
operations:
- name: search
method: GET
Analyzes A/B test results for content features, computes statistical significance, and publishes findings to Confluence.
naftiko: "0.5"
info:
label: "Content A/B Test Analyzer"
description: "Analyzes A/B test results for content features, computes statistical significance, and publishes findings to Confluence."
tags:
- testing
- peloton
- snowflake
- confluence
capability:
exposes:
- type: mcp
namespace: content
port: 8080
tools:
- name: content-ab-test-analyzer
description: "Analyzes A/B test results for content features, computes statistical significance, and publishes findings to Confluence."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: get-test-data
type: call
call: "snowflake.run-query"
with:
input: "{{input_id}}"
- name: publish-results
type: call
call: "confluence.create-page"
with:
input: "{{input_id}}"
- name: notify-team
type: call
call: "slack.post-message"
with:
input: "{{input_id}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://peloton.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: snowflake-resource
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: confluence
baseUri: "https://peloton.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: confluence-resource
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: slack-resource
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Pulls the latest class catalog from the content management system, syncs metadata to Snowflake for analytics, and updates search indexes via the platform API.
naftiko: "0.5"
info:
label: "Content Library Catalog Refresh"
description: "Pulls the latest class catalog from the content management system, syncs metadata to Snowflake for analytics, and updates search indexes via the platform API."
tags:
- content
- analytics
- snowflake
capability:
exposes:
- type: mcp
namespace: catalog-ops
port: 8080
tools:
- name: refresh-content-catalog
description: "Refresh the content catalog across analytics and search systems."
inputParameters:
- name: content_type
in: body
type: string
description: "Content type to refresh (cycling, strength, yoga, all)."
steps:
- name: get-catalog
type: call
call: "content-api.get-catalog"
with:
type: "{{content_type}}"
- name: sync-to-snowflake
type: call
call: "snowflake.execute-query"
with:
query: "CALL sync_content_catalog('{{content_type}}')"
- name: update-search-index
type: call
call: "platform-api.reindex-content"
with:
content_type: "{{content_type}}"
consumes:
- type: http
namespace: content-api
baseUri: "https://api.onepeloton.com/content/v1"
authentication:
type: bearer
token: "$secrets.peloton_content_token"
resources:
- name: catalog
path: "/classes/catalog"
operations:
- name: get-catalog
method: GET
- type: http
namespace: snowflake
baseUri: "https://peloton.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: platform-api
baseUri: "https://api.onepeloton.com/platform/v1"
authentication:
type: bearer
token: "$secrets.peloton_platform_token"
resources:
- name: search
path: "/search/reindex"
operations:
- name: reindex-content
method: POST
Tracks music licensing agreements approaching expiration, alerts legal teams, and creates renewal tasks in Jira.
naftiko: "0.5"
info:
label: "Content Licensing Renewal Tracker"
description: "Tracks music licensing agreements approaching expiration, alerts legal teams, and creates renewal tasks in Jira."
tags:
- licensing
- peloton
- jira
- slack
capability:
exposes:
- type: mcp
namespace: content
port: 8080
tools:
- name: content-licensing-renewal-tracker
description: "Tracks music licensing agreements approaching expiration, alerts legal teams, and creates renewal tasks in Jira."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: step-1
type: call
call: "snowflake.execute"
with:
action: "process"
- name: step-2
type: call
call: "jira.execute"
with:
action: "process"
- name: step-3
type: call
call: "slack.execute"
with:
action: "process"
consumes:
- type: http
namespace: snowflake
baseUri: "https://peloton.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: snowflake-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: jira
baseUri: "https://peloton.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: jira-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: slack-resource
path: "/execute"
operations:
- name: execute
method: POST
Validates new class content meets quality standards, checks music licensing, and approves for publishing through Jira workflow.
naftiko: "0.5"
info:
label: "Content Production Quality Gate"
description: "Validates new class content meets quality standards, checks music licensing, and approves for publishing through Jira workflow."
tags:
- content
- peloton
- jira
- slack
capability:
exposes:
- type: mcp
namespace: content
port: 8080
tools:
- name: content-production-quality-gate
description: "Validates new class content meets quality standards, checks music licensing, and approves for publishing through Jira workflow."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: step-1
type: call
call: "peloton.execute"
with:
action: "process"
- name: step-2
type: call
call: "jira.execute"
with:
action: "process"
- name: step-3
type: call
call: "slack.execute"
with:
action: "process"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: peloton-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: jira
baseUri: "https://peloton.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: jira-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: slack-resource
path: "/execute"
operations:
- name: execute
method: POST
Creates a new class production schedule in the studio management system, assigns instructors, books studio time, and posts the schedule to Slack.
naftiko: "0.5"
info:
label: "Content Production Scheduler"
description: "Creates a new class production schedule in the studio management system, assigns instructors, books studio time, and posts the schedule to Slack."
tags:
- content
- production
- slack
capability:
exposes:
- type: mcp
namespace: content-production
port: 8080
tools:
- name: schedule-class-production
description: "Schedule a new class production with studio booking and instructor assignment."
inputParameters:
- name: class_type
in: body
type: string
description: "Type of class (cycling, running, strength, yoga, meditation)."
- name: instructor_id
in: body
type: string
description: "The instructor identifier."
- name: studio_id
in: body
type: string
description: "The studio facility identifier."
- name: record_date
in: body
type: string
description: "The recording date in YYYY-MM-DD format."
steps:
- name: book-studio
type: call
call: "studio-api.book-timeslot"
with:
studio_id: "{{studio_id}}"
date: "{{record_date}}"
class_type: "{{class_type}}"
- name: assign-instructor
type: call
call: "studio-api.assign-instructor"
with:
booking_id: "{{book-studio.booking_id}}"
instructor_id: "{{instructor_id}}"
- name: notify-team
type: call
call: "slack.post-message"
with:
channel: "content-production"
text: "New {{class_type}} class scheduled for {{record_date}} in Studio {{studio_id}}. Instructor: {{assign-instructor.instructor_name}}. Booking: {{book-studio.booking_id}}"
consumes:
- type: http
namespace: studio-api
baseUri: "https://api.onepeloton.com/studio/v1"
authentication:
type: bearer
token: "$secrets.peloton_studio_token"
resources:
- name: bookings
path: "/bookings"
operations:
- name: book-timeslot
method: POST
- name: instructors
path: "/bookings/{{booking_id}}/instructor"
inputParameters:
- name: booking_id
in: path
operations:
- name: assign-instructor
method: PUT
- 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
Processes corporate wellness program enrollments, provisions member accounts, and reports participation to HR systems.
naftiko: "0.5"
info:
label: "Corporate Wellness Enrollment Pipeline"
description: "Processes corporate wellness program enrollments, provisions member accounts, and reports participation to HR systems."
tags:
- corporate
- peloton
- salesforce
- workday
capability:
exposes:
- type: mcp
namespace: corporate
port: 8080
tools:
- name: corporate-wellness-enrollment-pipeline
description: "Processes corporate wellness program enrollments, provisions member accounts, and reports participation to HR systems."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: step-1
type: call
call: "peloton.execute"
with:
action: "process"
- name: step-2
type: call
call: "salesforce.execute"
with:
action: "process"
- name: step-3
type: call
call: "workday.execute"
with:
action: "process"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: peloton-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: salesforce
baseUri: "https://peloton.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_access_token"
resources:
- name: salesforce-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: workday
baseUri: "https://wd5-impl.workday.com/peloton/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workday-resource
path: "/execute"
operations:
- name: execute
method: POST
Auto-categorizes support tickets by analyzing content, enriching with member data, and routing to specialized queues.
naftiko: "0.5"
info:
label: "Customer Support Auto Categorizer"
description: "Auto-categorizes support tickets by analyzing content, enriching with member data, and routing to specialized queues."
tags:
- support
- peloton
- servicenow
- snowflake
capability:
exposes:
- type: mcp
namespace: customer
port: 8080
tools:
- name: customer-support-auto-categorizer
description: "Auto-categorizes support tickets by analyzing content, enriching with member data, and routing to specialized queues."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: get-member
type: call
call: "peloton.get-member"
with:
input: "{{input_id}}"
- name: categorize
type: call
call: "snowflake.run-query"
with:
input: "{{input_id}}"
- name: route-ticket
type: call
call: "servicenow.update-incident"
with:
input: "{{input_id}}"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: peloton-resource
path: "/user/{{input_id}}"
operations:
- name: get-member
method: GET
- type: http
namespace: snowflake
baseUri: "https://peloton.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: snowflake-resource
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://peloton.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: servicenow-resource
path: "/table/incident"
operations:
- name: update-incident
method: PATCH
Processes GDPR and CCPA data privacy requests by locating member data, generating export packages, and tracking compliance deadlines.
naftiko: "0.5"
info:
label: "Data Privacy Request Processor"
description: "Processes GDPR and CCPA data privacy requests by locating member data, generating export packages, and tracking compliance deadlines."
tags:
- privacy
- peloton
- servicenow
- snowflake
capability:
exposes:
- type: mcp
namespace: data
port: 8080
tools:
- name: data-privacy-request-processor
description: "Processes GDPR and CCPA data privacy requests by locating member data, generating export packages, and tracking compliance deadlines."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: step-1
type: call
call: "peloton.execute"
with:
action: "process"
- name: step-2
type: call
call: "snowflake.execute"
with:
action: "process"
- name: step-3
type: call
call: "servicenow.execute"
with:
action: "process"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: peloton-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: snowflake
baseUri: "https://peloton.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: snowflake-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: servicenow
baseUri: "https://peloton.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: servicenow-resource
path: "/execute"
operations:
- name: execute
method: POST
Retrieves Datadog monitor status for Peloton's platform infrastructure. Returns monitor name, state, and last triggered time.
naftiko: "0.5"
info:
label: "Datadog Monitor Status Lookup"
description: "Retrieves Datadog monitor status for Peloton's platform infrastructure. Returns monitor name, state, and last triggered time."
tags:
- operations
- monitoring
- datadog
capability:
exposes:
- type: mcp
namespace: infra-monitoring
port: 8080
tools:
- name: get-monitor-status
description: "Check Datadog monitor status for platform infrastructure."
inputParameters:
- name: monitor_id
in: body
type: string
description: "The Datadog monitor identifier."
call: "datadog.get-monitor"
with:
monitor_id: "{{monitor_id}}"
outputParameters:
- name: name
type: string
mapping: "$.name"
- name: status
type: string
mapping: "$.overall_state"
- name: last_triggered
type: string
mapping: "$.state.last_triggered_ts"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
header: "DD-API-KEY"
resources:
- name: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
Checks the current firmware version and update status for a Peloton device by serial number.
naftiko: "0.5"
info:
label: "Device Firmware Status Lookup"
description: "Checks the current firmware version and update status for a Peloton device by serial number."
tags:
- hardware
- device-management
capability:
exposes:
- type: mcp
namespace: device-ops
port: 8080
tools:
- name: get-firmware-status
description: "Check firmware version and update status for a Peloton device."
inputParameters:
- name: device_serial
in: body
type: string
description: "The device serial number."
call: "hardware-api.get-firmware"
with:
serial: "{{device_serial}}"
outputParameters:
- name: current_version
type: string
mapping: "$.data.firmware_version"
- name: latest_version
type: string
mapping: "$.data.latest_available"
- name: update_status
type: string
mapping: "$.data.update_status"
consumes:
- type: http
namespace: hardware-api
baseUri: "https://api.onepeloton.com/hardware/v1"
authentication:
type: bearer
token: "$secrets.peloton_hardware_token"
resources:
- name: firmware
path: "/devices/{{serial}}/firmware"
inputParameters:
- name: serial
in: path
operations:
- name: get-firmware
method: GET
Runs remote diagnostics on Peloton hardware, checks firmware compatibility, and creates ServiceNow tickets for devices needing repair.
naftiko: "0.5"
info:
label: "Device Health Diagnostic Pipeline"
description: "Runs remote diagnostics on Peloton hardware, checks firmware compatibility, and creates ServiceNow tickets for devices needing repair."
tags:
- hardware
- peloton
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: device
port: 8080
tools:
- name: device-health-diagnostic-pipeline
description: "Runs remote diagnostics on Peloton hardware, checks firmware compatibility, and creates ServiceNow tickets for devices needing repair."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: step-1
type: call
call: "peloton.execute"
with:
action: "process"
- name: step-2
type: call
call: "servicenow.execute"
with:
action: "process"
- name: step-3
type: call
call: "slack.execute"
with:
action: "process"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: peloton-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: servicenow
baseUri: "https://peloton.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: servicenow-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: slack-resource
path: "/execute"
operations:
- name: execute
method: POST
Retrieves the status of an e-commerce order (apparel, accessories) by order ID. Returns order status, items, and tracking information.
naftiko: "0.5"
info:
label: "E-commerce Order Status Lookup"
description: "Retrieves the status of an e-commerce order (apparel, accessories) by order ID. Returns order status, items, and tracking information."
tags:
- hardware
- e-commerce
capability:
exposes:
- type: mcp
namespace: ecommerce-ops
port: 8080
tools:
- name: get-order-status
description: "Look up an e-commerce order status by order identifier."
inputParameters:
- name: order_id
in: body
type: string
description: "The e-commerce order identifier."
call: "ecommerce-api.get-order"
with:
order_id: "{{order_id}}"
outputParameters:
- name: status
type: string
mapping: "$.data.status"
- name: items
type: array
mapping: "$.data.line_items"
- name: tracking_number
type: string
mapping: "$.data.tracking_number"
consumes:
- type: http
namespace: ecommerce-api
baseUri: "https://api.onepeloton.com/ecommerce/v1"
authentication:
type: bearer
token: "$secrets.peloton_ecommerce_token"
resources:
- name: orders
path: "/orders/{{order_id}}"
inputParameters:
- name: order_id
in: path
operations:
- name: get-order
method: GET
On new hire creation in Workday, provisions accounts, creates a ServiceNow onboarding ticket, and sends a welcome message in Slack.
naftiko: "0.5"
info:
label: "Employee Onboarding Orchestrator"
description: "On new hire creation in Workday, provisions accounts, creates a ServiceNow onboarding ticket, and sends a welcome message in Slack."
tags:
- hr
- onboarding
- workday
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-onboarding
description: "Orchestrate new hire onboarding across Workday, ServiceNow, and Slack."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID."
- name: start_date
in: body
type: string
description: "The start date."
- name: department
in: body
type: string
description: "The department."
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: "New hire onboarding: {{get-employee.full_name}}"
category: "hr_onboarding"
description: "Onboarding for {{get-employee.full_name}} starting {{start_date}} in {{department}}."
- name: send-welcome
type: call
call: "slack.post-message"
with:
channel: "new-hires"
text: "Welcome to Peloton, {{get-employee.first_name}}! Onboarding ticket: {{open-ticket.number}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://peloton.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: 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
Compiles annual member statistics for year-in-review features, generates personalized reports, and distributes via email.
naftiko: "0.5"
info:
label: "End of Year Member Stats Pipeline"
description: "Compiles annual member statistics for year-in-review features, generates personalized reports, and distributes via email."
tags:
- reporting
- peloton
- snowflake
- sendgrid
capability:
exposes:
- type: mcp
namespace: end
port: 8080
tools:
- name: end-of-year-member-stats-pipeline
description: "Compiles annual member statistics for year-in-review features, generates personalized reports, and distributes via email."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: compile-stats
type: call
call: "snowflake.run-query"
with:
input: "{{input_id}}"
- name: generate-report
type: call
call: "peloton.generate-report"
with:
input: "{{input_id}}"
- name: distribute
type: call
call: "sendgrid.send-email"
with:
input: "{{input_id}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://peloton.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: snowflake-resource
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: peloton-resource
path: "/reports/year-in-review"
operations:
- name: generate-report
method: POST
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: sendgrid-resource
path: "/mail/send"
operations:
- name: send-email
method: POST
Coordinates firmware updates across the Peloton device fleet by staging updates, monitoring rollout progress, and alerting on failures.
naftiko: "0.5"
info:
label: "Fleet Firmware Update Rollout"
description: "Coordinates firmware updates across the Peloton device fleet by staging updates, monitoring rollout progress, and alerting on failures."
tags:
- firmware
- peloton
- datadog
- pagerduty
capability:
exposes:
- type: mcp
namespace: fleet
port: 8080
tools:
- name: fleet-firmware-update-rollout
description: "Coordinates firmware updates across the Peloton device fleet by staging updates, monitoring rollout progress, and alerting on failures."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: step-1
type: call
call: "peloton.execute"
with:
action: "process"
- name: step-2
type: call
call: "datadog.execute"
with:
action: "process"
- name: step-3
type: call
call: "pagerduty.execute"
with:
action: "process"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: peloton-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v2"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: datadog-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: pagerduty-resource
path: "/execute"
operations:
- name: execute
method: POST
Retrieves product details from the Peloton apparel e-commerce catalog.
naftiko: "0.5"
info:
label: "Get Apparel Product Details"
description: "Retrieves product details from the Peloton apparel e-commerce catalog."
tags:
- e-commerce
- peloton
- apparel
capability:
exposes:
- type: mcp
namespace: e-commerce
port: 8080
tools:
- name: get-apparel-product-details
description: "Retrieves product details from the Peloton apparel e-commerce catalog."
inputParameters:
- name: sku
in: body
type: string
description: "The sku."
call: "shopify.get-product"
with:
sku: "{{sku}}"
outputParameters:
- name: title
type: string
mapping: "$.title"
- name: price
type: string
mapping: "$.variants[0].price"
consumes:
- type: http
namespace: shopify
baseUri: "https://peloton-apparel.myshopify.com/admin/api/2024-01"
authentication:
type: bearer
token: "$secrets.shopify_access_token"
resources:
- name: get-apparel-product-details
path: "/products.json"
inputParameters:
- name: sku
in: path
operations:
- name: get-apparel-product-details
method: GET
Retrieves details and progress for a Peloton community challenge.
naftiko: "0.5"
info:
label: "Get Challenge Details"
description: "Retrieves details and progress for a Peloton community challenge."
tags:
- challenges
- peloton
- community
capability:
exposes:
- type: mcp
namespace: challenges
port: 8080
tools:
- name: get-challenge-details
description: "Retrieves details and progress for a Peloton community challenge."
inputParameters:
- name: challenge_id
in: body
type: string
description: "The challenge id."
call: "peloton.get-challenge"
with:
challenge_id: "{{challenge_id}}"
outputParameters:
- name: name
type: string
mapping: "$.name"
- name: participants
type: integer
mapping: "$.participant_count"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: get-challenge-details
path: "/challenges/{{challenge_id}}"
inputParameters:
- name: challenge_id
in: path
operations:
- name: get-challenge-details
method: GET
Retrieves detailed information about a specific Peloton class including instructor, duration, and difficulty.
naftiko: "0.5"
info:
label: "Get Class Details"
description: "Retrieves detailed information about a specific Peloton class including instructor, duration, and difficulty."
tags:
- content
- peloton
- classes
capability:
exposes:
- type: mcp
namespace: content
port: 8080
tools:
- name: get-class-details
description: "Look up a Peloton class by class ID."
inputParameters:
- name: class_id
in: body
type: string
description: "The Peloton class ID."
call: "peloton.get-class"
with:
class_id: "{{class_id}}"
outputParameters:
- name: title
type: string
mapping: "$.title"
- name: instructor
type: string
mapping: "$.instructor.name"
- name: duration
type: integer
mapping: "$.duration"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: classes
path: "/ride/{{class_id}}"
inputParameters:
- name: class_id
in: path
operations:
- name: get-class
method: GET
Retrieves aggregated ratings and reviews for a Peloton class.
naftiko: "0.5"
info:
label: "Get Class Ratings Summary"
description: "Retrieves aggregated ratings and reviews for a Peloton class."
tags:
- content
- peloton
- ratings
capability:
exposes:
- type: mcp
namespace: content
port: 8080
tools:
- name: get-class-ratings-summary
description: "Retrieves aggregated ratings and reviews for a Peloton class."
inputParameters:
- name: class_id
in: body
type: string
description: "The class id."
call: "peloton.get-ratings"
with:
class_id: "{{class_id}}"
outputParameters:
- name: average_rating
type: number
mapping: "$.average_score"
- name: total_ratings
type: integer
mapping: "$.total_ratings"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: resource
path: "/ride/{{class_id}}/ratings"
inputParameters:
- name: class_id
in: path
operations:
- name: get-ratings
method: GET
Retrieves the list of available content categories and class types on the Peloton platform.
naftiko: "0.5"
info:
label: "Get Content Category List"
description: "Retrieves the list of available content categories and class types on the Peloton platform."
tags:
- content
- peloton
- categories
capability:
exposes:
- type: mcp
namespace: content
port: 8080
tools:
- name: list-categories
description: "List all Peloton content categories."
inputParameters: []
call: "peloton.list-categories"
with: {}
outputParameters:
- name: categories
type: array
mapping: "$.categories"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: categories
path: "/ride/categories"
operations:
- name: list-categories
method: GET
Retrieves the delivery status and tracking for a Peloton hardware order.
naftiko: "0.5"
info:
label: "Get Delivery Order Status"
description: "Retrieves the delivery status and tracking for a Peloton hardware order."
tags:
- logistics
- peloton
- delivery
capability:
exposes:
- type: mcp
namespace: logistics
port: 8080
tools:
- name: get-delivery-order-status
description: "Retrieves the delivery status and tracking for a Peloton hardware order."
inputParameters:
- name: order_id
in: body
type: string
description: "The order id."
call: "peloton.get-delivery"
with:
order_id: "{{order_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: tracking_number
type: string
mapping: "$.tracking_number"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: get-delivery-order-status
path: "/deliveries/{{order_id}}"
inputParameters:
- name: order_id
in: path
operations:
- name: get-delivery-order-status
method: GET
Retrieves the connectivity and firmware status of a Peloton hardware device.
naftiko: "0.5"
info:
label: "Get Device Status"
description: "Retrieves the connectivity and firmware status of a Peloton hardware device."
tags:
- hardware
- peloton
- devices
capability:
exposes:
- type: mcp
namespace: hardware
port: 8080
tools:
- name: get-device-status
description: "Check the status of a Peloton device by serial number."
inputParameters:
- name: serial_number
in: body
type: string
description: "The device serial number."
call: "peloton.get-device"
with:
serial_number: "{{serial_number}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: firmware_version
type: string
mapping: "$.firmware_version"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: devices
path: "/devices/{{serial_number}}"
inputParameters:
- name: serial_number
in: path
operations:
- name: get-device
method: GET
Retrieves profile and biography details for a Peloton instructor.
naftiko: "0.5"
info:
label: "Get Instructor Details"
description: "Retrieves profile and biography details for a Peloton instructor."
tags:
- instructors
- peloton
- content
capability:
exposes:
- type: mcp
namespace: instructors
port: 8080
tools:
- name: get-instructor-details
description: "Retrieves profile and biography details for a Peloton instructor."
inputParameters:
- name: instructor_id
in: body
type: string
description: "The instructor id."
call: "peloton.get-instructor"
with:
instructor_id: "{{instructor_id}}"
outputParameters:
- name: name
type: string
mapping: "$.name"
- name: bio
type: string
mapping: "$.bio"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: get-instructor-details
path: "/instructor/{{instructor_id}}"
inputParameters:
- name: instructor_id
in: path
operations:
- name: get-instructor-details
method: GET
Retrieves the leaderboard ranking for a specific Peloton class ride.
naftiko: "0.5"
info:
label: "Get Leaderboard Ranking"
description: "Retrieves the leaderboard ranking for a specific Peloton class ride."
tags:
- leaderboard
- peloton
- classes
capability:
exposes:
- type: mcp
namespace: leaderboard
port: 8080
tools:
- name: get-leaderboard
description: "Retrieve leaderboard rankings for a class."
inputParameters:
- name: ride_id
in: body
type: string
description: "The Peloton ride ID."
call: "peloton.get-leaderboard"
with:
ride_id: "{{ride_id}}"
outputParameters:
- name: rankings
type: array
mapping: "$.data"
- name: total_riders
type: integer
mapping: "$.total"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: leaderboard
path: "/ride/{{ride_id}}/leaderboard"
inputParameters:
- name: ride_id
in: path
operations:
- name: get-leaderboard
method: GET
Retrieves the achievements and badges earned by a Peloton member.
naftiko: "0.5"
info:
label: "Get Member Achievements"
description: "Retrieves the achievements and badges earned by a Peloton member."
tags:
- members
- peloton
- gamification
capability:
exposes:
- type: mcp
namespace: members
port: 8080
tools:
- name: get-member-achievements
description: "Look up achievements for a Peloton member."
inputParameters:
- name: member_id
in: body
type: string
description: "The Peloton member ID."
call: "peloton.get-achievements"
with:
member_id: "{{member_id}}"
outputParameters:
- name: achievements
type: array
mapping: "$.achievements"
- name: total_count
type: integer
mapping: "$.total"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: achievements
path: "/user/{{member_id}}/achievements"
inputParameters:
- name: member_id
in: path
operations:
- name: get-achievements
method: GET
Retrieves the friends list for a Peloton member.
naftiko: "0.5"
info:
label: "Get Member Friends List"
description: "Retrieves the friends list for a Peloton member."
tags:
- social
- peloton
- members
capability:
exposes:
- type: mcp
namespace: social
port: 8080
tools:
- name: get-member-friends-list
description: "Retrieves the friends list for a Peloton member."
inputParameters:
- name: member_id
in: body
type: string
description: "The member id."
call: "peloton.get-friends"
with:
member_id: "{{member_id}}"
outputParameters:
- name: friends
type: array
mapping: "$.friends"
- name: count
type: integer
mapping: "$.total"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: resource
path: "/user/{{member_id}}/friends"
inputParameters:
- name: member_id
in: path
operations:
- name: get-friends
method: GET
Retrieves heart rate zone configuration for a Peloton member.
naftiko: "0.5"
info:
label: "Get Member Heart Rate Zones"
description: "Retrieves heart rate zone configuration for a Peloton member."
tags:
- fitness
- peloton
- health
capability:
exposes:
- type: mcp
namespace: fitness
port: 8080
tools:
- name: get-member-heart-rate-zones
description: "Retrieves heart rate zone configuration for a Peloton member."
inputParameters:
- name: member_id
in: body
type: string
description: "The member id."
call: "peloton.get-hr-zones"
with:
member_id: "{{member_id}}"
outputParameters:
- name: zones
type: array
mapping: "$.heart_rate_zones"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: get-member-heart-rate-zones
path: "/user/{{member_id}}/heart_rate_zones"
inputParameters:
- name: member_id
in: path
operations:
- name: get-member-heart-rate-zones
method: GET
Retrieves the music playlist for a specific Peloton class.
naftiko: "0.5"
info:
label: "Get Music Playlist Details"
description: "Retrieves the music playlist for a specific Peloton class."
tags:
- music
- peloton
- content
capability:
exposes:
- type: mcp
namespace: music
port: 8080
tools:
- name: get-music-playlist-details
description: "Retrieves the music playlist for a specific Peloton class."
inputParameters:
- name: ride_id
in: body
type: string
description: "The ride id."
call: "peloton.get-playlist"
with:
ride_id: "{{ride_id}}"
outputParameters:
- name: songs
type: array
mapping: "$.songs"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: get-music-playlist-details
path: "/ride/{{ride_id}}/playlist"
inputParameters:
- name: ride_id
in: path
operations:
- name: get-music-playlist-details
method: GET
Retrieves the count of on-demand classes by fitness discipline.
naftiko: "0.5"
info:
label: "Get On-Demand Library Count"
description: "Retrieves the count of on-demand classes by fitness discipline."
tags:
- content
- peloton
- library
capability:
exposes:
- type: mcp
namespace: content
port: 8080
tools:
- name: get-on-demand-library-count
description: "Retrieves the count of on-demand classes by fitness discipline."
inputParameters:
- name: discipline
in: body
type: string
description: "The discipline."
call: "peloton.count-classes"
with:
discipline: "{{discipline}}"
outputParameters:
- name: count
type: integer
mapping: "$.total"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: get-on-demand-library-count
path: "/ride/archived"
inputParameters:
- name: discipline
in: path
operations:
- name: get-on-demand-library-count
method: GET
Checks Peloton retail showroom inventory levels for hardware products.
naftiko: "0.5"
info:
label: "Get Retail Store Inventory"
description: "Checks Peloton retail showroom inventory levels for hardware products."
tags:
- retail
- peloton
- inventory
capability:
exposes:
- type: mcp
namespace: retail
port: 8080
tools:
- name: get-retail-store-inventory
description: "Checks Peloton retail showroom inventory levels for hardware products."
inputParameters:
- name: store_id
in: body
type: string
description: "The store id."
call: "peloton.check-inventory"
with:
store_id: "{{store_id}}"
outputParameters:
- name: quantity
type: integer
mapping: "$.quantity_on_hand"
- name: available
type: boolean
mapping: "$.available"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: get-retail-store-inventory
path: "/stores/{{store_id}}/inventory"
inputParameters:
- name: store_id
in: path
operations:
- name: get-retail-store-inventory
method: GET
Retrieves the billing history for a Peloton member subscription.
naftiko: "0.5"
info:
label: "Get Subscription Billing History"
description: "Retrieves the billing history for a Peloton member subscription."
tags:
- billing
- peloton
- subscriptions
capability:
exposes:
- type: mcp
namespace: billing
port: 8080
tools:
- name: get-subscription-billing-history
description: "Retrieves the billing history for a Peloton member subscription."
inputParameters:
- name: subscription_id
in: body
type: string
description: "The subscription id."
call: "peloton.get-billing-history"
with:
subscription_id: "{{subscription_id}}"
outputParameters:
- name: transactions
type: array
mapping: "$.billing_transactions"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: get-subscription-billing-history
path: "/subscriptions/{{subscription_id}}/billing"
inputParameters:
- name: subscription_id
in: path
operations:
- name: get-subscription-billing-history
method: GET
Retrieves the payment method on file for a Peloton subscription.
naftiko: "0.5"
info:
label: "Get Subscription Payment Method"
description: "Retrieves the payment method on file for a Peloton subscription."
tags:
- billing
- peloton
- payments
capability:
exposes:
- type: mcp
namespace: billing
port: 8080
tools:
- name: get-subscription-payment-method
description: "Retrieves the payment method on file for a Peloton subscription."
inputParameters:
- name: subscription_id
in: body
type: string
description: "The subscription id."
call: "peloton.get-payment-method"
with:
subscription_id: "{{subscription_id}}"
outputParameters:
- name: card_last_four
type: string
mapping: "$.card.last_four"
- name: card_brand
type: string
mapping: "$.card.brand"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: resource
path: "/subscriptions/{{subscription_id}}/payment"
inputParameters:
- name: subscription_id
in: path
operations:
- name: get-payment-method
method: GET
Retrieves aggregated workout metrics for a Peloton member.
naftiko: "0.5"
info:
label: "Get Workout Metrics Summary"
description: "Retrieves aggregated workout metrics for a Peloton member."
tags:
- fitness
- peloton
- metrics
capability:
exposes:
- type: mcp
namespace: fitness
port: 8080
tools:
- name: get-workout-metrics-summary
description: "Retrieves aggregated workout metrics for a Peloton member."
inputParameters:
- name: member_id
in: body
type: string
description: "The member id."
call: "peloton.get-metrics"
with:
member_id: "{{member_id}}"
outputParameters:
- name: total_workouts
type: integer
mapping: "$.total_workouts"
- name: total_calories
type: integer
mapping: "$.total_calories"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: get-workout-metrics-summary
path: "/user/{{member_id}}/workout_metrics_summary"
inputParameters:
- name: member_id
in: path
operations:
- name: get-workout-metrics-summary
method: GET
Retrieves Google Ads spending data for Peloton marketing campaigns.
naftiko: "0.5"
info:
label: "Google Ads Campaign Spend Lookup"
description: "Retrieves Google Ads spending data for Peloton marketing campaigns."
tags:
- marketing
- google-ads
capability:
exposes:
- type: mcp
namespace: ad-spending
port: 8080
tools:
- name: get-ad-spend
description: "Look up Google Ads campaign spend."
inputParameters:
- name: campaign_id
in: body
type: string
description: "Google Ads campaign ID."
call: "google-ads.get-spend"
with:
campaign_id: "{{campaign_id}}"
outputParameters:
- name: spend
type: number
mapping: "$.data.cost_micros"
- name: impressions
type: integer
mapping: "$.data.impressions"
consumes:
- type: http
namespace: google-ads
baseUri: "https://googleads.googleapis.com/v14"
authentication:
type: bearer
token: "$secrets.google_ads_token"
resources:
- name: campaigns
path: "/customers/peloton/campaigns/{{campaign_id}}/metrics"
inputParameters:
- name: campaign_id
in: path
operations:
- name: get-spend
method: GET
Retrieves web traffic metrics from Google Analytics for the Peloton website. Returns sessions, bounce rate, and conversion rate.
naftiko: "0.5"
info:
label: "Google Analytics Web Traffic Report"
description: "Retrieves web traffic metrics from Google Analytics for the Peloton website. Returns sessions, bounce rate, and conversion rate."
tags:
- marketing
- analytics
- google-analytics
capability:
exposes:
- type: mcp
namespace: web-analytics
port: 8080
tools:
- name: get-web-traffic
description: "Get Peloton website traffic metrics from Google Analytics."
inputParameters:
- name: start_date
in: body
type: string
description: "Report start date."
- name: end_date
in: body
type: string
description: "Report end date."
call: "google-analytics.run-report"
with:
start_date: "{{start_date}}"
end_date: "{{end_date}}"
outputParameters:
- name: sessions
type: integer
mapping: "$.rows[0].metricValues[0].value"
- name: bounce_rate
type: number
mapping: "$.rows[0].metricValues[1].value"
- name: conversion_rate
type: number
mapping: "$.rows[0].metricValues[2].value"
consumes:
- type: http
namespace: google-analytics
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/properties/peloton/runReport"
operations:
- name: run-report
method: POST
Retrieves GTM tag configuration for the Peloton website.
naftiko: "0.5"
info:
label: "Google Tag Manager Config Lookup"
description: "Retrieves GTM tag configuration for the Peloton website."
tags:
- marketing
- google-tag-manager
capability:
exposes:
- type: mcp
namespace: gtm-ops
port: 8080
tools:
- name: get-gtm-tag
description: "Look up a GTM tag configuration."
inputParameters:
- name: tag_id
in: body
type: string
description: "GTM tag ID."
call: "gtm.get-tag"
with:
tag_id: "{{tag_id}}"
outputParameters:
- name: tag_name
type: string
mapping: "$.tag.name"
- name: tag_type
type: string
mapping: "$.tag.type"
consumes:
- type: http
namespace: gtm
baseUri: "https://www.googleapis.com/tagmanager/v2"
authentication:
type: bearer
token: "$secrets.google_tagmanager_token"
resources:
- name: tags
path: "/accounts/peloton/containers/web/workspaces/default/tags/{{tag_id}}"
inputParameters:
- name: tag_id
in: path
operations:
- name: get-tag
method: GET
Tracks hardware delivery status by order ID. When delivery is confirmed, triggers device activation and sends a setup guide email to the member.
naftiko: "0.5"
info:
label: "Hardware Delivery Tracker"
description: "Tracks hardware delivery status by order ID. When delivery is confirmed, triggers device activation and sends a setup guide email to the member."
tags:
- hardware
- member-engagement
- sendgrid
capability:
exposes:
- type: mcp
namespace: delivery-ops
port: 8080
tools:
- name: track-and-activate-delivery
description: "Track hardware delivery and trigger device activation on delivery confirmation."
inputParameters:
- name: order_id
in: body
type: string
description: "The hardware order identifier."
- name: member_email
in: body
type: string
description: "The member email address."
steps:
- name: check-delivery
type: call
call: "logistics-api.get-delivery-status"
with:
order_id: "{{order_id}}"
- name: activate-device
type: call
call: "hardware-api.activate-device"
with:
order_id: "{{order_id}}"
delivery_confirmed: "{{check-delivery.delivered}}"
- name: send-setup-guide
type: call
call: "sendgrid.send-email"
with:
to: "{{member_email}}"
subject: "Your Peloton Has Arrived - Setup Guide"
body: "Your device is ready! Tracking: {{check-delivery.tracking_number}}. Start your setup at onepeloton.com/setup"
consumes:
- type: http
namespace: logistics-api
baseUri: "https://api.onepeloton.com/logistics/v1"
authentication:
type: bearer
token: "$secrets.peloton_logistics_token"
resources:
- name: deliveries
path: "/orders/{{order_id}}/delivery"
inputParameters:
- name: order_id
in: path
operations:
- name: get-delivery-status
method: GET
- type: http
namespace: hardware-api
baseUri: "https://api.onepeloton.com/hardware/v1"
authentication:
type: bearer
token: "$secrets.peloton_hardware_token"
resources:
- name: activation
path: "/devices/activate"
operations:
- name: activate-device
method: POST
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: mail
path: "/mail/send"
operations:
- name: send-email
method: POST
Processes hardware returns by coordinating logistics pickup, issuing refunds via Stripe, and updating the CRM record.
naftiko: "0.5"
info:
label: "Hardware Return and Refund Processor"
description: "Processes hardware returns by coordinating logistics pickup, issuing refunds via Stripe, and updating the CRM record."
tags:
- returns
- peloton
- stripe
- salesforce
capability:
exposes:
- type: mcp
namespace: hardware
port: 8080
tools:
- name: hardware-return-and-refund-processor
description: "Processes hardware returns by coordinating logistics pickup, issuing refunds via Stripe, and updating the CRM record."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: step-1
type: call
call: "peloton.execute"
with:
action: "process"
- name: step-2
type: call
call: "stripe.execute"
with:
action: "process"
- name: step-3
type: call
call: "salesforce.execute"
with:
action: "process"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: peloton-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: stripe
baseUri: "https://api.stripe.com/v1"
authentication:
type: bearer
token: "$secrets.stripe_secret_key"
resources:
- name: stripe-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: salesforce
baseUri: "https://peloton.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_access_token"
resources:
- name: salesforce-resource
path: "/execute"
operations:
- name: execute
method: POST
When a hardware warranty claim is submitted, validates the device warranty status, creates a ServiceNow case, and sends the member a replacement tracking email via SendGrid.
naftiko: "0.5"
info:
label: "Hardware Warranty Claim Processor"
description: "When a hardware warranty claim is submitted, validates the device warranty status, creates a ServiceNow case, and sends the member a replacement tracking email via SendGrid."
tags:
- hardware
- member-engagement
- servicenow
- sendgrid
capability:
exposes:
- type: mcp
namespace: warranty-ops
port: 8080
tools:
- name: process-warranty-claim
description: "Process a hardware warranty claim with validation, case creation, and member notification."
inputParameters:
- name: device_serial
in: body
type: string
description: "The device serial number."
- name: member_email
in: body
type: string
description: "The member email address."
- name: issue_description
in: body
type: string
description: "Description of the hardware issue."
steps:
- name: check-warranty
type: call
call: "hardware-api.check-warranty"
with:
serial: "{{device_serial}}"
- name: create-case
type: call
call: "servicenow.create-case"
with:
short_description: "Warranty claim: {{device_serial}}"
category: "hardware_warranty"
description: "{{issue_description}}. Warranty status: {{check-warranty.status}}. Expiry: {{check-warranty.expiry_date}}"
- name: send-confirmation
type: call
call: "sendgrid.send-email"
with:
to: "{{member_email}}"
subject: "Peloton Warranty Claim Received"
body: "Your warranty claim for device {{device_serial}} has been received. Case: {{create-case.number}}"
consumes:
- type: http
namespace: hardware-api
baseUri: "https://api.onepeloton.com/hardware/v1"
authentication:
type: bearer
token: "$secrets.peloton_hardware_token"
resources:
- name: warranty
path: "/devices/{{serial}}/warranty"
inputParameters:
- name: serial
in: path
operations:
- name: check-warranty
method: GET
- type: http
namespace: servicenow
baseUri: "https://peloton.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case"
operations:
- name: create-case
method: POST
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: mail
path: "/mail/send"
operations:
- name: send-email
method: POST
Syncs marketing leads from HubSpot to Salesforce for the B2B corporate wellness team.
naftiko: "0.5"
info:
label: "HubSpot Lead Sync"
description: "Syncs marketing leads from HubSpot to Salesforce for the B2B corporate wellness team."
tags:
- marketing
- hubspot
- salesforce
capability:
exposes:
- type: mcp
namespace: lead-sync
port: 8080
tools:
- name: sync-hubspot-lead
description: "Sync a HubSpot lead to Salesforce."
inputParameters:
- name: contact_id
in: body
type: string
description: "HubSpot contact ID."
steps:
- name: get-contact
type: call
call: "hubspot.get-contact"
with:
contact_id: "{{contact_id}}"
- name: create-lead
type: call
call: "salesforce.create-lead"
with:
email: "{{get-contact.email}}"
company: "{{get-contact.company}}"
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/{{contact_id}}"
inputParameters:
- name: contact_id
in: path
operations:
- name: get-contact
method: GET
- type: http
namespace: salesforce
baseUri: "https://peloton.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: leads
path: "/sobjects/Lead"
operations:
- name: create-lead
method: POST
Aggregates instructor class metrics from Snowflake, generates performance reports, and publishes to Confluence for leadership review.
naftiko: "0.5"
info:
label: "Instructor Class Performance Report"
description: "Aggregates instructor class metrics from Snowflake, generates performance reports, and publishes to Confluence for leadership review."
tags:
- instructors
- peloton
- snowflake
- confluence
capability:
exposes:
- type: mcp
namespace: instructor
port: 8080
tools:
- name: instructor-class-performance-report
description: "Aggregates instructor class metrics from Snowflake, generates performance reports, and publishes to Confluence for leadership review."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: step-1
type: call
call: "snowflake.execute"
with:
action: "process"
- name: step-2
type: call
call: "confluence.execute"
with:
action: "process"
- name: step-3
type: call
call: "slack.execute"
with:
action: "process"
consumes:
- type: http
namespace: snowflake
baseUri: "https://peloton.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: snowflake-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: confluence
baseUri: "https://peloton.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: confluence-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: slack-resource
path: "/execute"
operations:
- name: execute
method: POST
Onboards new Peloton instructors by provisioning accounts, scheduling orientation, and setting up content creation workflows.
naftiko: "0.5"
info:
label: "Instructor Onboarding Orchestrator"
description: "Onboards new Peloton instructors by provisioning accounts, scheduling orientation, and setting up content creation workflows."
tags:
- onboarding
- peloton
- workday
- jira
capability:
exposes:
- type: mcp
namespace: instructor
port: 8080
tools:
- name: instructor-onboarding-orchestrator
description: "Onboards new Peloton instructors by provisioning accounts, scheduling orientation, and setting up content creation workflows."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: create-profile
type: call
call: "peloton.create-instructor"
with:
input: "{{input_id}}"
- name: provision-hr
type: call
call: "workday.create-worker"
with:
input: "{{input_id}}"
- name: create-onboard-tasks
type: call
call: "jira.create-issue"
with:
input: "{{input_id}}"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: peloton-resource
path: "/instructors"
operations:
- name: create-instructor
method: POST
- type: http
namespace: workday
baseUri: "https://wd5-impl.workday.com/peloton/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workday-resource
path: "/workers"
operations:
- name: create-worker
method: POST
- type: http
namespace: jira
baseUri: "https://peloton.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: jira-resource
path: "/issue"
operations:
- name: create-issue
method: POST
Reconciles instructor compensation by matching class completions against pay schedules and flagging discrepancies.
naftiko: "0.5"
info:
label: "Instructor Pay Reconciliation"
description: "Reconciles instructor compensation by matching class completions against pay schedules and flagging discrepancies."
tags:
- compensation
- peloton
- workday
- slack
capability:
exposes:
- type: mcp
namespace: instructor
port: 8080
tools:
- name: instructor-pay-reconciliation
description: "Reconciles instructor compensation by matching class completions against pay schedules and flagging discrepancies."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: step-1
type: call
call: "snowflake.execute"
with:
action: "process"
- name: step-2
type: call
call: "workday.execute"
with:
action: "process"
- name: step-3
type: call
call: "slack.execute"
with:
action: "process"
consumes:
- type: http
namespace: snowflake
baseUri: "https://peloton.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: snowflake-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: workday
baseUri: "https://wd5-impl.workday.com/peloton/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workday-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: slack-resource
path: "/execute"
operations:
- name: execute
method: POST
Aggregates instructor performance metrics from the content platform, stores in Snowflake, and refreshes the instructor analytics dashboard in Tableau.
naftiko: "0.5"
info:
label: "Instructor Performance Dashboard Sync"
description: "Aggregates instructor performance metrics from the content platform, stores in Snowflake, and refreshes the instructor analytics dashboard in Tableau."
tags:
- content
- analytics
- snowflake
- tableau
capability:
exposes:
- type: mcp
namespace: instructor-analytics
port: 8080
tools:
- name: sync-instructor-metrics
description: "Aggregate and sync instructor performance metrics."
inputParameters:
- name: instructor_id
in: body
type: string
description: "The instructor identifier."
- name: period
in: body
type: string
description: "The reporting period (weekly, monthly, quarterly)."
steps:
- name: get-metrics
type: call
call: "content-api.get-instructor-metrics"
with:
instructor_id: "{{instructor_id}}"
period: "{{period}}"
- name: store-metrics
type: call
call: "snowflake.insert-record"
with:
table: "instructor_performance"
data:
instructor_id: "{{instructor_id}}"
period: "{{period}}"
total_classes: "{{get-metrics.total_classes}}"
avg_rating: "{{get-metrics.avg_rating}}"
total_riders: "{{get-metrics.total_riders}}"
- name: refresh-dashboard
type: call
call: "tableau.refresh-extract"
with:
datasource_id: "instructor_performance_ds"
consumes:
- type: http
namespace: content-api
baseUri: "https://api.onepeloton.com/content/v1"
authentication:
type: bearer
token: "$secrets.peloton_content_token"
resources:
- name: instructors
path: "/instructors/{{instructor_id}}/metrics"
inputParameters:
- name: instructor_id
in: path
operations:
- name: get-instructor-metrics
method: GET
- type: http
namespace: snowflake
baseUri: "https://peloton.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: insert-record
method: POST
- type: http
namespace: tableau
baseUri: "https://tableau.peloton.com/api/3.21"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: datasources
path: "/sites/peloton/datasources/{{datasource_id}}/refresh"
inputParameters:
- name: datasource_id
in: path
operations:
- name: refresh-extract
method: POST
Retrieves an instructor's class schedule for a given week. Returns scheduled classes, class types, and studio assignments.
naftiko: "0.5"
info:
label: "Instructor Schedule Lookup"
description: "Retrieves an instructor's class schedule for a given week. Returns scheduled classes, class types, and studio assignments."
tags:
- content
- scheduling
capability:
exposes:
- type: mcp
namespace: instructor-ops
port: 8080
tools:
- name: get-instructor-schedule
description: "Look up an instructor's weekly class schedule."
inputParameters:
- name: instructor_id
in: body
type: string
description: "The instructor identifier."
- name: week_start
in: body
type: string
description: "The week start date in YYYY-MM-DD format."
call: "studio-api.get-schedule"
with:
instructor_id: "{{instructor_id}}"
week_start: "{{week_start}}"
outputParameters:
- name: classes
type: array
mapping: "$.data.scheduled_classes"
- name: total_classes
type: integer
mapping: "$.data.total_count"
consumes:
- type: http
namespace: studio-api
baseUri: "https://api.onepeloton.com/studio/v1"
authentication:
type: bearer
token: "$secrets.peloton_studio_token"
resources:
- name: schedules
path: "/instructors/{{instructor_id}}/schedule"
inputParameters:
- name: instructor_id
in: path
operations:
- name: get-schedule
method: GET
Creates a Jira bug ticket for platform issues, links to the Datadog incident, and notifies the engineering team in Slack.
naftiko: "0.5"
info:
label: "Jira Bug Tracker"
description: "Creates a Jira bug ticket for platform issues, links to the Datadog incident, and notifies the engineering team in Slack."
tags:
- development
- jira
- datadog
- slack
capability:
exposes:
- type: mcp
namespace: bug-tracking
port: 8080
tools:
- name: create-bug-ticket
description: "Create a Jira bug ticket with Datadog incident context and Slack notification."
inputParameters:
- name: summary
in: body
type: string
description: "Bug summary."
- name: description
in: body
type: string
description: "Detailed bug description."
- name: datadog_monitor_id
in: body
type: string
description: "Related Datadog monitor ID."
- name: priority
in: body
type: string
description: "Bug priority."
steps:
- name: get-monitor-context
type: call
call: "datadog.get-monitor"
with:
monitor_id: "{{datadog_monitor_id}}"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project: "PLAT"
issue_type: "Bug"
summary: "{{summary}}"
description: "{{description}}\n\nDatadog monitor: {{get-monitor-context.name}} ({{get-monitor-context.overall_state}})"
priority: "{{priority}}"
- name: notify-engineering
type: call
call: "slack.post-message"
with:
channel: "engineering-bugs"
text: "New bug: {{create-ticket.key}} - {{summary}} ({{priority}}). Datadog: {{get-monitor-context.name}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
header: "DD-API-KEY"
resources:
- name: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
- type: http
namespace: jira
baseUri: "https://peloton.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: 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
Pulls sprint progress from Jira and posts a summary to Slack.
naftiko: "0.5"
info:
label: "Jira Sprint Reporter"
description: "Pulls sprint progress from Jira and posts a summary to Slack."
tags:
- development
- jira
- slack
capability:
exposes:
- type: mcp
namespace: dev-reporting
port: 8080
tools:
- name: report-sprint
description: "Post Jira sprint progress to Slack."
inputParameters:
- name: board_id
in: body
type: string
description: "The Jira board ID."
steps:
- name: get-sprint
type: call
call: "jira.get-active-sprint"
with:
board_id: "{{board_id}}"
- name: get-issues
type: call
call: "jira.get-sprint-issues"
with:
sprint_id: "{{get-sprint.id}}"
- name: post-report
type: call
call: "slack.post-message"
with:
channel: "engineering"
text: "Sprint {{get-sprint.name}}: {{get-issues.done_count}}/{{get-issues.total_count}} done."
consumes:
- type: http
namespace: jira
baseUri: "https://peloton.atlassian.net/rest/agile/1.0"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprints
path: "/board/{{board_id}}/sprint?state=active"
inputParameters:
- name: board_id
in: path
operations:
- name: get-active-sprint
method: GET
- name: sprint-issues
path: "/sprint/{{sprint_id}}/issue"
inputParameters:
- name: sprint_id
in: path
operations:
- name: get-sprint-issues
method: GET
- 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
Pulls LinkedIn ad metrics and stores in Snowflake for B2B marketing analysis.
naftiko: "0.5"
info:
label: "LinkedIn Ad Campaign Reporter"
description: "Pulls LinkedIn ad metrics and stores in Snowflake for B2B marketing analysis."
tags:
- marketing
- linkedin
- snowflake
capability:
exposes:
- type: mcp
namespace: b2b-marketing
port: 8080
tools:
- name: report-linkedin-campaign
description: "Report LinkedIn ad performance to Snowflake."
inputParameters:
- name: campaign_id
in: body
type: string
description: "LinkedIn campaign ID."
steps:
- name: get-metrics
type: call
call: "linkedin.get-analytics"
with:
campaign_id: "{{campaign_id}}"
- name: store-report
type: call
call: "snowflake.insert-record"
with:
table: "linkedin_campaigns"
data:
campaign_id: "{{campaign_id}}"
impressions: "{{get-metrics.impressions}}"
clicks: "{{get-metrics.clicks}}"
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: analytics
path: "/adAnalyticsV2?campaigns=urn:li:sponsoredCampaign:{{campaign_id}}"
inputParameters:
- name: campaign_id
in: path
operations:
- name: get-analytics
method: GET
- type: http
namespace: snowflake
baseUri: "https://peloton.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: insert-record
method: POST
Responds to live class streaming incidents by checking CDN health, alerting engineering, and posting status updates.
naftiko: "0.5"
info:
label: "Live Class Incident Response"
description: "Responds to live class streaming incidents by checking CDN health, alerting engineering, and posting status updates."
tags:
- streaming
- peloton
- datadog
- pagerduty
capability:
exposes:
- type: mcp
namespace: live
port: 8080
tools:
- name: live-class-incident-response
description: "Responds to live class streaming incidents by checking CDN health, alerting engineering, and posting status updates."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: step-1
type: call
call: "datadog.execute"
with:
action: "process"
- name: step-2
type: call
call: "pagerduty.execute"
with:
action: "process"
- name: step-3
type: call
call: "slack.execute"
with:
action: "process"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v2"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: datadog-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: pagerduty-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: slack-resource
path: "/execute"
operations:
- name: execute
method: POST
Monitors real-time viewer counts during live classes, stores metrics in Snowflake, and sends alerts to Slack if viewership drops below expected thresholds.
naftiko: "0.5"
info:
label: "Live Class Viewer Count Monitor"
description: "Monitors real-time viewer counts during live classes, stores metrics in Snowflake, and sends alerts to Slack if viewership drops below expected thresholds."
tags:
- content
- analytics
- snowflake
- slack
capability:
exposes:
- type: mcp
namespace: live-monitoring
port: 8080
tools:
- name: monitor-live-viewership
description: "Monitor live class viewership and alert on anomalies."
inputParameters:
- name: class_id
in: body
type: string
description: "The live class identifier."
- name: expected_viewers
in: body
type: integer
description: "Expected minimum viewer count."
steps:
- name: get-live-metrics
type: call
call: "streaming-api.get-live-stats"
with:
class_id: "{{class_id}}"
- name: store-metrics
type: call
call: "snowflake.insert-record"
with:
table: "live_class_metrics"
data:
class_id: "{{class_id}}"
viewer_count: "{{get-live-metrics.current_viewers}}"
peak_viewers: "{{get-live-metrics.peak_viewers}}"
- name: alert-if-low
type: call
call: "slack.post-message"
with:
channel: "content-ops"
text: "Live class {{class_id}}: {{get-live-metrics.current_viewers}} viewers (expected: {{expected_viewers}}). Peak: {{get-live-metrics.peak_viewers}}"
consumes:
- type: http
namespace: streaming-api
baseUri: "https://api.onepeloton.com/streaming/v1"
authentication:
type: bearer
token: "$secrets.peloton_streaming_token"
resources:
- name: live
path: "/classes/{{class_id}}/live-stats"
inputParameters:
- name: class_id
in: path
operations:
- name: get-live-stats
method: GET
- type: http
namespace: snowflake
baseUri: "https://peloton.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: insert-record
method: POST
- 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
Sends a MailChimp email campaign to a subscriber segment for Peloton marketing.
naftiko: "0.5"
info:
label: "MailChimp Campaign Dispatcher"
description: "Sends a MailChimp email campaign to a subscriber segment for Peloton marketing."
tags:
- marketing
- mailchimp
capability:
exposes:
- type: mcp
namespace: email-campaigns
port: 8080
tools:
- name: send-mailchimp-campaign
description: "Send a MailChimp campaign to a segment."
inputParameters:
- name: campaign_id
in: body
type: string
description: "The MailChimp campaign ID."
call: "mailchimp.send-campaign"
with:
campaign_id: "{{campaign_id}}"
consumes:
- 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/{{campaign_id}}/actions/send"
inputParameters:
- name: campaign_id
in: path
operations:
- name: send-campaign
method: POST
Tracks marketing campaign attribution by correlating ad spend with new member signups and computing ROI metrics.
naftiko: "0.5"
info:
label: "Marketing Attribution Pipeline"
description: "Tracks marketing campaign attribution by correlating ad spend with new member signups and computing ROI metrics."
tags:
- marketing
- peloton
- google-analytics
- snowflake
capability:
exposes:
- type: mcp
namespace: marketing
port: 8080
tools:
- name: marketing-attribution-pipeline
description: "Tracks marketing campaign attribution by correlating ad spend with new member signups and computing ROI metrics."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: step-1
type: call
call: "google-analytics.execute"
with:
action: "process"
- name: step-2
type: call
call: "snowflake.execute"
with:
action: "process"
- name: step-3
type: call
call: "slack.execute"
with:
action: "process"
consumes:
- type: http
namespace: google-analytics
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: google-analytics-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: snowflake
baseUri: "https://peloton.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: snowflake-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: slack-resource
path: "/execute"
operations:
- name: execute
method: POST
Pulls campaign performance from Google Ads and Facebook, correlates with subscription conversions in Snowflake, and updates the marketing dashboard in Tableau.
naftiko: "0.5"
info:
label: "Marketing Campaign Performance Tracker"
description: "Pulls campaign performance from Google Ads and Facebook, correlates with subscription conversions in Snowflake, and updates the marketing dashboard in Tableau."
tags:
- marketing
- subscription
- google-ads
- facebook
- snowflake
- tableau
capability:
exposes:
- type: mcp
namespace: marketing-analytics
port: 8080
tools:
- name: track-campaign-performance
description: "Track marketing campaign performance across channels and correlate with subscriptions."
inputParameters:
- name: campaign_id
in: body
type: string
description: "The marketing campaign identifier."
- name: date_start
in: body
type: string
description: "Report start date."
- name: date_end
in: body
type: string
description: "Report end date."
steps:
- name: get-google-metrics
type: call
call: "google-ads.get-campaign-stats"
with:
campaign_id: "{{campaign_id}}"
start_date: "{{date_start}}"
end_date: "{{date_end}}"
- name: get-facebook-metrics
type: call
call: "meta-api.get-campaign-insights"
with:
campaign_id: "{{campaign_id}}"
start_date: "{{date_start}}"
end_date: "{{date_end}}"
- name: correlate-conversions
type: call
call: "snowflake.execute-query"
with:
query: "CALL correlate_campaign_conversions('{{campaign_id}}', '{{date_start}}', '{{date_end}}')"
- name: refresh-dashboard
type: call
call: "tableau.refresh-extract"
with:
datasource_id: "marketing_performance_ds"
consumes:
- type: http
namespace: google-ads
baseUri: "https://googleads.googleapis.com/v14"
authentication:
type: bearer
token: "$secrets.google_ads_token"
resources:
- name: campaigns
path: "/customers/peloton/campaigns/{{campaign_id}}/stats"
inputParameters:
- name: campaign_id
in: path
operations:
- name: get-campaign-stats
method: GET
- type: http
namespace: meta-api
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.meta_access_token"
resources:
- name: campaigns
path: "/{{campaign_id}}/insights"
inputParameters:
- name: campaign_id
in: path
operations:
- name: get-campaign-insights
method: GET
- type: http
namespace: snowflake
baseUri: "https://peloton.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: tableau
baseUri: "https://tableau.peloton.com/api/3.21"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: datasources
path: "/sites/peloton/datasources/{{datasource_id}}/refresh"
inputParameters:
- name: datasource_id
in: path
operations:
- name: refresh-extract
method: POST
Pulls member activity data from the platform, calculates engagement scores in Snowflake, and updates Salesforce with the latest engagement tier for targeted campaigns.
naftiko: "0.5"
info:
label: "Member Engagement Score Calculator"
description: "Pulls member activity data from the platform, calculates engagement scores in Snowflake, and updates Salesforce with the latest engagement tier for targeted campaigns."
tags:
- member-engagement
- analytics
- snowflake
- salesforce
capability:
exposes:
- type: mcp
namespace: engagement-analytics
port: 8080
tools:
- name: calculate-engagement-score
description: "Calculate member engagement scores and update Salesforce for campaign targeting."
inputParameters:
- name: member_segment
in: body
type: string
description: "The member segment to process."
- name: lookback_days
in: body
type: integer
description: "Number of days to analyze activity."
steps:
- name: get-activity-data
type: call
call: "platform-api.get-member-activity"
with:
segment: "{{member_segment}}"
days: "{{lookback_days}}"
- name: calculate-scores
type: call
call: "snowflake.execute-query"
with:
query: "CALL calculate_engagement_scores('{{member_segment}}', {{lookback_days}})"
- name: update-salesforce
type: call
call: "salesforce.update-segment"
with:
segment: "{{member_segment}}"
engagement_scores: "{{calculate-scores.results}}"
consumes:
- type: http
namespace: platform-api
baseUri: "https://api.onepeloton.com/platform/v1"
authentication:
type: bearer
token: "$secrets.peloton_platform_token"
resources:
- name: activity
path: "/members/activity"
operations:
- name: get-member-activity
method: GET
- type: http
namespace: snowflake
baseUri: "https://peloton.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: salesforce
baseUri: "https://peloton.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: segments
path: "/sobjects/Member_Segment__c"
operations:
- name: update-segment
method: PATCH
Collects member feedback from surveys, analyzes sentiment, and routes actionable insights to product teams via Jira.
naftiko: "0.5"
info:
label: "Member Feedback Sentiment Analyzer"
description: "Collects member feedback from surveys, analyzes sentiment, and routes actionable insights to product teams via Jira."
tags:
- feedback
- peloton
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: member
port: 8080
tools:
- name: member-feedback-sentiment-analyzer
description: "Collects member feedback from surveys, analyzes sentiment, and routes actionable insights to product teams via Jira."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: step-1
type: call
call: "snowflake.execute"
with:
action: "process"
- name: step-2
type: call
call: "jira.execute"
with:
action: "process"
- name: step-3
type: call
call: "slack.execute"
with:
action: "process"
consumes:
- type: http
namespace: snowflake
baseUri: "https://peloton.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: snowflake-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: jira
baseUri: "https://peloton.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: jira-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: slack-resource
path: "/execute"
operations:
- name: execute
method: POST
Detects member workout milestones, creates personalized congratulations, and sends push notifications and social media posts.
naftiko: "0.5"
info:
label: "Member Milestone Celebration Pipeline"
description: "Detects member workout milestones, creates personalized congratulations, and sends push notifications and social media posts."
tags:
- milestones
- peloton
- sendgrid
- slack
capability:
exposes:
- type: mcp
namespace: member
port: 8080
tools:
- name: member-milestone-celebration-pipeline
description: "Detects member workout milestones, creates personalized congratulations, and sends push notifications and social media posts."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: step-1
type: call
call: "peloton.execute"
with:
action: "process"
- name: step-2
type: call
call: "sendgrid.execute"
with:
action: "process"
- name: step-3
type: call
call: "slack.execute"
with:
action: "process"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: peloton-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: sendgrid-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: slack-resource
path: "/execute"
operations:
- name: execute
method: POST
Retrieves a Peloton member profile by member ID. Returns username, location, total workouts, and membership status.
naftiko: "0.5"
info:
label: "Member Profile Lookup"
description: "Retrieves a Peloton member profile by member ID. Returns username, location, total workouts, and membership status."
tags:
- member-engagement
- member-data
capability:
exposes:
- type: mcp
namespace: member-profiles
port: 8080
tools:
- name: get-member-profile
description: "Look up a member profile by ID."
inputParameters:
- name: member_id
in: body
type: string
description: "The member identifier."
call: "platform-api.get-profile"
with:
member_id: "{{member_id}}"
outputParameters:
- name: username
type: string
mapping: "$.data.username"
- name: total_workouts
type: integer
mapping: "$.data.total_workouts"
- name: membership_status
type: string
mapping: "$.data.membership_status"
consumes:
- type: http
namespace: platform-api
baseUri: "https://api.onepeloton.com/platform/v1"
authentication:
type: bearer
token: "$secrets.peloton_platform_token"
resources:
- name: members
path: "/members/{{member_id}}"
inputParameters:
- name: member_id
in: path
operations:
- name: get-profile
method: GET
Processes member referral rewards by validating the referral, crediting accounts, and sending confirmation notifications.
naftiko: "0.5"
info:
label: "Member Referral Rewards Processor"
description: "Processes member referral rewards by validating the referral, crediting accounts, and sending confirmation notifications."
tags:
- referrals
- peloton
- stripe
- sendgrid
capability:
exposes:
- type: mcp
namespace: member
port: 8080
tools:
- name: member-referral-rewards-processor
description: "Processes member referral rewards by validating the referral, crediting accounts, and sending confirmation notifications."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: step-1
type: call
call: "peloton.execute"
with:
action: "process"
- name: step-2
type: call
call: "stripe.execute"
with:
action: "process"
- name: step-3
type: call
call: "sendgrid.execute"
with:
action: "process"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: peloton-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: stripe
baseUri: "https://api.stripe.com/v1"
authentication:
type: bearer
token: "$secrets.stripe_secret_key"
resources:
- name: stripe-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: sendgrid-resource
path: "/execute"
operations:
- name: execute
method: POST
Identifies at-risk members, generates personalized recommendations, and triggers re-engagement campaigns through email and push notifications.
naftiko: "0.5"
info:
label: "Member Retention Intervention Workflow"
description: "Identifies at-risk members, generates personalized recommendations, and triggers re-engagement campaigns through email and push notifications."
tags:
- retention
- peloton
- snowflake
- sendgrid
capability:
exposes:
- type: mcp
namespace: member
port: 8080
tools:
- name: member-retention-intervention-workflow
description: "Identifies at-risk members, generates personalized recommendations, and triggers re-engagement campaigns through email and push notifications."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: step-1
type: call
call: "snowflake.execute"
with:
action: "process"
- name: step-2
type: call
call: "sendgrid.execute"
with:
action: "process"
- name: step-3
type: call
call: "hubspot.execute"
with:
action: "process"
consumes:
- type: http
namespace: snowflake
baseUri: "https://peloton.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: snowflake-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: sendgrid-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: hubspot-resource
path: "/execute"
operations:
- name: execute
method: POST
When a new subscription is created in the billing system, provisions the member account, activates hardware pairing, sends a welcome email via SendGrid, and logs the subscription in Snowflake.
naftiko: "0.5"
info:
label: "Member Subscription Orchestrator"
description: "When a new subscription is created in the billing system, provisions the member account, activates hardware pairing, sends a welcome email via SendGrid, and logs the subscription in Snowflake."
tags:
- subscription
- member-engagement
- sendgrid
- snowflake
capability:
exposes:
- type: mcp
namespace: subscription-ops
port: 8080
tools:
- name: process-new-subscription
description: "Orchestrate new member subscription setup across billing, hardware, and notification systems."
inputParameters:
- name: member_id
in: body
type: string
description: "The Peloton member identifier."
- name: plan_type
in: body
type: string
description: "Subscription plan type (all-access, app-only, guide)."
- name: hardware_id
in: body
type: string
description: "The hardware device serial number, if applicable."
steps:
- name: activate-subscription
type: call
call: "billing-api.activate-plan"
with:
member_id: "{{member_id}}"
plan_type: "{{plan_type}}"
- name: pair-hardware
type: call
call: "hardware-api.pair-device"
with:
member_id: "{{member_id}}"
device_serial: "{{hardware_id}}"
- name: send-welcome
type: call
call: "sendgrid.send-email"
with:
to: "{{activate-subscription.email}}"
subject: "Welcome to Peloton!"
body: "Your {{plan_type}} subscription is active. Device paired: {{pair-hardware.status}}"
- name: log-subscription
type: call
call: "snowflake.insert-record"
with:
table: "subscriptions"
data:
member_id: "{{member_id}}"
plan_type: "{{plan_type}}"
hardware_id: "{{hardware_id}}"
consumes:
- type: http
namespace: billing-api
baseUri: "https://api.onepeloton.com/billing/v1"
authentication:
type: bearer
token: "$secrets.peloton_billing_token"
resources:
- name: plans
path: "/subscriptions/activate"
operations:
- name: activate-plan
method: POST
- type: http
namespace: hardware-api
baseUri: "https://api.onepeloton.com/hardware/v1"
authentication:
type: bearer
token: "$secrets.peloton_hardware_token"
resources:
- name: devices
path: "/devices/pair"
operations:
- name: pair-device
method: POST
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: mail
path: "/mail/send"
operations:
- name: send-email
method: POST
- type: http
namespace: snowflake
baseUri: "https://peloton.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: insert-record
method: POST
Identifies lapsed members, generates personalized win-back offers, and delivers multi-channel re-engagement campaigns.
naftiko: "0.5"
info:
label: "Member Win-Back Campaign Orchestrator"
description: "Identifies lapsed members, generates personalized win-back offers, and delivers multi-channel re-engagement campaigns."
tags:
- retention
- peloton
- hubspot
- sendgrid
capability:
exposes:
- type: mcp
namespace: member
port: 8080
tools:
- name: member-win-back-campaign-orchestrator
description: "Identifies lapsed members, generates personalized win-back offers, and delivers multi-channel re-engagement campaigns."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: query-lapsed
type: call
call: "snowflake.run-query"
with:
input: "{{input_id}}"
- name: create-campaign
type: call
call: "hubspot.create-campaign"
with:
input: "{{input_id}}"
- name: send-offers
type: call
call: "sendgrid.send-email"
with:
input: "{{input_id}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://peloton.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: snowflake-resource
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: hubspot-resource
path: "/marketing/v3/campaigns"
operations:
- name: create-campaign
method: POST
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: sendgrid-resource
path: "/mail/send"
operations:
- name: send-email
method: POST
Retrieves a member's workout history by member ID. Returns recent workouts, total counts by type, and personal records.
naftiko: "0.5"
info:
label: "Member Workout History Lookup"
description: "Retrieves a member's workout history by member ID. Returns recent workouts, total counts by type, and personal records."
tags:
- member-engagement
- fitness-data
capability:
exposes:
- type: mcp
namespace: member-data
port: 8080
tools:
- name: get-workout-history
description: "Look up a member's workout history and personal records."
inputParameters:
- name: member_id
in: body
type: string
description: "The Peloton member identifier."
- name: limit
in: body
type: integer
description: "Number of recent workouts to return."
call: "platform-api.get-workouts"
with:
member_id: "{{member_id}}"
limit: "{{limit}}"
outputParameters:
- name: workouts
type: array
mapping: "$.data.workouts"
- name: total_workouts
type: integer
mapping: "$.data.total_count"
- name: personal_records
type: object
mapping: "$.data.personal_records"
consumes:
- type: http
namespace: platform-api
baseUri: "https://api.onepeloton.com/platform/v1"
authentication:
type: bearer
token: "$secrets.peloton_platform_token"
resources:
- name: workouts
path: "/members/{{member_id}}/workouts"
inputParameters:
- name: member_id
in: path
operations:
- name: get-workouts
method: GET
Sends a message to a Microsoft Teams channel. Used for cross-platform notifications.
naftiko: "0.5"
info:
label: "Microsoft Teams Channel Notifier"
description: "Sends a message to a Microsoft Teams channel. Used for cross-platform notifications."
tags:
- communications
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: teams-notifications
port: 8080
tools:
- name: send-teams-message
description: "Post a message to Microsoft Teams."
inputParameters:
- name: channel_id
in: body
type: string
description: "Teams channel ID."
- name: message
in: body
type: string
description: "Message text."
call: "msteams.send-message"
with:
channel_id: "{{channel_id}}"
text: "{{message}}"
consumes:
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Checks music licensing agreements for class content, validates rights availability, and updates the content system with approved playlists.
naftiko: "0.5"
info:
label: "Music Licensing Sync"
description: "Checks music licensing agreements for class content, validates rights availability, and updates the content system with approved playlists."
tags:
- content
- licensing
capability:
exposes:
- type: mcp
namespace: music-licensing
port: 8080
tools:
- name: validate-music-rights
description: "Validate music licensing rights for class content."
inputParameters:
- name: class_id
in: body
type: string
description: "The class identifier."
- name: playlist_id
in: body
type: string
description: "The playlist identifier."
steps:
- name: check-rights
type: call
call: "music-api.validate-playlist"
with:
playlist_id: "{{playlist_id}}"
- name: update-class
type: call
call: "content-api.set-playlist"
with:
class_id: "{{class_id}}"
playlist_id: "{{playlist_id}}"
rights_status: "{{check-rights.status}}"
consumes:
- type: http
namespace: music-api
baseUri: "https://api.onepeloton.com/music/v1"
authentication:
type: bearer
token: "$secrets.peloton_music_token"
resources:
- name: playlists
path: "/playlists/{{playlist_id}}/validate"
inputParameters:
- name: playlist_id
in: path
operations:
- name: validate-playlist
method: GET
- type: http
namespace: content-api
baseUri: "https://api.onepeloton.com/content/v1"
authentication:
type: bearer
token: "$secrets.peloton_content_token"
resources:
- name: classes
path: "/classes/{{class_id}}/playlist"
inputParameters:
- name: class_id
in: path
operations:
- name: set-playlist
method: PUT
Retrieves application performance from New Relic for the Peloton platform.
naftiko: "0.5"
info:
label: "New Relic Performance Monitor"
description: "Retrieves application performance from New Relic for the Peloton platform."
tags:
- operations
- new-relic
capability:
exposes:
- type: mcp
namespace: apm-ops
port: 8080
tools:
- name: get-app-performance
description: "Get app performance from New Relic."
inputParameters:
- name: app_id
in: body
type: string
description: "New Relic app ID."
call: "newrelic.get-app"
with:
app_id: "{{app_id}}"
outputParameters:
- name: response_time
type: number
mapping: "$.application.application_summary.response_time"
- name: error_rate
type: number
mapping: "$.application.application_summary.error_rate"
consumes:
- type: http
namespace: newrelic
baseUri: "https://api.newrelic.com/v2"
authentication:
type: apiKey
key: "$secrets.newrelic_api_key"
header: "X-Api-Key"
resources:
- name: applications
path: "/applications/{{app_id}}.json"
inputParameters:
- name: app_id
in: path
operations:
- name: get-app
method: GET
Analyzes NPS survey responses, segments by member cohort, and distributes insights to product and support teams.
naftiko: "0.5"
info:
label: "NPS Survey Analysis Pipeline"
description: "Analyzes NPS survey responses, segments by member cohort, and distributes insights to product and support teams."
tags:
- surveys
- peloton
- snowflake
- slack
capability:
exposes:
- type: mcp
namespace: nps
port: 8080
tools:
- name: nps-survey-analysis-pipeline
description: "Analyzes NPS survey responses, segments by member cohort, and distributes insights to product and support teams."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: step-1
type: call
call: "snowflake.execute"
with:
action: "process"
- name: step-2
type: call
call: "tableau.execute"
with:
action: "process"
- name: step-3
type: call
call: "slack.execute"
with:
action: "process"
consumes:
- type: http
namespace: snowflake
baseUri: "https://peloton.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: snowflake-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: tableau
baseUri: "https://tableau.peloton.com/api/3.19"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: tableau-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: slack-resource
path: "/execute"
operations:
- name: execute
method: POST
Integrates partner content into the Peloton platform by validating assets, scheduling publication, and tracking performance.
naftiko: "0.5"
info:
label: "Partnership Content Integration Pipeline"
description: "Integrates partner content into the Peloton platform by validating assets, scheduling publication, and tracking performance."
tags:
- partnerships
- peloton
- jira
- slack
capability:
exposes:
- type: mcp
namespace: partnership
port: 8080
tools:
- name: partnership-content-integration-pipeline
description: "Integrates partner content into the Peloton platform by validating assets, scheduling publication, and tracking performance."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: validate-content
type: call
call: "peloton.validate-content"
with:
input: "{{input_id}}"
- name: create-task
type: call
call: "jira.create-issue"
with:
input: "{{input_id}}"
- name: notify
type: call
call: "slack.post-message"
with:
input: "{{input_id}}"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: peloton-resource
path: "/content/validate"
operations:
- name: validate-content
method: POST
- type: http
namespace: jira
baseUri: "https://peloton.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: jira-resource
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: slack-resource
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Segments members from Salesforce, sends targeted push notifications via the mobile platform, and logs delivery metrics in Snowflake.
naftiko: "0.5"
info:
label: "Push Notification Campaign Sender"
description: "Segments members from Salesforce, sends targeted push notifications via the mobile platform, and logs delivery metrics in Snowflake."
tags:
- member-engagement
- marketing
- salesforce
- snowflake
capability:
exposes:
- type: mcp
namespace: push-campaigns
port: 8080
tools:
- name: send-push-campaign
description: "Send a targeted push notification campaign to a member segment."
inputParameters:
- name: segment_id
in: body
type: string
description: "The Salesforce audience segment identifier."
- name: message_title
in: body
type: string
description: "The push notification title."
- name: message_body
in: body
type: string
description: "The push notification body text."
steps:
- name: get-audience
type: call
call: "salesforce.get-segment-members"
with:
segment_id: "{{segment_id}}"
- name: send-notifications
type: call
call: "mobile-api.send-push-batch"
with:
member_ids: "{{get-audience.member_ids}}"
title: "{{message_title}}"
body: "{{message_body}}"
- name: log-delivery
type: call
call: "snowflake.insert-record"
with:
table: "push_campaign_metrics"
data:
segment_id: "{{segment_id}}"
sent_count: "{{send-notifications.sent_count}}"
delivered_count: "{{send-notifications.delivered_count}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://peloton.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: segments
path: "/sobjects/Member_Segment__c/{{segment_id}}/members"
inputParameters:
- name: segment_id
in: path
operations:
- name: get-segment-members
method: GET
- type: http
namespace: mobile-api
baseUri: "https://api.onepeloton.com/mobile/v1"
authentication:
type: bearer
token: "$secrets.peloton_mobile_token"
resources:
- name: push
path: "/notifications/push/batch"
operations:
- name: send-push-batch
method: POST
- type: http
namespace: snowflake
baseUri: "https://peloton.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: insert-record
method: POST
Generates quarterly fitness summary reports for members, assembles data from workouts, and delivers via email.
naftiko: "0.5"
info:
label: "Quarterly Fitness Report Generator"
description: "Generates quarterly fitness summary reports for members, assembles data from workouts, and delivers via email."
tags:
- reporting
- peloton
- snowflake
- sendgrid
capability:
exposes:
- type: mcp
namespace: quarterly
port: 8080
tools:
- name: quarterly-fitness-report-generator
description: "Generates quarterly fitness summary reports for members, assembles data from workouts, and delivers via email."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: step-1
type: call
call: "snowflake.execute"
with:
action: "process"
- name: step-2
type: call
call: "peloton.execute"
with:
action: "process"
- name: step-3
type: call
call: "sendgrid.execute"
with:
action: "process"
consumes:
- type: http
namespace: snowflake
baseUri: "https://peloton.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: snowflake-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: peloton-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: sendgrid-resource
path: "/execute"
operations:
- name: execute
method: POST
Looks up a Salesforce lead by email. Returns lead status, source, and owner for the sales team.
naftiko: "0.5"
info:
label: "Salesforce Lead Lookup"
description: "Looks up a Salesforce lead by email. Returns lead status, source, and owner for the sales team."
tags:
- sales
- salesforce
capability:
exposes:
- type: mcp
namespace: sales-ops
port: 8080
tools:
- name: get-lead-by-email
description: "Look up a Salesforce lead by email address."
inputParameters:
- name: email
in: body
type: string
description: "The lead email address."
call: "salesforce.query-lead"
with:
email: "{{email}}"
outputParameters:
- name: lead_status
type: string
mapping: "$.records[0].Status"
- name: lead_source
type: string
mapping: "$.records[0].LeadSource"
- name: owner
type: string
mapping: "$.records[0].Owner.Name"
consumes:
- type: http
namespace: salesforce
baseUri: "https://peloton.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: leads
path: "/query?q=SELECT+Id,Status,LeadSource,Owner.Name+FROM+Lead+WHERE+Email='{{email}}'"
inputParameters:
- name: email
in: query
operations:
- name: query-lead
method: GET
Syncs approved SAP Concur expense reports to Oracle financials and notifies finance via Slack.
naftiko: "0.5"
info:
label: "SAP Concur Expense Sync"
description: "Syncs approved SAP Concur expense reports to Oracle financials and notifies finance via Slack."
tags:
- finance
- sap-concur
- oracle
- slack
capability:
exposes:
- type: mcp
namespace: expense-ops
port: 8080
tools:
- name: sync-expenses
description: "Sync approved expenses from Concur to Oracle."
inputParameters:
- name: report_id
in: body
type: string
description: "Concur report ID."
steps:
- name: get-report
type: call
call: "concur.get-report"
with:
report_id: "{{report_id}}"
- name: create-journal
type: call
call: "oracle.create-journal"
with:
amount: "{{get-report.total_amount}}"
description: "Expense {{report_id}}"
- name: notify
type: call
call: "slack.post-message"
with:
channel: "finance"
text: "Expense {{report_id}} synced. Amount: ${{get-report.total_amount}}"
consumes:
- type: http
namespace: concur
baseUri: "https://us.api.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: reports
path: "/expense/reports/{{report_id}}"
inputParameters:
- name: report_id
in: path
operations:
- name: get-report
method: GET
- type: http
namespace: oracle
baseUri: "https://peloton.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: bearer
token: "$secrets.oracle_token"
resources:
- name: journals
path: "/journalEntries"
operations:
- name: create-journal
method: POST
- 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
Plans seasonal content releases by analyzing viewership trends, scheduling classes, and notifying instructors through Teams.
naftiko: "0.5"
info:
label: "Seasonal Content Calendar Planner"
description: "Plans seasonal content releases by analyzing viewership trends, scheduling classes, and notifying instructors through Teams."
tags:
- content
- peloton
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: seasonal
port: 8080
tools:
- name: seasonal-content-calendar-planner
description: "Plans seasonal content releases by analyzing viewership trends, scheduling classes, and notifying instructors through Teams."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: step-1
type: call
call: "snowflake.execute"
with:
action: "process"
- name: step-2
type: call
call: "teams.execute"
with:
action: "process"
- name: step-3
type: call
call: "jira.execute"
with:
action: "process"
consumes:
- type: http
namespace: snowflake
baseUri: "https://peloton.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: snowflake-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.teams_token"
resources:
- name: teams-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: jira
baseUri: "https://peloton.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: jira-resource
path: "/execute"
operations:
- name: execute
method: POST
Sends a transactional email via SendGrid. Reusable email sending primitive for Peloton workflows.
naftiko: "0.5"
info:
label: "SendGrid Email Sender"
description: "Sends a transactional email via SendGrid. Reusable email sending primitive for Peloton workflows."
tags:
- communications
- sendgrid
capability:
exposes:
- type: mcp
namespace: email-ops
port: 8080
tools:
- name: send-email
description: "Send a transactional email via SendGrid."
inputParameters:
- name: to
in: body
type: string
description: "Recipient email address."
- name: subject
in: body
type: string
description: "Email subject."
- name: body
in: body
type: string
description: "Email body text."
call: "sendgrid.send-email"
with:
to: "{{to}}"
subject: "{{subject}}"
body: "{{body}}"
consumes:
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: mail
path: "/mail/send"
operations:
- name: send-email
method: POST
Looks up a ServiceNow customer support case by number. Returns case status, priority, and assigned agent.
naftiko: "0.5"
info:
label: "ServiceNow Support Ticket Lookup"
description: "Looks up a ServiceNow customer support case by number. Returns case status, priority, and assigned agent."
tags:
- member-engagement
- servicenow
capability:
exposes:
- type: mcp
namespace: support-ops
port: 8080
tools:
- name: get-support-case
description: "Look up a customer support case by number."
inputParameters:
- name: case_number
in: body
type: string
description: "The ServiceNow case number."
call: "servicenow.get-case"
with:
case_number: "{{case_number}}"
outputParameters:
- name: status
type: string
mapping: "$.result.state"
- name: priority
type: string
mapping: "$.result.priority"
- name: assigned_agent
type: string
mapping: "$.result.assigned_to.display_value"
consumes:
- type: http
namespace: servicenow
baseUri: "https://peloton.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case?sysparm_query=number={{case_number}}"
inputParameters:
- name: case_number
in: query
operations:
- name: get-case
method: GET
Uploads a document to SharePoint. Used for report sharing across Peloton teams.
naftiko: "0.5"
info:
label: "SharePoint Document Upload"
description: "Uploads a document to SharePoint. Used for report sharing across Peloton teams."
tags:
- document-management
- sharepoint
capability:
exposes:
- type: mcp
namespace: doc-management
port: 8080
tools:
- name: upload-document
description: "Upload a document to SharePoint."
inputParameters:
- name: site_id
in: body
type: string
description: "SharePoint site ID."
- name: file_path
in: body
type: string
description: "Destination file path."
call: "sharepoint.upload-file"
with:
site_id: "{{site_id}}"
file_path: "{{file_path}}"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: upload-file
method: PUT
Analyzes retail showroom foot traffic, correlates with sales conversions, and updates the retail dashboard.
naftiko: "0.5"
info:
label: "Showroom Traffic Analysis Pipeline"
description: "Analyzes retail showroom foot traffic, correlates with sales conversions, and updates the retail dashboard."
tags:
- retail
- peloton
- google-analytics
- tableau
capability:
exposes:
- type: mcp
namespace: showroom
port: 8080
tools:
- name: showroom-traffic-analysis-pipeline
description: "Analyzes retail showroom foot traffic, correlates with sales conversions, and updates the retail dashboard."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: get-traffic
type: call
call: "google-analytics.run-report"
with:
input: "{{input_id}}"
- name: correlate-sales
type: call
call: "snowflake.run-query"
with:
input: "{{input_id}}"
- name: refresh-dashboard
type: call
call: "tableau.refresh-workbook"
with:
input: "{{input_id}}"
consumes:
- type: http
namespace: google-analytics
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: google-analytics-resource
path: "/properties/runReport"
operations:
- name: run-report
method: POST
- type: http
namespace: snowflake
baseUri: "https://peloton.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: snowflake-resource
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: tableau
baseUri: "https://tableau.peloton.com/api/3.19"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: tableau-resource
path: "/sites/default/workbooks/refresh"
operations:
- name: refresh-workbook
method: POST
Sends a formatted message to a Slack channel. Reusable notification primitive for Peloton workflows.
naftiko: "0.5"
info:
label: "Slack Channel Notifier"
description: "Sends a formatted message to a Slack channel. Reusable notification primitive for Peloton workflows."
tags:
- communications
- slack
capability:
exposes:
- type: mcp
namespace: slack-notifications
port: 8080
tools:
- name: send-slack-message
description: "Send a message to a Slack channel."
inputParameters:
- name: channel
in: body
type: string
description: "The Slack channel."
- name: text
in: body
type: string
description: "The message text."
call: "slack.post-message"
with:
channel: "{{channel}}"
text: "{{text}}"
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 SQL query against Peloton's Snowflake data warehouse. Returns result rows and metadata.
naftiko: "0.5"
info:
label: "Snowflake Query Runner"
description: "Executes a SQL query against Peloton's Snowflake data warehouse. Returns result rows and metadata."
tags:
- analytics
- snowflake
capability:
exposes:
- type: mcp
namespace: data-warehouse
port: 8080
tools:
- name: run-snowflake-query
description: "Execute a SQL query against the Peloton Snowflake warehouse."
inputParameters:
- name: query
in: body
type: string
description: "The SQL query to execute."
call: "snowflake.execute-query"
with:
statement: "{{query}}"
outputParameters:
- name: rows
type: array
mapping: "$.data"
- name: row_count
type: integer
mapping: "$.resultSetMetaData.numRows"
consumes:
- type: http
namespace: snowflake
baseUri: "https://peloton.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
Syncs challenge leaderboard data to social media platforms and sends progress updates to participants.
naftiko: "0.5"
info:
label: "Social Challenge Leaderboard Sync"
description: "Syncs challenge leaderboard data to social media platforms and sends progress updates to participants."
tags:
- social
- peloton
- twitter
- sendgrid
capability:
exposes:
- type: mcp
namespace: social
port: 8080
tools:
- name: social-challenge-leaderboard-sync
description: "Syncs challenge leaderboard data to social media platforms and sends progress updates to participants."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: step-1
type: call
call: "peloton.execute"
with:
action: "process"
- name: step-2
type: call
call: "twitter.execute"
with:
action: "process"
- name: step-3
type: call
call: "sendgrid.execute"
with:
action: "process"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: peloton-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: twitter
baseUri: "https://api.twitter.com/2"
authentication:
type: bearer
token: "$secrets.twitter_bearer_token"
resources:
- name: twitter-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: sendgrid-resource
path: "/execute"
operations:
- name: execute
method: POST
Pulls brand engagement metrics from Instagram and Facebook, stores in Snowflake, and updates the social media dashboard in Tableau for the marketing team.
naftiko: "0.5"
info:
label: "Social Media Engagement Aggregator"
description: "Pulls brand engagement metrics from Instagram and Facebook, stores in Snowflake, and updates the social media dashboard in Tableau for the marketing team."
tags:
- marketing
- social-media
- instagram
- facebook
- snowflake
- tableau
capability:
exposes:
- type: mcp
namespace: social-analytics
port: 8080
tools:
- name: aggregate-social-engagement
description: "Aggregate social media engagement metrics across platforms."
inputParameters:
- name: date
in: body
type: string
description: "The reporting date."
steps:
- name: get-instagram-data
type: call
call: "meta-api.get-page-insights"
with:
platform: "instagram"
date: "{{date}}"
- name: get-facebook-data
type: call
call: "meta-api.get-page-insights"
with:
platform: "facebook"
date: "{{date}}"
- name: store-metrics
type: call
call: "snowflake.insert-record"
with:
table: "social_engagement"
data:
date: "{{date}}"
ig_engagement: "{{get-instagram-data.engagement_rate}}"
fb_engagement: "{{get-facebook-data.engagement_rate}}"
- name: refresh-dashboard
type: call
call: "tableau.refresh-extract"
with:
datasource_id: "social_engagement_ds"
consumes:
- type: http
namespace: meta-api
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.meta_access_token"
resources:
- name: insights
path: "/peloton/insights"
operations:
- name: get-page-insights
method: GET
- type: http
namespace: snowflake
baseUri: "https://peloton.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: insert-record
method: POST
- type: http
namespace: tableau
baseUri: "https://tableau.peloton.com/api/3.21"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: datasources
path: "/sites/peloton/datasources/{{datasource_id}}/refresh"
inputParameters:
- name: datasource_id
in: path
operations:
- name: refresh-extract
method: POST
Detects scheduling conflicts in the production studio, proposes alternatives, and updates the calendar system.
naftiko: "0.5"
info:
label: "Studio Scheduling Conflict Resolver"
description: "Detects scheduling conflicts in the production studio, proposes alternatives, and updates the calendar system."
tags:
- scheduling
- peloton
- google-calendar
- slack
capability:
exposes:
- type: mcp
namespace: studio
port: 8080
tools:
- name: studio-scheduling-conflict-resolver
description: "Detects scheduling conflicts in the production studio, proposes alternatives, and updates the calendar system."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: step-1
type: call
call: "peloton.execute"
with:
action: "process"
- name: step-2
type: call
call: "google-calendar.execute"
with:
action: "process"
- name: step-3
type: call
call: "slack.execute"
with:
action: "process"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: peloton-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: google-calendar
baseUri: "https://www.googleapis.com/calendar/v3"
authentication:
type: bearer
token: "$secrets.google_calendar_token"
resources:
- name: google-calendar-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: slack-resource
path: "/execute"
operations:
- name: execute
method: POST
Processes a subscription cancellation, updates the billing system, creates a retention case in Salesforce, and sends a win-back email via SendGrid.
naftiko: "0.5"
info:
label: "Subscription Cancellation Processor"
description: "Processes a subscription cancellation, updates the billing system, creates a retention case in Salesforce, and sends a win-back email via SendGrid."
tags:
- subscription
- member-engagement
- salesforce
- sendgrid
capability:
exposes:
- type: mcp
namespace: cancellation-ops
port: 8080
tools:
- name: process-cancellation
description: "Process a subscription cancellation with retention follow-up."
inputParameters:
- name: member_id
in: body
type: string
description: "The member identifier."
- name: reason
in: body
type: string
description: "Cancellation reason."
steps:
- name: cancel-subscription
type: call
call: "billing-api.cancel-plan"
with:
member_id: "{{member_id}}"
reason: "{{reason}}"
- name: create-retention-case
type: call
call: "salesforce.create-case"
with:
subject: "Cancellation: {{member_id}}"
description: "Reason: {{reason}}. Plan: {{cancel-subscription.plan_type}}"
type: "Retention"
- name: send-winback
type: call
call: "sendgrid.send-email"
with:
to: "{{cancel-subscription.email}}"
template_id: "winback_offer"
subject: "We miss you at Peloton"
consumes:
- type: http
namespace: billing-api
baseUri: "https://api.onepeloton.com/billing/v1"
authentication:
type: bearer
token: "$secrets.peloton_billing_token"
resources:
- name: cancellations
path: "/subscriptions/cancel"
operations:
- name: cancel-plan
method: POST
- type: http
namespace: salesforce
baseUri: "https://peloton.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case"
operations:
- name: create-case
method: POST
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: mail
path: "/mail/send"
operations:
- name: send-email
method: POST
Retrieves subscription plan details by plan ID. Returns plan name, price, features, and billing cycle.
naftiko: "0.5"
info:
label: "Subscription Plan Lookup"
description: "Retrieves subscription plan details by plan ID. Returns plan name, price, features, and billing cycle."
tags:
- subscription
- billing
capability:
exposes:
- type: mcp
namespace: plan-info
port: 8080
tools:
- name: get-plan-details
description: "Look up subscription plan details."
inputParameters:
- name: plan_id
in: body
type: string
description: "The subscription plan identifier."
call: "billing-api.get-plan"
with:
plan_id: "{{plan_id}}"
outputParameters:
- name: name
type: string
mapping: "$.data.name"
- name: price
type: number
mapping: "$.data.monthly_price"
- name: features
type: array
mapping: "$.data.features"
consumes:
- type: http
namespace: billing-api
baseUri: "https://api.onepeloton.com/billing/v1"
authentication:
type: bearer
token: "$secrets.peloton_billing_token"
resources:
- name: plans
path: "/plans/{{plan_id}}"
inputParameters:
- name: plan_id
in: path
operations:
- name: get-plan
method: GET
Aggregates subscription revenue by plan type from the billing system, enriches with cohort analysis from Snowflake, and refreshes the finance dashboard in Tableau.
naftiko: "0.5"
info:
label: "Subscription Revenue Report Generator"
description: "Aggregates subscription revenue by plan type from the billing system, enriches with cohort analysis from Snowflake, and refreshes the finance dashboard in Tableau."
tags:
- subscription
- revenue
- snowflake
- tableau
capability:
exposes:
- type: mcp
namespace: revenue-analytics
port: 8080
tools:
- name: generate-revenue-report
description: "Generate a subscription revenue report with cohort analysis."
inputParameters:
- name: month
in: body
type: string
description: "The reporting month in YYYY-MM format."
steps:
- name: get-billing-data
type: call
call: "billing-api.get-monthly-revenue"
with:
month: "{{month}}"
- name: run-cohort-analysis
type: call
call: "snowflake.execute-query"
with:
query: "CALL subscription_cohort_analysis('{{month}}')"
- name: refresh-dashboard
type: call
call: "tableau.refresh-extract"
with:
datasource_id: "subscription_revenue_ds"
consumes:
- type: http
namespace: billing-api
baseUri: "https://api.onepeloton.com/billing/v1"
authentication:
type: bearer
token: "$secrets.peloton_billing_token"
resources:
- name: revenue
path: "/revenue/monthly"
operations:
- name: get-monthly-revenue
method: GET
- type: http
namespace: snowflake
baseUri: "https://peloton.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: tableau
baseUri: "https://tableau.peloton.com/api/3.21"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: datasources
path: "/sites/peloton/datasources/{{datasource_id}}/refresh"
inputParameters:
- name: datasource_id
in: path
operations:
- name: refresh-extract
method: POST
Triggers a Tableau datasource extract refresh. Used to update dashboards after data pipeline completions.
naftiko: "0.5"
info:
label: "Tableau Dashboard Refresh"
description: "Triggers a Tableau datasource extract refresh. Used to update dashboards after data pipeline completions."
tags:
- analytics
- tableau
capability:
exposes:
- type: mcp
namespace: dashboard-ops
port: 8080
tools:
- name: refresh-tableau-dashboard
description: "Trigger a Tableau datasource extract refresh."
inputParameters:
- name: datasource_id
in: body
type: string
description: "The Tableau datasource identifier."
call: "tableau.refresh-extract"
with:
datasource_id: "{{datasource_id}}"
consumes:
- type: http
namespace: tableau
baseUri: "https://tableau.peloton.com/api/3.21"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: datasources
path: "/sites/peloton/datasources/{{datasource_id}}/refresh"
inputParameters:
- name: datasource_id
in: path
operations:
- name: refresh-extract
method: POST
Validates vendor invoices against SAP POs and creates Oracle payment requests.
naftiko: "0.5"
info:
label: "Vendor Invoice Processor"
description: "Validates vendor invoices against SAP POs and creates Oracle payment requests."
tags:
- procurement
- sap
- oracle
- slack
capability:
exposes:
- type: mcp
namespace: vendor-payments
port: 8080
tools:
- name: process-invoice
description: "Process a vendor invoice."
inputParameters:
- name: po_number
in: body
type: string
description: "SAP PO number."
- name: amount
in: body
type: number
description: "Invoice amount."
steps:
- name: validate-po
type: call
call: "sap.get-po"
with:
po_number: "{{po_number}}"
- name: create-payment
type: call
call: "oracle.create-payment"
with:
po_number: "{{po_number}}"
amount: "{{amount}}"
- name: notify
type: call
call: "slack.post-message"
with:
channel: "finance"
text: "Invoice ${{amount}} for PO {{po_number}} processed."
consumes:
- type: http
namespace: sap
baseUri: "https://peloton.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
- type: http
namespace: oracle
baseUri: "https://peloton.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: bearer
token: "$secrets.oracle_token"
resources:
- name: payments
path: "/payablesInvoices"
operations:
- name: create-payment
method: POST
- 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
Evaluates warranty extension requests by checking device history, generating quotes, and notifying the customer.
naftiko: "0.5"
info:
label: "Warranty Extension Evaluation Pipeline"
description: "Evaluates warranty extension requests by checking device history, generating quotes, and notifying the customer."
tags:
- warranty
- peloton
- servicenow
- sendgrid
capability:
exposes:
- type: mcp
namespace: warranty
port: 8080
tools:
- name: warranty-extension-evaluation-pipeline
description: "Evaluates warranty extension requests by checking device history, generating quotes, and notifying the customer."
inputParameters:
- name: input_id
in: body
type: string
description: "The primary input identifier."
steps:
- name: step-1
type: call
call: "peloton.execute"
with:
action: "process"
- name: step-2
type: call
call: "servicenow.execute"
with:
action: "process"
- name: step-3
type: call
call: "sendgrid.execute"
with:
action: "process"
consumes:
- type: http
namespace: peloton
baseUri: "https://api.onepeloton.com/api/v2"
authentication:
type: bearer
token: "$secrets.peloton_api_token"
resources:
- name: peloton-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: servicenow
baseUri: "https://peloton.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: servicenow-resource
path: "/execute"
operations:
- name: execute
method: POST
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: sendgrid-resource
path: "/execute"
operations:
- name: execute
method: POST
Creates a Zoom meeting and posts the link to a Slack channel for team sync.
naftiko: "0.5"
info:
label: "Zoom Meeting Scheduler"
description: "Creates a Zoom meeting and posts the link to a Slack channel for team sync."
tags:
- communications
- zoom
- slack
capability:
exposes:
- type: mcp
namespace: meeting-ops
port: 8080
tools:
- name: schedule-zoom-meeting
description: "Schedule a Zoom meeting and share in Slack."
inputParameters:
- name: topic
in: body
type: string
description: "Meeting topic."
- name: start_time
in: body
type: string
description: "Start time ISO 8601."
- name: channel
in: body
type: string
description: "Slack channel."
steps:
- name: create-meeting
type: call
call: "zoom.create-meeting"
with:
topic: "{{topic}}"
start_time: "{{start_time}}"
- name: post-link
type: call
call: "slack.post-message"
with:
channel: "{{channel}}"
text: "Zoom: {{topic}} at {{start_time}}. Join: {{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: 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