DoorDash Capabilities

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

Sort
Expand

Fetches experiment results from the DoorDash experimentation platform, queries Snowflake for statistical metrics, generates an analysis summary via OpenAI, and posts the results to the product team's Slack channel.

naftiko: "0.5"
info:
  label: "A/B Experiment Results Analyzer"
  description: "Fetches experiment results from the DoorDash experimentation platform, queries Snowflake for statistical metrics, generates an analysis summary via OpenAI, and posts the results to the product team's Slack channel."
  tags:
    - ml-ops
    - analytics
    - snowflake
    - openai
    - slack
    - experimentation
capability:
  exposes:
    - type: mcp
      namespace: experimentation
      port: 8080
      tools:
        - name: analyze-experiment
          description: "Given an experiment ID, pull results, run statistical analysis, generate a summary, and share with the team."
          inputParameters:
            - name: experiment_id
              in: body
              type: string
              description: "The DoorDash experiment identifier."
            - name: notification_channel
              in: body
              type: string
              description: "The Slack channel to post results to."
          steps:
            - name: get-experiment
              type: call
              call: "doordash-experiments.get-experiment"
              with:
                experiment_id: "{{experiment_id}}"
            - name: query-metrics
              type: call
              call: "snowflake.execute-query"
              with:
                warehouse: "ANALYTICS_WH"
                database: "DOORDASH_EXPERIMENTS"
                schema: "RESULTS"
                statement: "SELECT variant, COUNT(*) as n, AVG(conversion_rate) as avg_conv, STDDEV(conversion_rate) as std_conv FROM experiment_results WHERE experiment_id = '{{experiment_id}}' GROUP BY variant"
            - name: generate-analysis
              type: call
              call: "openai.create-chat-completion"
              with:
                model: "gpt-4o"
                messages:
                  - role: "system"
                    content: "You are a data scientist at DoorDash. Analyze A/B test results and provide a clear recommendation."
                  - role: "user"
                    content: "Experiment: {{get-experiment.name}}. Hypothesis: {{get-experiment.hypothesis}}. Results: {{query-metrics.data}}."
            - name: post-results
              type: call
              call: "slack.post-message"
              with:
                channel: "{{notification_channel}}"
                text: "Experiment Results: {{get-experiment.name}}\n\n{{generate-analysis.choices[0].message.content}}"
  consumes:
    - type: http
      namespace: doordash-experiments
      baseUri: "https://api.doordash.com/experiments/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_experiments_token"
      resources:
        - name: experiments
          path: "/experiments/{{experiment_id}}"
          inputParameters:
            - name: experiment_id
              in: path
          operations:
            - name: get-experiment
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://doordash.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_jwt_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: openai
      baseUri: "https://api.openai.com/v1"
      authentication:
        type: bearer
        token: "$secrets.openai_api_key"
      resources:
        - name: chat-completions
          path: "/chat/completions"
          operations:
            - name: create-chat-completion
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: chat
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Recovers abandoned carts by identifying incomplete orders, sending reminders via Braze, and tracking conversion.

naftiko: "0.5"
info:
  label: "Abandoned Cart Recovery Pipeline"
  description: "Recovers abandoned carts by identifying incomplete orders, sending reminders via Braze, and tracking conversion."
  tags:
    - marketing
    - braze
    - amplitude
    - segment
capability:
  exposes:
    - type: mcp
      namespace: abandoned-cart-recovery
      port: 8080
      tools:
        - name: run-abandoned-cart-recovery-pipeline
          description: "Recovers abandoned carts by identifying incomplete orders, sending reminders via Braze, and tracking conversion."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "braze.trigger-campaign"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "amplitude.get-events"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "segment.track-event"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: braze
      baseUri: "https://rest.iad-01.braze.com"
      authentication:
        type: bearer
        token: "$secrets.braze_api_key"
      resources:
        - name: campaigns
          path: "/campaigns/trigger/send"
          operations:
            - name: trigger-campaign
              method: POST
    - type: http
      namespace: amplitude
      baseUri: "https://amplitude.com/api/2"
      authentication:
        type: bearer
        token: "$secrets.amplitude_api_key"
      resources:
        - name: events
          path: "/events"
          operations:
            - name: get-events
              method: GET
    - type: http
      namespace: segment
      baseUri: "https://api.segment.io/v1"
      authentication:
        type: bearer
        token: "$secrets.segment_write_key"
      resources:
        - name: events
          path: "/track"
          operations:
            - name: track-event
              method: POST

Retrieves user behavior analytics from Amplitude for a given user.

naftiko: "0.5"
info:
  label: "Amplitude User Behavior Lookup"
  description: "Retrieves user behavior analytics from Amplitude for a given user."
  tags:
    - analytics
    - amplitude
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves user behavior analytics from Amplitude for a given user."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary identifier."
          call: "amplitude.get-data"
          with:
            input_id: "{{input_id}}"
  consumes:
    - type: http
      namespace: amplitude
      baseUri: "https://api.doordash.com/analytics/v1"
      authentication:
        type: bearer
        token: "$secrets.amplitude_token"
      resources:
        - name: data
          path: "/{{input_id}}"
          inputParameters:
            - name: input_id
              in: path
          operations:
            - name: get-data
              method: GET

Sends a message to an AWS SQS queue for asynchronous processing.

naftiko: "0.5"
info:
  label: "AWS SQS Message Sender"
  description: "Sends a message to an AWS SQS queue for asynchronous processing."
  tags:
    - infrastructure
    - aws-sqs
capability:
  exposes:
    - type: mcp
      namespace: infrastructure
      port: 8080
      tools:
        - name: get-data
          description: "Sends a message to an AWS SQS queue for asynchronous processing."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary identifier."
          call: "aws_sqs.get-data"
          with:
            input_id: "{{input_id}}"
  consumes:
    - type: http
      namespace: aws_sqs
      baseUri: "https://api.doordash.com/infrastructure/v1"
      authentication:
        type: bearer
        token: "$secrets.aws_sqs_token"
      resources:
        - name: data
          path: "/{{input_id}}"
          inputParameters:
            - name: input_id
              in: path
          operations:
            - name: get-data
              method: GET

Sends a push notification to a customer segment via Braze, used for re-engagement, order updates, and promotional campaigns.

naftiko: "0.5"
info:
  label: "Braze Push Notification Sender"
  description: "Sends a push notification to a customer segment via Braze, used for re-engagement, order updates, and promotional campaigns."
  tags:
    - marketing
    - notifications
    - braze
capability:
  exposes:
    - type: mcp
      namespace: push-notifications
      port: 8080
      tools:
        - name: send-push-notification
          description: "Send a push notification to a Braze user segment."
          inputParameters:
            - name: segment_id
              in: body
              type: string
              description: "The Braze audience segment identifier."
            - name: title
              in: body
              type: string
              description: "The push notification title."
            - name: message
              in: body
              type: string
              description: "The push notification message body."
          call: "braze.send-messages"
          with:
            segment_id: "{{segment_id}}"
            messages:
              apple_push:
                alert:
                  title: "{{title}}"
                  body: "{{message}}"
              android_push:
                title: "{{title}}"
                alert: "{{message}}"
  consumes:
    - type: http
      namespace: braze
      baseUri: "https://rest.iad-01.braze.com"
      authentication:
        type: bearer
        token: "$secrets.braze_api_key"
      resources:
        - name: messages
          path: "/messages/send"
          operations:
            - name: send-messages
              method: POST

Coordinates catering orders by confirming with the merchant, scheduling the Dasher, and sending instructions.

naftiko: "0.5"
info:
  label: "Catering Order Coordination Pipeline"
  description: "Coordinates catering orders by confirming with the merchant, scheduling the Dasher, and sending instructions."
  tags:
    - catering
    - merchant
    - dispatch
    - twilio
capability:
  exposes:
    - type: mcp
      namespace: catering-order-coordination
      port: 8080
      tools:
        - name: run-catering-order-coordination-pipelin
          description: "Coordinates catering orders by confirming with the merchant, scheduling the Dasher, and sending instructions."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "merchant.get-store"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "dispatch.create-delivery"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "twilio.send-sms"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: merchant
      baseUri: "https://api.doordash.com/merchant/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_merchant_token"
      resources:
        - name: stores
          path: "/stores"
          operations:
            - name: get-store
              method: GET
    - type: http
      namespace: dispatch
      baseUri: "https://api.doordash.com/dispatch/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_dispatch_token"
      resources:
        - name: deliveries
          path: "/deliveries"
          operations:
            - name: create-delivery
              method: POST
    - type: http
      namespace: twilio
      baseUri: "https://api.twilio.com/2010-04-01"
      authentication:
        type: bearer
        token: "$secrets.twilio_token"
      resources:
        - name: messages
          path: "/Messages.json"
          operations:
            - name: send-sms
              method: POST

Retrieves marketing content from Contentful CMS for in-app promotions.

naftiko: "0.5"
info:
  label: "Contentful CMS Content Lookup"
  description: "Retrieves marketing content from Contentful CMS for in-app promotions."
  tags:
    - marketing
    - contentful
capability:
  exposes:
    - type: mcp
      namespace: marketing
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves marketing content from Contentful CMS for in-app promotions."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary identifier."
          call: "contentful.get-data"
          with:
            input_id: "{{input_id}}"
  consumes:
    - type: http
      namespace: contentful
      baseUri: "https://api.doordash.com/marketing/v1"
      authentication:
        type: bearer
        token: "$secrets.contentful_token"
      resources:
        - name: data
          path: "/{{input_id}}"
          inputParameters:
            - name: input_id
              in: path
          operations:
            - name: get-data
              method: GET

Standardizes customer addresses by geocoding via Google Maps, validating, and updating the database.

naftiko: "0.5"
info:
  label: "Customer Address Standardization Pipeline"
  description: "Standardizes customer addresses by geocoding via Google Maps, validating, and updating the database."
  tags:
    - logistics
    - google-maps
    - customer
    - apache-kafka
capability:
  exposes:
    - type: mcp
      namespace: customer-address-standardization
      port: 8080
      tools:
        - name: run-customer-address-standardization-pi
          description: "Standardizes customer addresses by geocoding via Google Maps, validating, and updating the database."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "googlemaps.geocode"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "kafka.publish-event"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "segment.track-event"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: googlemaps
      baseUri: "https://maps.googleapis.com/maps/api"
      authentication:
        type: bearer
        token: "$secrets.google_maps_api_key"
      resources:
        - name: geocode
          path: "/geocode/json"
          operations:
            - name: geocode
              method: GET
    - type: http
      namespace: kafka
      baseUri: "https://kafka.doordash.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kafka_token"
      resources:
        - name: topics
          path: "/topics"
          operations:
            - name: publish-event
              method: POST
    - type: http
      namespace: segment
      baseUri: "https://api.segment.io/v1"
      authentication:
        type: bearer
        token: "$secrets.segment_write_key"
      resources:
        - name: events
          path: "/track"
          operations:
            - name: track-event
              method: POST

Validates a customer's delivery address using Google Maps Place Details, checking for completeness and geocodability before order placement.

naftiko: "0.5"
info:
  label: "Customer Address Validation"
  description: "Validates a customer's delivery address using Google Maps Place Details, checking for completeness and geocodability before order placement."
  tags:
    - order-management
    - google-maps
    - validation
capability:
  exposes:
    - type: mcp
      namespace: address-validation
      port: 8080
      tools:
        - name: validate-delivery-address
          description: "Validate a delivery address using Google Maps geocoding."
          inputParameters:
            - name: address
              in: body
              type: string
              description: "The delivery address to validate."
          call: "google-maps.geocode"
          with:
            address: "{{address}}"
          outputParameters:
            - name: is_valid
              type: boolean
              mapping: "$.status"
            - name: formatted_address
              type: string
              mapping: "$.results[0].formatted_address"
            - name: lat
              type: number
              mapping: "$.results[0].geometry.location.lat"
            - name: lng
              type: number
              mapping: "$.results[0].geometry.location.lng"
            - name: address_components
              type: array
              mapping: "$.results[0].address_components"
  consumes:
    - type: http
      namespace: google-maps
      baseUri: "https://maps.googleapis.com/maps/api"
      authentication:
        type: apiKey
        name: key
        in: query
        value: "$secrets.google_maps_api_key"
      resources:
        - name: geocode
          path: "/geocode/json"
          operations:
            - name: geocode
              method: GET

Auto-resolves customer issues by classifying via ML, applying resolution actions, and notifying via Twilio SMS.

naftiko: "0.5"
info:
  label: "Customer Issue Auto-Resolution Pipeline"
  description: "Auto-resolves customer issues by classifying via ML, applying resolution actions, and notifying via Twilio SMS."
  tags:
    - customer-support
    - machine-learning
    - twilio
    - zendesk
capability:
  exposes:
    - type: mcp
      namespace: customer-issue-auto-resolution
      port: 8080
      tools:
        - name: run-customer-issue-auto-resolution-pipe
          description: "Auto-resolves customer issues by classifying via ML, applying resolution actions, and notifying via Twilio SMS."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "ml.run-prediction"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "zendesk.get-ticket"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "twilio.send-sms"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: ml
      baseUri: "https://ml.doordash.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ml_token"
      resources:
        - name: predictions
          path: "/predict"
          operations:
            - name: run-prediction
              method: POST
    - type: http
      namespace: zendesk
      baseUri: "https://doordash.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: tickets
          path: "/tickets"
          operations:
            - name: get-ticket
              method: GET
    - type: http
      namespace: twilio
      baseUri: "https://api.twilio.com/2010-04-01"
      authentication:
        type: bearer
        token: "$secrets.twilio_token"
      resources:
        - name: messages
          path: "/Messages.json"
          operations:
            - name: send-sms
              method: POST

Computes customer lifetime value by pulling order history from Snowflake, scoring via ML model, and updating Segment profiles.

naftiko: "0.5"
info:
  label: "Customer Lifetime Value Pipeline"
  description: "Computes customer lifetime value by pulling order history from Snowflake, scoring via ML model, and updating Segment profiles."
  tags:
    - analytics
    - snowflake
    - machine-learning
    - segment
capability:
  exposes:
    - type: mcp
      namespace: customer-lifetime-value
      port: 8080
      tools:
        - name: run-customer-lifetime-value-pipeline
          description: "Computes customer lifetime value by pulling order history from Snowflake, scoring via ML model, and updating Segment profiles."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "snowflake.execute-query"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "ml.run-prediction"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "segment.track-event"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://doordash.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: ml
      baseUri: "https://ml.doordash.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ml_token"
      resources:
        - name: predictions
          path: "/predict"
          operations:
            - name: run-prediction
              method: POST
    - type: http
      namespace: segment
      baseUri: "https://api.segment.io/v1"
      authentication:
        type: bearer
        token: "$secrets.segment_write_key"
      resources:
        - name: events
          path: "/track"
          operations:
            - name: track-event
              method: POST

Fetches the recent order history for a DoorDash customer, returning order summaries, totals, and delivery statuses.

naftiko: "0.5"
info:
  label: "Customer Order History Retrieval"
  description: "Fetches the recent order history for a DoorDash customer, returning order summaries, totals, and delivery statuses."
  tags:
    - customer-support
    - order-management
    - doordash-orders
capability:
  exposes:
    - type: mcp
      namespace: customer-orders
      port: 8080
      tools:
        - name: get-customer-orders
          description: "Retrieve the recent order history for a customer by customer ID."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "The DoorDash customer identifier."
            - name: limit
              in: body
              type: number
              description: "Maximum number of orders to return."
          call: "doordash-orders.list-customer-orders"
          with:
            customer_id: "{{customer_id}}"
            limit: "{{limit}}"
          outputParameters:
            - name: orders
              type: array
              mapping: "$.orders"
            - name: total_count
              type: number
              mapping: "$.total"
  consumes:
    - type: http
      namespace: doordash-orders
      baseUri: "https://api.doordash.com/v2"
      authentication:
        type: bearer
        token: "$secrets.doordash_api_token"
      resources:
        - name: customer-orders
          path: "/customers/{{customer_id}}/orders"
          inputParameters:
            - name: customer_id
              in: path
          operations:
            - name: list-customer-orders
              method: GET

Identifies lapsed customers from Snowflake, creates a targeted segment in Braze, triggers a re-engagement push notification campaign, and logs the campaign in Slack.

naftiko: "0.5"
info:
  label: "Customer Re-engagement Campaign Trigger"
  description: "Identifies lapsed customers from Snowflake, creates a targeted segment in Braze, triggers a re-engagement push notification campaign, and logs the campaign in Slack."
  tags:
    - marketing
    - customer-experience
    - snowflake
    - braze
    - slack
capability:
  exposes:
    - type: mcp
      namespace: re-engagement
      port: 8080
      tools:
        - name: trigger-reengagement
          description: "Given lapse criteria and a promo offer, identify lapsed customers and trigger re-engagement across Braze and Slack."
          inputParameters:
            - name: days_since_last_order
              in: body
              type: number
              description: "Minimum days since last order to qualify as lapsed."
            - name: market_id
              in: body
              type: string
              description: "The target market identifier."
            - name: promo_code
              in: body
              type: string
              description: "The re-engagement promotional code."
          steps:
            - name: find-lapsed-customers
              type: call
              call: "snowflake.execute-query"
              with:
                warehouse: "MARKETING_WH"
                database: "DOORDASH_PROD"
                schema: "CUSTOMERS"
                statement: "SELECT customer_id, email, last_order_date FROM customers WHERE market_id = '{{market_id}}' AND DATEDIFF(day, last_order_date, CURRENT_DATE()) >= {{days_since_last_order}} AND is_active = true LIMIT 10000"
            - name: trigger-braze-campaign
              type: call
              call: "braze.trigger-campaign"
              with:
                campaign_id: "reengagement-lapsed-customers"
                recipients: "{{find-lapsed-customers.data}}"
                trigger_properties:
                  promo_code: "{{promo_code}}"
                  market: "{{market_id}}"
            - name: log-campaign
              type: call
              call: "slack.post-message"
              with:
                channel: "#marketing-campaigns"
                text: "Re-engagement campaign launched for market {{market_id}}. Targeting customers lapsed {{days_since_last_order}}+ days. Audience size: {{find-lapsed-customers.rowCount}}. Promo: {{promo_code}}."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://doordash.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_jwt_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: braze
      baseUri: "https://rest.iad-01.braze.com"
      authentication:
        type: bearer
        token: "$secrets.braze_api_key"
      resources:
        - name: campaigns
          path: "/campaigns/trigger/send"
          operations:
            - name: trigger-campaign
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: chat
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Reactivates lapsed customers by identifying targets in Snowflake, creating segments in Braze, and launching campaigns.

naftiko: "0.5"
info:
  label: "Customer Reactivation Campaign Pipeline"
  description: "Reactivates lapsed customers by identifying targets in Snowflake, creating segments in Braze, and launching campaigns."
  tags:
    - marketing
    - snowflake
    - braze
    - segment
capability:
  exposes:
    - type: mcp
      namespace: customer-reactivation-campaign
      port: 8080
      tools:
        - name: run-customer-reactivation-campaign-pipe
          description: "Reactivates lapsed customers by identifying targets in Snowflake, creating segments in Braze, and launching campaigns."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "snowflake.execute-query"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "braze.trigger-campaign"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "segment.track-event"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://doordash.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: braze
      baseUri: "https://rest.iad-01.braze.com"
      authentication:
        type: bearer
        token: "$secrets.braze_api_key"
      resources:
        - name: campaigns
          path: "/campaigns/trigger/send"
          operations:
            - name: trigger-campaign
              method: POST
    - type: http
      namespace: segment
      baseUri: "https://api.segment.io/v1"
      authentication:
        type: bearer
        token: "$secrets.segment_write_key"
      resources:
        - name: events
          path: "/track"
          operations:
            - name: track-event
              method: POST

When a customer reports a missing or incorrect order, looks up the order, creates a Stripe refund, logs the issue in Zendesk, and notifies the customer via Twilio SMS.

naftiko: "0.5"
info:
  label: "Customer Refund Processor"
  description: "When a customer reports a missing or incorrect order, looks up the order, creates a Stripe refund, logs the issue in Zendesk, and notifies the customer via Twilio SMS."
  tags:
    - customer-support
    - refunds
    - stripe
    - zendesk
    - twilio
capability:
  exposes:
    - type: mcp
      namespace: customer-refund
      port: 8080
      tools:
        - name: process-refund
          description: "Given an order ID and a reason code, process the refund through Stripe, log the issue in Zendesk, and notify the customer."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The DoorDash order identifier."
            - name: reason_code
              in: body
              type: string
              description: "The refund reason code (e.g., missing_item, wrong_order, never_delivered)."
            - name: refund_amount_cents
              in: body
              type: number
              description: "The refund amount in cents."
          steps:
            - name: get-order
              type: call
              call: "doordash-orders.get-order"
              with:
                order_id: "{{order_id}}"
            - name: issue-refund
              type: call
              call: "stripe.create-refund"
              with:
                payment_intent: "{{get-order.payment_intent_id}}"
                amount: "{{refund_amount_cents}}"
                reason: "{{reason_code}}"
            - name: create-ticket
              type: call
              call: "zendesk.create-ticket"
              with:
                subject: "Refund processed — Order #{{order_id}}"
                description: "Refund of ${{refund_amount_cents}} issued for order {{order_id}}. Reason: {{reason_code}}. Stripe refund ID: {{issue-refund.id}}."
                requester_email: "{{get-order.customer_email}}"
                priority: "normal"
            - name: notify-customer
              type: call
              call: "twilio.send-sms"
              with:
                to: "{{get-order.customer_phone}}"
                body: "Your refund of ${{refund_amount_cents}} for order #{{order_id}} has been processed. Refund ID: {{issue-refund.id}}. It may take 5-10 business days to appear."
  consumes:
    - type: http
      namespace: doordash-orders
      baseUri: "https://api.doordash.com/v2"
      authentication:
        type: bearer
        token: "$secrets.doordash_api_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_secret_key"
      resources:
        - name: refunds
          path: "/refunds"
          operations:
            - name: create-refund
              method: POST
    - type: http
      namespace: zendesk
      baseUri: "https://doordash.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_api_token"
      resources:
        - name: tickets
          path: "/tickets.json"
          operations:
            - name: create-ticket
              method: POST
    - type: http
      namespace: twilio
      baseUri: "https://api.twilio.com/2010-04-01/Accounts/$secrets.twilio_account_sid"
      authentication:
        type: basic
        username: "$secrets.twilio_account_sid"
        password: "$secrets.twilio_auth_token"
      resources:
        - name: messages
          path: "/Messages.json"
          operations:
            - name: send-sms
              method: POST

Deploys satisfaction surveys by selecting recipients from Segment, sending via Twilio, and analyzing in Amplitude.

naftiko: "0.5"
info:
  label: "Customer Satisfaction Survey Pipeline"
  description: "Deploys satisfaction surveys by selecting recipients from Segment, sending via Twilio, and analyzing in Amplitude."
  tags:
    - customer-experience
    - segment
    - twilio
    - amplitude
capability:
  exposes:
    - type: mcp
      namespace: customer-satisfaction-survey
      port: 8080
      tools:
        - name: run-customer-satisfaction-survey-pipeli
          description: "Deploys satisfaction surveys by selecting recipients from Segment, sending via Twilio, and analyzing in Amplitude."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "segment.track-event"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "twilio.send-sms"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "amplitude.get-events"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: segment
      baseUri: "https://api.segment.io/v1"
      authentication:
        type: bearer
        token: "$secrets.segment_write_key"
      resources:
        - name: events
          path: "/track"
          operations:
            - name: track-event
              method: POST
    - type: http
      namespace: twilio
      baseUri: "https://api.twilio.com/2010-04-01"
      authentication:
        type: bearer
        token: "$secrets.twilio_token"
      resources:
        - name: messages
          path: "/Messages.json"
          operations:
            - name: send-sms
              method: POST
    - type: http
      namespace: amplitude
      baseUri: "https://amplitude.com/api/2"
      authentication:
        type: bearer
        token: "$secrets.amplitude_api_key"
      resources:
        - name: events
          path: "/events"
          operations:
            - name: get-events
              method: GET

When a customer support ticket is escalated, fetches the Zendesk ticket details, pulls the customer's order history, generates an AI-powered response suggestion via OpenAI, and assigns the ticket to a senior agent.

naftiko: "0.5"
info:
  label: "Customer Support Escalation Workflow"
  description: "When a customer support ticket is escalated, fetches the Zendesk ticket details, pulls the customer's order history, generates an AI-powered response suggestion via OpenAI, and assigns the ticket to a senior agent."
  tags:
    - customer-support
    - zendesk
    - openai
    - doordash-orders
capability:
  exposes:
    - type: mcp
      namespace: support-escalation
      port: 8080
      tools:
        - name: escalate-ticket
          description: "Given a Zendesk ticket ID and customer ID, pull context, generate a response suggestion, and reassign to senior support."
          inputParameters:
            - name: ticket_id
              in: body
              type: string
              description: "The Zendesk ticket identifier."
            - name: customer_id
              in: body
              type: string
              description: "The DoorDash customer identifier."
          steps:
            - name: get-ticket
              type: call
              call: "zendesk.get-ticket"
              with:
                ticket_id: "{{ticket_id}}"
            - name: get-order-history
              type: call
              call: "doordash-orders.list-customer-orders"
              with:
                customer_id: "{{customer_id}}"
                limit: "5"
            - name: generate-response
              type: call
              call: "openai.create-chat-completion"
              with:
                model: "gpt-4o"
                messages:
                  - role: "system"
                    content: "You are a senior DoorDash customer support agent. Draft a helpful, empathetic response based on the ticket and order history."
                  - role: "user"
                    content: "Ticket: {{get-ticket.ticket.subject}} — {{get-ticket.ticket.description}}. Recent orders: {{get-order-history.orders}}."
            - name: update-ticket
              type: call
              call: "zendesk.update-ticket"
              with:
                ticket_id: "{{ticket_id}}"
                assignee_group: "senior_support"
                internal_note: "AI-suggested response: {{generate-response.choices[0].message.content}}"
                priority: "high"
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://doordash.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_api_token"
      resources:
        - name: tickets
          path: "/tickets/{{ticket_id}}.json"
          inputParameters:
            - name: ticket_id
              in: path
          operations:
            - name: get-ticket
              method: GET
            - name: update-ticket
              method: PUT
    - type: http
      namespace: doordash-orders
      baseUri: "https://api.doordash.com/v2"
      authentication:
        type: bearer
        token: "$secrets.doordash_api_token"
      resources:
        - name: customer-orders
          path: "/customers/{{customer_id}}/orders"
          inputParameters:
            - name: customer_id
              in: path
          operations:
            - name: list-customer-orders
              method: GET
    - type: http
      namespace: openai
      baseUri: "https://api.openai.com/v1"
      authentication:
        type: bearer
        token: "$secrets.openai_api_key"
      resources:
        - name: chat-completions
          path: "/chat/completions"
          operations:
            - name: create-chat-completion
              method: POST

Generates daily revenue reports by aggregating order data from Snowflake, computing metrics, and distributing via Slack.

naftiko: "0.5"
info:
  label: "Daily Revenue Reporting Pipeline"
  description: "Generates daily revenue reports by aggregating order data from Snowflake, computing metrics, and distributing via Slack."
  tags:
    - finance
    - snowflake
    - amplitude
    - slack
capability:
  exposes:
    - type: mcp
      namespace: daily-revenue-reporting
      port: 8080
      tools:
        - name: run-daily-revenue-reporting-pipeline
          description: "Generates daily revenue reports by aggregating order data from Snowflake, computing metrics, and distributing via Slack."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "snowflake.execute-query"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "amplitude.get-events"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "slack.send-message"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://doordash.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: amplitude
      baseUri: "https://amplitude.com/api/2"
      authentication:
        type: bearer
        token: "$secrets.amplitude_api_key"
      resources:
        - name: events
          path: "/events"
          operations:
            - name: get-events
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: send-message
              method: POST

Checks the status of a Dasher's background check in Checkr, and if complete, updates the Dasher account status and notifies the applicant via SendGrid email.

naftiko: "0.5"
info:
  label: "Dasher Background Check Status Monitor"
  description: "Checks the status of a Dasher's background check in Checkr, and if complete, updates the Dasher account status and notifies the applicant via SendGrid email."
  tags:
    - dasher-ops
    - onboarding
    - checkr
    - sendgrid
    - doordash-dasher
capability:
  exposes:
    - type: mcp
      namespace: dasher-compliance
      port: 8080
      tools:
        - name: check-background-status
          description: "Given a Checkr candidate ID and Dasher applicant ID, check background status and update the Dasher account if cleared."
          inputParameters:
            - name: candidate_id
              in: body
              type: string
              description: "The Checkr candidate identifier."
            - name: applicant_id
              in: body
              type: string
              description: "The DoorDash applicant identifier."
          steps:
            - name: get-report
              type: call
              call: "checkr.get-candidate"
              with:
                candidate_id: "{{candidate_id}}"
            - name: update-dasher
              type: call
              call: "doordash-dasher.update-applicant-status"
              with:
                applicant_id: "{{applicant_id}}"
                background_status: "{{get-report.adjudication}}"
                report_id: "{{get-report.report_ids[0]}}"
            - name: notify-applicant
              type: call
              call: "sendgrid.send-email"
              with:
                to: "{{get-report.email}}"
                template_id: "d-background-check-update"
                dynamic_template_data:
                  status: "{{get-report.adjudication}}"
                  name: "{{get-report.first_name}}"
  consumes:
    - type: http
      namespace: checkr
      baseUri: "https://api.checkr.com/v1"
      authentication:
        type: basic
        username: "$secrets.checkr_api_key"
        password: ""
      resources:
        - name: candidates
          path: "/candidates/{{candidate_id}}"
          inputParameters:
            - name: candidate_id
              in: path
          operations:
            - name: get-candidate
              method: GET
    - type: http
      namespace: doordash-dasher
      baseUri: "https://api.doordash.com/dasher/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_dasher_token"
      resources:
        - name: applicants
          path: "/applicants/{{applicant_id}}/status"
          inputParameters:
            - name: applicant_id
              in: path
          operations:
            - name: update-applicant-status
              method: PUT
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: mail
          path: "/mail/send"
          operations:
            - name: send-email
              method: POST

Plans Dasher capacity by forecasting demand, modeling supply needs, and publishing schedules to dispatch.

naftiko: "0.5"
info:
  label: "Dasher Capacity Planning Pipeline"
  description: "Plans Dasher capacity by forecasting demand, modeling supply needs, and publishing schedules to dispatch."
  tags:
    - operations
    - snowflake
    - machine-learning
    - dispatch
capability:
  exposes:
    - type: mcp
      namespace: dasher-capacity-planning
      port: 8080
      tools:
        - name: run-dasher-capacity-planning-pipeline
          description: "Plans Dasher capacity by forecasting demand, modeling supply needs, and publishing schedules to dispatch."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "snowflake.execute-query"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "ml.run-prediction"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "dispatch.create-delivery"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://doordash.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: ml
      baseUri: "https://ml.doordash.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ml_token"
      resources:
        - name: predictions
          path: "/predict"
          operations:
            - name: run-prediction
              method: POST
    - type: http
      namespace: dispatch
      baseUri: "https://api.doordash.com/dispatch/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_dispatch_token"
      resources:
        - name: deliveries
          path: "/deliveries"
          operations:
            - name: create-delivery
              method: POST

Retrieves the current delivery status from the dispatch service, fetches the associated order details, and sends the customer a real-time status update via Twilio SMS.

naftiko: "0.5"
info:
  label: "Dasher Delivery Status and Notification"
  description: "Retrieves the current delivery status from the dispatch service, fetches the associated order details, and sends the customer a real-time status update via Twilio SMS."
  tags:
    - delivery
    - dasher
    - doordash-dispatch
    - doordash-orders
    - twilio
capability:
  exposes:
    - type: mcp
      namespace: delivery-tracking
      port: 8080
      tools:
        - name: get-and-notify-delivery-status
          description: "Look up the delivery status by delivery ID, fetch order details, and send the customer a status SMS."
          inputParameters:
            - name: delivery_id
              in: body
              type: string
              description: "The DoorDash delivery identifier."
          steps:
            - name: get-delivery
              type: call
              call: "doordash-dispatch.get-delivery"
              with:
                delivery_id: "{{delivery_id}}"
            - name: get-order
              type: call
              call: "doordash-orders.get-order"
              with:
                order_id: "{{get-delivery.order_id}}"
            - name: notify-customer
              type: call
              call: "twilio.send-sms"
              with:
                to: "{{get-order.customer_phone}}"
                body: "Your order #{{get-delivery.order_id}} is {{get-delivery.delivery_status}}. Dasher {{get-delivery.dasher.full_name}} — ETA: {{get-delivery.eta.minutes}} minutes."
  consumes:
    - type: http
      namespace: doordash-dispatch
      baseUri: "https://api.doordash.com/dispatch/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_dispatch_token"
      resources:
        - name: deliveries
          path: "/deliveries/{{delivery_id}}"
          inputParameters:
            - name: delivery_id
              in: path
          operations:
            - name: get-delivery
              method: GET
    - type: http
      namespace: doordash-orders
      baseUri: "https://api.doordash.com/v2"
      authentication:
        type: bearer
        token: "$secrets.doordash_api_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET
    - type: http
      namespace: twilio
      baseUri: "https://api.twilio.com/2010-04-01/Accounts/$secrets.twilio_account_sid"
      authentication:
        type: basic
        username: "$secrets.twilio_account_sid"
        password: "$secrets.twilio_auth_token"
      resources:
        - name: messages
          path: "/Messages.json"
          operations:
            - name: send-sms
              method: POST

Resolves Dasher earnings disputes by pulling delivery records, recalculating pay, and notifying via email.

naftiko: "0.5"
info:
  label: "Dasher Earnings Dispute Resolution Pipeline"
  description: "Resolves Dasher earnings disputes by pulling delivery records, recalculating pay, and notifying via email."
  tags:
    - dasher-ops
    - snowflake
    - stripe
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: dasher-earnings-dispute-resolution
      port: 8080
      tools:
        - name: run-dasher-earnings-dispute-resolution-
          description: "Resolves Dasher earnings disputes by pulling delivery records, recalculating pay, and notifying via email."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "snowflake.execute-query"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "stripe.get-payment"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "outlook.send-email"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://doordash.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_secret_key"
      resources:
        - name: payments
          path: "/payment_intents"
          operations:
            - name: get-payment
              method: GET
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/me/sendMail"
          operations:
            - name: send-email
              method: POST

Retrieves a Dasher's earnings summary for a given pay period, fetches their contact details, and sends an earnings summary SMS via Twilio.

naftiko: "0.5"
info:
  label: "Dasher Earnings Summary and Notification"
  description: "Retrieves a Dasher's earnings summary for a given pay period, fetches their contact details, and sends an earnings summary SMS via Twilio."
  tags:
    - dasher-ops
    - payments
    - doordash-dasher
    - twilio
capability:
  exposes:
    - type: mcp
      namespace: dasher-payments
      port: 8080
      tools:
        - name: get-and-notify-earnings
          description: "Look up a Dasher's earnings for a pay period and send them a summary SMS."
          inputParameters:
            - name: dasher_id
              in: body
              type: string
              description: "The DoorDash Dasher identifier."
            - name: pay_period_id
              in: body
              type: string
              description: "The pay period identifier (e.g., 2026-W12)."
          steps:
            - name: get-dasher
              type: call
              call: "doordash-dasher.get-dasher"
              with:
                dasher_id: "{{dasher_id}}"
            - name: get-earnings
              type: call
              call: "doordash-dasher.get-earnings"
              with:
                dasher_id: "{{dasher_id}}"
                pay_period_id: "{{pay_period_id}}"
            - name: send-summary
              type: call
              call: "twilio.send-sms"
              with:
                to: "{{get-dasher.phone}}"
                body: "Hi {{get-dasher.first_name}}, your earnings for {{pay_period_id}}: Base ${{get-earnings.earnings.base_pay_cents}}, Tips ${{get-earnings.earnings.tips_cents}}, Bonuses ${{get-earnings.earnings.bonus_cents}}, Total ${{get-earnings.earnings.total_cents}}."
  consumes:
    - type: http
      namespace: doordash-dasher
      baseUri: "https://api.doordash.com/dasher/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_dasher_token"
      resources:
        - name: dashers
          path: "/dashers/{{dasher_id}}"
          inputParameters:
            - name: dasher_id
              in: path
          operations:
            - name: get-dasher
              method: GET
        - name: earnings
          path: "/dashers/{{dasher_id}}/earnings/{{pay_period_id}}"
          inputParameters:
            - name: dasher_id
              in: path
            - name: pay_period_id
              in: path
          operations:
            - name: get-earnings
              method: GET

Detects Dasher fraud by analyzing delivery patterns in Snowflake, scoring via ML, and flagging suspicious accounts.

naftiko: "0.5"
info:
  label: "Dasher Fraud Detection Pipeline"
  description: "Detects Dasher fraud by analyzing delivery patterns in Snowflake, scoring via ML, and flagging suspicious accounts."
  tags:
    - fraud
    - snowflake
    - machine-learning
    - slack
capability:
  exposes:
    - type: mcp
      namespace: dasher-fraud-detection
      port: 8080
      tools:
        - name: run-dasher-fraud-detection-pipeline
          description: "Detects Dasher fraud by analyzing delivery patterns in Snowflake, scoring via ML, and flagging suspicious accounts."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "snowflake.execute-query"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "ml.run-prediction"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "slack.send-message"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://doordash.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: ml
      baseUri: "https://ml.doordash.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ml_token"
      resources:
        - name: predictions
          path: "/predict"
          operations:
            - name: run-prediction
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: send-message
              method: POST

When a new Dasher applicant is approved, triggers a background check via Checkr, provisions their Dasher account, sends welcome materials via SendGrid, and creates an onboarding task in Asana.

naftiko: "0.5"
info:
  label: "Dasher Onboarding Pipeline"
  description: "When a new Dasher applicant is approved, triggers a background check via Checkr, provisions their Dasher account, sends welcome materials via SendGrid, and creates an onboarding task in Asana."
  tags:
    - dasher-ops
    - onboarding
    - checkr
    - sendgrid
    - asana
capability:
  exposes:
    - type: mcp
      namespace: dasher-onboarding
      port: 8080
      tools:
        - name: onboard-new-dasher
          description: "Given a Dasher applicant ID and email, run the background check, provision the account, send welcome email, and create onboarding tracking task."
          inputParameters:
            - name: applicant_id
              in: body
              type: string
              description: "The Dasher applicant identifier."
            - name: applicant_email
              in: body
              type: string
              description: "The applicant's email address."
            - name: full_name
              in: body
              type: string
              description: "The applicant's full name."
          steps:
            - name: initiate-background-check
              type: call
              call: "checkr.create-invitation"
              with:
                candidate_id: "{{applicant_id}}"
                package: "dasher_standard"
            - name: provision-dasher
              type: call
              call: "doordash-dasher.create-dasher-account"
              with:
                applicant_id: "{{applicant_id}}"
                email: "{{applicant_email}}"
                full_name: "{{full_name}}"
            - name: send-welcome-email
              type: call
              call: "sendgrid.send-email"
              with:
                to: "{{applicant_email}}"
                template_id: "d-dasher-welcome-2024"
                dynamic_template_data:
                  first_name: "{{full_name}}"
                  dasher_id: "{{provision-dasher.dasher_id}}"
            - name: create-onboarding-task
              type: call
              call: "asana.create-task"
              with:
                project_id: "1205432198765"
                name: "Onboard Dasher: {{full_name}}"
                notes: "Applicant ID: {{applicant_id}}. Checkr invitation: {{initiate-background-check.invitation_id}}. Dasher account: {{provision-dasher.dasher_id}}."
                assignee: "dasher-ops-team@doordash.com"
  consumes:
    - type: http
      namespace: checkr
      baseUri: "https://api.checkr.com/v1"
      authentication:
        type: basic
        username: "$secrets.checkr_api_key"
        password: ""
      resources:
        - name: invitations
          path: "/invitations"
          operations:
            - name: create-invitation
              method: POST
    - type: http
      namespace: doordash-dasher
      baseUri: "https://api.doordash.com/dasher/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_dasher_token"
      resources:
        - name: dashers
          path: "/accounts"
          operations:
            - name: create-dasher-account
              method: POST
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: mail
          path: "/mail/send"
          operations:
            - name: send-email
              method: POST
    - type: http
      namespace: asana
      baseUri: "https://app.asana.com/api/1.0"
      authentication:
        type: bearer
        token: "$secrets.asana_token"
      resources:
        - name: tasks
          path: "/tasks"
          operations:
            - name: create-task
              method: POST

When a Dasher disputes a delivery payment, looks up the delivery details, retrieves the pay breakdown, creates a Zendesk ticket for the Dasher pay team, and sends the Dasher an acknowledgement SMS.

naftiko: "0.5"
info:
  label: "Dasher Pay Dispute Resolution"
  description: "When a Dasher disputes a delivery payment, looks up the delivery details, retrieves the pay breakdown, creates a Zendesk ticket for the Dasher pay team, and sends the Dasher an acknowledgement SMS."
  tags:
    - dasher-ops
    - payments
    - zendesk
    - twilio
    - doordash-dasher
capability:
  exposes:
    - type: mcp
      namespace: dasher-pay-disputes
      port: 8080
      tools:
        - name: handle-pay-dispute
          description: "Given a Dasher ID and delivery ID, process the pay dispute across support and notification systems."
          inputParameters:
            - name: dasher_id
              in: body
              type: string
              description: "The DoorDash Dasher identifier."
            - name: delivery_id
              in: body
              type: string
              description: "The delivery identifier in question."
            - name: dispute_reason
              in: body
              type: string
              description: "The reason for the pay dispute."
          steps:
            - name: get-dasher
              type: call
              call: "doordash-dasher.get-dasher"
              with:
                dasher_id: "{{dasher_id}}"
            - name: get-delivery
              type: call
              call: "doordash-dispatch.get-delivery"
              with:
                delivery_id: "{{delivery_id}}"
            - name: create-dispute-ticket
              type: call
              call: "zendesk.create-ticket"
              with:
                subject: "Dasher Pay Dispute — {{get-dasher.full_name}} — Delivery {{delivery_id}}"
                description: "Dasher: {{get-dasher.full_name}} ({{dasher_id}}). Delivery: {{delivery_id}}. Base pay: {{get-delivery.pay.base_cents}}. Tips: {{get-delivery.pay.tip_cents}}. Reason: {{dispute_reason}}."
                requester_email: "{{get-dasher.email}}"
                priority: "normal"
                tags: "pay-dispute,dasher"
            - name: notify-dasher
              type: call
              call: "twilio.send-sms"
              with:
                to: "{{get-dasher.phone}}"
                body: "Hi {{get-dasher.first_name}}, your pay dispute for delivery {{delivery_id}} has been received (ref: {{create-dispute-ticket.id}}). Our team will review within 48 hours."
  consumes:
    - type: http
      namespace: doordash-dasher
      baseUri: "https://api.doordash.com/dasher/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_dasher_token"
      resources:
        - name: dashers
          path: "/dashers/{{dasher_id}}"
          inputParameters:
            - name: dasher_id
              in: path
          operations:
            - name: get-dasher
              method: GET
    - type: http
      namespace: doordash-dispatch
      baseUri: "https://api.doordash.com/dispatch/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_dispatch_token"
      resources:
        - name: deliveries
          path: "/deliveries/{{delivery_id}}"
          inputParameters:
            - name: delivery_id
              in: path
          operations:
            - name: get-delivery
              method: GET
    - type: http
      namespace: zendesk
      baseUri: "https://doordash.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_api_token"
      resources:
        - name: tickets
          path: "/tickets.json"
          operations:
            - name: create-ticket
              method: POST
    - type: http
      namespace: twilio
      baseUri: "https://api.twilio.com/2010-04-01/Accounts/$secrets.twilio_account_sid"
      authentication:
        type: basic
        username: "$secrets.twilio_account_sid"
        password: "$secrets.twilio_auth_token"
      resources:
        - name: messages
          path: "/Messages.json"
          operations:
            - name: send-sms
              method: POST

Retrieves a Dasher's performance ratings, checks for ratings falling below thresholds, and if underperforming, creates a coaching task in Asana and alerts the Dasher ops team in Slack.

naftiko: "0.5"
info:
  label: "Dasher Performance Review and Alert"
  description: "Retrieves a Dasher's performance ratings, checks for ratings falling below thresholds, and if underperforming, creates a coaching task in Asana and alerts the Dasher ops team in Slack."
  tags:
    - dasher-ops
    - analytics
    - doordash-dasher
    - asana
    - slack
capability:
  exposes:
    - type: mcp
      namespace: dasher-ratings
      port: 8080
      tools:
        - name: review-dasher-performance
          description: "Look up a Dasher's ratings and create a coaching task if underperforming."
          inputParameters:
            - name: dasher_id
              in: body
              type: string
              description: "The DoorDash Dasher identifier."
          steps:
            - name: get-ratings
              type: call
              call: "doordash-dasher.get-ratings"
              with:
                dasher_id: "{{dasher_id}}"
            - name: get-dasher
              type: call
              call: "doordash-dasher.get-dasher"
              with:
                dasher_id: "{{dasher_id}}"
            - name: create-coaching-task
              type: call
              call: "asana.create-task"
              with:
                project_id: "1205432198765"
                name: "Performance coaching: {{get-dasher.full_name}} ({{dasher_id}})"
                notes: "Rating: {{get-ratings.ratings.customer_rating}}/5, Completion: {{get-ratings.ratings.completion_rate}}%, On-time: {{get-ratings.ratings.on_time_rate}}%."
                assignee: "dasher-ops@doordash.com"
            - name: alert-ops
              type: call
              call: "slack.post-message"
              with:
                channel: "#dasher-ops"
                text: "Dasher {{get-dasher.full_name}} ({{dasher_id}}) flagged for performance review. Rating: {{get-ratings.ratings.customer_rating}}/5, Completion: {{get-ratings.ratings.completion_rate}}%."
  consumes:
    - type: http
      namespace: doordash-dasher
      baseUri: "https://api.doordash.com/dasher/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_dasher_token"
      resources:
        - name: ratings
          path: "/dashers/{{dasher_id}}/ratings"
          inputParameters:
            - name: dasher_id
              in: path
          operations:
            - name: get-ratings
              method: GET
        - name: dashers
          path: "/dashers/{{dasher_id}}"
          inputParameters:
            - name: dasher_id
              in: path
          operations:
            - name: get-dasher
              method: GET
    - type: http
      namespace: asana
      baseUri: "https://app.asana.com/api/1.0"
      authentication:
        type: bearer
        token: "$secrets.asana_token"
      resources:
        - name: tasks
          path: "/tasks"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: chat
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Optimizes Dasher delivery routes by fetching pending orders, computing routes via Mapbox, and updating the dispatch system.

naftiko: "0.5"
info:
  label: "Dasher Route Optimization Pipeline"
  description: "Optimizes Dasher delivery routes by fetching pending orders, computing routes via Mapbox, and updating the dispatch system."
  tags:
    - logistics
    - mapbox
    - dispatch
    - apache-kafka
capability:
  exposes:
    - type: mcp
      namespace: dasher-route-optimization
      port: 8080
      tools:
        - name: run-dasher-route-optimization-pipeline
          description: "Optimizes Dasher delivery routes by fetching pending orders, computing routes via Mapbox, and updating the dispatch system."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "mapbox.get-route"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "dispatch.create-delivery"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "kafka.publish-event"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: mapbox
      baseUri: "https://api.mapbox.com"
      authentication:
        type: bearer
        token: "$secrets.mapbox_token"
      resources:
        - name: directions
          path: "/directions/v5"
          operations:
            - name: get-route
              method: GET
    - type: http
      namespace: dispatch
      baseUri: "https://api.doordash.com/dispatch/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_dispatch_token"
      resources:
        - name: deliveries
          path: "/deliveries"
          operations:
            - name: create-delivery
              method: POST
    - type: http
      namespace: kafka
      baseUri: "https://kafka.doordash.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kafka_token"
      resources:
        - name: topics
          path: "/topics"
          operations:
            - name: publish-event
              method: POST

Handles Dasher safety alerts by logging the incident, contacting emergency services, and notifying via PagerDuty.

naftiko: "0.5"
info:
  label: "Dasher Safety Alert Pipeline"
  description: "Handles Dasher safety alerts by logging the incident, contacting emergency services, and notifying via PagerDuty."
  tags:
    - safety
    - dispatch
    - pagerduty
    - slack
capability:
  exposes:
    - type: mcp
      namespace: dasher-safety-alert
      port: 8080
      tools:
        - name: run-dasher-safety-alert-pipeline
          description: "Handles Dasher safety alerts by logging the incident, contacting emergency services, and notifying via PagerDuty."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "dispatch.create-delivery"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "pagerduty.create-incident"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "slack.send-message"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: dispatch
      baseUri: "https://api.doordash.com/dispatch/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_dispatch_token"
      resources:
        - name: deliveries
          path: "/deliveries"
          operations:
            - name: create-delivery
              method: POST
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: send-message
              method: POST

When a Dasher reports a safety incident, creates a Zendesk urgent ticket, logs the incident in the internal safety database, notifies the safety ops team in Slack, and sends the Dasher a follow-up SMS via Twilio.

naftiko: "0.5"
info:
  label: "Dasher Safety Incident Reporter"
  description: "When a Dasher reports a safety incident, creates a Zendesk urgent ticket, logs the incident in the internal safety database, notifies the safety ops team in Slack, and sends the Dasher a follow-up SMS via Twilio."
  tags:
    - dasher-ops
    - safety
    - zendesk
    - slack
    - twilio
capability:
  exposes:
    - type: mcp
      namespace: dasher-safety
      port: 8080
      tools:
        - name: report-safety-incident
          description: "Given a Dasher ID, delivery ID, and incident description, file the report across all safety systems and notify the team."
          inputParameters:
            - name: dasher_id
              in: body
              type: string
              description: "The Dasher identifier."
            - name: delivery_id
              in: body
              type: string
              description: "The delivery associated with the incident."
            - name: incident_type
              in: body
              type: string
              description: "The type of safety incident (e.g., accident, harassment, unsafe_location)."
            - name: description
              in: body
              type: string
              description: "Detailed description of the incident."
          steps:
            - name: get-dasher
              type: call
              call: "doordash-dasher.get-dasher"
              with:
                dasher_id: "{{dasher_id}}"
            - name: create-safety-ticket
              type: call
              call: "zendesk.create-ticket"
              with:
                subject: "Safety Incident — Dasher {{get-dasher.full_name}} — {{incident_type}}"
                description: "Delivery: {{delivery_id}}. Dasher: {{get-dasher.full_name}} ({{dasher_id}}). Type: {{incident_type}}. Details: {{description}}"
                priority: "urgent"
                tags: "safety,dasher-incident,{{incident_type}}"
            - name: alert-safety-ops
              type: call
              call: "slack.post-message"
              with:
                channel: "#safety-ops"
                text: "SAFETY INCIDENT: Dasher {{get-dasher.full_name}} reported {{incident_type}} on delivery {{delivery_id}}. Zendesk: {{create-safety-ticket.id}}. {{description}}"
            - name: send-dasher-followup
              type: call
              call: "twilio.send-sms"
              with:
                to: "{{get-dasher.phone}}"
                body: "Hi {{get-dasher.first_name}}, we received your safety report (ref: {{create-safety-ticket.id}}). Our safety team will reach out shortly. If you are in immediate danger, please call 911."
  consumes:
    - type: http
      namespace: doordash-dasher
      baseUri: "https://api.doordash.com/dasher/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_dasher_token"
      resources:
        - name: dashers
          path: "/dashers/{{dasher_id}}"
          inputParameters:
            - name: dasher_id
              in: path
          operations:
            - name: get-dasher
              method: GET
    - type: http
      namespace: zendesk
      baseUri: "https://doordash.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_api_token"
      resources:
        - name: tickets
          path: "/tickets.json"
          operations:
            - name: create-ticket
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: chat
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST
    - type: http
      namespace: twilio
      baseUri: "https://api.twilio.com/2010-04-01/Accounts/$secrets.twilio_account_sid"
      authentication:
        type: basic
        username: "$secrets.twilio_account_sid"
        password: "$secrets.twilio_auth_token"
      resources:
        - name: messages
          path: "/Messages.json"
          operations:
            - name: send-sms
              method: POST

Fetches a Dasher's upcoming scheduled shifts and pulls zone demand forecasts for each shift's zone, helping Dashers optimize their delivery windows.

naftiko: "0.5"
info:
  label: "Dasher Schedule and Zone Forecast"
  description: "Fetches a Dasher's upcoming scheduled shifts and pulls zone demand forecasts for each shift's zone, helping Dashers optimize their delivery windows."
  tags:
    - dasher-ops
    - scheduling
    - doordash-dasher
    - doordash-dispatch
capability:
  exposes:
    - type: mcp
      namespace: dasher-scheduling
      port: 8080
      tools:
        - name: get-schedule-with-forecast
          description: "Retrieve a Dasher's upcoming shifts and pull demand forecasts for their assigned zones."
          inputParameters:
            - name: dasher_id
              in: body
              type: string
              description: "The DoorDash Dasher identifier."
          steps:
            - name: get-schedule
              type: call
              call: "doordash-dasher.get-schedule"
              with:
                dasher_id: "{{dasher_id}}"
            - name: get-zone-demand
              type: call
              call: "doordash-dispatch.get-zone-availability"
              with:
                zone_id: "{{get-schedule.scheduled_shifts[0].zone_id}}"
  consumes:
    - type: http
      namespace: doordash-dasher
      baseUri: "https://api.doordash.com/dasher/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_dasher_token"
      resources:
        - name: schedules
          path: "/dashers/{{dasher_id}}/schedule"
          inputParameters:
            - name: dasher_id
              in: path
          operations:
            - name: get-schedule
              method: GET
    - type: http
      namespace: doordash-dispatch
      baseUri: "https://api.doordash.com/dispatch/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_dispatch_token"
      resources:
        - name: zone-availability
          path: "/zones/{{zone_id}}/availability"
          inputParameters:
            - name: zone_id
              in: path
          operations:
            - name: get-zone-availability
              method: GET

Retrieves a customer's DashPass subscription status and order history, and if renewal is approaching, sends a personalized retention email via SendGrid.

naftiko: "0.5"
info:
  label: "DashPass Subscription Check and Renewal Reminder"
  description: "Retrieves a customer's DashPass subscription status and order history, and if renewal is approaching, sends a personalized retention email via SendGrid."
  tags:
    - customer-support
    - subscriptions
    - doordash-orders
    - sendgrid
capability:
  exposes:
    - type: mcp
      namespace: subscriptions
      port: 8080
      tools:
        - name: check-dashpass-and-remind
          description: "Look up a customer's DashPass subscription, check order history, and send a renewal reminder if approaching."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "The DoorDash customer identifier."
          steps:
            - name: get-subscription
              type: call
              call: "doordash-subscriptions.get-subscription"
              with:
                customer_id: "{{customer_id}}"
            - name: get-orders
              type: call
              call: "doordash-orders.list-customer-orders"
              with:
                customer_id: "{{customer_id}}"
                limit: "10"
            - name: send-reminder
              type: call
              call: "sendgrid.send-email"
              with:
                to: "{{get-subscription.subscription.email}}"
                template_id: "d-dashpass-renewal-reminder"
                dynamic_template_data:
                  plan: "{{get-subscription.subscription.plan}}"
                  renewal_date: "{{get-subscription.subscription.next_renewal}}"
                  recent_orders: "{{get-orders.total}}"
                  savings: "{{get-subscription.subscription.total_savings}}"
  consumes:
    - type: http
      namespace: doordash-subscriptions
      baseUri: "https://api.doordash.com/v2"
      authentication:
        type: bearer
        token: "$secrets.doordash_api_token"
      resources:
        - name: subscriptions
          path: "/customers/{{customer_id}}/subscription"
          inputParameters:
            - name: customer_id
              in: path
          operations:
            - name: get-subscription
              method: GET
    - type: http
      namespace: doordash-orders
      baseUri: "https://api.doordash.com/v2"
      authentication:
        type: bearer
        token: "$secrets.doordash_api_token"
      resources:
        - name: customer-orders
          path: "/customers/{{customer_id}}/orders"
          inputParameters:
            - name: customer_id
              in: path
          operations:
            - name: list-customer-orders
              method: GET
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: mail
          path: "/mail/send"
          operations:
            - name: send-email
              method: POST

Queries Datadog for the current health status of a specified DoorDash service, returning uptime percentage, error rate, and latency metrics.

naftiko: "0.5"
info:
  label: "Datadog Service Health Check"
  description: "Queries Datadog for the current health status of a specified DoorDash service, returning uptime percentage, error rate, and latency metrics."
  tags:
    - observability
    - datadog
    - sre
capability:
  exposes:
    - type: mcp
      namespace: service-health
      port: 8080
      tools:
        - name: get-service-health
          description: "Query Datadog for service health metrics by service name."
          inputParameters:
            - name: service_name
              in: body
              type: string
              description: "The DoorDash service name (e.g., order-service, dispatch-service)."
            - name: timeframe
              in: body
              type: string
              description: "The time window for metrics (e.g., 1h, 24h, 7d)."
          call: "datadog.query-metrics"
          with:
            query: "avg:trace.http.request.duration{service:{{service_name}}} by {resource_name}"
            from: "{{timeframe}}"
          outputParameters:
            - name: avg_latency_ms
              type: number
              mapping: "$.series[0].pointlist[0][1]"
            - name: series
              type: array
              mapping: "$.series"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        name: DD-API-KEY
        in: header
        value: "$secrets.datadog_api_key"
      resources:
        - name: query
          path: "/query"
          operations:
            - name: query-metrics
              method: GET

Analyzes delivery costs by pulling logistics data from Snowflake, computing per-delivery costs, and reporting.

naftiko: "0.5"
info:
  label: "Delivery Cost Analysis Pipeline"
  description: "Analyzes delivery costs by pulling logistics data from Snowflake, computing per-delivery costs, and reporting."
  tags:
    - finance
    - snowflake
    - amplitude
    - slack
capability:
  exposes:
    - type: mcp
      namespace: delivery-cost-analysis
      port: 8080
      tools:
        - name: run-delivery-cost-analysis-pipeline
          description: "Analyzes delivery costs by pulling logistics data from Snowflake, computing per-delivery costs, and reporting."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "snowflake.execute-query"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "amplitude.get-events"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "slack.send-message"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://doordash.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: amplitude
      baseUri: "https://amplitude.com/api/2"
      authentication:
        type: bearer
        token: "$secrets.amplitude_api_key"
      resources:
        - name: events
          path: "/events"
          operations:
            - name: get-events
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: send-message
              method: POST

Calculates delivery ETA by fetching route distance from Google Maps Directions API, current Dasher availability from the dispatch service, and merchant prep time estimates to produce a composite ETA.

naftiko: "0.5"
info:
  label: "Delivery ETA Estimation Pipeline"
  description: "Calculates delivery ETA by fetching route distance from Google Maps Directions API, current Dasher availability from the dispatch service, and merchant prep time estimates to produce a composite ETA."
  tags:
    - delivery
    - logistics
    - google-maps
    - doordash-dispatch
    - doordash-merchant
capability:
  exposes:
    - type: mcp
      namespace: delivery-eta
      port: 8080
      tools:
        - name: estimate-delivery-eta
          description: "Given a store ID and delivery address, compute a composite ETA accounting for prep time, Dasher availability, and driving distance."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The DoorDash merchant store identifier."
            - name: delivery_address
              in: body
              type: string
              description: "The customer delivery address."
          steps:
            - name: get-store-info
              type: call
              call: "doordash-merchant.get-store"
              with:
                store_id: "{{store_id}}"
            - name: get-route
              type: call
              call: "google-maps.get-directions"
              with:
                origin: "{{get-store-info.address}}"
                destination: "{{delivery_address}}"
                mode: "driving"
            - name: get-dasher-availability
              type: call
              call: "doordash-dispatch.get-zone-availability"
              with:
                zone_id: "{{get-store-info.zone_id}}"
            - name: get-prep-estimate
              type: call
              call: "doordash-merchant.get-prep-time"
              with:
                store_id: "{{store_id}}"
  consumes:
    - type: http
      namespace: doordash-merchant
      baseUri: "https://api.doordash.com/merchant/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_merchant_token"
      resources:
        - name: stores
          path: "/stores/{{store_id}}"
          inputParameters:
            - name: store_id
              in: path
          operations:
            - name: get-store
              method: GET
        - name: prep-time
          path: "/stores/{{store_id}}/prep-time"
          inputParameters:
            - name: store_id
              in: path
          operations:
            - name: get-prep-time
              method: GET
    - type: http
      namespace: google-maps
      baseUri: "https://maps.googleapis.com/maps/api"
      authentication:
        type: apiKey
        name: key
        in: query
        value: "$secrets.google_maps_api_key"
      resources:
        - name: directions
          path: "/directions/json"
          operations:
            - name: get-directions
              method: GET
    - type: http
      namespace: doordash-dispatch
      baseUri: "https://api.doordash.com/dispatch/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_dispatch_token"
      resources:
        - name: zone-availability
          path: "/zones/{{zone_id}}/availability"
          inputParameters:
            - name: zone_id
              in: path
          operations:
            - name: get-zone-availability
              method: GET

Monitors delivery SLA compliance by tracking ETAs, computing breach rates, and alerting ops via PagerDuty.

naftiko: "0.5"
info:
  label: "Delivery SLA Monitoring Pipeline"
  description: "Monitors delivery SLA compliance by tracking ETAs, computing breach rates, and alerting ops via PagerDuty."
  tags:
    - operations
    - dispatch
    - pagerduty
    - slack
capability:
  exposes:
    - type: mcp
      namespace: delivery-sla-monitoring
      port: 8080
      tools:
        - name: run-delivery-sla-monitoring-pipeline
          description: "Monitors delivery SLA compliance by tracking ETAs, computing breach rates, and alerting ops via PagerDuty."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "dispatch.create-delivery"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "pagerduty.create-incident"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "slack.send-message"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: dispatch
      baseUri: "https://api.doordash.com/dispatch/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_dispatch_token"
      resources:
        - name: deliveries
          path: "/deliveries"
          operations:
            - name: create-delivery
              method: POST
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: send-message
              method: POST

Expands delivery zones by analyzing demand patterns, modeling coverage with Mapbox, and updating configurations.

naftiko: "0.5"
info:
  label: "Delivery Zone Expansion Pipeline"
  description: "Expands delivery zones by analyzing demand patterns, modeling coverage with Mapbox, and updating configurations."
  tags:
    - operations
    - snowflake
    - mapbox
    - slack
capability:
  exposes:
    - type: mcp
      namespace: delivery-zone-expansion
      port: 8080
      tools:
        - name: run-delivery-zone-expansion-pipeline
          description: "Expands delivery zones by analyzing demand patterns, modeling coverage with Mapbox, and updating configurations."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "snowflake.execute-query"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "mapbox.get-route"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "slack.send-message"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://doordash.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: mapbox
      baseUri: "https://api.mapbox.com"
      authentication:
        type: bearer
        token: "$secrets.mapbox_token"
      resources:
        - name: directions
          path: "/directions/v5"
          operations:
            - name: get-route
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: send-message
              method: POST

Retrieves zone configuration and current surge data, then logs the zone health snapshot to Datadog for operational monitoring.

naftiko: "0.5"
info:
  label: "Delivery Zone Health Dashboard"
  description: "Retrieves zone configuration and current surge data, then logs the zone health snapshot to Datadog for operational monitoring."
  tags:
    - logistics
    - delivery
    - doordash-dispatch
    - doordash-pricing
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: zone-config
      port: 8080
      tools:
        - name: snapshot-zone-health
          description: "Pull zone config and surge data, then log a health snapshot to Datadog."
          inputParameters:
            - name: zone_id
              in: body
              type: string
              description: "The DoorDash delivery zone identifier."
          steps:
            - name: get-zone
              type: call
              call: "doordash-dispatch.get-zone"
              with:
                zone_id: "{{zone_id}}"
            - name: get-surge
              type: call
              call: "doordash-pricing.get-zone-surge"
              with:
                zone_id: "{{zone_id}}"
            - name: log-metrics
              type: call
              call: "datadog.submit-metrics"
              with:
                series:
                  - metric: "zone.active_dashers"
                    points:
                      - value: "{{get-zone.zone.active_dashers}}"
                    tags:
                      - "zone:{{zone_id}}"
                  - metric: "zone.surge_multiplier"
                    points:
                      - value: "{{get-surge.multiplier}}"
                    tags:
                      - "zone:{{zone_id}}"
  consumes:
    - type: http
      namespace: doordash-dispatch
      baseUri: "https://api.doordash.com/dispatch/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_dispatch_token"
      resources:
        - name: zones
          path: "/zones/{{zone_id}}"
          inputParameters:
            - name: zone_id
              in: path
          operations:
            - name: get-zone
              method: GET
    - type: http
      namespace: doordash-pricing
      baseUri: "https://api.doordash.com/pricing/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_pricing_token"
      resources:
        - name: zone-surge
          path: "/zones/{{zone_id}}/surge"
          inputParameters:
            - name: zone_id
              in: path
          operations:
            - name: get-zone-surge
              method: GET
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: apiKey
        name: DD-API-KEY
        in: header
        value: "$secrets.datadog_api_key"
      resources:
        - name: metrics
          path: "/series"
          operations:
            - name: submit-metrics
              method: POST

Retrieves customer dietary preferences and past order patterns.

naftiko: "0.5"
info:
  label: "DoorDash Customer Preferences Lookup"
  description: "Retrieves customer dietary preferences and past order patterns."
  tags:
    - customer
    - preferences
capability:
  exposes:
    - type: mcp
      namespace: customer
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves customer dietary preferences and past order patterns."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary identifier."
          call: "preferences.get-data"
          with:
            input_id: "{{input_id}}"
  consumes:
    - type: http
      namespace: preferences
      baseUri: "https://api.doordash.com/customer/v1"
      authentication:
        type: bearer
        token: "$secrets.preferences_token"
      resources:
        - name: data
          path: "/{{input_id}}"
          inputParameters:
            - name: input_id
              in: path
          operations:
            - name: get-data
              method: GET

Retrieves the current GPS location of an active Dasher from the dispatch system.

naftiko: "0.5"
info:
  label: "DoorDash Dasher Location Lookup"
  description: "Retrieves the current GPS location of an active Dasher from the dispatch system."
  tags:
    - logistics
    - dispatch
capability:
  exposes:
    - type: mcp
      namespace: logistics
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves the current GPS location of an active Dasher from the dispatch system."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary identifier."
          call: "dispatch.get-data"
          with:
            input_id: "{{input_id}}"
  consumes:
    - type: http
      namespace: dispatch
      baseUri: "https://api.doordash.com/logistics/v1"
      authentication:
        type: bearer
        token: "$secrets.dispatch_token"
      resources:
        - name: data
          path: "/{{input_id}}"
          inputParameters:
            - name: input_id
              in: path
          operations:
            - name: get-data
              method: GET

Retrieves the full menu catalog for a merchant store from the DoorDash catalog service.

naftiko: "0.5"
info:
  label: "DoorDash Store Catalog Lookup"
  description: "Retrieves the full menu catalog for a merchant store from the DoorDash catalog service."
  tags:
    - merchant
    - catalog
capability:
  exposes:
    - type: mcp
      namespace: merchant
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves the full menu catalog for a merchant store from the DoorDash catalog service."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary identifier."
          call: "catalog.get-data"
          with:
            input_id: "{{input_id}}"
  consumes:
    - type: http
      namespace: catalog
      baseUri: "https://api.doordash.com/merchant/v1"
      authentication:
        type: bearer
        token: "$secrets.catalog_token"
      resources:
        - name: data
          path: "/{{input_id}}"
          inputParameters:
            - name: input_id
              in: path
          operations:
            - name: get-data
              method: GET

Creates an on-demand delivery through DoorDash Drive (white-label delivery API), specifying pickup and dropoff details for third-party merchant integrations.

naftiko: "0.5"
info:
  label: "Drive API Delivery Creation"
  description: "Creates an on-demand delivery through DoorDash Drive (white-label delivery API), specifying pickup and dropoff details for third-party merchant integrations."
  tags:
    - delivery
    - doordash-drive
    - logistics
capability:
  exposes:
    - type: mcp
      namespace: drive-api
      port: 8080
      tools:
        - name: create-drive-delivery
          description: "Create a DoorDash Drive delivery with pickup and dropoff details."
          inputParameters:
            - name: external_delivery_id
              in: body
              type: string
              description: "The external reference ID for this delivery."
            - name: pickup_address
              in: body
              type: string
              description: "The pickup address."
            - name: pickup_phone
              in: body
              type: string
              description: "The pickup contact phone."
            - name: dropoff_address
              in: body
              type: string
              description: "The dropoff address."
            - name: dropoff_phone
              in: body
              type: string
              description: "The dropoff contact phone."
          call: "doordash-drive.create-delivery"
          with:
            external_delivery_id: "{{external_delivery_id}}"
            pickup_address: "{{pickup_address}}"
            pickup_phone_number: "{{pickup_phone}}"
            dropoff_address: "{{dropoff_address}}"
            dropoff_phone_number: "{{dropoff_phone}}"
  consumes:
    - type: http
      namespace: doordash-drive
      baseUri: "https://openapi.doordash.com/drive/v2"
      authentication:
        type: bearer
        token: "$secrets.doordash_drive_jwt"
      resources:
        - name: deliveries
          path: "/deliveries"
          operations:
            - name: create-delivery
              method: POST

Retrieves the current status of a DoorDash Drive delivery by external delivery ID, returning pickup/dropoff status, Dasher info, and tracking URL.

naftiko: "0.5"
info:
  label: "Drive API Delivery Status Lookup"
  description: "Retrieves the current status of a DoorDash Drive delivery by external delivery ID, returning pickup/dropoff status, Dasher info, and tracking URL."
  tags:
    - delivery
    - doordash-drive
    - logistics
capability:
  exposes:
    - type: mcp
      namespace: drive-tracking
      port: 8080
      tools:
        - name: get-drive-delivery-status
          description: "Look up a DoorDash Drive delivery status by external delivery ID."
          inputParameters:
            - name: external_delivery_id
              in: body
              type: string
              description: "The external delivery identifier."
          call: "doordash-drive.get-delivery"
          with:
            external_delivery_id: "{{external_delivery_id}}"
          outputParameters:
            - name: delivery_status
              type: string
              mapping: "$.delivery_status"
            - name: dasher_name
              type: string
              mapping: "$.dasher.name"
            - name: tracking_url
              type: string
              mapping: "$.tracking_url"
            - name: pickup_time
              type: string
              mapping: "$.pickup_time_actual"
  consumes:
    - type: http
      namespace: doordash-drive
      baseUri: "https://openapi.doordash.com/drive/v2"
      authentication:
        type: bearer
        token: "$secrets.doordash_drive_jwt"
      resources:
        - name: deliveries
          path: "/deliveries/{{external_delivery_id}}"
          inputParameters:
            - name: external_delivery_id
              in: path
          operations:
            - name: get-delivery
              method: GET

Processes Dasher background rechecks by triggering the check, reviewing results, and updating status.

naftiko: "0.5"
info:
  label: "Driver Background Recheck Pipeline"
  description: "Processes Dasher background rechecks by triggering the check, reviewing results, and updating status."
  tags:
    - dasher-ops
    - compliance
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: driver-background-recheck
      port: 8080
      tools:
        - name: run-driver-background-recheck-pipeline
          description: "Processes Dasher background rechecks by triggering the check, reviewing results, and updating status."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "servicenow.create-incident"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "ml.run-prediction"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "msteams.send-notification"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://doordash.service-now.com/api/now/table"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: incidents
          path: "/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: ml
      baseUri: "https://ml.doordash.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ml_token"
      resources:
        - name: predictions
          path: "/predict"
          operations:
            - name: run-prediction
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/messages"
          operations:
            - name: send-notification
              method: POST

Calculates the delivery fee for an order by combining base zone fee, distance surcharge from Google Maps, current surge multiplier, and DashPass discount eligibility.

naftiko: "0.5"
info:
  label: "Dynamic Delivery Fee Calculator"
  description: "Calculates the delivery fee for an order by combining base zone fee, distance surcharge from Google Maps, current surge multiplier, and DashPass discount eligibility."
  tags:
    - pricing
    - delivery
    - google-maps
    - doordash-pricing
    - doordash-dispatch
capability:
  exposes:
    - type: mcp
      namespace: fee-calculator
      port: 8080
      tools:
        - name: calculate-delivery-fee
          description: "Given a store ID, delivery address, and customer ID, calculate the dynamic delivery fee."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The DoorDash merchant store identifier."
            - name: delivery_address
              in: body
              type: string
              description: "The customer delivery address."
            - name: customer_id
              in: body
              type: string
              description: "The DoorDash customer identifier."
          steps:
            - name: get-store
              type: call
              call: "doordash-merchant.get-store"
              with:
                store_id: "{{store_id}}"
            - name: get-distance
              type: call
              call: "google-maps.get-distance-matrix"
              with:
                origins: "{{get-store.address}}"
                destinations: "{{delivery_address}}"
                mode: "driving"
            - name: get-surge
              type: call
              call: "doordash-pricing.get-zone-surge"
              with:
                zone_id: "{{get-store.zone_id}}"
            - name: get-subscription
              type: call
              call: "doordash-subscriptions.get-subscription"
              with:
                customer_id: "{{customer_id}}"
  consumes:
    - type: http
      namespace: doordash-merchant
      baseUri: "https://api.doordash.com/merchant/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_merchant_token"
      resources:
        - name: stores
          path: "/stores/{{store_id}}"
          inputParameters:
            - name: store_id
              in: path
          operations:
            - name: get-store
              method: GET
    - type: http
      namespace: google-maps
      baseUri: "https://maps.googleapis.com/maps/api"
      authentication:
        type: apiKey
        name: key
        in: query
        value: "$secrets.google_maps_api_key"
      resources:
        - name: distance-matrix
          path: "/distancematrix/json"
          operations:
            - name: get-distance-matrix
              method: GET
    - type: http
      namespace: doordash-pricing
      baseUri: "https://api.doordash.com/pricing/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_pricing_token"
      resources:
        - name: zone-surge
          path: "/zones/{{zone_id}}/surge"
          inputParameters:
            - name: zone_id
              in: path
          operations:
            - name: get-zone-surge
              method: GET
    - type: http
      namespace: doordash-subscriptions
      baseUri: "https://api.doordash.com/v2"
      authentication:
        type: bearer
        token: "$secrets.doordash_api_token"
      resources:
        - name: subscriptions
          path: "/customers/{{customer_id}}/subscription"
          inputParameters:
            - name: customer_id
              in: path
          operations:
            - name: get-subscription
              method: GET

Manages food safety incidents by logging the report, pausing the merchant, and notifying the safety team via Slack.

naftiko: "0.5"
info:
  label: "Food Safety Incident Pipeline"
  description: "Manages food safety incidents by logging the report, pausing the merchant, and notifying the safety team via Slack."
  tags:
    - safety
    - merchant
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: food-safety-incident
      port: 8080
      tools:
        - name: run-food-safety-incident-pipeline
          description: "Manages food safety incidents by logging the report, pausing the merchant, and notifying the safety team via Slack."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "merchant.get-store"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "servicenow.create-incident"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "slack.send-message"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: merchant
      baseUri: "https://api.doordash.com/merchant/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_merchant_token"
      resources:
        - name: stores
          path: "/stores"
          operations:
            - name: get-store
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://doordash.service-now.com/api/now/table"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: incidents
          path: "/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: send-message
              method: POST

When the fraud detection ML model flags a suspicious order, freezes the payment in Stripe, creates a high-priority Zendesk ticket, and sends an alert to the fraud ops Slack channel.

naftiko: "0.5"
info:
  label: "Fraud Detection Alert Handler"
  description: "When the fraud detection ML model flags a suspicious order, freezes the payment in Stripe, creates a high-priority Zendesk ticket, and sends an alert to the fraud ops Slack channel."
  tags:
    - fraud
    - payments
    - stripe
    - zendesk
    - slack
capability:
  exposes:
    - type: mcp
      namespace: fraud-ops
      port: 8080
      tools:
        - name: handle-fraud-alert
          description: "Given a flagged order ID and fraud score, freeze the payment, open a Zendesk ticket, and alert the fraud ops team in Slack."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The DoorDash order identifier flagged for fraud."
            - name: fraud_score
              in: body
              type: number
              description: "The ML model fraud confidence score (0-100)."
            - name: fraud_signals
              in: body
              type: string
              description: "Comma-separated list of fraud signals detected."
          steps:
            - name: get-order
              type: call
              call: "doordash-orders.get-order"
              with:
                order_id: "{{order_id}}"
            - name: freeze-payment
              type: call
              call: "stripe.cancel-payment-intent"
              with:
                payment_intent_id: "{{get-order.payment_intent_id}}"
            - name: create-fraud-ticket
              type: call
              call: "zendesk.create-ticket"
              with:
                subject: "FRAUD ALERT — Order #{{order_id}} (Score: {{fraud_score}})"
                description: "Order {{order_id}} flagged with score {{fraud_score}}. Signals: {{fraud_signals}}. Customer: {{get-order.customer_email}}. Payment frozen: {{freeze-payment.id}}."
                priority: "urgent"
                tags: "fraud,auto-flagged"
            - name: alert-slack
              type: call
              call: "slack.post-message"
              with:
                channel: "#fraud-ops"
                text: "FRAUD ALERT: Order #{{order_id}} flagged (score: {{fraud_score}}). Signals: {{fraud_signals}}. Payment frozen. Zendesk: {{create-fraud-ticket.id}}."
  consumes:
    - type: http
      namespace: doordash-orders
      baseUri: "https://api.doordash.com/v2"
      authentication:
        type: bearer
        token: "$secrets.doordash_api_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_secret_key"
      resources:
        - name: payment-intents
          path: "/payment_intents/{{payment_intent_id}}/cancel"
          inputParameters:
            - name: payment_intent_id
              in: path
          operations:
            - name: cancel-payment-intent
              method: POST
    - type: http
      namespace: zendesk
      baseUri: "https://doordash.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_api_token"
      resources:
        - name: tickets
          path: "/tickets.json"
          operations:
            - name: create-ticket
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: chat
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Processes gift card purchases by validating payment via Stripe, generating the card code, and delivering via email.

naftiko: "0.5"
info:
  label: "Gift Card Processing Pipeline"
  description: "Processes gift card purchases by validating payment via Stripe, generating the card code, and delivering via email."
  tags:
    - payments
    - stripe
    - microsoft-outlook
    - customer
capability:
  exposes:
    - type: mcp
      namespace: gift-card-processing
      port: 8080
      tools:
        - name: run-gift-card-processing-pipeline
          description: "Processes gift card purchases by validating payment via Stripe, generating the card code, and delivering via email."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "stripe.get-payment"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "segment.track-event"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "outlook.send-email"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_secret_key"
      resources:
        - name: payments
          path: "/payment_intents"
          operations:
            - name: get-payment
              method: GET
    - type: http
      namespace: segment
      baseUri: "https://api.segment.io/v1"
      authentication:
        type: bearer
        token: "$secrets.segment_write_key"
      resources:
        - name: events
          path: "/track"
          operations:
            - name: track-event
              method: POST
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/me/sendMail"
          operations:
            - name: send-email
              method: POST

Geocodes a delivery address using the Google Maps Geocoding API, returning latitude, longitude, and formatted address for use in dispatch and routing.

naftiko: "0.5"
info:
  label: "Google Maps Geocode Address"
  description: "Geocodes a delivery address using the Google Maps Geocoding API, returning latitude, longitude, and formatted address for use in dispatch and routing."
  tags:
    - logistics
    - google-maps
    - geocoding
capability:
  exposes:
    - type: mcp
      namespace: geo-services
      port: 8080
      tools:
        - name: geocode-address
          description: "Geocode a delivery address string to lat/lng coordinates using Google Maps."
          inputParameters:
            - name: address
              in: body
              type: string
              description: "The address string to geocode."
          call: "google-maps.geocode"
          with:
            address: "{{address}}"
          outputParameters:
            - name: lat
              type: number
              mapping: "$.results[0].geometry.location.lat"
            - name: lng
              type: number
              mapping: "$.results[0].geometry.location.lng"
            - name: formatted_address
              type: string
              mapping: "$.results[0].formatted_address"
  consumes:
    - type: http
      namespace: google-maps
      baseUri: "https://maps.googleapis.com/maps/api"
      authentication:
        type: apiKey
        name: key
        in: query
        value: "$secrets.google_maps_api_key"
      resources:
        - name: geocode
          path: "/geocode/json"
          operations:
            - name: geocode
              method: GET

When a critical service alert fires, creates a PagerDuty incident, opens a dedicated Slack channel for the war room, posts the initial context, and creates a Jira incident tracking ticket.

naftiko: "0.5"
info:
  label: "Incident Response Orchestrator"
  description: "When a critical service alert fires, creates a PagerDuty incident, opens a dedicated Slack channel for the war room, posts the initial context, and creates a Jira incident tracking ticket."
  tags:
    - sre
    - incident-management
    - pagerduty
    - slack
    - jira
capability:
  exposes:
    - type: mcp
      namespace: incident-response
      port: 8080
      tools:
        - name: trigger-incident-response
          description: "Given an alert name, severity, and affected service, spin up the full incident response workflow."
          inputParameters:
            - name: alert_name
              in: body
              type: string
              description: "The name of the triggered alert."
            - name: severity
              in: body
              type: string
              description: "The severity level (P1, P2, P3)."
            - name: affected_service
              in: body
              type: string
              description: "The name of the affected DoorDash service."
            - name: description
              in: body
              type: string
              description: "Alert details and context."
          steps:
            - name: create-pd-incident
              type: call
              call: "pagerduty.create-incident"
              with:
                service_id: "$secrets.pagerduty_platform_service_id"
                title: "{{severity}} — {{alert_name}} — {{affected_service}}"
                urgency: "high"
                body: "{{description}}"
            - name: create-war-room
              type: call
              call: "slack.create-channel"
              with:
                name: "inc-{{affected_service}}-{{severity}}"
                is_private: false
            - name: post-context
              type: call
              call: "slack.post-message"
              with:
                channel: "{{create-war-room.channel.id}}"
                text: "Incident War Room for {{severity}} {{alert_name}}.\nService: {{affected_service}}\nPagerDuty: {{create-pd-incident.incident.html_url}}\nDetails: {{description}}"
            - name: create-jira-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "INC"
                issue_type: "Incident"
                summary: "{{severity}} — {{alert_name}} — {{affected_service}}"
                description: "PagerDuty: {{create-pd-incident.incident.html_url}}\nSlack: {{create-war-room.channel.name}}\n\n{{description}}"
                priority: "{{severity}}"
  consumes:
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_api_token"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: channels
          path: "/conversations.create"
          operations:
            - name: create-channel
              method: POST
        - name: chat
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://doordash.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Creates a Jira issue in the DoorDash Atlassian instance, used for tracking engineering work, bugs, and incidents across various teams.

naftiko: "0.5"
info:
  label: "Jira Issue Creator"
  description: "Creates a Jira issue in the DoorDash Atlassian instance, used for tracking engineering work, bugs, and incidents across various teams."
  tags:
    - project-management
    - jira
capability:
  exposes:
    - type: mcp
      namespace: project-tracking
      port: 8080
      tools:
        - name: create-jira-issue
          description: "Create a Jira issue in a specified project."
          inputParameters:
            - name: project_key
              in: body
              type: string
              description: "The Jira project key (e.g., ENG, INC, MERCH)."
            - name: issue_type
              in: body
              type: string
              description: "The issue type (e.g., Bug, Story, Task, Incident)."
            - name: summary
              in: body
              type: string
              description: "The issue summary/title."
            - name: description
              in: body
              type: string
              description: "The issue description."
          call: "jira.create-issue"
          with:
            project: "{{project_key}}"
            issue_type: "{{issue_type}}"
            summary: "{{summary}}"
            description: "{{description}}"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://doordash.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Publishes an event to an Apache Kafka topic for event-driven processing.

naftiko: "0.5"
info:
  label: "Kafka Event Publisher"
  description: "Publishes an event to an Apache Kafka topic for event-driven processing."
  tags:
    - infrastructure
    - apache-kafka
capability:
  exposes:
    - type: mcp
      namespace: infrastructure
      port: 8080
      tools:
        - name: get-data
          description: "Publishes an event to an Apache Kafka topic for event-driven processing."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary identifier."
          call: "apache_kafka.get-data"
          with:
            input_id: "{{input_id}}"
  consumes:
    - type: http
      namespace: apache_kafka
      baseUri: "https://api.doordash.com/infrastructure/v1"
      authentication:
        type: bearer
        token: "$secrets.apache_kafka_token"
      resources:
        - name: data
          path: "/{{input_id}}"
          inputParameters:
            - name: input_id
              in: path
          operations:
            - name: get-data
              method: GET

Checks the current state of a feature flag in LaunchDarkly for a user.

naftiko: "0.5"
info:
  label: "LaunchDarkly Feature Flag Check"
  description: "Checks the current state of a feature flag in LaunchDarkly for a user."
  tags:
    - feature-management
    - launchdarkly
capability:
  exposes:
    - type: mcp
      namespace: feature-management
      port: 8080
      tools:
        - name: get-data
          description: "Checks the current state of a feature flag in LaunchDarkly for a user."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary identifier."
          call: "launchdarkly.get-data"
          with:
            input_id: "{{input_id}}"
  consumes:
    - type: http
      namespace: launchdarkly
      baseUri: "https://api.doordash.com/feature-management/v1"
      authentication:
        type: bearer
        token: "$secrets.launchdarkly_token"
      resources:
        - name: data
          path: "/{{input_id}}"
          inputParameters:
            - name: input_id
              in: path
          operations:
            - name: get-data
              method: GET

Optimizes a delivery route using the Mapbox Directions API for multiple waypoints.

naftiko: "0.5"
info:
  label: "Mapbox Route Optimization"
  description: "Optimizes a delivery route using the Mapbox Directions API for multiple waypoints."
  tags:
    - logistics
    - mapbox
capability:
  exposes:
    - type: mcp
      namespace: logistics
      port: 8080
      tools:
        - name: get-data
          description: "Optimizes a delivery route using the Mapbox Directions API for multiple waypoints."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary identifier."
          call: "mapbox.get-data"
          with:
            input_id: "{{input_id}}"
  consumes:
    - type: http
      namespace: mapbox
      baseUri: "https://api.doordash.com/logistics/v1"
      authentication:
        type: bearer
        token: "$secrets.mapbox_token"
      resources:
        - name: data
          path: "/{{input_id}}"
          inputParameters:
            - name: input_id
              in: path
          operations:
            - name: get-data
              method: GET

Looks up a menu item by store and item ID, checks availability, and if unavailable, queries the recommendation service for substitute items the customer might enjoy.

naftiko: "0.5"
info:
  label: "Menu Item Availability and Substitute Finder"
  description: "Looks up a menu item by store and item ID, checks availability, and if unavailable, queries the recommendation service for substitute items the customer might enjoy."
  tags:
    - merchant
    - menu-management
    - doordash-merchant
    - doordash-ml
    - recommendations
capability:
  exposes:
    - type: mcp
      namespace: merchant-menu
      port: 8080
      tools:
        - name: check-item-and-suggest
          description: "Look up a menu item, check availability, and suggest substitutes if unavailable."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The DoorDash merchant store identifier."
            - name: item_id
              in: body
              type: string
              description: "The menu item identifier."
            - name: customer_id
              in: body
              type: string
              description: "The DoorDash customer identifier for personalized suggestions."
          steps:
            - name: get-menu-item
              type: call
              call: "doordash-merchant.get-menu-item"
              with:
                store_id: "{{store_id}}"
                item_id: "{{item_id}}"
            - name: get-substitutes
              type: call
              call: "doordash-ml.get-item-substitutes"
              with:
                store_id: "{{store_id}}"
                item_id: "{{item_id}}"
                customer_id: "{{customer_id}}"
  consumes:
    - type: http
      namespace: doordash-merchant
      baseUri: "https://api.doordash.com/merchant/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_merchant_token"
      resources:
        - name: menu-items
          path: "/stores/{{store_id}}/menu/items/{{item_id}}"
          inputParameters:
            - name: store_id
              in: path
            - name: item_id
              in: path
          operations:
            - name: get-menu-item
              method: GET
    - type: http
      namespace: doordash-ml
      baseUri: "https://api.doordash.com/ml/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_ml_token"
      resources:
        - name: item-substitutes
          path: "/recommendations/substitutes"
          operations:
            - name: get-item-substitutes
              method: POST

Optimizes menu prices by analyzing demand elasticity in Snowflake, running pricing models, and updating the catalog.

naftiko: "0.5"
info:
  label: "Menu Price Optimization Pipeline"
  description: "Optimizes menu prices by analyzing demand elasticity in Snowflake, running pricing models, and updating the catalog."
  tags:
    - merchant
    - snowflake
    - machine-learning
    - catalog
capability:
  exposes:
    - type: mcp
      namespace: menu-price-optimization
      port: 8080
      tools:
        - name: run-menu-price-optimization-pipeline
          description: "Optimizes menu prices by analyzing demand elasticity in Snowflake, running pricing models, and updating the catalog."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "snowflake.execute-query"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "ml.run-prediction"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "catalog.get-items"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://doordash.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: ml
      baseUri: "https://ml.doordash.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ml_token"
      resources:
        - name: predictions
          path: "/predict"
          operations:
            - name: run-prediction
              method: POST
    - type: http
      namespace: catalog
      baseUri: "https://api.doordash.com/catalog/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_catalog_token"
      resources:
        - name: items
          path: "/items"
          operations:
            - name: get-items
              method: GET

Predicts merchant churn by pulling engagement metrics from Snowflake, scoring via ML, and creating retention tasks.

naftiko: "0.5"
info:
  label: "Merchant Churn Prediction Pipeline"
  description: "Predicts merchant churn by pulling engagement metrics from Snowflake, scoring via ML, and creating retention tasks."
  tags:
    - merchant
    - snowflake
    - machine-learning
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: merchant-churn-prediction
      port: 8080
      tools:
        - name: run-merchant-churn-prediction-pipeline
          description: "Predicts merchant churn by pulling engagement metrics from Snowflake, scoring via ML, and creating retention tasks."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "snowflake.execute-query"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "ml.run-prediction"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "salesforce.get-account"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://doordash.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: ml
      baseUri: "https://ml.doordash.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ml_token"
      resources:
        - name: predictions
          path: "/predict"
          operations:
            - name: run-prediction
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://doordash.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account"
          operations:
            - name: get-account
              method: GET

When a merchant reports an operational issue, creates a Zendesk ticket, alerts the merchant success team in Slack, and if the issue impacts active orders, notifies the dispatch team to reassign deliveries.

naftiko: "0.5"
info:
  label: "Merchant Issue Escalation Pipeline"
  description: "When a merchant reports an operational issue, creates a Zendesk ticket, alerts the merchant success team in Slack, and if the issue impacts active orders, notifies the dispatch team to reassign deliveries."
  tags:
    - merchant
    - customer-support
    - zendesk
    - slack
    - doordash-dispatch
capability:
  exposes:
    - type: mcp
      namespace: merchant-escalation
      port: 8080
      tools:
        - name: escalate-merchant-issue
          description: "Given a store ID, issue type, and description, create a support ticket, alert the merchant success team, and handle active order impact."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The DoorDash merchant store identifier."
            - name: issue_type
              in: body
              type: string
              description: "The type of issue (e.g., tablet_offline, kitchen_closed, menu_error)."
            - name: description
              in: body
              type: string
              description: "Detailed description of the issue."
            - name: merchant_email
              in: body
              type: string
              description: "The merchant contact email."
          steps:
            - name: create-ticket
              type: call
              call: "zendesk.create-ticket"
              with:
                subject: "Merchant Issue — Store {{store_id}} — {{issue_type}}"
                description: "Store: {{store_id}}. Issue: {{issue_type}}. Details: {{description}}"
                requester_email: "{{merchant_email}}"
                priority: "high"
                tags: "merchant-issue,{{issue_type}}"
            - name: alert-merchant-success
              type: call
              call: "slack.post-message"
              with:
                channel: "#merchant-success"
                text: "Merchant issue reported for store {{store_id}}: {{issue_type}}. {{description}}. Zendesk: {{create-ticket.id}}."
            - name: notify-dispatch
              type: call
              call: "slack.post-message"
              with:
                channel: "#dispatch-ops"
                text: "Store {{store_id}} reporting {{issue_type}} — active orders may need reassignment. Zendesk: {{create-ticket.id}}."
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://doordash.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_api_token"
      resources:
        - name: tickets
          path: "/tickets.json"
          operations:
            - name: create-ticket
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: chat
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Pulls a merchant's full menu from their POS system via Square, transforms it into DoorDash menu format, uploads it to the merchant portal, and posts a confirmation to the merchant's Slack channel.

naftiko: "0.5"
info:
  label: "Merchant Menu Sync Orchestrator"
  description: "Pulls a merchant's full menu from their POS system via Square, transforms it into DoorDash menu format, uploads it to the merchant portal, and posts a confirmation to the merchant's Slack channel."
  tags:
    - merchant
    - menu-management
    - square
    - slack
    - doordash-merchant
capability:
  exposes:
    - type: mcp
      namespace: menu-sync
      port: 8080
      tools:
        - name: sync-merchant-menu
          description: "Given a Square location ID and DoorDash store ID, pull the POS menu, upload it to DoorDash, and notify the merchant."
          inputParameters:
            - name: square_location_id
              in: body
              type: string
              description: "The Square POS location identifier."
            - name: store_id
              in: body
              type: string
              description: "The DoorDash merchant store identifier."
            - name: merchant_slack_channel
              in: body
              type: string
              description: "The merchant's Slack notification channel."
          steps:
            - name: get-pos-catalog
              type: call
              call: "square.list-catalog"
              with:
                location_id: "{{square_location_id}}"
                types: "ITEM,MODIFIER_LIST,CATEGORY"
            - name: upload-menu
              type: call
              call: "doordash-merchant.update-menu"
              with:
                store_id: "{{store_id}}"
                catalog_data: "{{get-pos-catalog.objects}}"
            - name: notify-merchant
              type: call
              call: "slack.post-message"
              with:
                channel: "{{merchant_slack_channel}}"
                text: "Menu sync complete for store {{store_id}}. {{upload-menu.items_synced}} items uploaded, {{upload-menu.items_skipped}} skipped. Last synced: {{upload-menu.synced_at}}."
  consumes:
    - type: http
      namespace: square
      baseUri: "https://connect.squareup.com/v2"
      authentication:
        type: bearer
        token: "$secrets.square_access_token"
      resources:
        - name: catalog
          path: "/catalog/list"
          operations:
            - name: list-catalog
              method: GET
    - type: http
      namespace: doordash-merchant
      baseUri: "https://api.doordash.com/merchant/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_merchant_token"
      resources:
        - name: menus
          path: "/stores/{{store_id}}/menu"
          inputParameters:
            - name: store_id
              in: path
          operations:
            - name: update-menu
              method: PUT
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: chat
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Propagates merchant menu updates by syncing with the tablet, updating the catalog, and invalidating cache.

naftiko: "0.5"
info:
  label: "Merchant Menu Update Propagation Pipeline"
  description: "Propagates merchant menu updates by syncing with the tablet, updating the catalog, and invalidating cache."
  tags:
    - merchant
    - catalog
    - redis
    - apache-kafka
capability:
  exposes:
    - type: mcp
      namespace: merchant-menu-update-propagation
      port: 8080
      tools:
        - name: run-merchant-menu-update-propagation-pi
          description: "Propagates merchant menu updates by syncing with the tablet, updating the catalog, and invalidating cache."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "catalog.get-items"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "kafka.publish-event"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "slack.send-message"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: catalog
      baseUri: "https://api.doordash.com/catalog/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_catalog_token"
      resources:
        - name: items
          path: "/items"
          operations:
            - name: get-items
              method: GET
    - type: http
      namespace: kafka
      baseUri: "https://kafka.doordash.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kafka_token"
      resources:
        - name: topics
          path: "/topics"
          operations:
            - name: publish-event
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: send-message
              method: POST

Retrieves a merchant's payout details, verifies the Stripe Connect deposit status, and emails the merchant a payout summary via SendGrid.

naftiko: "0.5"
info:
  label: "Merchant Payout Summary and Email"
  description: "Retrieves a merchant's payout details, verifies the Stripe Connect deposit status, and emails the merchant a payout summary via SendGrid."
  tags:
    - merchant
    - payments
    - finance
    - doordash-merchant
    - stripe
    - sendgrid
capability:
  exposes:
    - type: mcp
      namespace: merchant-finance
      port: 8080
      tools:
        - name: get-and-email-payout
          description: "Look up a merchant's payout, verify deposit status in Stripe, and email the summary."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The DoorDash merchant store identifier."
            - name: payout_period
              in: body
              type: string
              description: "The payout period (e.g., 2026-W12)."
          steps:
            - name: get-payout
              type: call
              call: "doordash-merchant.get-payout"
              with:
                store_id: "{{store_id}}"
                payout_period: "{{payout_period}}"
            - name: get-store
              type: call
              call: "doordash-merchant.get-store"
              with:
                store_id: "{{store_id}}"
            - name: email-summary
              type: call
              call: "sendgrid.send-email"
              with:
                to: "{{get-store.contact_email}}"
                template_id: "d-merchant-payout-summary"
                dynamic_template_data:
                  store_name: "{{get-store.name}}"
                  period: "{{payout_period}}"
                  gross: "{{get-payout.payout.gross_cents}}"
                  commission: "{{get-payout.payout.commission_cents}}"
                  net: "{{get-payout.payout.net_cents}}"
                  deposit_status: "{{get-payout.payout.deposit_status}}"
  consumes:
    - type: http
      namespace: doordash-merchant
      baseUri: "https://api.doordash.com/merchant/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_merchant_token"
      resources:
        - name: payouts
          path: "/stores/{{store_id}}/payouts/{{payout_period}}"
          inputParameters:
            - name: store_id
              in: path
            - name: payout_period
              in: path
          operations:
            - name: get-payout
              method: GET

Pulls merchant order metrics from the DoorDash analytics API, fetches customer satisfaction scores, generates a summary via OpenAI, and sends the weekly report via SendGrid.

naftiko: "0.5"
info:
  label: "Merchant Performance Report Generator"
  description: "Pulls merchant order metrics from the DoorDash analytics API, fetches customer satisfaction scores, generates a summary via OpenAI, and sends the weekly report via SendGrid."
  tags:
    - merchant
    - analytics
    - openai
    - sendgrid
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: merchant-reporting
      port: 8080
      tools:
        - name: generate-merchant-report
          description: "Given a store ID and date range, pull performance metrics, generate an AI summary, and email the report to the merchant."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The DoorDash merchant store identifier."
            - name: start_date
              in: body
              type: string
              description: "Report start date in YYYY-MM-DD format."
            - name: end_date
              in: body
              type: string
              description: "Report end date in YYYY-MM-DD format."
          steps:
            - name: get-metrics
              type: call
              call: "doordash-analytics.get-store-metrics"
              with:
                store_id: "{{store_id}}"
                start_date: "{{start_date}}"
                end_date: "{{end_date}}"
            - name: get-ratings
              type: call
              call: "doordash-analytics.get-store-ratings"
              with:
                store_id: "{{store_id}}"
                start_date: "{{start_date}}"
                end_date: "{{end_date}}"
            - name: generate-summary
              type: call
              call: "openai.create-chat-completion"
              with:
                model: "gpt-4o"
                messages:
                  - role: "system"
                    content: "You are a restaurant business analyst. Summarize the following performance data into actionable insights."
                  - role: "user"
                    content: "Orders: {{get-metrics.total_orders}}, Revenue: ${{get-metrics.total_revenue}}, Avg prep time: {{get-metrics.avg_prep_time_min}} min, Cancel rate: {{get-metrics.cancel_rate}}%, Avg rating: {{get-ratings.average_score}}/5."
            - name: send-report
              type: call
              call: "sendgrid.send-email"
              with:
                to: "{{get-metrics.merchant_email}}"
                template_id: "d-merchant-weekly-report"
                dynamic_template_data:
                  store_name: "{{get-metrics.store_name}}"
                  summary: "{{generate-summary.choices[0].message.content}}"
                  period: "{{start_date}} to {{end_date}}"
  consumes:
    - type: http
      namespace: doordash-analytics
      baseUri: "https://api.doordash.com/analytics/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_analytics_token"
      resources:
        - name: store-metrics
          path: "/stores/{{store_id}}/metrics"
          inputParameters:
            - name: store_id
              in: path
          operations:
            - name: get-store-metrics
              method: GET
        - name: store-ratings
          path: "/stores/{{store_id}}/ratings"
          inputParameters:
            - name: store_id
              in: path
          operations:
            - name: get-store-ratings
              method: GET
    - type: http
      namespace: openai
      baseUri: "https://api.openai.com/v1"
      authentication:
        type: bearer
        token: "$secrets.openai_api_key"
      resources:
        - name: chat-completions
          path: "/chat/completions"
          operations:
            - name: create-chat-completion
              method: POST
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: mail
          path: "/mail/send"
          operations:
            - name: send-email
              method: POST

Verifies merchant menu photos by running image classification via ML, comparing against standards, and notifying.

naftiko: "0.5"
info:
  label: "Merchant Photo Verification Pipeline"
  description: "Verifies merchant menu photos by running image classification via ML, comparing against standards, and notifying."
  tags:
    - merchant
    - machine-learning
    - catalog
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: merchant-photo-verification
      port: 8080
      tools:
        - name: run-merchant-photo-verification-pipelin
          description: "Verifies merchant menu photos by running image classification via ML, comparing against standards, and notifying."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "ml.run-prediction"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "catalog.get-items"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "msteams.send-notification"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: ml
      baseUri: "https://ml.doordash.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ml_token"
      resources:
        - name: predictions
          path: "/predict"
          operations:
            - name: run-prediction
              method: POST
    - type: http
      namespace: catalog
      baseUri: "https://api.doordash.com/catalog/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_catalog_token"
      resources:
        - name: items
          path: "/items"
          operations:
            - name: get-items
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/messages"
          operations:
            - name: send-notification
              method: POST

Alerts on declining merchant ratings by monitoring scores, analyzing trends, and notifying merchant success.

naftiko: "0.5"
info:
  label: "Merchant Rating Alert Pipeline"
  description: "Alerts on declining merchant ratings by monitoring scores, analyzing trends, and notifying merchant success."
  tags:
    - merchant
    - snowflake
    - analytics
    - slack
capability:
  exposes:
    - type: mcp
      namespace: merchant-rating-alert
      port: 8080
      tools:
        - name: run-merchant-rating-alert-pipeline
          description: "Alerts on declining merchant ratings by monitoring scores, analyzing trends, and notifying merchant success."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "snowflake.execute-query"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "merchant.get-store"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "slack.send-message"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://doordash.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: merchant
      baseUri: "https://api.doordash.com/merchant/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_merchant_token"
      resources:
        - name: stores
          path: "/stores"
          operations:
            - name: get-store
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: send-message
              method: POST

Retrieves the aggregate customer ratings and review summary for a merchant store from the DoorDash analytics API.

naftiko: "0.5"
info:
  label: "Merchant Rating Lookup"
  description: "Retrieves the aggregate customer ratings and review summary for a merchant store from the DoorDash analytics API."
  tags:
    - merchant
    - analytics
    - doordash-analytics
capability:
  exposes:
    - type: mcp
      namespace: merchant-ratings
      port: 8080
      tools:
        - name: get-merchant-ratings
          description: "Look up aggregate ratings for a merchant store."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The DoorDash merchant store identifier."
          call: "doordash-analytics.get-store-ratings"
          with:
            store_id: "{{store_id}}"
          outputParameters:
            - name: average_rating
              type: number
              mapping: "$.ratings.average"
            - name: total_reviews
              type: number
              mapping: "$.ratings.total_count"
            - name: five_star_pct
              type: number
              mapping: "$.ratings.distribution.five_star_pct"
  consumes:
    - type: http
      namespace: doordash-analytics
      baseUri: "https://api.doordash.com/analytics/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_analytics_token"
      resources:
        - name: store-ratings
          path: "/stores/{{store_id}}/ratings"
          inputParameters:
            - name: store_id
              in: path
          operations:
            - name: get-store-ratings
              method: GET

Reconciles merchant revenue by pulling order totals from Snowflake, matching against Stripe payouts, and notifying finance via Slack.

naftiko: "0.5"
info:
  label: "Merchant Revenue Reconciliation Pipeline"
  description: "Reconciles merchant revenue by pulling order totals from Snowflake, matching against Stripe payouts, and notifying finance via Slack."
  tags:
    - merchant
    - snowflake
    - stripe
    - slack
capability:
  exposes:
    - type: mcp
      namespace: merchant-revenue-reconciliation
      port: 8080
      tools:
        - name: run-merchant-revenue-reconciliation-pip
          description: "Reconciles merchant revenue by pulling order totals from Snowflake, matching against Stripe payouts, and notifying finance via Slack."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "snowflake.execute-query"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "stripe.get-payment"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "slack.send-message"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://doordash.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_secret_key"
      resources:
        - name: payments
          path: "/payment_intents"
          operations:
            - name: get-payment
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: send-message
              method: POST

Fetches the current operating hours for a merchant store, checks if the store is unexpectedly closed during scheduled hours, and alerts the merchant ops team in Slack if an anomaly is detected.

naftiko: "0.5"
info:
  label: "Merchant Store Hours and Availability Check"
  description: "Fetches the current operating hours for a merchant store, checks if the store is unexpectedly closed during scheduled hours, and alerts the merchant ops team in Slack if an anomaly is detected."
  tags:
    - merchant
    - store-management
    - doordash-merchant
    - slack
capability:
  exposes:
    - type: mcp
      namespace: merchant-ops
      port: 8080
      tools:
        - name: check-store-availability
          description: "Retrieve store hours and alert if unexpectedly closed during operating hours."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The DoorDash merchant store identifier."
          steps:
            - name: get-store-hours
              type: call
              call: "doordash-merchant.get-store-hours"
              with:
                store_id: "{{store_id}}"
            - name: get-store-info
              type: call
              call: "doordash-merchant.get-store"
              with:
                store_id: "{{store_id}}"
            - name: alert-if-closed
              type: call
              call: "slack.post-message"
              with:
                channel: "#merchant-ops"
                text: "Store availability check for {{get-store-info.name}} ({{store_id}}): Currently open: {{get-store-hours.currently_open}}. Scheduled hours: {{get-store-hours.hours.regular}}."
  consumes:
    - type: http
      namespace: doordash-merchant
      baseUri: "https://api.doordash.com/merchant/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_merchant_token"
      resources:
        - name: store-hours
          path: "/stores/{{store_id}}/hours"
          inputParameters:
            - name: store_id
              in: path
          operations:
            - name: get-store-hours
              method: GET
        - name: stores
          path: "/stores/{{store_id}}"
          inputParameters:
            - name: store_id
              in: path
          operations:
            - name: get-store
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: chat
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Pauses or resumes a merchant store's availability on the DoorDash platform, used when merchants need to temporarily stop receiving orders due to capacity or operational issues.

naftiko: "0.5"
info:
  label: "Merchant Store Pause and Resume"
  description: "Pauses or resumes a merchant store's availability on the DoorDash platform, used when merchants need to temporarily stop receiving orders due to capacity or operational issues."
  tags:
    - merchant
    - store-management
    - doordash-merchant
capability:
  exposes:
    - type: mcp
      namespace: merchant-availability
      port: 8080
      tools:
        - name: update-store-status
          description: "Pause or resume a merchant store by store ID."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The DoorDash merchant store identifier."
            - name: status
              in: body
              type: string
              description: "The desired status: 'paused' or 'active'."
            - name: reason
              in: body
              type: string
              description: "The reason for the status change."
          call: "doordash-merchant.update-store-status"
          with:
            store_id: "{{store_id}}"
            status: "{{status}}"
            reason: "{{reason}}"
  consumes:
    - type: http
      namespace: doordash-merchant
      baseUri: "https://api.doordash.com/merchant/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_merchant_token"
      resources:
        - name: store-status
          path: "/stores/{{store_id}}/status"
          inputParameters:
            - name: store_id
              in: path
          operations:
            - name: update-store-status
              method: PUT

Checks the connectivity status of a merchant's DoorDash tablet, and if offline, creates a Zendesk ticket, alerts the merchant via SendGrid, and notifies the merchant ops team in Slack.

naftiko: "0.5"
info:
  label: "Merchant Tablet Health Monitor"
  description: "Checks the connectivity status of a merchant's DoorDash tablet, and if offline, creates a Zendesk ticket, alerts the merchant via SendGrid, and notifies the merchant ops team in Slack."
  tags:
    - merchant
    - monitoring
    - zendesk
    - sendgrid
    - slack
    - doordash-merchant
capability:
  exposes:
    - type: mcp
      namespace: tablet-monitoring
      port: 8080
      tools:
        - name: check-tablet-health
          description: "Given a store ID, check the tablet connectivity and alert stakeholders if offline."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The DoorDash merchant store identifier."
          steps:
            - name: get-tablet-status
              type: call
              call: "doordash-merchant.get-tablet-status"
              with:
                store_id: "{{store_id}}"
            - name: create-ticket
              type: call
              call: "zendesk.create-ticket"
              with:
                subject: "Tablet Offline — Store {{store_id}}"
                description: "Merchant tablet for store {{store_id}} has been offline since {{get-tablet-status.last_seen}}. Last known IP: {{get-tablet-status.last_ip}}. Firmware: {{get-tablet-status.firmware_version}}."
                priority: "high"
                tags: "tablet-offline,merchant-tech"
            - name: email-merchant
              type: call
              call: "sendgrid.send-email"
              with:
                to: "{{get-tablet-status.merchant_email}}"
                template_id: "d-tablet-offline-alert"
                dynamic_template_data:
                  store_name: "{{get-tablet-status.store_name}}"
                  last_seen: "{{get-tablet-status.last_seen}}"
                  troubleshoot_url: "https://help.doordash.com/merchants/tablet-troubleshooting"
            - name: alert-ops
              type: call
              call: "slack.post-message"
              with:
                channel: "#merchant-tech-ops"
                text: "Tablet offline for store {{store_id}} ({{get-tablet-status.store_name}}). Last seen: {{get-tablet-status.last_seen}}. Zendesk: {{create-ticket.id}}."
  consumes:
    - type: http
      namespace: doordash-merchant
      baseUri: "https://api.doordash.com/merchant/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_merchant_token"
      resources:
        - name: tablet-status
          path: "/stores/{{store_id}}/tablet/status"
          inputParameters:
            - name: store_id
              in: path
          operations:
            - name: get-tablet-status
              method: GET
    - type: http
      namespace: zendesk
      baseUri: "https://doordash.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_api_token"
      resources:
        - name: tickets
          path: "/tickets.json"
          operations:
            - name: create-ticket
              method: POST
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: mail
          path: "/mail/send"
          operations:
            - name: send-email
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: chat
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Generates merchant tax reports by pulling earnings from Snowflake, computing 1099 data, and distributing via email.

naftiko: "0.5"
info:
  label: "Merchant Tax Reporting Pipeline"
  description: "Generates merchant tax reports by pulling earnings from Snowflake, computing 1099 data, and distributing via email."
  tags:
    - finance
    - snowflake
    - stripe
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: merchant-tax-reporting
      port: 8080
      tools:
        - name: run-merchant-tax-reporting-pipeline
          description: "Generates merchant tax reports by pulling earnings from Snowflake, computing 1099 data, and distributing via email."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "snowflake.execute-query"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "stripe.get-payment"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "outlook.send-email"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://doordash.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_secret_key"
      resources:
        - name: payments
          path: "/payment_intents"
          operations:
            - name: get-payment
              method: GET
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/me/sendMail"
          operations:
            - name: send-email
              method: POST

When an ML model makes a delivery time prediction, logs the prediction to Datadog for monitoring, stores it in Snowflake for analysis, and alerts the ML ops team in Slack if prediction drift exceeds thresholds.

naftiko: "0.5"
info:
  label: "ML Model Prediction Logging Pipeline"
  description: "When an ML model makes a delivery time prediction, logs the prediction to Datadog for monitoring, stores it in Snowflake for analysis, and alerts the ML ops team in Slack if prediction drift exceeds thresholds."
  tags:
    - ml-ops
    - analytics
    - datadog
    - snowflake
    - slack
capability:
  exposes:
    - type: mcp
      namespace: ml-monitoring
      port: 8080
      tools:
        - name: log-prediction
          description: "Given a model name, prediction value, and actual value, log metrics, store for analysis, and alert on drift."
          inputParameters:
            - name: model_name
              in: body
              type: string
              description: "The ML model identifier."
            - name: prediction_value
              in: body
              type: number
              description: "The predicted value (e.g., delivery time in minutes)."
            - name: actual_value
              in: body
              type: number
              description: "The actual observed value."
            - name: order_id
              in: body
              type: string
              description: "The associated order ID."
          steps:
            - name: log-to-datadog
              type: call
              call: "datadog.submit-metrics"
              with:
                series:
                  - metric: "ml.prediction.{{model_name}}"
                    points:
                      - value: "{{prediction_value}}"
                    tags:
                      - "model:{{model_name}}"
                      - "order:{{order_id}}"
                  - metric: "ml.prediction_error.{{model_name}}"
                    points:
                      - value: "{{actual_value}}"
                    tags:
                      - "model:{{model_name}}"
            - name: store-in-snowflake
              type: call
              call: "snowflake.execute-query"
              with:
                warehouse: "ML_WH"
                database: "DOORDASH_ML"
                schema: "PREDICTIONS"
                statement: "INSERT INTO prediction_log (model_name, order_id, predicted, actual, logged_at) VALUES ('{{model_name}}', '{{order_id}}', {{prediction_value}}, {{actual_value}}, CURRENT_TIMESTAMP())"
            - name: alert-on-drift
              type: call
              call: "slack.post-message"
              with:
                channel: "#ml-ops-alerts"
                text: "Prediction drift for {{model_name}}: predicted={{prediction_value}}, actual={{actual_value}}, error={{actual_value}}-{{prediction_value}}. Order: {{order_id}}."
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: apiKey
        name: DD-API-KEY
        in: header
        value: "$secrets.datadog_api_key"
      resources:
        - name: metrics
          path: "/series"
          operations:
            - name: submit-metrics
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://doordash.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_jwt_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: chat
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Launches DoorDash in a new market by onboarding merchants, configuring zones, and announcing via Braze campaigns.

naftiko: "0.5"
info:
  label: "New Market Launch Pipeline"
  description: "Launches DoorDash in a new market by onboarding merchants, configuring zones, and announcing via Braze campaigns."
  tags:
    - operations
    - merchant
    - braze
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: new-market-launch
      port: 8080
      tools:
        - name: run-new-market-launch-pipeline
          description: "Launches DoorDash in a new market by onboarding merchants, configuring zones, and announcing via Braze campaigns."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "merchant.get-store"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "braze.trigger-campaign"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "msteams.send-notification"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: merchant
      baseUri: "https://api.doordash.com/merchant/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_merchant_token"
      resources:
        - name: stores
          path: "/stores"
          operations:
            - name: get-store
              method: GET
    - type: http
      namespace: braze
      baseUri: "https://rest.iad-01.braze.com"
      authentication:
        type: bearer
        token: "$secrets.braze_api_key"
      resources:
        - name: campaigns
          path: "/campaigns/trigger/send"
          operations:
            - name: trigger-campaign
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/messages"
          operations:
            - name: send-notification
              method: POST

Onboards a new merchant by creating their account in the DoorDash merchant portal, provisioning a Stripe Connect account for payouts, setting up a Zendesk organization, and sending welcome materials via SendGrid.

naftiko: "0.5"
info:
  label: "New Merchant Onboarding Workflow"
  description: "Onboards a new merchant by creating their account in the DoorDash merchant portal, provisioning a Stripe Connect account for payouts, setting up a Zendesk organization, and sending welcome materials via SendGrid."
  tags:
    - merchant
    - onboarding
    - stripe
    - zendesk
    - sendgrid
    - doordash-merchant
capability:
  exposes:
    - type: mcp
      namespace: merchant-onboarding
      port: 8080
      tools:
        - name: onboard-merchant
          description: "Given merchant details, create accounts across all platforms and send the welcome kit."
          inputParameters:
            - name: business_name
              in: body
              type: string
              description: "The merchant business name."
            - name: contact_email
              in: body
              type: string
              description: "The merchant primary contact email."
            - name: contact_phone
              in: body
              type: string
              description: "The merchant primary contact phone."
            - name: address
              in: body
              type: string
              description: "The merchant store address."
          steps:
            - name: create-merchant
              type: call
              call: "doordash-merchant.create-store"
              with:
                business_name: "{{business_name}}"
                contact_email: "{{contact_email}}"
                contact_phone: "{{contact_phone}}"
                address: "{{address}}"
            - name: create-stripe-account
              type: call
              call: "stripe.create-connect-account"
              with:
                type: "express"
                email: "{{contact_email}}"
                business_profile:
                  name: "{{business_name}}"
                  url: "https://doordash.com/store/{{create-merchant.store_id}}"
            - name: create-zendesk-org
              type: call
              call: "zendesk.create-organization"
              with:
                name: "{{business_name}}"
                external_id: "{{create-merchant.store_id}}"
                tags: "merchant,new-onboarding"
            - name: send-welcome
              type: call
              call: "sendgrid.send-email"
              with:
                to: "{{contact_email}}"
                template_id: "d-merchant-welcome"
                dynamic_template_data:
                  business_name: "{{business_name}}"
                  store_id: "{{create-merchant.store_id}}"
                  portal_url: "https://merchant.doordash.com/store/{{create-merchant.store_id}}"
  consumes:
    - type: http
      namespace: doordash-merchant
      baseUri: "https://api.doordash.com/merchant/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_merchant_token"
      resources:
        - name: stores
          path: "/stores"
          operations:
            - name: create-store
              method: POST
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_secret_key"
      resources:
        - name: accounts
          path: "/accounts"
          operations:
            - name: create-connect-account
              method: POST
    - type: http
      namespace: zendesk
      baseUri: "https://doordash.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_api_token"
      resources:
        - name: organizations
          path: "/organizations.json"
          operations:
            - name: create-organization
              method: POST
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: mail
          path: "/mail/send"
          operations:
            - name: send-email
              method: POST

Queries order analytics from Snowflake for a given market and date range, then posts a formatted summary to the business analytics Slack channel for stakeholder visibility.

naftiko: "0.5"
info:
  label: "Order Analytics Dashboard Builder"
  description: "Queries order analytics from Snowflake for a given market and date range, then posts a formatted summary to the business analytics Slack channel for stakeholder visibility."
  tags:
    - analytics
    - data-warehouse
    - snowflake
    - slack
capability:
  exposes:
    - type: mcp
      namespace: data-analytics
      port: 8080
      tools:
        - name: query-and-share-analytics
          description: "Run an order analytics query on Snowflake and share results in Slack."
          inputParameters:
            - name: market_id
              in: body
              type: string
              description: "The DoorDash market identifier."
            - 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."
          steps:
            - name: query-orders
              type: call
              call: "snowflake.execute-query"
              with:
                warehouse: "ANALYTICS_WH"
                database: "DOORDASH_PROD"
                schema: "ORDERS"
                statement: "SELECT market_id, COUNT(*) as order_count, SUM(subtotal_cents)/100 as revenue_usd, AVG(subtotal_cents)/100 as avg_basket_usd FROM orders WHERE market_id = '{{market_id}}' AND created_at BETWEEN '{{start_date}}' AND '{{end_date}}' GROUP BY market_id"
            - name: post-summary
              type: call
              call: "slack.post-message"
              with:
                channel: "#biz-analytics"
                text: "Market {{market_id}} analytics ({{start_date}} to {{end_date}}): Orders: {{query-orders.data[0].ORDER_COUNT}}, Revenue: ${{query-orders.data[0].REVENUE_USD}}, Avg basket: ${{query-orders.data[0].AVG_BASKET_USD}}."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://doordash.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_jwt_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: chat
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Optimizes order batching by analyzing proximity, computing efficient batches, and updating assignments.

naftiko: "0.5"
info:
  label: "Order Batching Optimization Pipeline"
  description: "Optimizes order batching by analyzing proximity, computing efficient batches, and updating assignments."
  tags:
    - logistics
    - dispatch
    - mapbox
    - apache-kafka
capability:
  exposes:
    - type: mcp
      namespace: order-batching-optimization
      port: 8080
      tools:
        - name: run-order-batching-optimization-pipelin
          description: "Optimizes order batching by analyzing proximity, computing efficient batches, and updating assignments."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "dispatch.create-delivery"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "mapbox.get-route"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "kafka.publish-event"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: dispatch
      baseUri: "https://api.doordash.com/dispatch/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_dispatch_token"
      resources:
        - name: deliveries
          path: "/deliveries"
          operations:
            - name: create-delivery
              method: POST
    - type: http
      namespace: mapbox
      baseUri: "https://api.mapbox.com"
      authentication:
        type: bearer
        token: "$secrets.mapbox_token"
      resources:
        - name: directions
          path: "/directions/v5"
          operations:
            - name: get-route
              method: GET
    - type: http
      namespace: kafka
      baseUri: "https://kafka.doordash.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kafka_token"
      resources:
        - name: topics
          path: "/topics"
          operations:
            - name: publish-event
              method: POST

Processes an order cancellation by updating the order status, refunding the payment via Stripe, notifying the merchant and Dasher, and sending the customer a cancellation confirmation via Twilio.

naftiko: "0.5"
info:
  label: "Order Cancellation Workflow"
  description: "Processes an order cancellation by updating the order status, refunding the payment via Stripe, notifying the merchant and Dasher, and sending the customer a cancellation confirmation via Twilio."
  tags:
    - order-management
    - cancellation
    - stripe
    - twilio
    - doordash-orders
    - doordash-merchant
capability:
  exposes:
    - type: mcp
      namespace: order-cancellation
      port: 8080
      tools:
        - name: cancel-order
          description: "Given an order ID and cancellation reason, process the full cancellation across all systems."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The DoorDash order identifier."
            - name: cancellation_reason
              in: body
              type: string
              description: "The reason for cancellation."
            - name: initiated_by
              in: body
              type: string
              description: "Who initiated the cancellation (customer, merchant, dasher, system)."
          steps:
            - name: get-order
              type: call
              call: "doordash-orders.get-order"
              with:
                order_id: "{{order_id}}"
            - name: cancel-order-status
              type: call
              call: "doordash-orders.update-order-status"
              with:
                order_id: "{{order_id}}"
                status: "cancelled"
                reason: "{{cancellation_reason}}"
                initiated_by: "{{initiated_by}}"
            - name: refund-payment
              type: call
              call: "stripe.create-refund"
              with:
                payment_intent: "{{get-order.payment_intent_id}}"
            - name: notify-merchant
              type: call
              call: "doordash-merchant.send-order-notification"
              with:
                store_id: "{{get-order.store_id}}"
                order_id: "{{order_id}}"
                notification_type: "cancellation"
            - name: notify-customer
              type: call
              call: "twilio.send-sms"
              with:
                to: "{{get-order.customer_phone}}"
                body: "Your DoorDash order #{{order_id}} has been cancelled. Reason: {{cancellation_reason}}. A full refund of ${{get-order.total_amount}} will be processed to your payment method."
  consumes:
    - type: http
      namespace: doordash-orders
      baseUri: "https://api.doordash.com/v2"
      authentication:
        type: bearer
        token: "$secrets.doordash_api_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET
            - name: update-order-status
              method: PATCH
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_secret_key"
      resources:
        - name: refunds
          path: "/refunds"
          operations:
            - name: create-refund
              method: POST
    - type: http
      namespace: doordash-merchant
      baseUri: "https://api.doordash.com/merchant/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_merchant_token"
      resources:
        - name: order-notifications
          path: "/stores/{{store_id}}/orders/{{order_id}}/notify"
          inputParameters:
            - name: store_id
              in: path
            - name: order_id
              in: path
          operations:
            - name: send-order-notification
              method: POST
    - type: http
      namespace: twilio
      baseUri: "https://api.twilio.com/2010-04-01/Accounts/$secrets.twilio_account_sid"
      authentication:
        type: basic
        username: "$secrets.twilio_account_sid"
        password: "$secrets.twilio_auth_token"
      resources:
        - name: messages
          path: "/Messages.json"
          operations:
            - name: send-sms
              method: POST

When a new order is placed, validates payment via Stripe, notifies the merchant through the merchant portal API, dispatches to the delivery assignment service, and sends the customer a confirmation via Twilio SMS.

naftiko: "0.5"
info:
  label: "Order Lifecycle Orchestrator"
  description: "When a new order is placed, validates payment via Stripe, notifies the merchant through the merchant portal API, dispatches to the delivery assignment service, and sends the customer a confirmation via Twilio SMS."
  tags:
    - order-management
    - payments
    - merchant
    - delivery
    - stripe
    - twilio
capability:
  exposes:
    - type: mcp
      namespace: order-lifecycle
      port: 8080
      tools:
        - name: process-new-order
          description: "Given an order ID and customer ID, validate the payment, notify the merchant, assign a Dasher, and confirm the order with the customer."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The DoorDash order identifier."
            - name: customer_id
              in: body
              type: string
              description: "The DoorDash customer identifier."
            - name: payment_intent_id
              in: body
              type: string
              description: "The Stripe payment intent ID for this order."
          steps:
            - name: confirm-payment
              type: call
              call: "stripe.capture-payment-intent"
              with:
                payment_intent_id: "{{payment_intent_id}}"
            - name: get-order-details
              type: call
              call: "doordash-orders.get-order"
              with:
                order_id: "{{order_id}}"
            - name: notify-merchant
              type: call
              call: "doordash-merchant.send-order-notification"
              with:
                store_id: "{{get-order-details.store_id}}"
                order_id: "{{order_id}}"
                items: "{{get-order-details.items}}"
            - name: dispatch-dasher
              type: call
              call: "doordash-dispatch.assign-delivery"
              with:
                order_id: "{{order_id}}"
                pickup_address: "{{get-order-details.store_address}}"
                dropoff_address: "{{get-order-details.delivery_address}}"
            - name: send-confirmation
              type: call
              call: "twilio.send-sms"
              with:
                to: "{{get-order-details.customer_phone}}"
                body: "Your DoorDash order #{{order_id}} has been confirmed! Estimated delivery: {{dispatch-dasher.eta_minutes}} minutes."
  consumes:
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_secret_key"
      resources:
        - name: payment-intents
          path: "/payment_intents/{{payment_intent_id}}/capture"
          inputParameters:
            - name: payment_intent_id
              in: path
          operations:
            - name: capture-payment-intent
              method: POST
    - type: http
      namespace: doordash-orders
      baseUri: "https://api.doordash.com/v2"
      authentication:
        type: bearer
        token: "$secrets.doordash_api_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET
    - type: http
      namespace: doordash-merchant
      baseUri: "https://api.doordash.com/merchant/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_merchant_token"
      resources:
        - name: order-notifications
          path: "/stores/{{store_id}}/orders/{{order_id}}/notify"
          inputParameters:
            - name: store_id
              in: path
            - name: order_id
              in: path
          operations:
            - name: send-order-notification
              method: POST
    - type: http
      namespace: doordash-dispatch
      baseUri: "https://api.doordash.com/dispatch/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_dispatch_token"
      resources:
        - name: deliveries
          path: "/deliveries"
          operations:
            - name: assign-delivery
              method: POST
    - type: http
      namespace: twilio
      baseUri: "https://api.twilio.com/2010-04-01/Accounts/$secrets.twilio_account_sid"
      authentication:
        type: basic
        username: "$secrets.twilio_account_sid"
        password: "$secrets.twilio_auth_token"
      resources:
        - name: messages
          path: "/Messages.json"
          operations:
            - name: send-sms
              method: POST

Processes a post-delivery tip adjustment by updating the order tip in the DoorDash system, adjusting the Dasher payout via the payment service, and notifying the Dasher via Twilio SMS.

naftiko: "0.5"
info:
  label: "Order Tip Adjustment Processor"
  description: "Processes a post-delivery tip adjustment by updating the order tip in the DoorDash system, adjusting the Dasher payout via the payment service, and notifying the Dasher via Twilio SMS."
  tags:
    - order-management
    - payments
    - dasher-ops
    - twilio
    - doordash-orders
capability:
  exposes:
    - type: mcp
      namespace: tip-adjustment
      port: 8080
      tools:
        - name: adjust-tip
          description: "Given an order ID and new tip amount, update the tip and notify the Dasher."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The DoorDash order identifier."
            - name: new_tip_cents
              in: body
              type: number
              description: "The new tip amount in cents."
          steps:
            - name: get-order
              type: call
              call: "doordash-orders.get-order"
              with:
                order_id: "{{order_id}}"
            - name: update-tip
              type: call
              call: "doordash-orders.update-tip"
              with:
                order_id: "{{order_id}}"
                tip_cents: "{{new_tip_cents}}"
            - name: notify-dasher
              type: call
              call: "twilio.send-sms"
              with:
                to: "{{get-order.dasher_phone}}"
                body: "Great news! Your tip for order #{{order_id}} was updated to ${{new_tip_cents}}. Thank you for your delivery!"
  consumes:
    - type: http
      namespace: doordash-orders
      baseUri: "https://api.doordash.com/v2"
      authentication:
        type: bearer
        token: "$secrets.doordash_api_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET
        - name: tips
          path: "/orders/{{order_id}}/tip"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: update-tip
              method: PUT
    - type: http
      namespace: twilio
      baseUri: "https://api.twilio.com/2010-04-01/Accounts/$secrets.twilio_account_sid"
      authentication:
        type: basic
        username: "$secrets.twilio_account_sid"
        password: "$secrets.twilio_auth_token"
      resources:
        - name: messages
          path: "/Messages.json"
          operations:
            - name: send-sms
              method: POST

Creates a PagerDuty incident for a given service, used by DoorDash SRE and operations teams to escalate infrastructure and service issues.

naftiko: "0.5"
info:
  label: "PagerDuty Incident Creator"
  description: "Creates a PagerDuty incident for a given service, used by DoorDash SRE and operations teams to escalate infrastructure and service issues."
  tags:
    - sre
    - pagerduty
    - incident-management
capability:
  exposes:
    - type: mcp
      namespace: incident-mgmt
      port: 8080
      tools:
        - name: create-pagerduty-incident
          description: "Create a PagerDuty incident for a DoorDash service."
          inputParameters:
            - name: service_id
              in: body
              type: string
              description: "The PagerDuty service identifier."
            - name: title
              in: body
              type: string
              description: "The incident title."
            - name: urgency
              in: body
              type: string
              description: "The incident urgency (high or low)."
            - name: details
              in: body
              type: string
              description: "The incident body details."
          call: "pagerduty.create-incident"
          with:
            service_id: "{{service_id}}"
            title: "{{title}}"
            urgency: "{{urgency}}"
            body: "{{details}}"
  consumes:
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_api_token"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST

Manages peak hour surges by monitoring demand via Kafka, adjusting incentives, and notifying operations.

naftiko: "0.5"
info:
  label: "Peak Hour Surge Management Pipeline"
  description: "Manages peak hour surges by monitoring demand via Kafka, adjusting incentives, and notifying operations."
  tags:
    - operations
    - apache-kafka
    - dispatch
    - slack
capability:
  exposes:
    - type: mcp
      namespace: peak-hour-surge-management
      port: 8080
      tools:
        - name: run-peak-hour-surge-management-pipeline
          description: "Manages peak hour surges by monitoring demand via Kafka, adjusting incentives, and notifying operations."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "kafka.publish-event"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "dispatch.create-delivery"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "slack.send-message"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: kafka
      baseUri: "https://kafka.doordash.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kafka_token"
      resources:
        - name: topics
          path: "/topics"
          operations:
            - name: publish-event
              method: POST
    - type: http
      namespace: dispatch
      baseUri: "https://api.doordash.com/dispatch/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_dispatch_token"
      resources:
        - name: deliveries
          path: "/deliveries"
          operations:
            - name: create-delivery
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: send-message
              method: POST

Fetches the customer's DashPass status, queries the ML recommendation service for personalized restaurants factoring in subscription tier, and sends a push notification with top picks via Braze.

naftiko: "0.5"
info:
  label: "Personalized Restaurant Recommendation Pipeline"
  description: "Fetches the customer's DashPass status, queries the ML recommendation service for personalized restaurants factoring in subscription tier, and sends a push notification with top picks via Braze."
  tags:
    - ml-ops
    - recommendations
    - customer-experience
    - doordash-ml
    - braze
capability:
  exposes:
    - type: mcp
      namespace: recommendations
      port: 8080
      tools:
        - name: recommend-and-notify
          description: "Get personalized restaurant recommendations and push them to the customer."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "The DoorDash customer identifier."
            - name: latitude
              in: body
              type: number
              description: "Customer's current latitude."
            - name: longitude
              in: body
              type: number
              description: "Customer's current longitude."
          steps:
            - name: get-subscription
              type: call
              call: "doordash-subscriptions.get-subscription"
              with:
                customer_id: "{{customer_id}}"
            - name: get-recommendations
              type: call
              call: "doordash-ml.get-recommendations"
              with:
                customer_id: "{{customer_id}}"
                lat: "{{latitude}}"
                lng: "{{longitude}}"
                subscription_tier: "{{get-subscription.subscription.plan}}"
                limit: "5"
            - name: send-push
              type: call
              call: "braze.send-messages"
              with:
                external_user_ids:
                  - "{{customer_id}}"
                messages:
                  apple_push:
                    alert:
                      title: "Hungry? We picked these for you"
                      body: "Top pick: {{get-recommendations.recommendations[0].store_name}} — order now!"
  consumes:
    - type: http
      namespace: doordash-subscriptions
      baseUri: "https://api.doordash.com/v2"
      authentication:
        type: bearer
        token: "$secrets.doordash_api_token"
      resources:
        - name: subscriptions
          path: "/customers/{{customer_id}}/subscription"
          inputParameters:
            - name: customer_id
              in: path
          operations:
            - name: get-subscription
              method: GET
    - type: http
      namespace: doordash-ml
      baseUri: "https://api.doordash.com/ml/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_ml_token"
      resources:
        - name: recommendations
          path: "/recommendations/restaurants"
          operations:
            - name: get-recommendations
              method: POST
    - type: http
      namespace: braze
      baseUri: "https://rest.iad-01.braze.com"
      authentication:
        type: bearer
        token: "$secrets.braze_api_key"
      resources:
        - name: messages
          path: "/messages/send"
          operations:
            - name: send-messages
              method: POST

Generates platform health dashboards by pulling Datadog metrics, computing SLIs, and refreshing Grafana.

naftiko: "0.5"
info:
  label: "Platform Health Dashboard Pipeline"
  description: "Generates platform health dashboards by pulling Datadog metrics, computing SLIs, and refreshing Grafana."
  tags:
    - operations
    - datadog
    - grafana
    - slack
capability:
  exposes:
    - type: mcp
      namespace: platform-health-dashboard
      port: 8080
      tools:
        - name: run-platform-health-dashboard-pipeline
          description: "Generates platform health dashboards by pulling Datadog metrics, computing SLIs, and refreshing Grafana."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "datadog.get-metrics"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "grafana.refresh-dashboard"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "slack.send-message"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: get-metrics
              method: GET
    - type: http
      namespace: grafana
      baseUri: "https://grafana.doordash.com/api"
      authentication:
        type: bearer
        token: "$secrets.grafana_token"
      resources:
        - name: dashboards
          path: "/dashboards"
          operations:
            - name: refresh-dashboard
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: send-message
              method: POST

Validates a promotional code against the promotions service, checks the customer's recent promo usage in Snowflake for abuse patterns, and logs the validation attempt to Datadog.

naftiko: "0.5"
info:
  label: "Promo Code Validation and Fraud Check"
  description: "Validates a promotional code against the promotions service, checks the customer's recent promo usage in Snowflake for abuse patterns, and logs the validation attempt to Datadog."
  tags:
    - promotions
    - order-management
    - fraud
    - doordash-promotions
    - snowflake
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: promo-validation
      port: 8080
      tools:
        - name: validate-promo-with-fraud-check
          description: "Validate a promo code, check for abuse patterns, and log the attempt."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "The DoorDash customer identifier."
            - name: promo_code
              in: body
              type: string
              description: "The promotional code to validate."
            - name: cart_subtotal_cents
              in: body
              type: number
              description: "The current cart subtotal in cents."
          steps:
            - name: validate-promo
              type: call
              call: "doordash-promotions.validate-promo"
              with:
                customer_id: "{{customer_id}}"
                code: "{{promo_code}}"
                subtotal_cents: "{{cart_subtotal_cents}}"
            - name: check-abuse
              type: call
              call: "snowflake.execute-query"
              with:
                warehouse: "ANALYTICS_WH"
                database: "DOORDASH_PROD"
                schema: "PROMOTIONS"
                statement: "SELECT COUNT(*) as promo_uses FROM promo_redemptions WHERE customer_id = '{{customer_id}}' AND redeemed_at > DATEADD(day, -30, CURRENT_DATE())"
            - name: log-validation
              type: call
              call: "datadog.submit-metrics"
              with:
                series:
                  - metric: "promo.validation_attempt"
                    points:
                      - value: 1
                    tags:
                      - "code:{{promo_code}}"
                      - "valid:{{validate-promo.is_valid}}"
                      - "customer:{{customer_id}}"
  consumes:
    - type: http
      namespace: doordash-promotions
      baseUri: "https://api.doordash.com/promotions/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_promotions_token"
      resources:
        - name: promo-validation
          path: "/codes/validate"
          operations:
            - name: validate-promo
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://doordash.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_jwt_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: apiKey
        name: DD-API-KEY
        in: header
        value: "$secrets.datadog_api_key"
      resources:
        - name: metrics
          path: "/series"
          operations:
            - name: submit-metrics
              method: POST

Launches a promotional campaign by creating a promo code in the DoorDash promotions system, configuring the audience segment in Braze, sending push notifications, and tracking the campaign in Snowflake.

naftiko: "0.5"
info:
  label: "Promotional Campaign Launcher"
  description: "Launches a promotional campaign by creating a promo code in the DoorDash promotions system, configuring the audience segment in Braze, sending push notifications, and tracking the campaign in Snowflake."
  tags:
    - marketing
    - promotions
    - braze
    - snowflake
    - doordash-promotions
capability:
  exposes:
    - type: mcp
      namespace: campaign-launcher
      port: 8080
      tools:
        - name: launch-promo-campaign
          description: "Given campaign details, create the promo code, configure the audience in Braze, and send push notifications."
          inputParameters:
            - name: campaign_name
              in: body
              type: string
              description: "The marketing campaign name."
            - name: promo_code
              in: body
              type: string
              description: "The promotional code string."
            - name: discount_percent
              in: body
              type: number
              description: "The discount percentage."
            - name: audience_segment_id
              in: body
              type: string
              description: "The Braze audience segment identifier."
            - name: expiry_date
              in: body
              type: string
              description: "The promo code expiration date in YYYY-MM-DD format."
          steps:
            - name: create-promo
              type: call
              call: "doordash-promotions.create-promo-code"
              with:
                code: "{{promo_code}}"
                discount_percent: "{{discount_percent}}"
                expiry_date: "{{expiry_date}}"
                campaign_name: "{{campaign_name}}"
            - name: trigger-campaign
              type: call
              call: "braze.trigger-campaign"
              with:
                campaign_id: "{{create-promo.campaign_id}}"
                segment_id: "{{audience_segment_id}}"
                trigger_properties:
                  promo_code: "{{promo_code}}"
                  discount: "{{discount_percent}}%"
                  expires: "{{expiry_date}}"
            - name: log-campaign
              type: call
              call: "snowflake.execute-query"
              with:
                warehouse: "MARKETING_WH"
                database: "DOORDASH_MARKETING"
                schema: "CAMPAIGNS"
                statement: "INSERT INTO campaign_launches (name, promo_code, discount_pct, segment_id, launched_at) VALUES ('{{campaign_name}}', '{{promo_code}}', {{discount_percent}}, '{{audience_segment_id}}', CURRENT_TIMESTAMP())"
  consumes:
    - type: http
      namespace: doordash-promotions
      baseUri: "https://api.doordash.com/promotions/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_promotions_token"
      resources:
        - name: promo-codes
          path: "/codes"
          operations:
            - name: create-promo-code
              method: POST
    - type: http
      namespace: braze
      baseUri: "https://rest.iad-01.braze.com"
      authentication:
        type: bearer
        token: "$secrets.braze_api_key"
      resources:
        - name: campaigns
          path: "/campaigns/trigger/send"
          operations:
            - name: trigger-campaign
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://doordash.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_jwt_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST

Measures promotional effectiveness by pulling redemption data from Snowflake, computing ROI, and reporting in Amplitude.

naftiko: "0.5"
info:
  label: "Promotional Effectiveness Pipeline"
  description: "Measures promotional effectiveness by pulling redemption data from Snowflake, computing ROI, and reporting in Amplitude."
  tags:
    - marketing
    - snowflake
    - amplitude
    - braze
capability:
  exposes:
    - type: mcp
      namespace: promotional-effectiveness
      port: 8080
      tools:
        - name: run-promotional-effectiveness-pipeline
          description: "Measures promotional effectiveness by pulling redemption data from Snowflake, computing ROI, and reporting in Amplitude."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "snowflake.execute-query"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "amplitude.get-events"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "braze.trigger-campaign"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://doordash.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: amplitude
      baseUri: "https://amplitude.com/api/2"
      authentication:
        type: bearer
        token: "$secrets.amplitude_api_key"
      resources:
        - name: events
          path: "/events"
          operations:
            - name: get-events
              method: GET
    - type: http
      namespace: braze
      baseUri: "https://rest.iad-01.braze.com"
      authentication:
        type: bearer
        token: "$secrets.braze_api_key"
      resources:
        - name: campaigns
          path: "/campaigns/trigger/send"
          operations:
            - name: trigger-campaign
              method: POST

Forecasts delivery demand by pulling historical data from Snowflake, running time-series models, and publishing to Kafka.

naftiko: "0.5"
info:
  label: "Real-Time Demand Forecasting Pipeline"
  description: "Forecasts delivery demand by pulling historical data from Snowflake, running time-series models, and publishing to Kafka."
  tags:
    - logistics
    - snowflake
    - machine-learning
    - apache-kafka
capability:
  exposes:
    - type: mcp
      namespace: real-time-demand-forecasting
      port: 8080
      tools:
        - name: run-real-time-demand-forecasting-pipeli
          description: "Forecasts delivery demand by pulling historical data from Snowflake, running time-series models, and publishing to Kafka."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "snowflake.execute-query"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "ml.run-prediction"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "kafka.publish-event"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://doordash.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: ml
      baseUri: "https://ml.doordash.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ml_token"
      resources:
        - name: predictions
          path: "/predict"
          operations:
            - name: run-prediction
              method: POST
    - type: http
      namespace: kafka
      baseUri: "https://kafka.doordash.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kafka_token"
      resources:
        - name: topics
          path: "/topics"
          operations:
            - name: publish-event
              method: POST

Retrieves a cached value from Redis for fast data access.

naftiko: "0.5"
info:
  label: "Redis Cache Lookup"
  description: "Retrieves a cached value from Redis for fast data access."
  tags:
    - infrastructure
    - redis
capability:
  exposes:
    - type: mcp
      namespace: infrastructure
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves a cached value from Redis for fast data access."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary identifier."
          call: "redis.get-data"
          with:
            input_id: "{{input_id}}"
  consumes:
    - type: http
      namespace: redis
      baseUri: "https://api.doordash.com/infrastructure/v1"
      authentication:
        type: bearer
        token: "$secrets.redis_token"
      resources:
        - name: data
          path: "/{{input_id}}"
          inputParameters:
            - name: input_id
              in: path
          operations:
            - name: get-data
              method: GET

Ensures restaurant onboarding quality by verifying menu completeness, photo standards, and readiness with Jira tracking.

naftiko: "0.5"
info:
  label: "Restaurant Onboarding Quality Pipeline"
  description: "Ensures restaurant onboarding quality by verifying menu completeness, photo standards, and readiness with Jira tracking."
  tags:
    - merchant
    - catalog
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: restaurant-onboarding-quality
      port: 8080
      tools:
        - name: run-restaurant-onboarding-quality-pipel
          description: "Ensures restaurant onboarding quality by verifying menu completeness, photo standards, and readiness with Jira tracking."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "catalog.get-items"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "jira.create-issue"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "msteams.send-notification"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: catalog
      baseUri: "https://api.doordash.com/catalog/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_catalog_token"
      resources:
        - name: items
          path: "/items"
          operations:
            - name: get-items
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://doordash.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/messages"
          operations:
            - name: send-notification
              method: POST

Audits restaurant quality by analyzing order complaints, computing quality scores, and creating improvement tasks in Jira.

naftiko: "0.5"
info:
  label: "Restaurant Quality Audit Pipeline"
  description: "Audits restaurant quality by analyzing order complaints, computing quality scores, and creating improvement tasks in Jira."
  tags:
    - merchant
    - snowflake
    - machine-learning
    - jira
capability:
  exposes:
    - type: mcp
      namespace: restaurant-quality-audit
      port: 8080
      tools:
        - name: run-restaurant-quality-audit-pipeline
          description: "Audits restaurant quality by analyzing order complaints, computing quality scores, and creating improvement tasks in Jira."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "snowflake.execute-query"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "ml.run-prediction"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "jira.create-issue"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://doordash.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: ml
      baseUri: "https://ml.doordash.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ml_token"
      resources:
        - name: predictions
          path: "/predict"
          operations:
            - name: run-prediction
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://doordash.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Tracks a customer event in Segment for analytics and personalization.

naftiko: "0.5"
info:
  label: "Segment Event Tracker"
  description: "Tracks a customer event in Segment for analytics and personalization."
  tags:
    - analytics
    - segment
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: get-data
          description: "Tracks a customer event in Segment for analytics and personalization."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary identifier."
          call: "segment.get-data"
          with:
            input_id: "{{input_id}}"
  consumes:
    - type: http
      namespace: segment
      baseUri: "https://api.doordash.com/analytics/v1"
      authentication:
        type: bearer
        token: "$secrets.segment_token"
      resources:
        - name: data
          path: "/{{input_id}}"
          inputParameters:
            - name: input_id
              in: path
          operations:
            - name: get-data
              method: GET

Sends an operational notification to a Slack channel for real-time team communication.

naftiko: "0.5"
info:
  label: "Slack Ops Channel Notification"
  description: "Sends an operational notification to a Slack channel for real-time team communication."
  tags:
    - operations
    - slack
capability:
  exposes:
    - type: mcp
      namespace: operations
      port: 8080
      tools:
        - name: get-data
          description: "Sends an operational notification to a Slack channel for real-time team communication."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary identifier."
          call: "slack.get-data"
          with:
            input_id: "{{input_id}}"
  consumes:
    - type: http
      namespace: slack
      baseUri: "https://api.doordash.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: data
          path: "/{{input_id}}"
          inputParameters:
            - name: input_id
              in: path
          operations:
            - name: get-data
              method: GET

Executes an order analytics query against the Snowflake data warehouse.

naftiko: "0.5"
info:
  label: "Snowflake Order Analytics Query"
  description: "Executes an order analytics query against the Snowflake data warehouse."
  tags:
    - analytics
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: get-data
          description: "Executes an order analytics query against the Snowflake data warehouse."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary identifier."
          call: "snowflake.get-data"
          with:
            input_id: "{{input_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://api.doordash.com/analytics/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: data
          path: "/{{input_id}}"
          inputParameters:
            - name: input_id
              in: path
          operations:
            - name: get-data
              method: GET

Retrieves a Stripe Connect account by ID, returning the merchant payout account status, verification requirements, and banking details.

naftiko: "0.5"
info:
  label: "Stripe Connect Account Lookup"
  description: "Retrieves a Stripe Connect account by ID, returning the merchant payout account status, verification requirements, and banking details."
  tags:
    - payments
    - stripe
    - merchant
    - finance
capability:
  exposes:
    - type: mcp
      namespace: merchant-payments
      port: 8080
      tools:
        - name: get-connect-account
          description: "Look up a Stripe Connect account by account ID."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The Stripe Connect account identifier."
          call: "stripe.get-account"
          with:
            account_id: "{{account_id}}"
          outputParameters:
            - name: charges_enabled
              type: boolean
              mapping: "$.charges_enabled"
            - name: payouts_enabled
              type: boolean
              mapping: "$.payouts_enabled"
            - name: requirements
              type: object
              mapping: "$.requirements"
            - name: business_profile
              type: object
              mapping: "$.business_profile"
  consumes:
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_secret_key"
      resources:
        - name: accounts
          path: "/accounts/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account
              method: GET

Retrieves a Stripe payment intent by ID, returning charge status, amount, currency, and payment method details for a DoorDash order.

naftiko: "0.5"
info:
  label: "Stripe Payment Intent Lookup"
  description: "Retrieves a Stripe payment intent by ID, returning charge status, amount, currency, and payment method details for a DoorDash order."
  tags:
    - payments
    - stripe
    - finance
capability:
  exposes:
    - type: mcp
      namespace: payments
      port: 8080
      tools:
        - name: get-payment-status
          description: "Look up a Stripe payment intent by ID. Returns status, amount, currency, and last four digits of the card."
          inputParameters:
            - name: payment_intent_id
              in: body
              type: string
              description: "The Stripe payment intent identifier."
          call: "stripe.get-payment-intent"
          with:
            payment_intent_id: "{{payment_intent_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
            - name: amount
              type: number
              mapping: "$.amount"
            - name: currency
              type: string
              mapping: "$.currency"
            - name: card_last4
              type: string
              mapping: "$.charges.data[0].payment_method_details.card.last4"
  consumes:
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_secret_key"
      resources:
        - name: payment-intents
          path: "/payment_intents/{{payment_intent_id}}"
          inputParameters:
            - name: payment_intent_id
              in: path
          operations:
            - name: get-payment-intent
              method: GET

Manages DashPass renewals by checking eligibility, processing payment via Stripe, and sending confirmation via Twilio.

naftiko: "0.5"
info:
  label: "Subscription Renewal Pipeline"
  description: "Manages DashPass renewals by checking eligibility, processing payment via Stripe, and sending confirmation via Twilio."
  tags:
    - subscription
    - stripe
    - twilio
    - segment
capability:
  exposes:
    - type: mcp
      namespace: subscription-renewal
      port: 8080
      tools:
        - name: run-subscription-renewal-pipeline
          description: "Manages DashPass renewals by checking eligibility, processing payment via Stripe, and sending confirmation via Twilio."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: scope
              in: body
              type: string
              description: "The processing scope."
          steps:
            - name: fetch-data
              type: call
              call: "stripe.get-payment"
              with:
                input_id: "{{input_id}}"
            - name: process-data
              type: call
              call: "twilio.send-sms"
              with:
                data: "{{fetch-data.result}}"
            - name: deliver-results
              type: call
              call: "segment.track-event"
              with:
                data: "{{process-data.result}}"
  consumes:
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_secret_key"
      resources:
        - name: payments
          path: "/payment_intents"
          operations:
            - name: get-payment
              method: GET
    - type: http
      namespace: twilio
      baseUri: "https://api.twilio.com/2010-04-01"
      authentication:
        type: bearer
        token: "$secrets.twilio_token"
      resources:
        - name: messages
          path: "/Messages.json"
          operations:
            - name: send-sms
              method: POST
    - type: http
      namespace: segment
      baseUri: "https://api.segment.io/v1"
      authentication:
        type: bearer
        token: "$secrets.segment_write_key"
      resources:
        - name: events
          path: "/track"
          operations:
            - name: track-event
              method: POST

Checks current surge pricing multipliers for a delivery zone from the pricing service, compares against thresholds, and if exceeded posts an alert to Slack and creates a PagerDuty incident.

naftiko: "0.5"
info:
  label: "Surge Pricing Monitor and Alert"
  description: "Checks current surge pricing multipliers for a delivery zone from the pricing service, compares against thresholds, and if exceeded posts an alert to Slack and creates a PagerDuty incident."
  tags:
    - pricing
    - logistics
    - slack
    - pagerduty
    - doordash-dispatch
capability:
  exposes:
    - type: mcp
      namespace: surge-monitoring
      port: 8080
      tools:
        - name: check-surge-pricing
          description: "Given a zone ID and threshold multiplier, check current surge and alert if threshold is exceeded."
          inputParameters:
            - name: zone_id
              in: body
              type: string
              description: "The DoorDash delivery zone identifier."
            - name: alert_threshold
              in: body
              type: number
              description: "The surge multiplier threshold that triggers alerts."
          steps:
            - name: get-surge
              type: call
              call: "doordash-pricing.get-zone-surge"
              with:
                zone_id: "{{zone_id}}"
            - name: alert-slack
              type: call
              call: "slack.post-message"
              with:
                channel: "#pricing-alerts"
                text: "Surge alert for zone {{zone_id}}: current multiplier {{get-surge.multiplier}}x (threshold: {{alert_threshold}}x). Active orders: {{get-surge.active_orders}}, available Dashers: {{get-surge.available_dashers}}."
            - name: create-incident
              type: call
              call: "pagerduty.create-incident"
              with:
                service_id: "$secrets.pagerduty_pricing_service_id"
                title: "Surge pricing alert — Zone {{zone_id}} at {{get-surge.multiplier}}x"
                urgency: "high"
                body: "Zone {{zone_id}} surge is {{get-surge.multiplier}}x, exceeding threshold of {{alert_threshold}}x. {{get-surge.active_orders}} active orders with {{get-surge.available_dashers}} Dashers."
  consumes:
    - type: http
      namespace: doordash-pricing
      baseUri: "https://api.doordash.com/pricing/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_pricing_token"
      resources:
        - name: zone-surge
          path: "/zones/{{zone_id}}/surge"
          inputParameters:
            - name: zone_id
              in: path
          operations:
            - name: get-zone-surge
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: chat
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_api_token"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST

Sends an SMS delivery notification to a customer via Twilio.

naftiko: "0.5"
info:
  label: "Twilio SMS Delivery Notification"
  description: "Sends an SMS delivery notification to a customer via Twilio."
  tags:
    - notifications
    - twilio
capability:
  exposes:
    - type: mcp
      namespace: notifications
      port: 8080
      tools:
        - name: get-data
          description: "Sends an SMS delivery notification to a customer via Twilio."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary identifier."
          call: "twilio.get-data"
          with:
            input_id: "{{input_id}}"
  consumes:
    - type: http
      namespace: twilio
      baseUri: "https://api.doordash.com/notifications/v1"
      authentication:
        type: bearer
        token: "$secrets.twilio_token"
      resources:
        - name: data
          path: "/{{input_id}}"
          inputParameters:
            - name: input_id
              in: path
          operations:
            - name: get-data
              method: GET

Aggregates a Dasher's weekly performance data, generates a personalized performance review using OpenAI, and sends it as an email via SendGrid with tips for improvement.

naftiko: "0.5"
info:
  label: "Weekly Dasher Performance Review Generator"
  description: "Aggregates a Dasher's weekly performance data, generates a personalized performance review using OpenAI, and sends it as an email via SendGrid with tips for improvement."
  tags:
    - dasher-ops
    - analytics
    - openai
    - sendgrid
    - doordash-dasher
capability:
  exposes:
    - type: mcp
      namespace: dasher-performance
      port: 8080
      tools:
        - name: generate-performance-review
          description: "Given a Dasher ID, pull weekly stats, generate an AI performance review, and email it to the Dasher."
          inputParameters:
            - name: dasher_id
              in: body
              type: string
              description: "The DoorDash Dasher identifier."
            - name: week_start
              in: body
              type: string
              description: "The week start date in YYYY-MM-DD format."
          steps:
            - name: get-dasher
              type: call
              call: "doordash-dasher.get-dasher"
              with:
                dasher_id: "{{dasher_id}}"
            - name: get-ratings
              type: call
              call: "doordash-dasher.get-ratings"
              with:
                dasher_id: "{{dasher_id}}"
            - name: get-earnings
              type: call
              call: "doordash-dasher.get-weekly-stats"
              with:
                dasher_id: "{{dasher_id}}"
                week_start: "{{week_start}}"
            - name: generate-review
              type: call
              call: "openai.create-chat-completion"
              with:
                model: "gpt-4o"
                messages:
                  - role: "system"
                    content: "You are a supportive Dasher performance coach. Write a brief, encouraging weekly performance summary with 2-3 actionable tips."
                  - role: "user"
                    content: "Dasher: {{get-dasher.first_name}}. Rating: {{get-ratings.customer_rating}}/5. Completion: {{get-ratings.completion_rate}}%. On-time: {{get-ratings.on_time_rate}}%. Deliveries: {{get-earnings.total_deliveries}}. Earnings: ${{get-earnings.total_earnings_cents}}."
            - name: send-review
              type: call
              call: "sendgrid.send-email"
              with:
                to: "{{get-dasher.email}}"
                template_id: "d-dasher-weekly-review"
                dynamic_template_data:
                  first_name: "{{get-dasher.first_name}}"
                  review: "{{generate-review.choices[0].message.content}}"
                  week: "{{week_start}}"
  consumes:
    - type: http
      namespace: doordash-dasher
      baseUri: "https://api.doordash.com/dasher/v1"
      authentication:
        type: bearer
        token: "$secrets.doordash_dasher_token"
      resources:
        - name: dashers
          path: "/dashers/{{dasher_id}}"
          inputParameters:
            - name: dasher_id
              in: path
          operations:
            - name: get-dasher
              method: GET
        - name: ratings
          path: "/dashers/{{dasher_id}}/ratings"
          inputParameters:
            - name: dasher_id
              in: path
          operations:
            - name: get-ratings
              method: GET
        - name: weekly-stats
          path: "/dashers/{{dasher_id}}/stats/weekly"
          inputParameters:
            - name: dasher_id
              in: path
          operations:
            - name: get-weekly-stats
              method: GET
    - type: http
      namespace: openai
      baseUri: "https://api.openai.com/v1"
      authentication:
        type: bearer
        token: "$secrets.openai_api_key"
      resources:
        - name: chat-completions
          path: "/chat/completions"
          operations:
            - name: create-chat-completion
              method: POST
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: mail
          path: "/mail/send"
          operations:
            - name: send-email
              method: POST

Retrieves business details and ratings from the Yelp Fusion API for merchant enrichment.

naftiko: "0.5"
info:
  label: "Yelp Business Data Lookup"
  description: "Retrieves business details and ratings from the Yelp Fusion API for merchant enrichment."
  tags:
    - merchant
    - yelp
capability:
  exposes:
    - type: mcp
      namespace: merchant
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves business details and ratings from the Yelp Fusion API for merchant enrichment."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary identifier."
          call: "yelp.get-data"
          with:
            input_id: "{{input_id}}"
  consumes:
    - type: http
      namespace: yelp
      baseUri: "https://api.doordash.com/merchant/v1"
      authentication:
        type: bearer
        token: "$secrets.yelp_token"
      resources:
        - name: data
          path: "/{{input_id}}"
          inputParameters:
            - name: input_id
              in: path
          operations:
            - name: get-data
              method: GET

Retrieves a Zendesk support ticket by ID, returning the ticket subject, status, priority, assignee, and latest comment for customer support agents.

naftiko: "0.5"
info:
  label: "Zendesk Support Ticket Lookup"
  description: "Retrieves a Zendesk support ticket by ID, returning the ticket subject, status, priority, assignee, and latest comment for customer support agents."
  tags:
    - customer-support
    - zendesk
capability:
  exposes:
    - type: mcp
      namespace: support-tickets
      port: 8080
      tools:
        - name: get-support-ticket
          description: "Look up a Zendesk support ticket by ticket ID. Returns subject, status, priority, and assignee."
          inputParameters:
            - name: ticket_id
              in: body
              type: string
              description: "The Zendesk ticket identifier."
          call: "zendesk.get-ticket"
          with:
            ticket_id: "{{ticket_id}}"
          outputParameters:
            - name: subject
              type: string
              mapping: "$.ticket.subject"
            - name: status
              type: string
              mapping: "$.ticket.status"
            - name: priority
              type: string
              mapping: "$.ticket.priority"
            - name: assignee_name
              type: string
              mapping: "$.ticket.assignee.name"
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://doordash.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_api_token"
      resources:
        - name: tickets
          path: "/tickets/{{ticket_id}}.json"
          inputParameters:
            - name: ticket_id
              in: path
          operations:
            - name: get-ticket
              method: GET