Life Time Group Holdings Capabilities

Naftiko 0.5 capability definitions for Life Time Group Holdings - 100 capabilities showing integration workflows and service orchestrations.

Sort
Expand

Retrieves fitness program calendar entries from Airtable.

naftiko: "0.5"
info:
  label: "Airtable Program Calendar Lookup"
  description: "Retrieves fitness program calendar entries from Airtable."
  tags:
    - programs
    - airtable
capability:
  exposes:
    - type: mcp
      namespace: airtable-programs
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves fitness program calendar entries from Airtable."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "airtable-programs.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: airtable-programs
      baseUri: "https://api.airtable.com/v0/appLifetime"
      authentication:
        type: bearer
        token: "$secrets.airtable_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

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

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

Validates certifications in Workday, schedules inspections in ServiceNow, generates reports in Google Sheets, and archives in Box.

naftiko: "0.5"
info:
  label: "Aquatics Safety Compliance Pipeline"
  description: "Validates certifications in Workday, schedules inspections in ServiceNow, generates reports in Google Sheets, and archives in Box."
  tags:
    - safety
    - workday
    - servicenow
    - google-sheets
    - box
capability:
  exposes:
    - type: mcp
      namespace: aquatics-safety-compliance-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Validates certifications in Workday, schedules inspections in ServiceNow, generates reports in Google Sheets, and archives in Box."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "workday.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "servicenow.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "google-sheets.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "box.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://api.servicenow.com/v1"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: box
      baseUri: "https://api.box.com/v1"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Retrieves club renovation or opening project status from Asana.

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

Retrieves the latest build status from Azure DevOps for a given pipeline.

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

Creates ambassador record in Salesforce, generates DocuSign agreement, provisions gear order in SAP, and announces via Instagram.

naftiko: "0.5"
info:
  label: "Brand Ambassador Pipeline"
  description: "Creates ambassador record in Salesforce, generates DocuSign agreement, provisions gear order in SAP, and announces via Instagram."
  tags:
    - marketing
    - salesforce
    - docusign
    - sap
    - instagram
capability:
  exposes:
    - type: mcp
      namespace: brand-ambassador-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Creates ambassador record in Salesforce, generates DocuSign agreement, provisions gear order in SAP, and announces via Instagram."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "salesforce.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "docusign.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "sap.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "instagram.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://api.salesforce.com/v1"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: docusign
      baseUri: "https://api.docusign.com/v1"
      authentication:
        type: bearer
        token: "$secrets.docusign_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://api.sap.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: instagram
      baseUri: "https://api.instagram.com/v1"
      authentication:
        type: bearer
        token: "$secrets.instagram_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

When a member requests a class booking, checks availability in the scheduling system, creates a reservation in Salesforce, and sends a confirmation via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Class Scheduling Orchestrator"
  description: "When a member requests a class booking, checks availability in the scheduling system, creates a reservation in Salesforce, and sends a confirmation via Microsoft Teams."
  tags:
    - scheduling
    - membership
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: class-scheduling
      port: 8080
      tools:
        - name: book-class
          description: "Given a member ID, class ID, and preferred date, check availability, create reservation, and confirm."
          inputParameters:
            - name: member_id
              in: body
              type: string
              description: "The member ID."
            - name: class_id
              in: body
              type: string
              description: "The class identifier."
            - name: preferred_date
              in: body
              type: string
              description: "The preferred class date in YYYY-MM-DD format."
            - name: member_email
              in: body
              type: string
              description: "The member email for confirmation."
          steps:
            - name: check-availability
              type: call
              call: "salesforce.check-class-availability"
              with:
                class_id: "{{class_id}}"
                date: "{{preferred_date}}"
            - name: create-reservation
              type: call
              call: "salesforce.create-booking"
              with:
                member_id: "{{member_id}}"
                class_id: "{{class_id}}"
                date: "{{preferred_date}}"
            - name: send-confirmation
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{member_email}}"
                text: "Your class booking is confirmed! Class: {{check-availability.class_name}} on {{preferred_date}} at {{check-availability.time}}. Booking ID: {{create-reservation.booking_id}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://lifetime.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: class-availability
          path: "/sobjects/ClassSchedule__c?class_id={{class_id}}&date={{date}}"
          inputParameters:
            - name: class_id
              in: query
            - name: date
              in: query
          operations:
            - name: check-class-availability
              method: GET
        - name: bookings
          path: "/sobjects/Booking__c"
          operations:
            - name: create-booking
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Monitors real-time club occupancy from Salesforce check-in data, analyzes peak patterns in Azure Databricks, updates the Power BI dashboard, and alerts club managers via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Club Capacity Monitoring Pipeline"
  description: "Monitors real-time club occupancy from Salesforce check-in data, analyzes peak patterns in Azure Databricks, updates the Power BI dashboard, and alerts club managers via Microsoft Teams."
  tags:
    - facilities
    - analytics
    - salesforce
    - azure-databricks
    - power-bi
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: capacity-monitoring
      port: 8080
      tools:
        - name: monitor-club-capacity
          description: "Given a club code, check current occupancy, analyze patterns, and alert if near capacity."
          inputParameters:
            - name: club_code
              in: body
              type: string
              description: "The club location code."
            - name: manager_email
              in: body
              type: string
              description: "The club manager email."
          steps:
            - name: get-occupancy
              type: call
              call: "salesforce.get-current-checkins"
              with:
                club_code: "{{club_code}}"
            - name: analyze-patterns
              type: call
              call: "databricks.run-query"
              with:
                query: "SELECT * FROM occupancy_patterns WHERE club = '{{club_code}}' AND date = CURRENT_DATE"
            - name: refresh-dashboard
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "club-occupancy"
            - name: alert-manager
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{manager_email}}"
                text: "Club {{club_code}} occupancy: Current: {{get-occupancy.current_count}}. Peak today: {{analyze-patterns.peak_count}}. Forecast next hour: {{analyze-patterns.next_hour_forecast}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://lifetime.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: checkins
          path: "/query/?q=SELECT+COUNT(Id)+FROM+CheckIn__c+WHERE+Club__c='{{club_code}}'+AND+CheckOutTime__c=NULL"
          inputParameters:
            - name: club_code
              in: query
          operations:
            - name: get-current-checkins
              method: GET
    - type: http
      namespace: databricks
      baseUri: "https://lifetime-analytics.azuredatabricks.net/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: sql-queries
          path: "/sql/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Analyzes usage data in Snowflake, optimizes scheduling, updates Power BI dashboards, and notifies club managers via Slack.

naftiko: "0.5"
info:
  label: "Club Capacity Optimization Pipeline"
  description: "Analyzes usage data in Snowflake, optimizes scheduling, updates Power BI dashboards, and notifies club managers via Slack."
  tags:
    - operations
    - snowflake
    - power-bi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: club-capacity-optimization-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Analyzes usage data in Snowflake, optimizes scheduling, updates Power BI dashboards, and notifies club managers via Slack."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "snowflake.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "power-bi.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "slack.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "slack.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://api.slack.com/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

When a club event is created, sets up the event in Salesforce, sends invitations via MailChimp, creates a Google Forms registration page, and promotes on Instagram.

naftiko: "0.5"
info:
  label: "Club Event Management Pipeline"
  description: "When a club event is created, sets up the event in Salesforce, sends invitations via MailChimp, creates a Google Forms registration page, and promotes on Instagram."
  tags:
    - marketing
    - events
    - salesforce
    - mailchimp
    - google-forms
    - instagram
capability:
  exposes:
    - type: mcp
      namespace: event-management
      port: 8080
      tools:
        - name: create-club-event
          description: "Given event details, create the event, send invitations, set up registration, and promote."
          inputParameters:
            - name: event_name
              in: body
              type: string
              description: "The event name."
            - name: club_code
              in: body
              type: string
              description: "The club location code."
            - name: event_date
              in: body
              type: string
              description: "The event date."
            - name: description
              in: body
              type: string
              description: "The event description."
          steps:
            - name: create-event
              type: call
              call: "salesforce.create-event"
              with:
                name: "{{event_name}}"
                club: "{{club_code}}"
                date: "{{event_date}}"
                description: "{{description}}"
            - name: send-invitations
              type: call
              call: "mailchimp.send-campaign"
              with:
                list_id: "club-{{club_code}}-members"
                template: "club-event-invitation"
                subject: "You're invited: {{event_name}}"
            - name: create-registration
              type: call
              call: "google-forms.create-form"
              with:
                title: "Register: {{event_name}}"
                event_id: "{{create-event.event_id}}"
            - name: promote-social
              type: call
              call: "instagram.create-post"
              with:
                caption: "Join us for {{event_name}} at Life Time {{club_code}} on {{event_date}}! Register now. #LifeTime #Fitness"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://lifetime.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: events
          path: "/sobjects/Event__c"
          operations:
            - name: create-event
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: basic
        username: "anystring"
        password: "$secrets.mailchimp_api_key"
      resources:
        - name: campaigns
          path: "/campaigns"
          operations:
            - name: send-campaign
              method: POST
    - type: http
      namespace: google-forms
      baseUri: "https://forms.googleapis.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_forms_token"
      resources:
        - name: forms
          path: "/forms"
          operations:
            - name: create-form
              method: POST
    - type: http
      namespace: instagram
      baseUri: "https://graph.facebook.com/v17.0"
      authentication:
        type: bearer
        token: "$secrets.meta_token"
      resources:
        - name: posts
          path: "/{{ig_user_id}}/media"
          operations:
            - name: create-post
              method: POST

Creates event in Salesforce, promotes via HubSpot, posts on Instagram, and tracks RSVPs in Google Sheets.

naftiko: "0.5"
info:
  label: "Club Event Promotion Pipeline"
  description: "Creates event in Salesforce, promotes via HubSpot, posts on Instagram, and tracks RSVPs in Google Sheets."
  tags:
    - events
    - salesforce
    - hubspot
    - instagram
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: club-event-promotion-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Creates event in Salesforce, promotes via HubSpot, posts on Instagram, and tracks RSVPs in Google Sheets."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "salesforce.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "hubspot.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "instagram.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "google-sheets.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://api.salesforce.com/v1"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubspot.com/v1"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: instagram
      baseUri: "https://api.instagram.com/v1"
      authentication:
        type: bearer
        token: "$secrets.instagram_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Creates location in SAP, provisions systems via ServiceNow, publishes on Google Maps, and announces via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Club Opening Orchestrator"
  description: "Creates location in SAP, provisions systems via ServiceNow, publishes on Google Maps, and announces via Microsoft Teams."
  tags:
    - operations
    - sap
    - servicenow
    - google-maps
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: club-opening-orchestrator
      port: 8080
      tools:
        - name: execute
          description: "Creates location in SAP, provisions systems via ServiceNow, publishes on Google Maps, and announces via Microsoft Teams."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "sap.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "servicenow.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "google-maps.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "microsoft-teams.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://api.sap.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://api.servicenow.com/v1"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-maps
      baseUri: "https://api.googlemaps.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_maps_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: microsoft-teams
      baseUri: "https://api.microsoftteams.com/v1"
      authentication:
        type: bearer
        token: "$secrets.microsoft_teams_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Creates project in Asana, tracks budget in SAP, uploads designs from Figma to SharePoint, and notifies via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Club Renovation Pipeline"
  description: "Creates project in Asana, tracks budget in SAP, uploads designs from Figma to SharePoint, and notifies via Microsoft Teams."
  tags:
    - operations
    - asana
    - sap
    - figma
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: club-renovation-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Creates project in Asana, tracks budget in SAP, uploads designs from Figma to SharePoint, and notifies via Microsoft Teams."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "asana.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "sap.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "figma.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "microsoft-teams.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: asana
      baseUri: "https://api.asana.com/v1"
      authentication:
        type: bearer
        token: "$secrets.asana_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://api.sap.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: figma
      baseUri: "https://api.figma.com/v1"
      authentication:
        type: bearer
        token: "$secrets.figma_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://api.sharepoint.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sharepoint_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: microsoft-teams
      baseUri: "https://api.microsoftteams.com/v1"
      authentication:
        type: bearer
        token: "$secrets.microsoft_teams_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Analyzes market data in Snowflake, generates Confluence insights, and shares via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Competitive Intelligence Pipeline"
  description: "Analyzes market data in Snowflake, generates Confluence insights, and shares via Microsoft Teams."
  tags:
    - intelligence
    - snowflake
    - confluence
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: competitive-intelligence-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Analyzes market data in Snowflake, generates Confluence insights, and shares via Microsoft Teams."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "snowflake.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "confluence.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "microsoft-teams.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "microsoft-teams.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://api.confluence.com/v1"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: microsoft-teams
      baseUri: "https://api.microsoftteams.com/v1"
      authentication:
        type: bearer
        token: "$secrets.microsoft_teams_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Searches Confluence for operational SOPs and training materials.

naftiko: "0.5"
info:
  label: "Confluence Knowledge Base Search"
  description: "Searches Confluence for operational SOPs and training materials."
  tags:
    - knowledge-management
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: knowledge-base
      port: 8080
      tools:
        - name: search-knowledge-base
          description: "Search Confluence for knowledge base articles."
          inputParameters:
            - name: keyword
              in: body
              type: string
              description: "The search keyword."
          call: "confluence.search"
          with:
            cql: "type=page AND text~'{{keyword}}'"
          outputParameters:
            - name: results
              type: string
              mapping: "$.results"
            - name: total_size
              type: string
              mapping: "$.totalSize"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://lifetime.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: search
          path: "/search?cql={{cql}}"
          inputParameters:
            - name: cql
              in: query
          operations:
            - name: search
              method: GET

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

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

Queries Salesforce, creates Jira tasks, sends Outlook reminders, and logs in Google Sheets.

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

Creates corporate account in Salesforce, generates DocuSign agreement, provisions billing in Stripe, and tracks in Google Sheets.

naftiko: "0.5"
info:
  label: "Corporate Wellness Program Pipeline"
  description: "Creates corporate account in Salesforce, generates DocuSign agreement, provisions billing in Stripe, and tracks in Google Sheets."
  tags:
    - corporate
    - salesforce
    - docusign
    - stripe
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: corporate-wellness-program-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Creates corporate account in Salesforce, generates DocuSign agreement, provisions billing in Stripe, and tracks in Google Sheets."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "salesforce.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "docusign.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "stripe.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "google-sheets.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://api.salesforce.com/v1"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: docusign
      baseUri: "https://api.docusign.com/v1"
      authentication:
        type: bearer
        token: "$secrets.docusign_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Analyzes in Snowflake, generates recommendations via Azure ML, syncs to Salesforce, and emails via MailChimp.

naftiko: "0.5"
info:
  label: "Cross-Sell Services Pipeline"
  description: "Analyzes in Snowflake, generates recommendations via Azure ML, syncs to Salesforce, and emails via MailChimp."
  tags:
    - sales
    - snowflake
    - azure-machine-learning
    - salesforce
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: cross-sell-services-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Analyzes in Snowflake, generates recommendations via Azure ML, syncs to Salesforce, and emails via MailChimp."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "snowflake.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "azure-machine-learning.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "salesforce.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "mailchimp.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: azure-machine-learning
      baseUri: "https://api.azuremachinelearning.com/v1"
      authentication:
        type: bearer
        token: "$secrets.azure_machine_learning_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://api.salesforce.com/v1"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://api.mailchimp.com/v1"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Escalates Zendesk ticket, creates Jira follow-up, notifies via Slack, and logs in Snowflake.

naftiko: "0.5"
info:
  label: "Customer Service Escalation Pipeline"
  description: "Escalates Zendesk ticket, creates Jira follow-up, notifies via Slack, and logs in Snowflake."
  tags:
    - support
    - zendesk
    - jira
    - slack
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: customer-service-escalation-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Escalates Zendesk ticket, creates Jira follow-up, notifies via Slack, and logs in Snowflake."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "zendesk.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "jira.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "slack.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "snowflake.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://api.zendesk.com/v1"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://api.jira.com/v1"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://api.slack.com/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Audits Snowflake, generates reports in Google Sheets, archives in SharePoint, and notifies via Slack.

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

Creates HubSpot campaign, sets up Facebook ads, tracks in Google Analytics, and reports in Google Sheets.

naftiko: "0.5"
info:
  label: "Digital Marketing Campaign Pipeline"
  description: "Creates HubSpot campaign, sets up Facebook ads, tracks in Google Analytics, and reports in Google Sheets."
  tags:
    - marketing
    - hubspot
    - facebook
    - google-analytics
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: digital-marketing-campaign-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Creates HubSpot campaign, sets up Facebook ads, tracks in Google Analytics, and reports in Google Sheets."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "hubspot.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "facebook.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "google-analytics.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "google-sheets.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubspot.com/v1"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: facebook
      baseUri: "https://api.facebook.com/v1"
      authentication:
        type: bearer
        token: "$secrets.facebook_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-analytics
      baseUri: "https://api.googleanalytics.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Retrieves DocuSign membership agreement envelope status.

naftiko: "0.5"
info:
  label: "DocuSign Membership Agreement Lookup"
  description: "Retrieves DocuSign membership agreement envelope status."
  tags:
    - legal
    - docusign
capability:
  exposes:
    - type: mcp
      namespace: docusign-memberships
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves DocuSign membership agreement envelope status."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "docusign-memberships.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: docusign-memberships
      baseUri: "https://na4.docusign.net/restapi/v2.1/accounts/lifetime"
      authentication:
        type: bearer
        token: "$secrets.docusign_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Retrieves application performance metrics from Dynatrace.

naftiko: "0.5"
info:
  label: "Dynatrace Application Health Check"
  description: "Retrieves application performance metrics from Dynatrace."
  tags:
    - monitoring
    - dynatrace
capability:
  exposes:
    - type: mcp
      namespace: app-monitoring
      port: 8080
      tools:
        - name: get-app-health
          description: "Retrieve application health metrics from Dynatrace."
          inputParameters:
            - name: service_name
              in: body
              type: string
              description: "The Dynatrace service name."
          call: "dynatrace.get-service-metrics"
          with:
            service_name: "{{service_name}}"
          outputParameters:
            - name: response_time
              type: string
              mapping: "$.result[0].data[0].values[0]"
            - name: error_rate
              type: string
              mapping: "$.result[1].data[0].values[0]"
  consumes:
    - type: http
      namespace: dynatrace
      baseUri: "https://lifetime.live.dynatrace.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.dynatrace_token"
      resources:
        - name: metrics
          path: "/metrics/query?metricSelector=builtin:service.response.time,builtin:service.errors.total.rate&entitySelector=type(SERVICE),entityName({{service_name}})"
          inputParameters:
            - name: service_name
              in: query
          operations:
            - name: get-service-metrics
              method: GET

Tracks completion in Workday, generates certificates via DocuSign, logs in Google Sheets, and notifies via Slack.

naftiko: "0.5"
info:
  label: "Employee Certification Pipeline"
  description: "Tracks completion in Workday, generates certificates via DocuSign, logs in Google Sheets, and notifies via Slack."
  tags:
    - training
    - workday
    - docusign
    - google-sheets
    - slack
capability:
  exposes:
    - type: mcp
      namespace: employee-certification-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Tracks completion in Workday, generates certificates via DocuSign, logs in Google Sheets, and notifies via Slack."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "workday.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "docusign.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "google-sheets.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "slack.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: docusign
      baseUri: "https://api.docusign.com/v1"
      authentication:
        type: bearer
        token: "$secrets.docusign_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://api.slack.com/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

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

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

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

naftiko: "0.5"
info:
  label: "Employee Onboarding Orchestrator"
  description: "On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder, and sends a Microsoft Teams welcome message."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-onboarding
          description: "Given a Workday employee ID and start date, orchestrate the full onboarding sequence."
          inputParameters:
            - name: workday_employee_id
              in: body
              type: string
              description: "The Workday worker ID for the new hire."
            - name: start_date
              in: body
              type: string
              description: "The employee start date in YYYY-MM-DD format."
            - name: department
              in: body
              type: string
              description: "The department the new hire is joining."
          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"
                assigned_group: "IT_Onboarding"
            - name: provision-folder
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "hr_onboarding_site"
                folder_path: "OnboardingDocs/{{get-employee.full_name}}_{{start_date}}"
            - name: send-welcome
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.work_email}}"
                text: "Welcome to Life Time, {{get-employee.first_name}}! Your IT onboarding ticket is {{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://lifetime.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-folder
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Tracks equipment in SAP, schedules maintenance in ServiceNow, analyzes costs in Snowflake, and reports via Power BI.

naftiko: "0.5"
info:
  label: "Equipment Lifecycle Pipeline"
  description: "Tracks equipment in SAP, schedules maintenance in ServiceNow, analyzes costs in Snowflake, and reports via Power BI."
  tags:
    - equipment
    - sap
    - servicenow
    - snowflake
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: equipment-lifecycle-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Tracks equipment in SAP, schedules maintenance in ServiceNow, analyzes costs in Snowflake, and reports via Power BI."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "sap.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "servicenow.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "snowflake.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "power-bi.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://api.sap.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://api.servicenow.com/v1"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

When a club requests fitness equipment, creates a requisition in SAP, checks budget approval in Workday, and notifies the procurement team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Equipment Procurement Pipeline"
  description: "When a club requests fitness equipment, creates a requisition in SAP, checks budget approval in Workday, and notifies the procurement team via Microsoft Teams."
  tags:
    - facilities
    - procurement
    - sap
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: equipment-procurement
      port: 8080
      tools:
        - name: request-equipment
          description: "Given equipment details, create requisition, check budget, and notify procurement."
          inputParameters:
            - name: equipment_name
              in: body
              type: string
              description: "The equipment name."
            - name: quantity
              in: body
              type: string
              description: "The quantity."
            - name: estimated_cost
              in: body
              type: string
              description: "The estimated cost."
            - name: club_code
              in: body
              type: string
              description: "The requesting club code."
          steps:
            - name: create-requisition
              type: call
              call: "sap.create-requisition"
              with:
                description: "{{equipment_name}} x{{quantity}} for {{club_code}}"
                amount: "{{estimated_cost}}"
            - name: check-budget
              type: call
              call: "workday.check-budget"
              with:
                department: "{{club_code}}"
                amount: "{{estimated_cost}}"
            - name: notify-procurement
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "procurement"
                text: "Equipment request: {{equipment_name}} x{{quantity}} (${{estimated_cost}}) for {{club_code}}. Requisition: {{create-requisition.req_number}}. Budget: {{check-budget.available}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://lifetime-s4.sap.com/sap/opu/odata/sap/MM_PUR_REQ_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: requisitions
          path: "/A_PurchaseRequisition"
          operations:
            - name: create-requisition
              method: POST
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: budgets
          path: "/financialManagement/budgets?department={{department}}"
          inputParameters:
            - name: department
              in: query
          operations:
            - name: check-budget
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Creates ServiceNow work order, schedules vendor in SAP, notifies club manager via Slack, and tracks in Google Sheets.

naftiko: "0.5"
info:
  label: "Facility Maintenance Orchestrator"
  description: "Creates ServiceNow work order, schedules vendor in SAP, notifies club manager via Slack, and tracks in Google Sheets."
  tags:
    - maintenance
    - servicenow
    - sap
    - slack
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: facility-maintenance-orchestrator
      port: 8080
      tools:
        - name: execute
          description: "Creates ServiceNow work order, schedules vendor in SAP, notifies club manager via Slack, and tracks in Google Sheets."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "servicenow.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "sap.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "slack.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "google-sheets.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://api.servicenow.com/v1"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://api.sap.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://api.slack.com/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

When a facility issue is reported, creates a ServiceNow work order, notifies the facilities team via Microsoft Teams, and updates the asset record in SAP.

naftiko: "0.5"
info:
  label: "Facility Maintenance Request Pipeline"
  description: "When a facility issue is reported, creates a ServiceNow work order, notifies the facilities team via Microsoft Teams, and updates the asset record in SAP."
  tags:
    - facilities
    - servicenow
    - microsoft-teams
    - sap
capability:
  exposes:
    - type: mcp
      namespace: facilities
      port: 8080
      tools:
        - name: submit-maintenance-request
          description: "Given facility details, create a work order, notify the team, and update the asset."
          inputParameters:
            - name: club_code
              in: body
              type: string
              description: "The club location code."
            - name: issue_description
              in: body
              type: string
              description: "Description of the maintenance issue."
            - name: priority
              in: body
              type: string
              description: "Priority level (critical, high, medium, low)."
            - name: asset_id
              in: body
              type: string
              description: "The SAP asset identifier."
          steps:
            - name: create-work-order
              type: call
              call: "servicenow.create-work-order"
              with:
                short_description: "Maintenance: {{club_code}} - {{issue_description}}"
                priority: "{{priority}}"
                location: "{{club_code}}"
            - name: notify-facilities
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "facilities-ops"
                text: "New maintenance request at {{club_code}}: {{issue_description}}. Priority: {{priority}}. Work order: {{create-work-order.number}}."
            - name: update-asset
              type: call
              call: "sap.update-asset"
              with:
                asset_id: "{{asset_id}}"
                maintenance_ticket: "{{create-work-order.number}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://lifetime.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: work-orders
          path: "/table/wm_order"
          operations:
            - name: create-work-order
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://lifetime-s4.sap.com/sap/opu/odata/sap/ASSET_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: assets
          path: "/Assets('{{asset_id}}')"
          inputParameters:
            - name: asset_id
              in: path
          operations:
            - name: update-asset
              method: PATCH

Retrieves a Figma club interior design file by key.

naftiko: "0.5"
info:
  label: "Figma Club Design Lookup"
  description: "Retrieves a Figma club interior design file by key."
  tags:
    - design
    - figma
capability:
  exposes:
    - type: mcp
      namespace: figma-club
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves a Figma club interior design file by key."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "figma-club.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: figma-club
      baseUri: "https://api.figma.com/v1"
      authentication:
        type: bearer
        token: "$secrets.figma_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

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

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

Retrieves website engagement metrics from Google Analytics for the Life Time website.

naftiko: "0.5"
info:
  label: "Google Analytics Website Metrics"
  description: "Retrieves website engagement metrics from Google Analytics for the Life Time website."
  tags:
    - marketing
    - google-analytics
capability:
  exposes:
    - type: mcp
      namespace: web-analytics
      port: 8080
      tools:
        - name: get-website-metrics
          description: "Retrieve website metrics from Google Analytics."
          inputParameters:
            - name: start_date
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
            - name: end_date
              in: body
              type: string
              description: "End date in YYYY-MM-DD format."
          call: "google-analytics.get-report"
          with:
            property_id: "lifetime-website"
            start_date: "{{start_date}}"
            end_date: "{{end_date}}"
          outputParameters:
            - name: sessions
              type: string
              mapping: "$.rows[0].metricValues[0].value"
            - name: conversion_rate
              type: string
              mapping: "$.rows[0].metricValues[1].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/{{property_id}}:runReport"
          inputParameters:
            - name: property_id
              in: path
          operations:
            - name: get-report
              method: POST

Searches Google Drive for operational documents and club management resources.

naftiko: "0.5"
info:
  label: "Google Drive Operational Document Search"
  description: "Searches Google Drive for operational documents and club management resources."
  tags:
    - facilities
    - google-drive
capability:
  exposes:
    - type: mcp
      namespace: operational-docs
      port: 8080
      tools:
        - name: search-documents
          description: "Search Google Drive for operational documents."
          inputParameters:
            - name: keyword
              in: body
              type: string
              description: "The search keyword."
          call: "google-drive.search-files"
          with:
            query: "name contains '{{keyword}}'"
          outputParameters:
            - name: files
              type: string
              mapping: "$.files"
  consumes:
    - type: http
      namespace: google-drive
      baseUri: "https://www.googleapis.com/drive/v3"
      authentication:
        type: bearer
        token: "$secrets.google_drive_token"
      resources:
        - name: files
          path: "/files?q={{query}}"
          inputParameters:
            - name: query
              in: query
          operations:
            - name: search-files
              method: GET

Retrieves nearby Life Time club locations using Google Maps for member-facing applications.

naftiko: "0.5"
info:
  label: "Google Maps Club Locator"
  description: "Retrieves nearby Life Time club locations using Google Maps for member-facing applications."
  tags:
    - membership
    - google-maps
capability:
  exposes:
    - type: mcp
      namespace: club-locator
      port: 8080
      tools:
        - name: find-nearby-clubs
          description: "Find Life Time clubs near a given location."
          inputParameters:
            - name: address
              in: body
              type: string
              description: "The member address or zip code."
            - name: radius_miles
              in: body
              type: string
              description: "Search radius in miles."
          call: "google-maps.search-places"
          with:
            query: "Life Time Fitness near {{address}}"
            radius: "{{radius_miles}}"
          outputParameters:
            - name: clubs
              type: string
              mapping: "$.results"
  consumes:
    - type: http
      namespace: google-maps
      baseUri: "https://maps.googleapis.com/maps/api"
      authentication:
        type: apikey
        key: "$secrets.google_maps_key"
      resources:
        - name: places
          path: "/place/textsearch/json?query={{query}}&radius={{radius}}"
          inputParameters:
            - name: query
              in: query
            - name: radius
              in: query
          operations:
            - name: search-places
              method: GET

Retrieves search performance for Life Time web properties.

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

Retrieves class attendance data from a Google Sheets tracker used by club operations.

naftiko: "0.5"
info:
  label: "Google Sheets Class Attendance Tracker"
  description: "Retrieves class attendance data from a Google Sheets tracker used by club operations."
  tags:
    - scheduling
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: attendance-tracking
      port: 8080
      tools:
        - name: get-attendance-data
          description: "Retrieve class attendance data from Google Sheets."
          inputParameters:
            - name: spreadsheet_id
              in: body
              type: string
              description: "The Google Sheets spreadsheet ID."
            - name: range
              in: body
              type: string
              description: "The cell range."
          call: "google-sheets.get-values"
          with:
            spreadsheet_id: "{{spreadsheet_id}}"
            range: "{{range}}"
          outputParameters:
            - name: values
              type: string
              mapping: "$.values"
  consumes:
    - type: http
      namespace: google-sheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: values
          path: "/spreadsheets/{{spreadsheet_id}}/values/{{range}}"
          inputParameters:
            - name: spreadsheet_id
              in: path
            - name: range
              in: path
          operations:
            - name: get-values
              method: GET

Creates class in scheduling system, assigns instructor in Workday, promotes on Instagram, and notifies members via MailChimp.

naftiko: "0.5"
info:
  label: "Group Fitness Class Creation Pipeline"
  description: "Creates class in scheduling system, assigns instructor in Workday, promotes on Instagram, and notifies members via MailChimp."
  tags:
    - fitness
    - workday
    - instagram
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: group-fitness-class-creation-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Creates class in scheduling system, assigns instructor in Workday, promotes on Instagram, and notifies members via MailChimp."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "workday.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "instagram.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "mailchimp.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "mailchimp.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: instagram
      baseUri: "https://api.instagram.com/v1"
      authentication:
        type: bearer
        token: "$secrets.instagram_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://api.mailchimp.com/v1"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Retrieves a HubSpot lead by email for membership marketing.

naftiko: "0.5"
info:
  label: "HubSpot Lead Lookup"
  description: "Retrieves a HubSpot lead by email for membership marketing."
  tags:
    - marketing
    - hubspot
capability:
  exposes:
    - type: mcp
      namespace: hubspot-leads
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves a HubSpot lead by email for membership marketing."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "hubspot-leads.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: hubspot-leads
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Creates a job posting on Indeed for club staff recruitment and tracks it in Salesforce.

naftiko: "0.5"
info:
  label: "Indeed Job Posting Pipeline"
  description: "Creates a job posting on Indeed for club staff recruitment and tracks it in Salesforce."
  tags:
    - recruitment
    - indeed
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: recruitment
      port: 8080
      tools:
        - name: post-job
          description: "Create an Indeed job posting and log it in Salesforce."
          inputParameters:
            - name: job_title
              in: body
              type: string
              description: "The job title."
            - name: club_code
              in: body
              type: string
              description: "The club location."
            - name: description
              in: body
              type: string
              description: "The job description."
          steps:
            - name: create-posting
              type: call
              call: "indeed.create-job"
              with:
                title: "{{job_title}}"
                location: "{{club_code}}"
                description: "{{description}}"
            - name: log-posting
              type: call
              call: "salesforce.create-job-record"
              with:
                title: "{{job_title}}"
                location: "{{club_code}}"
                indeed_id: "{{create-posting.job_id}}"
  consumes:
    - type: http
      namespace: indeed
      baseUri: "https://apis.indeed.com/v2"
      authentication:
        type: bearer
        token: "$secrets.indeed_token"
      resources:
        - name: jobs
          path: "/jobs"
          operations:
            - name: create-job
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://lifetime.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: job-records
          path: "/sobjects/JobPosting__c"
          operations:
            - name: create-job-record
              method: POST

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

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

Retrieves engagement metrics for Life Time Instagram posts.

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

On Dynatrace alert, creates ServiceNow incident, pages team via Slack, and opens Zoom bridge.

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

Retrieves a Jira issue by key from the IT project.

naftiko: "0.5"
info:
  label: "Jira IT Task Lookup"
  description: "Retrieves a Jira issue by key from the IT project."
  tags:
    - it-operations
    - jira
capability:
  exposes:
    - type: mcp
      namespace: it-tasks
      port: 8080
      tools:
        - name: get-jira-issue
          description: "Look up a Jira issue by key."
          inputParameters:
            - name: issue_key
              in: body
              type: string
              description: "The Jira issue key."
          call: "jira.get-issue"
          with:
            issue_key: "{{issue_key}}"
          outputParameters:
            - name: summary
              type: string
              mapping: "$.fields.summary"
            - name: status
              type: string
              mapping: "$.fields.status.name"
            - name: assignee
              type: string
              mapping: "$.fields.assignee.displayName"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://lifetime.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue/{{issue_key}}"
          inputParameters:
            - name: issue_key
              in: path
          operations:
            - name: get-issue
              method: GET

Enrolls child in Salesforce, provisions billing in Stripe, sends MailChimp confirmation, and logs in Snowflake.

naftiko: "0.5"
info:
  label: "Kids Program Enrollment Pipeline"
  description: "Enrolls child in Salesforce, provisions billing in Stripe, sends MailChimp confirmation, and logs in Snowflake."
  tags:
    - programs
    - salesforce
    - stripe
    - mailchimp
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: kids-program-enrollment-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Enrolls child in Salesforce, provisions billing in Stripe, sends MailChimp confirmation, and logs in Snowflake."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "salesforce.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "stripe.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "mailchimp.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "snowflake.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://api.salesforce.com/v1"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://api.mailchimp.com/v1"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Creates a corporate content post on LinkedIn and logs it in Salesforce.

naftiko: "0.5"
info:
  label: "LinkedIn Corporate Content Post"
  description: "Creates a corporate content post on LinkedIn and logs it in Salesforce."
  tags:
    - marketing
    - linkedin
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: corporate-social
      port: 8080
      tools:
        - name: post-corporate-content
          description: "Create a LinkedIn post and log it in Salesforce."
          inputParameters:
            - name: content_text
              in: body
              type: string
              description: "The post content."
            - name: campaign_id
              in: body
              type: string
              description: "The Salesforce campaign ID."
          steps:
            - name: create-post
              type: call
              call: "linkedin.create-post"
              with:
                text: "{{content_text}}"
            - name: log-post
              type: call
              call: "salesforce.create-activity"
              with:
                campaign_id: "{{campaign_id}}"
                platform: "linkedin"
                post_id: "{{create-post.post_id}}"
  consumes:
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: posts
          path: "/ugcPosts"
          operations:
            - name: create-post
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://lifetime.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: activities
          path: "/sobjects/CampaignActivity__c"
          operations:
            - name: create-activity
              method: POST

Creates and sends a member newsletter via MailChimp.

naftiko: "0.5"
info:
  label: "MailChimp Newsletter Campaign"
  description: "Creates and sends a member newsletter via MailChimp."
  tags:
    - marketing
    - email
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: email-marketing
      port: 8080
      tools:
        - name: send-newsletter
          description: "Create and send a MailChimp newsletter campaign."
          inputParameters:
            - name: campaign_name
              in: body
              type: string
              description: "The campaign name."
            - name: subject
              in: body
              type: string
              description: "The email subject."
            - name: template_id
              in: body
              type: string
              description: "The template ID."
            - name: list_id
              in: body
              type: string
              description: "The audience list ID."
          call: "mailchimp.create-campaign"
          with:
            name: "{{campaign_name}}"
            list_id: "{{list_id}}"
            template_id: "{{template_id}}"
            subject: "{{subject}}"
  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"
          operations:
            - name: create-campaign
              method: POST

Identifies at-risk members in Snowflake, creates retention campaigns in MailChimp, assigns outreach in Salesforce, and tracks in Google Sheets.

naftiko: "0.5"
info:
  label: "Member Churn Prevention Pipeline"
  description: "Identifies at-risk members in Snowflake, creates retention campaigns in MailChimp, assigns outreach in Salesforce, and tracks in Google Sheets."
  tags:
    - retention
    - snowflake
    - mailchimp
    - salesforce
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: member-churn-prevention-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Identifies at-risk members in Snowflake, creates retention campaigns in MailChimp, assigns outreach in Salesforce, and tracks in Google Sheets."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "snowflake.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "mailchimp.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "salesforce.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "google-sheets.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://api.mailchimp.com/v1"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://api.salesforce.com/v1"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Pulls member visit data from Salesforce, analyzes engagement patterns in Azure Databricks, creates retention risk scores, and alerts club managers via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Member Engagement Analytics Pipeline"
  description: "Pulls member visit data from Salesforce, analyzes engagement patterns in Azure Databricks, creates retention risk scores, and alerts club managers via Microsoft Teams."
  tags:
    - membership
    - analytics
    - salesforce
    - azure-databricks
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: member-engagement
      port: 8080
      tools:
        - name: analyze-engagement
          description: "Given a club code, analyze member engagement and identify at-risk members."
          inputParameters:
            - name: club_code
              in: body
              type: string
              description: "The club location code."
            - name: manager_email
              in: body
              type: string
              description: "The club manager email."
          steps:
            - name: get-visit-data
              type: call
              call: "salesforce.get-club-visits"
              with:
                club_code: "{{club_code}}"
            - name: analyze-patterns
              type: call
              call: "databricks.run-query"
              with:
                query: "SELECT * FROM member_engagement_scores WHERE club = '{{club_code}}' AND risk_level = 'high'"
            - name: create-outreach-tasks
              type: call
              call: "salesforce.create-task"
              with:
                subject: "At-risk member outreach: {{club_code}}"
                description: "{{analyze-patterns.at_risk_count}} members identified as high retention risk."
            - name: alert-manager
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{manager_email}}"
                text: "Member engagement alert for {{club_code}}: {{analyze-patterns.at_risk_count}} high-risk members. Average visits/week: {{analyze-patterns.avg_weekly_visits}}. Task created: {{create-outreach-tasks.task_id}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://lifetime.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: visits
          path: "/query/?q=SELECT+MemberId__c,VisitDate__c+FROM+ClubVisit__c+WHERE+Club__c='{{club_code}}'"
          inputParameters:
            - name: club_code
              in: query
          operations:
            - name: get-club-visits
              method: GET
        - name: tasks
          path: "/sobjects/Task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: databricks
      baseUri: "https://lifetime-analytics.azuredatabricks.net/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: sql-queries
          path: "/sql/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Aggregates behavior in Snowflake, scores via Azure ML, syncs to Salesforce, and triggers campaigns in MailChimp.

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

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

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

Retrieves a member profile from Salesforce by member ID, including membership tier, join date, home club, and contact information.

naftiko: "0.5"
info:
  label: "Member Profile Lookup"
  description: "Retrieves a member profile from Salesforce by member ID, including membership tier, join date, home club, and contact information."
  tags:
    - membership
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: membership
      port: 8080
      tools:
        - name: get-member-profile
          description: "Look up a member profile in Salesforce by member ID."
          inputParameters:
            - name: member_id
              in: body
              type: string
              description: "The member ID."
          call: "salesforce.get-member"
          with:
            member_id: "{{member_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.Name"
            - name: tier
              type: string
              mapping: "$.MembershipTier__c"
            - name: home_club
              type: string
              mapping: "$.HomeClub__c"
            - name: join_date
              type: string
              mapping: "$.JoinDate__c"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://lifetime.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: members
          path: "/sobjects/Member__c/{{member_id}}"
          inputParameters:
            - name: member_id
              in: path
          operations:
            - name: get-member
              method: GET

When a member refers a friend, creates the referral in Salesforce, sends a welcome email via MailChimp, applies the referral credit via Stripe, and notifies the member via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Member Referral Program Pipeline"
  description: "When a member refers a friend, creates the referral in Salesforce, sends a welcome email via MailChimp, applies the referral credit via Stripe, and notifies the member via Microsoft Teams."
  tags:
    - membership
    - marketing
    - salesforce
    - mailchimp
    - stripe
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: referral-program
      port: 8080
      tools:
        - name: process-referral
          description: "Given referral details, create the referral, send welcome email, apply credit, and notify."
          inputParameters:
            - name: referring_member_id
              in: body
              type: string
              description: "The referring member ID."
            - name: referred_name
              in: body
              type: string
              description: "The referred person's name."
            - name: referred_email
              in: body
              type: string
              description: "The referred person's email."
            - name: member_email
              in: body
              type: string
              description: "The referring member's email."
          steps:
            - name: create-referral
              type: call
              call: "salesforce.create-referral"
              with:
                member_id: "{{referring_member_id}}"
                referred_name: "{{referred_name}}"
                referred_email: "{{referred_email}}"
            - name: send-welcome
              type: call
              call: "mailchimp.send-transactional"
              with:
                template: "referral-welcome"
                recipient: "{{referred_email}}"
                referrer_name: "{{create-referral.referrer_name}}"
            - name: apply-credit
              type: call
              call: "stripe.create-credit"
              with:
                customer_id: "{{referring_member_id}}"
                amount: "5000"
                description: "Referral credit for {{referred_name}}"
            - name: notify-member
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{member_email}}"
                text: "Thank you for referring {{referred_name}}! A $50 credit has been applied to your account. Referral ID: {{create-referral.referral_id}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://lifetime.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: referrals
          path: "/sobjects/Referral__c"
          operations:
            - name: create-referral
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: basic
        username: "anystring"
        password: "$secrets.mailchimp_api_key"
      resources:
        - name: transactional
          path: "/messages/send-template"
          operations:
            - name: send-transactional
              method: POST
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_secret_key"
      resources:
        - name: credits
          path: "/customers/{{customer_id}}/balance_transactions"
          inputParameters:
            - name: customer_id
              in: path
          operations:
            - name: create-credit
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Tracks referrals in Salesforce, provisions rewards in Stripe, sends emails via MailChimp, and logs in Snowflake.

naftiko: "0.5"
info:
  label: "Member Referral Tracking Pipeline"
  description: "Tracks referrals in Salesforce, provisions rewards in Stripe, sends emails via MailChimp, and logs in Snowflake."
  tags:
    - referrals
    - salesforce
    - stripe
    - mailchimp
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: member-referral-tracking-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Tracks referrals in Salesforce, provisions rewards in Stripe, sends emails via MailChimp, and logs in Snowflake."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "salesforce.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "stripe.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "mailchimp.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "snowflake.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://api.salesforce.com/v1"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://api.mailchimp.com/v1"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Sends surveys via MailChimp, collects in Snowflake, analyzes in Tableau, and shares via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Member Satisfaction Survey Pipeline"
  description: "Sends surveys via MailChimp, collects in Snowflake, analyzes in Tableau, and shares via Microsoft Teams."
  tags:
    - feedback
    - mailchimp
    - snowflake
    - tableau
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: member-satisfaction-survey-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Sends surveys via MailChimp, collects in Snowflake, analyzes in Tableau, and shares via Microsoft Teams."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "mailchimp.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "snowflake.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "tableau.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "microsoft-teams.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: mailchimp
      baseUri: "https://api.mailchimp.com/v1"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: tableau
      baseUri: "https://api.tableau.com/v1"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: microsoft-teams
      baseUri: "https://api.microsoftteams.com/v1"
      authentication:
        type: bearer
        token: "$secrets.microsoft_teams_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Identifies members due for renewal from Salesforce, sends renewal reminders via MailChimp, creates follow-up tasks for retention specialists, and tracks results via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Membership Renewal Campaign Pipeline"
  description: "Identifies members due for renewal from Salesforce, sends renewal reminders via MailChimp, creates follow-up tasks for retention specialists, and tracks results via Microsoft Teams."
  tags:
    - membership
    - marketing
    - salesforce
    - mailchimp
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: membership-renewal
      port: 8080
      tools:
        - name: trigger-renewal-campaign
          description: "Given a club and date range, identify expiring memberships, send reminders, and create follow-ups."
          inputParameters:
            - name: club_code
              in: body
              type: string
              description: "The club location code."
            - name: days_until_expiry
              in: body
              type: string
              description: "Number of days until membership expiry to target."
          steps:
            - name: find-expiring
              type: call
              call: "salesforce.query-expiring-members"
              with:
                club_code: "{{club_code}}"
                days: "{{days_until_expiry}}"
            - name: send-reminders
              type: call
              call: "mailchimp.send-campaign"
              with:
                list_id: "renewal-reminders"
                template: "membership-renewal"
                recipients: "{{find-expiring.emails}}"
            - name: create-tasks
              type: call
              call: "salesforce.create-task"
              with:
                subject: "Membership renewal follow-up: {{club_code}}"
                description: "{{find-expiring.member_count}} members expiring within {{days_until_expiry}} days."
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "membership-retention"
                text: "Renewal campaign launched for {{club_code}}: {{find-expiring.member_count}} members targeted. Emails sent via MailChimp. Follow-up task: {{create-tasks.task_id}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://lifetime.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: members
          path: "/query/?q=SELECT+Id,Email__c+FROM+Member__c+WHERE+HomeClub__c='{{club_code}}'+AND+ExpiryDate__c<=NEXT_N_DAYS:{{days}}"
          inputParameters:
            - name: club_code
              in: query
            - name: days
              in: query
          operations:
            - name: query-expiring-members
              method: GET
        - name: tasks
          path: "/sobjects/Task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: basic
        username: "anystring"
        password: "$secrets.mailchimp_api_key"
      resources:
        - name: campaigns
          path: "/campaigns"
          operations:
            - name: send-campaign
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves fitness class schedule from the booking system.

naftiko: "0.5"
info:
  label: "Mindbody Class Schedule Lookup"
  description: "Retrieves fitness class schedule from the booking system."
  tags:
    - scheduling
    - mindbody
capability:
  exposes:
    - type: mcp
      namespace: mindbody-classes
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves fitness class schedule from the booking system."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "mindbody-classes.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: mindbody-classes
      baseUri: "https://api.mindbodyonline.com/public/v6"
      authentication:
        type: bearer
        token: "$secrets.mindbody_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Gets employee from Workday, provisions Azure AD, creates ServiceNow request, and sends welcome via Microsoft Outlook.

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

Creates member in Salesforce, provisions Stripe billing, triggers MailChimp welcome, and logs in Snowflake.

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

Retrieves Life Time mobile app performance metrics.

naftiko: "0.5"
info:
  label: "New Relic Mobile App Health"
  description: "Retrieves Life Time mobile app performance metrics."
  tags:
    - monitoring
    - new-relic
capability:
  exposes:
    - type: mcp
      namespace: newrelic-mobile
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves Life Time mobile app performance metrics."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "newrelic-mobile.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: newrelic-mobile
      baseUri: "https://api.newrelic.com/v2"
      authentication:
        type: bearer
        token: "$secrets.newrelic_api_key"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Retrieves digital platform health from New Relic.

naftiko: "0.5"
info:
  label: "New Relic Platform Health Lookup"
  description: "Retrieves digital platform health from New Relic."
  tags:
    - monitoring
    - new-relic
capability:
  exposes:
    - type: mcp
      namespace: newrelic-platform
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves digital platform health from New Relic."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "newrelic-platform.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: newrelic-platform
      baseUri: "https://api.newrelic.com/v2"
      authentication:
        type: bearer
        token: "$secrets.newrelic_api_key"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Creates program in Salesforce, assigns coach in Workday, sends enrollment via MailChimp, and tracks in Google Sheets.

naftiko: "0.5"
info:
  label: "Nutrition Program Pipeline"
  description: "Creates program in Salesforce, assigns coach in Workday, sends enrollment via MailChimp, and tracks in Google Sheets."
  tags:
    - programs
    - salesforce
    - workday
    - mailchimp
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: nutrition-program-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Creates program in Salesforce, assigns coach in Workday, sends enrollment via MailChimp, and tracks in Google Sheets."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "salesforce.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "workday.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "mailchimp.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "google-sheets.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://api.salesforce.com/v1"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: workday
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://api.mailchimp.com/v1"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Gets Figma design, routes Asana approval, archives in Box, and updates product catalog.

naftiko: "0.5"
info:
  label: "Retail Merchandise Design Pipeline"
  description: "Gets Figma design, routes Asana approval, archives in Box, and updates product catalog."
  tags:
    - creative
    - figma
    - asana
    - box
capability:
  exposes:
    - type: mcp
      namespace: packaging-design-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Gets Figma design, routes Asana approval, archives in Box, and updates product catalog."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "figma.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "asana.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "box.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "box.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: figma
      baseUri: "https://api.figma.com/v1"
      authentication:
        type: bearer
        token: "$secrets.figma_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: asana
      baseUri: "https://api.asana.com/v1"
      authentication:
        type: bearer
        token: "$secrets.asana_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: box
      baseUri: "https://api.box.com/v1"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Books session in scheduling system, creates Stripe charge, sends confirmation via MailChimp, and updates trainer schedule in Google Sheets.

naftiko: "0.5"
info:
  label: "Personal Training Booking Pipeline"
  description: "Books session in scheduling system, creates Stripe charge, sends confirmation via MailChimp, and updates trainer schedule in Google Sheets."
  tags:
    - training
    - stripe
    - mailchimp
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: personal-training-booking-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Books session in scheduling system, creates Stripe charge, sends confirmation via MailChimp, and updates trainer schedule in Google Sheets."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "stripe.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "mailchimp.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "google-sheets.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "google-sheets.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://api.mailchimp.com/v1"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

When a member books a personal training session, verifies trainer availability in Salesforce, creates the session booking, charges the member via Stripe, and sends confirmation via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Personal Training Session Pipeline"
  description: "When a member books a personal training session, verifies trainer availability in Salesforce, creates the session booking, charges the member via Stripe, and sends confirmation via Microsoft Teams."
  tags:
    - scheduling
    - membership
    - salesforce
    - stripe
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: personal-training
      port: 8080
      tools:
        - name: book-pt-session
          description: "Given member, trainer, and session details, verify availability, process payment, and confirm."
          inputParameters:
            - name: member_id
              in: body
              type: string
              description: "The member ID."
            - name: trainer_id
              in: body
              type: string
              description: "The trainer employee ID."
            - name: session_date
              in: body
              type: string
              description: "The session date in YYYY-MM-DD format."
            - name: session_type
              in: body
              type: string
              description: "The session type (e.g., strength, cardio, yoga)."
            - name: member_email
              in: body
              type: string
              description: "The member email."
          steps:
            - name: check-trainer
              type: call
              call: "salesforce.check-trainer-availability"
              with:
                trainer_id: "{{trainer_id}}"
                date: "{{session_date}}"
            - name: create-booking
              type: call
              call: "salesforce.create-pt-booking"
              with:
                member_id: "{{member_id}}"
                trainer_id: "{{trainer_id}}"
                date: "{{session_date}}"
                type: "{{session_type}}"
            - name: charge-member
              type: call
              call: "stripe.create-charge"
              with:
                customer_id: "{{member_id}}"
                amount: "{{check-trainer.session_rate}}"
                description: "PT session: {{session_type}} on {{session_date}}"
            - name: confirm-booking
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{member_email}}"
                text: "Personal training session confirmed! {{session_type}} with {{check-trainer.trainer_name}} on {{session_date}}. Booking: {{create-booking.booking_id}}. Payment: ${{check-trainer.session_rate}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://lifetime.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: trainer-availability
          path: "/sobjects/TrainerSchedule__c?trainer_id={{trainer_id}}&date={{date}}"
          inputParameters:
            - name: trainer_id
              in: query
            - name: date
              in: query
          operations:
            - name: check-trainer-availability
              method: GET
        - name: pt-bookings
          path: "/sobjects/PTBooking__c"
          operations:
            - name: create-pt-booking
              method: POST
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_secret_key"
      resources:
        - name: charges
          path: "/charges"
          operations:
            - name: create-charge
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Triggers a refresh of the club performance Power BI dataset.

naftiko: "0.5"
info:
  label: "Power BI Club Performance Dashboard Refresh"
  description: "Triggers a refresh of the club performance Power BI dataset."
  tags:
    - analytics
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: club-analytics
      port: 8080
      tools:
        - name: refresh-club-dashboard
          description: "Trigger a Power BI dataset refresh for the club performance dashboard."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset identifier."
          call: "powerbi.refresh-dataset"
          with:
            dataset_id: "{{dataset_id}}"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST

Retrieves Power BI membership KPI dashboard refresh status.

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

Retrieves Salesforce member account details by ID.

naftiko: "0.5"
info:
  label: "Salesforce Member Account Lookup"
  description: "Retrieves Salesforce member account details by ID."
  tags:
    - sales
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: sf-members
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves Salesforce member account details by ID."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "sf-members.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: sf-members
      baseUri: "https://lifetime.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Retrieves fitness equipment inventory from SAP by location.

naftiko: "0.5"
info:
  label: "SAP Equipment Inventory Lookup"
  description: "Retrieves fitness equipment inventory from SAP by location."
  tags:
    - inventory
    - sap
capability:
  exposes:
    - type: mcp
      namespace: sap-equipment
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves fitness equipment inventory from SAP by location."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "sap-equipment.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: sap-equipment
      baseUri: "https://lifetime-s4.sap.com/sap/opu/odata/sap/ZINVENTORY_SRV"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Looks up a SAP purchase order by number for equipment or supply procurement.

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

Retrieves purchase requisition details from SAP.

naftiko: "0.5"
info:
  label: "SAP Purchase Requisition Lookup"
  description: "Retrieves purchase requisition details from SAP."
  tags:
    - procurement
    - sap
capability:
  exposes:
    - type: mcp
      namespace: sap-requisitions
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves purchase requisition details from SAP."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "sap-requisitions.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: sap-requisitions
      baseUri: "https://lifetime-s4.sap.com/sap/opu/odata/sap/ZPURCHASE_SRV"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Creates promotion in Salesforce, sends MailChimp campaign, tracks in Google Sheets, and promotes on Instagram.

naftiko: "0.5"
info:
  label: "Seasonal Promotion Pipeline"
  description: "Creates promotion in Salesforce, sends MailChimp campaign, tracks in Google Sheets, and promotes on Instagram."
  tags:
    - promotions
    - salesforce
    - mailchimp
    - google-sheets
    - instagram
capability:
  exposes:
    - type: mcp
      namespace: seasonal-promotion-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Creates promotion in Salesforce, sends MailChimp campaign, tracks in Google Sheets, and promotes on Instagram."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "salesforce.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "mailchimp.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "google-sheets.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "instagram.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://api.salesforce.com/v1"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://api.mailchimp.com/v1"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: instagram
      baseUri: "https://api.instagram.com/v1"
      authentication:
        type: bearer
        token: "$secrets.instagram_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Detects via Dynatrace, creates Jira tickets, alerts via Slack, and triggers Azure DevOps patches.

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

Pulls from Google Search Console, updates website, and reports via Google Sheets.

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

Retrieves a ServiceNow incident by number and returns priority, status, and assigned group.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Lookup"
  description: "Retrieves a ServiceNow incident by number and returns priority, status, and assigned group."
  tags:
    - it-operations
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: it-support
      port: 8080
      tools:
        - name: get-incident
          description: "Look up a ServiceNow incident by number."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number."
          call: "servicenow.get-incident"
          with:
            incident_number: "{{incident_number}}"
          outputParameters:
            - name: priority
              type: string
              mapping: "$.result.priority"
            - name: state
              type: string
              mapping: "$.result.state"
            - name: assigned_to
              type: string
              mapping: "$.result.assigned_to.display_value"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://lifetime.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident?sysparm_query=number={{incident_number}}"
          inputParameters:
            - name: incident_number
              in: query
          operations:
            - name: get-incident
              method: GET

Sends a message to a Slack club operations channel.

naftiko: "0.5"
info:
  label: "Slack Club Ops Message Sender"
  description: "Sends a message to a Slack club operations channel."
  tags:
    - communications
    - slack
capability:
  exposes:
    - type: mcp
      namespace: slack-clubops
      port: 8080
      tools:
        - name: get-data
          description: "Sends a message to a Slack club operations channel."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "slack-clubops.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: slack-clubops
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Queries member engagement analytics from Snowflake.

naftiko: "0.5"
info:
  label: "Snowflake Member Analytics Query"
  description: "Queries member engagement analytics from Snowflake."
  tags:
    - analytics
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: snowflake-members
      port: 8080
      tools:
        - name: get-data
          description: "Queries member engagement analytics from Snowflake."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "snowflake-members.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: snowflake-members
      baseUri: "https://lifetime.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Creates HubSpot campaign, schedules on Instagram and Facebook, tracks in Google Analytics, and reports in Google Sheets.

naftiko: "0.5"
info:
  label: "Social Media Campaign Pipeline"
  description: "Creates HubSpot campaign, schedules on Instagram and Facebook, tracks in Google Analytics, and reports in Google Sheets."
  tags:
    - social-media
    - hubspot
    - instagram
    - facebook
    - google-analytics
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: social-media-campaign-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Creates HubSpot campaign, schedules on Instagram and Facebook, tracks in Google Analytics, and reports in Google Sheets."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "hubspot.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "instagram.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "facebook.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "google-sheets.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubspot.com/v1"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: instagram
      baseUri: "https://api.instagram.com/v1"
      authentication:
        type: bearer
        token: "$secrets.instagram_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: facebook
      baseUri: "https://api.facebook.com/v1"
      authentication:
        type: bearer
        token: "$secrets.facebook_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-analytics
      baseUri: "https://api.googleanalytics.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Creates a promotional campaign across Instagram and Facebook, tracks with Google Tag Manager, and reports to the marketing team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Social Media Promotion Pipeline"
  description: "Creates a promotional campaign across Instagram and Facebook, tracks with Google Tag Manager, and reports to the marketing team via Microsoft Teams."
  tags:
    - marketing
    - social-media
    - instagram
    - facebook
    - google-tag-manager
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: social-promotions
      port: 8080
      tools:
        - name: launch-promotion
          description: "Given promotion details, post to social platforms, set up tracking, and notify marketing."
          inputParameters:
            - name: promotion_name
              in: body
              type: string
              description: "The promotion name."
            - name: content_text
              in: body
              type: string
              description: "The post content."
            - name: offer_code
              in: body
              type: string
              description: "The promotional offer code."
          steps:
            - name: post-instagram
              type: call
              call: "instagram.create-post"
              with:
                caption: "{{content_text}} Use code {{offer_code}}! #LifeTime #Fitness"
            - name: post-facebook
              type: call
              call: "facebook.create-post"
              with:
                message: "{{content_text}} Use code {{offer_code}}!"
            - name: setup-tracking
              type: call
              call: "gtm.create-tag"
              with:
                tag_name: "promo_{{offer_code}}"
            - name: notify-marketing
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "marketing"
                text: "Promotion {{promotion_name}} launched. Offer code: {{offer_code}}. Instagram: {{post-instagram.post_id}}. Facebook: {{post-facebook.post_id}}."
  consumes:
    - type: http
      namespace: instagram
      baseUri: "https://graph.facebook.com/v17.0"
      authentication:
        type: bearer
        token: "$secrets.meta_token"
      resources:
        - name: posts
          path: "/{{ig_user_id}}/media"
          operations:
            - name: create-post
              method: POST
    - type: http
      namespace: facebook
      baseUri: "https://graph.facebook.com/v17.0"
      authentication:
        type: bearer
        token: "$secrets.meta_token"
      resources:
        - name: posts
          path: "/{{page_id}}/feed"
          operations:
            - name: create-post
              method: POST
    - type: http
      namespace: gtm
      baseUri: "https://www.googleapis.com/tagmanager/v2"
      authentication:
        type: bearer
        token: "$secrets.gtm_token"
      resources:
        - name: tags
          path: "/accounts/{{account_id}}/containers/{{container_id}}/workspaces/{{workspace_id}}/tags"
          operations:
            - name: create-tag
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When a member books a spa service, checks therapist availability in Salesforce, creates the booking, processes payment via Stripe, and sends confirmation via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Spa and Salon Booking Pipeline"
  description: "When a member books a spa service, checks therapist availability in Salesforce, creates the booking, processes payment via Stripe, and sends confirmation via Microsoft Teams."
  tags:
    - scheduling
    - membership
    - salesforce
    - stripe
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: spa-services
      port: 8080
      tools:
        - name: book-spa-service
          description: "Given member and service details, check availability, process payment, and confirm."
          inputParameters:
            - name: member_id
              in: body
              type: string
              description: "The member ID."
            - name: service_type
              in: body
              type: string
              description: "The spa service type."
            - name: preferred_date
              in: body
              type: string
              description: "The preferred date."
            - name: club_code
              in: body
              type: string
              description: "The club location code."
            - name: member_email
              in: body
              type: string
              description: "The member email."
          steps:
            - name: check-availability
              type: call
              call: "salesforce.check-spa-availability"
              with:
                club_code: "{{club_code}}"
                service_type: "{{service_type}}"
                date: "{{preferred_date}}"
            - name: create-booking
              type: call
              call: "salesforce.create-spa-booking"
              with:
                member_id: "{{member_id}}"
                service_type: "{{service_type}}"
                date: "{{preferred_date}}"
                therapist: "{{check-availability.therapist_name}}"
            - name: process-payment
              type: call
              call: "stripe.create-charge"
              with:
                customer_id: "{{member_id}}"
                amount: "{{check-availability.service_price}}"
                description: "Spa: {{service_type}} on {{preferred_date}}"
            - name: confirm
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{member_email}}"
                text: "Spa booking confirmed! {{service_type}} with {{check-availability.therapist_name}} on {{preferred_date}} at Life Time {{club_code}}. Booking: {{create-booking.booking_id}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://lifetime.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: spa-availability
          path: "/sobjects/SpaSchedule__c?club={{club_code}}&service={{service_type}}&date={{date}}"
          inputParameters:
            - name: club_code
              in: query
            - name: service_type
              in: query
            - name: date
              in: query
          operations:
            - name: check-spa-availability
              method: GET
        - name: spa-bookings
          path: "/sobjects/SpaBooking__c"
          operations:
            - name: create-spa-booking
              method: POST
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_secret_key"
      resources:
        - name: charges
          path: "/charges"
          operations:
            - name: create-charge
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Analyzes booking patterns in Snowflake, optimizes scheduling, updates Google Sheets capacity tracker, and promotes via MailChimp.

naftiko: "0.5"
info:
  label: "Spa Service Booking Optimization Pipeline"
  description: "Analyzes booking patterns in Snowflake, optimizes scheduling, updates Google Sheets capacity tracker, and promotes via MailChimp."
  tags:
    - spa
    - snowflake
    - google-sheets
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: spa-service-booking-optimization-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Analyzes booking patterns in Snowflake, optimizes scheduling, updates Google Sheets capacity tracker, and promotes via MailChimp."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "snowflake.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "google-sheets.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "mailchimp.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "mailchimp.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://api.mailchimp.com/v1"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Retrieves a Square POS transaction for in-club purchases.

naftiko: "0.5"
info:
  label: "Square POS Transaction Lookup"
  description: "Retrieves a Square POS transaction for in-club purchases."
  tags:
    - payments
    - square
capability:
  exposes:
    - type: mcp
      namespace: square-pos
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves a Square POS transaction for in-club purchases."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "square-pos.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: square-pos
      baseUri: "https://connect.squareup.com/v2"
      authentication:
        type: bearer
        token: "$secrets.square_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Retrieves a Stripe payment by charge ID, returning amount, status, and customer details.

naftiko: "0.5"
info:
  label: "Stripe Payment Lookup"
  description: "Retrieves a Stripe payment by charge ID, returning amount, status, and customer details."
  tags:
    - membership
    - payments
    - stripe
capability:
  exposes:
    - type: mcp
      namespace: payments
      port: 8080
      tools:
        - name: get-payment
          description: "Look up a Stripe payment by charge ID."
          inputParameters:
            - name: charge_id
              in: body
              type: string
              description: "The Stripe charge ID."
          call: "stripe.get-charge"
          with:
            charge_id: "{{charge_id}}"
          outputParameters:
            - name: amount
              type: string
              mapping: "$.amount"
            - name: status
              type: string
              mapping: "$.status"
            - name: customer
              type: string
              mapping: "$.customer"
  consumes:
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_secret_key"
      resources:
        - name: charges
          path: "/charges/{{charge_id}}"
          inputParameters:
            - name: charge_id
              in: path
          operations:
            - name: get-charge
              method: GET

Pulls membership billing data from Stripe, reconciles with Salesforce records, identifies discrepancies in Azure Databricks, and notifies the finance team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Subscription Billing Reconciliation Pipeline"
  description: "Pulls membership billing data from Stripe, reconciles with Salesforce records, identifies discrepancies in Azure Databricks, and notifies the finance team via Microsoft Teams."
  tags:
    - membership
    - finance
    - stripe
    - salesforce
    - azure-databricks
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: billing-reconciliation
      port: 8080
      tools:
        - name: reconcile-billing
          description: "Given a billing period, reconcile Stripe charges with Salesforce member records."
          inputParameters:
            - name: billing_period
              in: body
              type: string
              description: "The billing period (e.g., 2025-12)."
          steps:
            - name: get-stripe-data
              type: call
              call: "stripe.list-charges"
              with:
                period: "{{billing_period}}"
            - name: get-sf-data
              type: call
              call: "salesforce.get-billing-records"
              with:
                period: "{{billing_period}}"
            - name: find-discrepancies
              type: call
              call: "databricks.run-query"
              with:
                query: "SELECT * FROM billing_reconciliation WHERE period = '{{billing_period}}' AND status = 'discrepancy'"
            - name: notify-finance
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "finance"
                text: "Billing reconciliation for {{billing_period}}: Stripe charges: {{get-stripe-data.total_count}}. SF records: {{get-sf-data.total_count}}. Discrepancies: {{find-discrepancies.discrepancy_count}}."
  consumes:
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_secret_key"
      resources:
        - name: charges
          path: "/charges?created[gte]={{period_start}}&created[lte]={{period_end}}"
          operations:
            - name: list-charges
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://lifetime.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: billing
          path: "/query/?q=SELECT+Id,Amount__c+FROM+BillingRecord__c+WHERE+Period__c='{{period}}'"
          inputParameters:
            - name: period
              in: query
          operations:
            - name: get-billing-records
              method: GET
    - type: http
      namespace: databricks
      baseUri: "https://lifetime-analytics.azuredatabricks.net/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: sql-queries
          path: "/sql/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Aggregates SAP data, scores in Snowflake, creates Google Sheets scorecards, and distributes via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Supplier Performance Pipeline"
  description: "Aggregates SAP data, scores in Snowflake, creates Google Sheets scorecards, and distributes via Microsoft Outlook."
  tags:
    - procurement
    - sap
    - snowflake
    - google-sheets
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: supplier-performance-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Aggregates SAP data, scores in Snowflake, creates Google Sheets scorecards, and distributes via Microsoft Outlook."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "sap.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "snowflake.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "google-sheets.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "microsoft-outlook.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://api.sap.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: microsoft-outlook
      baseUri: "https://api.microsoftoutlook.com/v1"
      authentication:
        type: bearer
        token: "$secrets.microsoft_outlook_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

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

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

Retrieves a Tableau dashboard embed URL for club analytics.

naftiko: "0.5"
info:
  label: "Tableau Club Analytics Dashboard"
  description: "Retrieves a Tableau dashboard embed URL for club analytics."
  tags:
    - analytics
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: club-dashboards
      port: 8080
      tools:
        - name: get-club-dashboard
          description: "Retrieve the embed URL for a Tableau club analytics dashboard."
          inputParameters:
            - name: workbook_name
              in: body
              type: string
              description: "The Tableau workbook name."
          call: "tableau.get-workbook"
          with:
            workbook_name: "{{workbook_name}}"
          outputParameters:
            - name: embed_url
              type: string
              mapping: "$.workbook.contentUrl"
  consumes:
    - type: http
      namespace: tableau
      baseUri: "https://lifetime-tableau.online/api/3.14"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: workbooks
          path: "/sites/{{site_id}}/workbooks?filter=name:eq:{{workbook_name}}"
          inputParameters:
            - name: workbook_name
              in: query
          operations:
            - name: get-workbook
              method: GET

Retrieves Tableau club performance analytics dashboard view.

naftiko: "0.5"
info:
  label: "Tableau Club Analytics Lookup"
  description: "Retrieves Tableau club performance analytics dashboard view."
  tags:
    - analytics
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: tableau-clubs
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves Tableau club performance analytics dashboard view."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "tableau-clubs.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: tableau-clubs
      baseUri: "https://tableau.lifetime.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Posts jobs to Indeed, syncs to Workday, schedules via Zoom, and notifies via Slack.

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

Queries membership trend data from Teradata.

naftiko: "0.5"
info:
  label: "Teradata Membership Insights Query"
  description: "Queries membership trend data from Teradata."
  tags:
    - analytics
    - teradata
capability:
  exposes:
    - type: mcp
      namespace: teradata-members
      port: 8080
      tools:
        - name: get-data
          description: "Queries membership trend data from Teradata."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "teradata-members.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: teradata-members
      baseUri: "https://lifetime.teradata.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.teradata_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

When a trainer completes a certification, updates their record in Workday, creates a recognition post on Microsoft Teams, and updates their profile in Salesforce.

naftiko: "0.5"
info:
  label: "Trainer Certification Pipeline"
  description: "When a trainer completes a certification, updates their record in Workday, creates a recognition post on Microsoft Teams, and updates their profile in Salesforce."
  tags:
    - hr
    - training
    - workday
    - microsoft-teams
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: trainer-certifications
      port: 8080
      tools:
        - name: process-certification
          description: "Given trainer and certification details, update records and announce."
          inputParameters:
            - name: trainer_id
              in: body
              type: string
              description: "The trainer Workday ID."
            - name: certification_name
              in: body
              type: string
              description: "The certification name."
            - name: certification_date
              in: body
              type: string
              description: "The certification date."
          steps:
            - name: update-workday
              type: call
              call: "workday.update-certification"
              with:
                worker_id: "{{trainer_id}}"
                certification: "{{certification_name}}"
                date: "{{certification_date}}"
            - name: update-salesforce
              type: call
              call: "salesforce.update-trainer-profile"
              with:
                trainer_id: "{{trainer_id}}"
                certification: "{{certification_name}}"
            - name: announce
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "trainer-team"
                text: "Congratulations! {{update-workday.trainer_name}} has earned {{certification_name}} certification on {{certification_date}}!"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: certifications
          path: "/workers/{{worker_id}}/certifications"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: update-certification
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://lifetime.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: trainers
          path: "/sobjects/Trainer__c/{{trainer_id}}"
          inputParameters:
            - name: trainer_id
              in: path
          operations:
            - name: update-trainer-profile
              method: PATCH
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

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

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

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

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

When a vendor invoice arrives, validates against the SAP purchase order, routes for approval in Workday, and notifies accounts payable via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Vendor Invoice Processing Pipeline"
  description: "When a vendor invoice arrives, validates against the SAP purchase order, routes for approval in Workday, and notifies accounts payable via Microsoft Teams."
  tags:
    - finance
    - accounts-payable
    - sap
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: invoice-processing
      port: 8080
      tools:
        - name: process-invoice
          description: "Given an invoice and PO number, validate, route for approval, and notify AP."
          inputParameters:
            - name: invoice_number
              in: body
              type: string
              description: "The vendor invoice number."
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number."
            - name: amount
              in: body
              type: string
              description: "The invoice amount."
          steps:
            - name: validate-po
              type: call
              call: "sap.get-po"
              with:
                po_number: "{{po_number}}"
            - name: route-approval
              type: call
              call: "workday.submit-approval"
              with:
                amount: "{{amount}}"
                description: "Invoice {{invoice_number}} for PO {{po_number}}"
            - name: notify-ap
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "accounts-payable"
                text: "Invoice {{invoice_number}} for PO {{po_number}}. Amount: ${{amount}}. Vendor: {{validate-po.Supplier.CompanyName}}. Approval routed."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://lifetime-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{po_number}}')"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: approvals
          path: "/approvals"
          operations:
            - name: submit-approval
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

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

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

Retrieves employee benefits enrollment from Workday.

naftiko: "0.5"
info:
  label: "Workday Employee Benefits Lookup"
  description: "Retrieves employee benefits enrollment from Workday."
  tags:
    - hr
    - workday
capability:
  exposes:
    - type: mcp
      namespace: workday-benefits
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves employee benefits enrollment from Workday."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "workday-benefits.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: workday-benefits
      baseUri: "https://wd5-impl-services1.workday.com/ccx/service/lifetime"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Looks up an employee in Workday by employee ID and returns name, department, title, and email.

naftiko: "0.5"
info:
  label: "Workday Employee Directory Lookup"
  description: "Looks up an employee in Workday by employee ID and returns name, department, title, and email."
  tags:
    - hr
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hr-directory
      port: 8080
      tools:
        - name: get-employee
          description: "Look up an employee by Workday worker ID."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID."
          call: "workday.get-worker"
          with:
            worker_id: "{{employee_id}}"
          outputParameters:
            - name: full_name
              type: string
              mapping: "$.worker.descriptor"
            - name: department
              type: string
              mapping: "$.worker.primarySupervisoryOrganization.descriptor"
            - name: title
              type: string
              mapping: "$.worker.businessTitle"
  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

Uploads to YouTube, promotes via HubSpot, updates Airtable calendar, and notifies via Microsoft Teams.

naftiko: "0.5"
info:
  label: "YouTube Fitness Content Pipeline"
  description: "Uploads to YouTube, promotes via HubSpot, updates Airtable calendar, and notifies via Microsoft Teams."
  tags:
    - content
    - youtube
    - hubspot
    - airtable
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: youtube-fitness-content-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Uploads to YouTube, promotes via HubSpot, updates Airtable calendar, and notifies via Microsoft Teams."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "youtube.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "hubspot.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "airtable.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "microsoft-teams.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: youtube
      baseUri: "https://api.youtube.com/v1"
      authentication:
        type: bearer
        token: "$secrets.youtube_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubspot.com/v1"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: airtable
      baseUri: "https://api.airtable.com/v1"
      authentication:
        type: bearer
        token: "$secrets.airtable_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: microsoft-teams
      baseUri: "https://api.microsoftteams.com/v1"
      authentication:
        type: bearer
        token: "$secrets.microsoft_teams_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Retrieves a Zendesk support ticket by ID for the member support team.

naftiko: "0.5"
info:
  label: "Zendesk Member Support Ticket Lookup"
  description: "Retrieves a Zendesk support ticket by ID for the member support team."
  tags:
    - membership
    - zendesk
capability:
  exposes:
    - type: mcp
      namespace: member-support
      port: 8080
      tools:
        - name: get-support-ticket
          description: "Look up a Zendesk support ticket by ticket ID."
          inputParameters:
            - name: ticket_id
              in: body
              type: string
              description: "The Zendesk ticket ID."
          call: "zendesk.get-ticket"
          with:
            ticket_id: "{{ticket_id}}"
          outputParameters:
            - name: subject
              type: string
              mapping: "$.ticket.subject"
            - name: status
              type: string
              mapping: "$.ticket.status"
            - name: priority
              type: string
              mapping: "$.ticket.priority"
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://lifetime.zendesk.com/api/v2"
      authentication:
        type: basic
        username: "$secrets.zendesk_user"
        password: "$secrets.zendesk_token"
      resources:
        - name: tickets
          path: "/tickets/{{ticket_id}}"
          inputParameters:
            - name: ticket_id
              in: path
          operations:
            - name: get-ticket
              method: GET