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