Uber Capabilities
Naftiko 0.5 capability definitions for Uber - 110 capabilities showing integration workflows and service orchestrations.
When an accessibility complaint is filed, creates a Jira ticket tagged for the accessibility team, notifies the product channel in Slack, and logs the issue in Snowflake for compliance tracking.
naftiko: "0.5"
info:
label: "Accessibility Issue Triage"
description: "When an accessibility complaint is filed, creates a Jira ticket tagged for the accessibility team, notifies the product channel in Slack, and logs the issue in Snowflake for compliance tracking."
tags:
- accessibility
- jira
- slack
- snowflake
- compliance
capability:
exposes:
- type: mcp
namespace: accessibility-ops
port: 8080
tools:
- name: triage-accessibility-issue
description: "Given an accessibility complaint, create a Jira ticket, notify the product team, and log for compliance."
inputParameters:
- name: issue_description
in: body
type: string
description: "Description of the accessibility issue."
- name: platform
in: body
type: string
description: "Platform affected (ios, android, web)."
- name: reporter_email
in: body
type: string
description: "Email of the person reporting."
steps:
- name: create-a11y-ticket
type: call
call: "jira.create-issue"
with:
project_key: "A11Y"
issuetype: "Bug"
summary: "Accessibility issue on {{platform}}: {{issue_description}}"
labels: "accessibility,{{platform}}"
- name: notify-product
type: call
call: "slack.post-message"
with:
channel: "accessibility-team"
text: "New accessibility issue on {{platform}}: {{issue_description}}. Jira: {{create-a11y-ticket.key}}"
- name: log-compliance
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO compliance.accessibility_issues (platform, description, ticket_key, reported_at) VALUES ('{{platform}}', '{{issue_description}}', '{{create-a11y-ticket.key}}', CURRENT_TIMESTAMP())"
consumes:
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
- type: http
namespace: snowflake
baseUri: "https://uber.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
When a large GitHub PR is opened, uses Anthropic to summarize the changes, then posts the AI summary as a PR comment and notifies the team in Slack.
naftiko: "0.5"
info:
label: "AI-Assisted Code Review Summary"
description: "When a large GitHub PR is opened, uses Anthropic to summarize the changes, then posts the AI summary as a PR comment and notifies the team in Slack."
tags:
- engineering
- github
- anthropic
- slack
- ai
capability:
exposes:
- type: mcp
namespace: code-review
port: 8080
tools:
- name: summarize-pr
description: "Given a GitHub PR number and repo, fetch the diff, summarize it with Anthropic, post as a PR comment, and notify Slack."
inputParameters:
- name: repo_name
in: body
type: string
description: "The GitHub repository name."
- name: pr_number
in: body
type: number
description: "The pull request number."
steps:
- name: get-pr-diff
type: call
call: "github.get-pr"
with:
repo: "{{repo_name}}"
pull_number: "{{pr_number}}"
- name: summarize-changes
type: call
call: "anthropic.create-message"
with:
model: "claude-3-5-sonnet-20241022"
max_tokens: 1000
messages: "[{\"role\": \"user\", \"content\": \"Summarize this PR for code review. Focus on risk areas and key changes:\\n{{get-pr-diff.body}}\"}]"
- name: post-pr-comment
type: call
call: "github.create-pr-comment"
with:
repo: "{{repo_name}}"
pull_number: "{{pr_number}}"
body: "AI Review Summary:\\n{{summarize-changes.content}}"
- name: notify-team
type: call
call: "slack.post-message"
with:
channel: "code-reviews"
text: "AI summary posted for PR #{{pr_number}} in {{repo_name}}: {{summarize-changes.content}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: pulls
path: "/repos/uber/{{repo}}/pulls/{{pull_number}}"
inputParameters:
- name: repo
in: path
- name: pull_number
in: path
operations:
- name: get-pr
method: GET
- name: pr-comments
path: "/repos/uber/{{repo}}/issues/{{pull_number}}/comments"
inputParameters:
- name: repo
in: path
- name: pull_number
in: path
operations:
- name: create-pr-comment
method: POST
- type: http
namespace: anthropic
baseUri: "https://api.anthropic.com/v1"
authentication:
type: apikey
key: "x-api-key"
value: "$secrets.anthropic_api_key"
placement: header
resources:
- name: messages
path: "/messages"
operations:
- name: create-message
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: post-message
method: POST
When performance review cycle opens, creates Jira tracking tickets for each team, sends a kickoff message via Slack, and logs the cycle in Snowflake.
naftiko: "0.5"
info:
label: "Annual Performance Review Launcher"
description: "When performance review cycle opens, creates Jira tracking tickets for each team, sends a kickoff message via Slack, and logs the cycle in Snowflake."
tags:
- hr
- jira
- slack
- snowflake
- performance
capability:
exposes:
- type: mcp
namespace: hr-perf
port: 8080
tools:
- name: launch-review-cycle
description: "Given a review cycle name and deadline, create tracking tickets, notify all teams, and log the cycle."
inputParameters:
- name: cycle_name
in: body
type: string
description: "The performance review cycle name (e.g., H1-2026)."
- name: deadline
in: body
type: string
description: "Review submission deadline."
steps:
- name: create-tracking-epic
type: call
call: "jira.create-issue"
with:
project_key: "HR"
issuetype: "Epic"
summary: "Performance review cycle: {{cycle_name}} — due {{deadline}}"
- name: announce-cycle
type: call
call: "slack.post-message"
with:
channel: "all-managers"
text: "Performance review cycle {{cycle_name}} is now open! Deadline: {{deadline}}. Tracking: {{create-tracking-epic.key}}"
- name: log-cycle
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO hr.review_cycles (cycle_name, deadline, launched_at) VALUES ('{{cycle_name}}', '{{deadline}}', CURRENT_TIMESTAMP())"
consumes:
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
- type: http
namespace: snowflake
baseUri: "https://uber.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
When an API rate limit breach is detected by Datadog, identifies the offending client, creates a Jira ticket, and notifies the API platform team via Slack.
naftiko: "0.5"
info:
label: "API Rate Limit Breach Handler"
description: "When an API rate limit breach is detected by Datadog, identifies the offending client, creates a Jira ticket, and notifies the API platform team via Slack."
tags:
- api-management
- datadog
- jira
- slack
capability:
exposes:
- type: mcp
namespace: api-platform
port: 8080
tools:
- name: handle-rate-limit-breach
description: "Given an API endpoint and offending client, create a Jira investigation ticket and notify the platform team."
inputParameters:
- name: api_endpoint
in: body
type: string
description: "The API endpoint experiencing rate limit breaches."
- name: client_id
in: body
type: string
description: "The API client ID exceeding the rate limit."
- name: request_count
in: body
type: number
description: "Number of requests in the breach window."
steps:
- name: create-investigation
type: call
call: "jira.create-issue"
with:
project_key: "PLATFORM"
issuetype: "Bug"
summary: "Rate limit breach: {{api_endpoint}} by client {{client_id}}"
description: "Client {{client_id}} made {{request_count}} requests to {{api_endpoint}} exceeding rate limits."
- name: notify-platform-team
type: call
call: "slack.post-message"
with:
channel: "api-platform-alerts"
text: "Rate limit breach: {{client_id}} on {{api_endpoint}} ({{request_count}} reqs). Jira: {{create-investigation.key}}"
consumes:
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Queries Snowflake for autonomous vehicle fleet telemetry data, creates a Jira report ticket, and posts fleet health to the AV engineering Slack channel.
naftiko: "0.5"
info:
label: "Autonomous Vehicle Telemetry Reporter"
description: "Queries Snowflake for autonomous vehicle fleet telemetry data, creates a Jira report ticket, and posts fleet health to the AV engineering Slack channel."
tags:
- autonomous-vehicles
- snowflake
- jira
- slack
capability:
exposes:
- type: mcp
namespace: av-ops
port: 8080
tools:
- name: generate-av-telemetry-report
description: "Given a fleet region, query telemetry data, create a report ticket, and notify the AV team."
inputParameters:
- name: fleet_region
in: body
type: string
description: "The fleet operating region."
- name: report_date
in: body
type: string
description: "Report date in YYYY-MM-DD format."
steps:
- name: query-telemetry
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT vehicle_id, miles_driven, disengagements, avg_speed FROM av.fleet_telemetry WHERE region='{{fleet_region}}' AND date='{{report_date}}'"
- name: create-report-ticket
type: call
call: "jira.create-issue"
with:
project_key: "AV"
issuetype: "Task"
summary: "Fleet telemetry report: {{fleet_region}} — {{report_date}}"
description: "Data: {{query-telemetry.data}}"
- name: notify-av-team
type: call
call: "slack.post-message"
with:
channel: "av-engineering"
text: "Fleet telemetry for {{fleet_region}} ({{report_date}}): {{query-telemetry.data}}. Report: {{create-report-ticket.key}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://uber.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves the current state and health status of an AWS EC2 instance by instance ID.
naftiko: "0.5"
info:
label: "AWS EC2 Instance Status Check"
description: "Retrieves the current state and health status of an AWS EC2 instance by instance ID."
tags:
- infrastructure
- aws
- ec2
capability:
exposes:
- type: mcp
namespace: cloud-ops
port: 8080
tools:
- name: check-ec2-status
description: "Given an EC2 instance ID, return its current state, status checks, and instance type. Use for infrastructure troubleshooting."
inputParameters:
- name: instance_id
in: body
type: string
description: "The EC2 instance ID."
call: "aws-ec2.describe-instance"
with:
instance_id: "{{instance_id}}"
outputParameters:
- name: state
type: string
mapping: "$.Reservations[0].Instances[0].State.Name"
- name: instance_type
type: string
mapping: "$.Reservations[0].Instances[0].InstanceType"
consumes:
- type: http
namespace: aws-ec2
baseUri: "https://ec2.amazonaws.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.aws_auth_header"
placement: header
resources:
- name: instances
path: "/?Action=DescribeInstances&InstanceId.1={{instance_id}}"
inputParameters:
- name: instance_id
in: query
operations:
- name: describe-instance
method: GET
When CI build times regress beyond threshold, queries Snowflake for build metrics, creates a Jira optimization ticket, and alerts the developer productivity Slack channel.
naftiko: "0.5"
info:
label: "CI Build Time Regression Alert"
description: "When CI build times regress beyond threshold, queries Snowflake for build metrics, creates a Jira optimization ticket, and alerts the developer productivity Slack channel."
tags:
- cicd
- snowflake
- jira
- slack
capability:
exposes:
- type: mcp
namespace: ci-perf
port: 8080
tools:
- name: alert-build-regression
description: "Given a repo and current build time, compare against baseline, create a ticket, and notify the team."
inputParameters:
- name: repo_name
in: body
type: string
description: "The repository name."
- name: current_build_time_s
in: body
type: number
description: "Current build time in seconds."
- name: baseline_build_time_s
in: body
type: number
description: "Baseline build time in seconds."
steps:
- name: log-regression
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO eng.build_regressions (repo, current_time_s, baseline_time_s, detected_at) VALUES ('{{repo_name}}', {{current_build_time_s}}, {{baseline_build_time_s}}, CURRENT_TIMESTAMP())"
- name: create-optimization-ticket
type: call
call: "jira.create-issue"
with:
project_key: "DEVPROD"
issuetype: "Bug"
summary: "CI build regression: {{repo_name}} ({{current_build_time_s}}s vs {{baseline_build_time_s}}s)"
- name: alert-devprod
type: call
call: "slack.post-message"
with:
channel: "developer-productivity"
text: "CI build time regression: {{repo_name}} now {{current_build_time_s}}s (baseline: {{baseline_build_time_s}}s). Ticket: {{create-optimization-ticket.key}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://uber.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a GitHub Actions workflow fails on a protected branch, creates a Jira bug, posts a Datadog deployment marker, and alerts the owning team's Slack channel.
naftiko: "0.5"
info:
label: "CI/CD Pipeline Failure Alert"
description: "When a GitHub Actions workflow fails on a protected branch, creates a Jira bug, posts a Datadog deployment marker, and alerts the owning team's Slack channel."
tags:
- devops
- cicd
- github
- jira
- datadog
- slack
capability:
exposes:
- type: mcp
namespace: cicd-ops
port: 8080
tools:
- name: handle-pipeline-failure
description: "Given a GitHub Actions pipeline failure event on a protected branch, create a Jira bug, post a Datadog deployment marker for observability correlation, and alert the team Slack channel."
inputParameters:
- name: repo_name
in: body
type: string
description: "The GitHub repository where the pipeline failed."
- name: workflow_name
in: body
type: string
description: "The GitHub Actions workflow that failed."
- name: branch
in: body
type: string
description: "The branch where the failure occurred."
- name: commit_sha
in: body
type: string
description: "The commit SHA that triggered the failure."
- name: run_url
in: body
type: string
description: "URL to the failed GitHub Actions run."
- name: team_channel
in: body
type: string
description: "Slack channel for the owning engineering team."
steps:
- name: create-jira-bug
type: call
call: "jira-cicd.create-issue"
with:
project_key: "ENG"
issuetype: "Bug"
summary: "[CI Failure] {{repo_name}} / {{branch}} — {{workflow_name}}"
description: "Commit: {{commit_sha}}\nBranch: {{branch}}\nWorkflow: {{workflow_name}}\nRun: {{run_url}}"
- name: post-datadog-marker
type: call
call: "datadog.create-event"
with:
title: "CI Failure: {{repo_name}} - {{workflow_name}}"
text: "Pipeline failed on {{branch}} at {{commit_sha}}"
alert_type: "error"
- name: alert-team
type: call
call: "slack.post-message"
with:
channel: "{{team_channel}}"
text: "CI Failure: {{repo_name}} | {{branch}} | {{workflow_name}} | Jira: {{create-jira-bug.key}} | Run: {{run_url}}"
consumes:
- type: http
namespace: jira-cicd
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: events
path: "/events"
operations:
- name: create-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: post-message
method: POST
When AWS Cost Anomaly Detection fires an alert, creates a Datadog event, opens a Jira FinOps investigation ticket, and notifies the cloud cost Slack channel.
naftiko: "0.5"
info:
label: "Cloud Cost Anomaly Responder"
description: "When AWS Cost Anomaly Detection fires an alert, creates a Datadog event, opens a Jira FinOps investigation ticket, and notifies the cloud cost Slack channel."
tags:
- finops
- cloud-cost
- datadog
- jira
- slack
- aws
capability:
exposes:
- type: mcp
namespace: finops
port: 8080
tools:
- name: handle-cost-anomaly
description: "Given an AWS cost anomaly alert with service and estimated overage, annotate Datadog, open a Jira investigation ticket, and post a FinOps Slack alert."
inputParameters:
- name: anomaly_id
in: body
type: string
description: "The AWS Cost Anomaly Detection anomaly ID."
- name: service_name
in: body
type: string
description: "The AWS service exhibiting unexpected cost."
- name: estimated_overage_usd
in: body
type: number
description: "Estimated cost overage in USD."
- name: owning_team
in: body
type: string
description: "Engineering team responsible for the service."
steps:
- name: create-datadog-event
type: call
call: "datadog-cost.create-event"
with:
title: "AWS Cost Anomaly: {{service_name}}"
text: "Anomaly {{anomaly_id}} — ${{estimated_overage_usd}} overage — Team: {{owning_team}}"
alert_type: "warning"
- name: create-jira-task
type: call
call: "jira-cost.create-issue"
with:
project_key: "FINOPS"
issuetype: "Task"
summary: "Cost anomaly: {{service_name}} — ${{estimated_overage_usd}} overage"
description: "Anomaly: {{anomaly_id}}\nService: {{service_name}}\nTeam: {{owning_team}}\nDatadog: {{create-datadog-event.url}}"
- name: notify-finops-channel
type: call
call: "slack-cost.post-message"
with:
channel: "cloud-finops"
text: "Cost Anomaly: {{service_name}} | Overage: ${{estimated_overage_usd}} | Team: {{owning_team}} | Jira: {{create-jira-task.key}} | Datadog: {{create-datadog-event.url}}"
consumes:
- type: http
namespace: datadog-cost
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: events
path: "/events"
operations:
- name: create-event
method: POST
- type: http
namespace: jira-cost
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack-cost
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Audits AWS resources for missing mandatory tags, creates Jira tickets for non-compliant resources, and posts a compliance report to the platform Slack channel.
naftiko: "0.5"
info:
label: "Cloud Resource Tagging Compliance"
description: "Audits AWS resources for missing mandatory tags, creates Jira tickets for non-compliant resources, and posts a compliance report to the platform Slack channel."
tags:
- finops
- aws
- jira
- slack
- compliance
capability:
exposes:
- type: mcp
namespace: cloud-compliance
port: 8080
tools:
- name: audit-resource-tags
description: "Given a required tag key, find non-compliant resources, create tickets, and report."
inputParameters:
- name: required_tag
in: body
type: string
description: "The mandatory tag key to check."
- name: resource_type
in: body
type: string
description: "AWS resource type to audit."
steps:
- name: create-compliance-ticket
type: call
call: "jira.create-issue"
with:
project_key: "CLOUD"
issuetype: "Task"
summary: "Tag compliance audit: {{required_tag}} on {{resource_type}}"
- name: report-to-platform
type: call
call: "slack.post-message"
with:
channel: "platform-engineering"
text: "Cloud tag compliance audit: Checking {{required_tag}} on {{resource_type}}. Tracking: {{create-compliance-ticket.key}}"
consumes:
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When compliance training deadlines approach, queries Workday for overdue employees, sends reminders via Slack, and creates a Jira tracking ticket for the compliance team.
naftiko: "0.5"
info:
label: "Compliance Training Overdue Reminder"
description: "When compliance training deadlines approach, queries Workday for overdue employees, sends reminders via Slack, and creates a Jira tracking ticket for the compliance team."
tags:
- compliance
- workday
- slack
- jira
capability:
exposes:
- type: mcp
namespace: compliance-ops
port: 8080
tools:
- name: send-training-reminders
description: "Given a training program name, find overdue employees, send reminders, and create a compliance tracking ticket."
inputParameters:
- name: training_program
in: body
type: string
description: "The compliance training program name."
- name: deadline_date
in: body
type: string
description: "The training deadline in YYYY-MM-DD format."
steps:
- name: create-compliance-ticket
type: call
call: "jira.create-issue"
with:
project_key: "COMPLY"
issuetype: "Task"
summary: "Overdue training: {{training_program}} — deadline {{deadline_date}}"
- name: notify-compliance
type: call
call: "slack.post-message"
with:
channel: "compliance-alerts"
text: "Training reminder: {{training_program}} deadline is {{deadline_date}}. Tracking: {{create-compliance-ticket.key}}"
consumes:
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves the latest version number and last-modified timestamp of a Confluence page by ID.
naftiko: "0.5"
info:
label: "Confluence Page Version Lookup"
description: "Retrieves the latest version number and last-modified timestamp of a Confluence page by ID."
tags:
- documentation
- confluence
capability:
exposes:
- type: mcp
namespace: docs-ops
port: 8080
tools:
- name: get-page-version
description: "Given a Confluence page ID, return its latest version number, title, and last update time. Use for documentation freshness audits."
inputParameters:
- name: page_id
in: body
type: string
description: "The Confluence page ID."
call: "confluence-pages.get-page"
with:
page_id: "{{page_id}}"
outputParameters:
- name: title
type: string
mapping: "$.title"
- name: version
type: number
mapping: "$.version.number"
- name: last_updated
type: string
mapping: "$.version.when"
consumes:
- type: http
namespace: confluence-pages
baseUri: "https://uber.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content/{{page_id}}"
inputParameters:
- name: page_id
in: path
operations:
- name: get-page
method: GET
Queries Confluence for runbook pages not updated in 90 days, creates Jira tickets for each stale runbook, and posts a summary to the SRE Slack channel.
naftiko: "0.5"
info:
label: "Confluence Runbook Expiration Audit"
description: "Queries Confluence for runbook pages not updated in 90 days, creates Jira tickets for each stale runbook, and posts a summary to the SRE Slack channel."
tags:
- documentation
- confluence
- jira
- slack
- sre
capability:
exposes:
- type: mcp
namespace: runbook-audit
port: 8080
tools:
- name: audit-stale-runbooks
description: "Given a Confluence space key, find stale runbooks, create Jira tickets, and alert SRE."
inputParameters:
- name: space_key
in: body
type: string
description: "The Confluence space key to audit."
- name: staleness_days
in: body
type: number
description: "Number of days since last update to consider stale."
steps:
- name: find-stale-pages
type: call
call: "confluence.search-content"
with:
cql: "space={{space_key}} AND label=runbook AND lastModified<now('-{{staleness_days}}d')"
- name: create-review-ticket
type: call
call: "jira.create-issue"
with:
project_key: "SRE"
issuetype: "Task"
summary: "Stale runbook audit: {{find-stale-pages.size}} runbooks need review in {{space_key}}"
- name: notify-sre
type: call
call: "slack.post-message"
with:
channel: "sre-team"
text: "Runbook audit: {{find-stale-pages.size}} stale runbooks found in {{space_key}} (>{{staleness_days}} days). Jira: {{create-review-ticket.key}}"
consumes:
- type: http
namespace: confluence
baseUri: "https://uber.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: search
path: "/search"
operations:
- name: search-content
method: GET
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Scans Confluence engineering runbooks for staleness (not updated in 90 days), creates Jira tasks for owners to refresh them, and posts an audit summary to the engineering Slack channel.
naftiko: "0.5"
info:
label: "Confluence Technical Runbook Audit"
description: "Scans Confluence engineering runbooks for staleness (not updated in 90 days), creates Jira tasks for owners to refresh them, and posts an audit summary to the engineering Slack channel."
tags:
- devops
- documentation
- confluence
- jira
- slack
capability:
exposes:
- type: mcp
namespace: runbook-quality
port: 8080
tools:
- name: audit-runbook-freshness
description: "Given a Confluence space key, find all runbooks not updated in 90 days, create Jira refresh tasks for each owner, and post a stale runbook digest to Slack."
inputParameters:
- name: space_key
in: body
type: string
description: "Confluence space key for engineering runbooks (e.g., RUNBOOKS)."
- name: eng_channel
in: body
type: string
description: "Slack channel for the engineering on-call team."
steps:
- name: get-stale-runbooks
type: call
call: "confluence.search-stale-pages"
with:
spaceKey: "{{space_key}}"
label: "runbook"
- name: create-refresh-task
type: call
call: "jira-runbook.create-issue"
with:
project_key: "ENG"
issuetype: "Task"
summary: "Runbook refresh required: {{space_key}} — {{get-stale-runbooks.count}} stale runbooks"
description: "Stale runbooks in {{space_key}}: {{get-stale-runbooks.page_titles}}"
- name: post-audit-digest
type: call
call: "slack-runbook.post-message"
with:
channel: "{{eng_channel}}"
text: "Runbook Audit: Space {{space_key}} | Stale (90+ days): {{get-stale-runbooks.count}} | Jira refresh task: {{create-refresh-task.key}}"
consumes:
- type: http
namespace: confluence
baseUri: "https://uber.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: pages
path: "/content/search"
inputParameters:
- name: spaceKey
in: query
- name: label
in: query
operations:
- name: search-stale-pages
method: GET
- type: http
namespace: jira-runbook
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack-runbook
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When AWS cloud spend exceeds a budget threshold, queries cost data, creates a Jira ticket for the finance team, and alerts the cost center owner via Slack.
naftiko: "0.5"
info:
label: "Cost Center Budget Alert"
description: "When AWS cloud spend exceeds a budget threshold, queries cost data, creates a Jira ticket for the finance team, and alerts the cost center owner via Slack."
tags:
- finops
- aws
- jira
- slack
capability:
exposes:
- type: mcp
namespace: finops
port: 8080
tools:
- name: alert-budget-overspend
description: "Given a cost center and spend threshold, fetch current spend, create a Jira ticket, and notify the owner."
inputParameters:
- name: cost_center
in: body
type: string
description: "The cost center identifier."
- name: threshold_pct
in: body
type: number
description: "The budget threshold percentage exceeded."
- name: owner_channel
in: body
type: string
description: "Slack channel for the cost center owner."
steps:
- name: create-budget-ticket
type: call
call: "jira.create-issue"
with:
project_key: "FINOPS"
issuetype: "Task"
summary: "Budget alert: {{cost_center}} at {{threshold_pct}}% of budget"
- name: notify-owner
type: call
call: "slack.post-message"
with:
channel: "{{owner_channel}}"
text: "Budget alert: Cost center {{cost_center}} has reached {{threshold_pct}}% of its monthly budget. Review: {{create-budget-ticket.key}}"
consumes:
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When CrowdStrike detects a high-severity endpoint threat on an Uber-managed device, creates a ServiceNow security incident, posts a Slack alert to the SOC, and logs a Datadog security event.
naftiko: "0.5"
info:
label: "CrowdStrike Endpoint Security Alert"
description: "When CrowdStrike detects a high-severity endpoint threat on an Uber-managed device, creates a ServiceNow security incident, posts a Slack alert to the SOC, and logs a Datadog security event."
tags:
- security
- endpoint
- crowdstrike
- servicenow
- slack
- datadog
capability:
exposes:
- type: mcp
namespace: endpoint-security
port: 8080
tools:
- name: handle-endpoint-threat
description: "Given a CrowdStrike detection event with hostname and severity, create a ServiceNow security incident, alert the SOC via Slack, and log a Datadog security event for correlation."
inputParameters:
- name: detection_id
in: body
type: string
description: "The CrowdStrike detection ID."
- name: hostname
in: body
type: string
description: "The hostname of the affected endpoint."
- name: severity
in: body
type: string
description: "Threat severity: critical, high, medium, low."
- name: tactic
in: body
type: string
description: "MITRE ATT&CK tactic of the detected threat."
steps:
- name: create-security-incident
type: call
call: "servicenow-sec.create-incident"
with:
short_description: "Endpoint threat: {{hostname}} — {{severity}} — {{tactic}}"
category: "security"
priority: "1"
description: "Detection ID: {{detection_id}}"
- name: alert-soc
type: call
call: "slack-soc.post-message"
with:
channel: "soc-alerts"
text: "ENDPOINT THREAT: {{hostname}} | Severity: {{severity}} | Tactic: {{tactic}} | Detection: {{detection_id}} | ServiceNow: {{create-security-incident.number}}"
- name: log-datadog-event
type: call
call: "datadog-sec.create-event"
with:
title: "CrowdStrike: {{tactic}} on {{hostname}}"
text: "Detection {{detection_id}}. Severity: {{severity}}. ServiceNow: {{create-security-incident.number}}"
alert_type: "error"
consumes:
- type: http
namespace: servicenow-sec
baseUri: "https://uber.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: slack-soc
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
- type: http
namespace: datadog-sec
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: events
path: "/events"
operations:
- name: create-event
method: POST
Retrieves the number of active detections for a given hostname in CrowdStrike Falcon.
naftiko: "0.5"
info:
label: "CrowdStrike Host Detection Count"
description: "Retrieves the number of active detections for a given hostname in CrowdStrike Falcon."
tags:
- security
- crowdstrike
capability:
exposes:
- type: mcp
namespace: security-ops
port: 8080
tools:
- name: get-host-detections
description: "Given a hostname, return the count of open CrowdStrike detections. Use for security posture reviews and endpoint compliance."
inputParameters:
- name: hostname
in: body
type: string
description: "The hostname to query."
call: "crowdstrike-detections.query-detections"
with:
filter: "device.hostname:'{{hostname}}'"
outputParameters:
- name: detection_count
type: number
mapping: "$.meta.pagination.total"
consumes:
- type: http
namespace: crowdstrike-detections
baseUri: "https://api.crowdstrike.com"
authentication:
type: bearer
token: "$secrets.crowdstrike_token"
resources:
- name: detections
path: "/detects/queries/detects/v1"
operations:
- name: query-detections
method: GET
Pulls recent customer feedback from Snowflake, analyzes sentiment using Anthropic, and posts a weekly sentiment report to the product Slack channel.
naftiko: "0.5"
info:
label: "Customer Sentiment Analysis Pipeline"
description: "Pulls recent customer feedback from Snowflake, analyzes sentiment using Anthropic, and posts a weekly sentiment report to the product Slack channel."
tags:
- analytics
- snowflake
- anthropic
- slack
- ai
capability:
exposes:
- type: mcp
namespace: sentiment-ops
port: 8080
tools:
- name: analyze-customer-sentiment
description: "Given a product area and time range, pull feedback data, run AI sentiment analysis, and post results to Slack."
inputParameters:
- name: product_area
in: body
type: string
description: "Product area (rides, eats, freight)."
- name: days_back
in: body
type: number
description: "Number of days of feedback to analyze."
steps:
- name: pull-feedback
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT feedback_text, rating FROM product.customer_feedback WHERE product_area='{{product_area}}' AND created_at>=DATEADD(day, -{{days_back}}, CURRENT_DATE()) LIMIT 100"
- name: analyze-sentiment
type: call
call: "anthropic.create-message"
with:
model: "claude-3-5-sonnet-20241022"
max_tokens: 1000
messages: "[{\"role\": \"user\", \"content\": \"Analyze the sentiment of this customer feedback and provide a summary with key themes, sentiment breakdown, and top issues:\\n{{pull-feedback.data}}\"}]"
- name: post-report
type: call
call: "slack.post-message"
with:
channel: "product-{{product_area}}"
text: "Weekly Sentiment Report — {{product_area}} (last {{days_back}} days):\n{{analyze-sentiment.content}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://uber.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: anthropic
baseUri: "https://api.anthropic.com/v1"
authentication:
type: apikey
key: "x-api-key"
value: "$secrets.anthropic_api_key"
placement: header
resources:
- name: messages
path: "/messages"
operations:
- name: create-message
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: post-message
method: POST
When a GDPR/CCPA deletion request is received, creates a Jira ticket for the privacy team, logs the request in Snowflake, and notifies the DPO via Slack.
naftiko: "0.5"
info:
label: "Data Privacy Deletion Request"
description: "When a GDPR/CCPA deletion request is received, creates a Jira ticket for the privacy team, logs the request in Snowflake, and notifies the DPO via Slack."
tags:
- privacy
- compliance
- jira
- snowflake
- slack
capability:
exposes:
- type: mcp
namespace: privacy-ops
port: 8080
tools:
- name: process-deletion-request
description: "Given a user ID and request type, create a privacy ticket, log the request, and notify the DPO."
inputParameters:
- name: user_id
in: body
type: string
description: "The user ID requesting data deletion."
- name: request_type
in: body
type: string
description: "Type of request: GDPR_deletion, CCPA_deletion, data_export."
- name: jurisdiction
in: body
type: string
description: "The regulatory jurisdiction (EU, CA, etc.)."
steps:
- name: create-privacy-ticket
type: call
call: "jira.create-issue"
with:
project_key: "PRIVACY"
issuetype: "Task"
summary: "{{request_type}} for user {{user_id}} ({{jurisdiction}})"
priority: "High"
- name: log-request
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO compliance.deletion_requests (user_id, request_type, jurisdiction, ticket_key, requested_at) VALUES ('{{user_id}}', '{{request_type}}', '{{jurisdiction}}', '{{create-privacy-ticket.key}}', CURRENT_TIMESTAMP())"
- name: notify-dpo
type: call
call: "slack.post-message"
with:
channel: "privacy-team"
text: "Data deletion request: {{request_type}} for user {{user_id}} ({{jurisdiction}}). Ticket: {{create-privacy-ticket.key}}"
consumes:
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: snowflake
baseUri: "https://uber.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
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: post-message
method: POST
Before a database migration, checks Snowflake for table sizes, verifies GitHub migration scripts exist, and posts a readiness report to the DBA Slack channel.
naftiko: "0.5"
info:
label: "Database Migration Readiness Check"
description: "Before a database migration, checks Snowflake for table sizes, verifies GitHub migration scripts exist, and posts a readiness report to the DBA Slack channel."
tags:
- data-engineering
- snowflake
- github
- slack
capability:
exposes:
- type: mcp
namespace: dba-ops
port: 8080
tools:
- name: check-migration-readiness
description: "Given a database and target schema, verify table sizes, check migration scripts, and report readiness."
inputParameters:
- name: database_name
in: body
type: string
description: "The source database name."
- name: schema_name
in: body
type: string
description: "The schema to migrate."
- name: migration_repo
in: body
type: string
description: "GitHub repo containing migration scripts."
steps:
- name: check-table-sizes
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT table_name, row_count, bytes FROM {{database_name}}.information_schema.tables WHERE table_schema='{{schema_name}}'"
- name: check-migration-scripts
type: call
call: "github.get-file-contents"
with:
repo: "{{migration_repo}}"
path: "migrations/{{schema_name}}"
- name: post-readiness
type: call
call: "slack.post-message"
with:
channel: "dba-team"
text: "Migration readiness for {{database_name}}.{{schema_name}}:\nTables: {{check-table-sizes.data}}\nScripts available: {{check-migration-scripts.name}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://uber.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: contents
path: "/repos/uber/{{repo}}/contents/{{path}}"
inputParameters:
- name: repo
in: path
- name: path
in: path
operations:
- name: get-file-contents
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: post-message
method: POST
When a Datadog critical alert fires, creates a PagerDuty incident, opens a Jira P1 ticket, and posts the incident to the engineering war room Slack channel.
naftiko: "0.5"
info:
label: "Datadog Alert to PagerDuty Escalation"
description: "When a Datadog critical alert fires, creates a PagerDuty incident, opens a Jira P1 ticket, and posts the incident to the engineering war room Slack channel."
tags:
- incident-response
- datadog
- pagerduty
- jira
- slack
capability:
exposes:
- type: mcp
namespace: incident-escalation
port: 8080
tools:
- name: escalate-datadog-alert
description: "Given a Datadog alert ID and affected service, page the on-call via PagerDuty, create a P1 Jira ticket, and notify the war room."
inputParameters:
- name: monitor_name
in: body
type: string
description: "The Datadog monitor name."
- name: affected_service
in: body
type: string
description: "The affected service name."
- name: alert_url
in: body
type: string
description: "URL to the Datadog alert."
steps:
- name: page-oncall
type: call
call: "pagerduty.create-incident"
with:
title: "Critical: {{monitor_name}} — {{affected_service}}"
service_id: "{{affected_service}}_SRE"
body: "Datadog alert: {{alert_url}}"
- name: create-p1-ticket
type: call
call: "jira.create-issue"
with:
project_key: "INC"
issuetype: "Bug"
summary: "[P1] {{monitor_name}} — {{affected_service}}"
priority: "Highest"
- name: notify-war-room
type: call
call: "slack.post-message"
with:
channel: "eng-war-room"
text: "P1 INCIDENT: {{monitor_name}} | Service: {{affected_service}} | PD: {{page-oncall.incident.id}} | Jira: {{create-p1-ticket.key}} | Alert: {{alert_url}}"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Queries Datadog APM for the p99 latency of a given service over the last hour.
naftiko: "0.5"
info:
label: "Datadog APM Service Latency Check"
description: "Queries Datadog APM for the p99 latency of a given service over the last hour."
tags:
- observability
- datadog
- performance
capability:
exposes:
- type: mcp
namespace: apm-insights
port: 8080
tools:
- name: get-service-latency
description: "Given a Datadog service name, return p99 latency for the last hour. Use for SLO tracking and performance reviews."
inputParameters:
- name: service_name
in: body
type: string
description: "The Datadog APM service name."
call: "datadog-apm.query-timeseries"
with:
query: "avg:trace.http.request.duration.by_service_95p{service:{{service_name}}}"
outputParameters:
- name: p99_latency_ms
type: number
mapping: "$.series[0].pointlist[-1][1]"
consumes:
- type: http
namespace: datadog-apm
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: timeseries
path: "/query"
operations:
- name: query-timeseries
method: GET
Searches Datadog logs for a given query string and returns matching log entries.
naftiko: "0.5"
info:
label: "Datadog Log Search"
description: "Searches Datadog logs for a given query string and returns matching log entries."
tags:
- observability
- datadog
- logging
capability:
exposes:
- type: mcp
namespace: log-ops
port: 8080
tools:
- name: search-logs
description: "Given a Datadog log query, return matching log entries. Use for incident investigation and debugging."
inputParameters:
- name: query
in: body
type: string
description: "The Datadog log search query."
call: "datadog-logs.search-logs"
with:
query: "{{query}}"
outputParameters:
- name: log_count
type: number
mapping: "$.meta.page.total_count"
consumes:
- type: http
namespace: datadog-logs
baseUri: "https://api.datadoghq.com/api/v2"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: logs
path: "/logs/events/search"
operations:
- name: search-logs
method: POST
Retrieves the current health status and recent alert history for a Datadog monitor by ID, for use in incident triage and engineering war rooms.
naftiko: "0.5"
info:
label: "Datadog Service Monitor Lookup"
description: "Retrieves the current health status and recent alert history for a Datadog monitor by ID, for use in incident triage and engineering war rooms."
tags:
- observability
- monitoring
- datadog
capability:
exposes:
- type: mcp
namespace: observability
port: 8080
tools:
- name: get-monitor-status
description: "Given a Datadog monitor ID, return its current state, last triggered time, and overall health. Use during incident war rooms and SLO reviews."
inputParameters:
- name: monitor_id
in: body
type: string
description: "The Datadog monitor ID to look up."
call: "datadog-monitor.get-monitor"
with:
monitor_id: "{{monitor_id}}"
outputParameters:
- name: name
type: string
mapping: "$.name"
- name: overall_state
type: string
mapping: "$.overall_state"
- name: last_triggered_ts
type: string
mapping: "$.state.groups[0].last_triggered_ts"
consumes:
- type: http
namespace: datadog-monitor
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
When a design document is submitted for review, creates a Jira review ticket, posts the document link to the architecture review Slack channel, and updates the Confluence review tracker.
naftiko: "0.5"
info:
label: "Design Review Scheduling Workflow"
description: "When a design document is submitted for review, creates a Jira review ticket, posts the document link to the architecture review Slack channel, and updates the Confluence review tracker."
tags:
- architecture
- jira
- slack
- confluence
capability:
exposes:
- type: mcp
namespace: design-review
port: 8080
tools:
- name: schedule-design-review
description: "Given a design document and author, create a review ticket, notify reviewers, and update the tracker."
inputParameters:
- name: doc_title
in: body
type: string
description: "Title of the design document."
- name: doc_url
in: body
type: string
description: "URL to the design document."
- name: author
in: body
type: string
description: "Author of the design document."
- name: review_team
in: body
type: string
description: "The team that should review."
steps:
- name: create-review-ticket
type: call
call: "jira.create-issue"
with:
project_key: "ARCH"
issuetype: "Task"
summary: "Design review: {{doc_title}} by {{author}}"
description: "Document: {{doc_url}}"
- name: notify-reviewers
type: call
call: "slack.post-message"
with:
channel: "architecture-reviews"
text: "New design review: {{doc_title}} by {{author}}. Doc: {{doc_url}}. Jira: {{create-review-ticket.key}}. Reviewers: {{review_team}}"
- name: update-tracker
type: call
call: "confluence.create-page"
with:
spaceKey: "ARCH"
title: "Review: {{doc_title}}"
body: "Author: {{author}}\nDoc: {{doc_url}}\nJira: {{create-review-ticket.key}}\nStatus: Pending"
consumes:
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
- type: http
namespace: confluence
baseUri: "https://uber.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Distributes developer experience surveys, collects responses in Snowflake, summarizes results with Anthropic AI, and posts insights to the platform engineering Slack channel.
naftiko: "0.5"
info:
label: "Developer Experience Survey Orchestrator"
description: "Distributes developer experience surveys, collects responses in Snowflake, summarizes results with Anthropic AI, and posts insights to the platform engineering Slack channel."
tags:
- developer-experience
- snowflake
- anthropic
- slack
- ai
capability:
exposes:
- type: mcp
namespace: devex-ops
port: 8080
tools:
- name: analyze-devex-survey
description: "Given a survey period, query responses from Snowflake, summarize with AI, and post insights."
inputParameters:
- name: survey_period
in: body
type: string
description: "The survey period (e.g., Q1-2026)."
steps:
- name: query-responses
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT question, AVG(score) as avg_score, COUNT(*) as responses FROM devex.survey_responses WHERE period='{{survey_period}}' GROUP BY question"
- name: summarize-results
type: call
call: "anthropic.create-message"
with:
model: "claude-3-5-sonnet-20241022"
max_tokens: 1000
messages: "[{\"role\": \"user\", \"content\": \"Analyze these developer experience survey results and identify top 3 areas for improvement:\\n{{query-responses.data}}\"}]"
- name: post-insights
type: call
call: "slack.post-message"
with:
channel: "platform-engineering"
text: "DevEx Survey Results — {{survey_period}}:\n{{summarize-results.content}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://uber.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: anthropic
baseUri: "https://api.anthropic.com/v1"
authentication:
type: apikey
key: "x-api-key"
value: "$secrets.anthropic_api_key"
placement: header
resources:
- name: messages
path: "/messages"
operations:
- name: create-message
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: post-message
method: POST
When a DNS change is requested, creates a Jira change request ticket, notifies the network team via Slack, and logs the change in Snowflake for audit.
naftiko: "0.5"
info:
label: "DNS Change Approval Workflow"
description: "When a DNS change is requested, creates a Jira change request ticket, notifies the network team via Slack, and logs the change in Snowflake for audit."
tags:
- infrastructure
- networking
- jira
- slack
- snowflake
capability:
exposes:
- type: mcp
namespace: dns-ops
port: 8080
tools:
- name: request-dns-change
description: "Given DNS change details, create a change request, notify the network team, and log for audit."
inputParameters:
- name: domain
in: body
type: string
description: "The domain name."
- name: record_type
in: body
type: string
description: "DNS record type (A, CNAME, etc.)."
- name: new_value
in: body
type: string
description: "The new DNS record value."
- name: requester
in: body
type: string
description: "The person requesting the change."
steps:
- name: create-change-request
type: call
call: "jira.create-issue"
with:
project_key: "NET"
issuetype: "Task"
summary: "DNS change: {{domain}} {{record_type}} -> {{new_value}}"
description: "Requested by: {{requester}}"
- name: notify-network-team
type: call
call: "slack.post-message"
with:
channel: "network-ops"
text: "DNS change request: {{domain}} {{record_type}} -> {{new_value}}. Requester: {{requester}}. Ticket: {{create-change-request.key}}"
- name: log-change
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO infra.dns_changes (domain, record_type, new_value, requester, ticket_key, requested_at) VALUES ('{{domain}}', '{{record_type}}', '{{new_value}}', '{{requester}}', '{{create-change-request.key}}', CURRENT_TIMESTAMP())"
consumes:
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
- type: http
namespace: snowflake
baseUri: "https://uber.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
When a DocuSign contract is completed, updates the Salesforce opportunity, creates a Jira implementation ticket, and notifies the deal team via Slack.
naftiko: "0.5"
info:
label: "DocuSign Contract Completion Handler"
description: "When a DocuSign contract is completed, updates the Salesforce opportunity, creates a Jira implementation ticket, and notifies the deal team via Slack."
tags:
- legal
- docusign
- salesforce
- jira
- slack
capability:
exposes:
- type: mcp
namespace: contract-ops
port: 8080
tools:
- name: handle-contract-completion
description: "Given a DocuSign envelope ID and deal details, update Salesforce, create implementation tickets, and notify the team."
inputParameters:
- name: envelope_id
in: body
type: string
description: "The DocuSign envelope ID."
- name: opportunity_id
in: body
type: string
description: "The Salesforce opportunity ID."
- name: account_name
in: body
type: string
description: "The account name."
steps:
- name: update-opportunity
type: call
call: "salesforce.update-opportunity"
with:
opportunity_id: "{{opportunity_id}}"
StageName: "Closed Won"
Contract_Signed__c: true
- name: create-implementation-ticket
type: call
call: "jira.create-issue"
with:
project_key: "IMPL"
issuetype: "Epic"
summary: "Implementation: {{account_name}} — Contract signed"
- name: notify-deal-team
type: call
call: "slack.post-message"
with:
channel: "deals-closed"
text: "Contract signed! {{account_name}} (DocuSign: {{envelope_id}}). Implementation: {{create-implementation-ticket.key}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://uber.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{opportunity_id}}"
inputParameters:
- name: opportunity_id
in: path
operations:
- name: update-opportunity
method: PATCH
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a new driver applicant completes registration, initiates a background check, creates a Workday contingent worker record, and notifies the driver ops team via Slack.
naftiko: "0.5"
info:
label: "Driver Background Check Orchestrator"
description: "When a new driver applicant completes registration, initiates a background check, creates a Workday contingent worker record, and notifies the driver ops team via Slack."
tags:
- driver-ops
- workday
- slack
- compliance
capability:
exposes:
- type: mcp
namespace: driver-onboarding
port: 8080
tools:
- name: initiate-driver-background-check
description: "Given driver applicant details, create a Workday contingent worker record, log background check initiation in Jira, and notify driver ops."
inputParameters:
- name: applicant_name
in: body
type: string
description: "Full name of the driver applicant."
- name: applicant_email
in: body
type: string
description: "Email address of the driver applicant."
- name: market
in: body
type: string
description: "The market/city the driver will operate in."
steps:
- name: create-workday-record
type: call
call: "workday.create-contingent-worker"
with:
name: "{{applicant_name}}"
email: "{{applicant_email}}"
worker_type: "driver_applicant"
- name: create-tracking-ticket
type: call
call: "jira.create-issue"
with:
project_key: "DRIVER"
issuetype: "Task"
summary: "Background check: {{applicant_name}} — {{market}}"
- name: notify-driver-ops
type: call
call: "slack.post-message"
with:
channel: "driver-ops-{{market}}"
text: "New driver applicant {{applicant_name}} ({{applicant_email}}) background check initiated. Tracking: {{create-tracking-ticket.key}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: contingent-workers
path: "/workers"
operations:
- name: create-contingent-worker
method: POST
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a driver submits an earnings dispute, queries trip earnings from Snowflake, creates a Jira support ticket, and notifies driver operations via Slack.
naftiko: "0.5"
info:
label: "Driver Earnings Dispute Handler"
description: "When a driver submits an earnings dispute, queries trip earnings from Snowflake, creates a Jira support ticket, and notifies driver operations via Slack."
tags:
- driver-ops
- snowflake
- jira
- slack
capability:
exposes:
- type: mcp
namespace: driver-earnings
port: 8080
tools:
- name: handle-earnings-dispute
description: "Given a driver ID, trip ID, and dispute details, pull earnings data, create a support ticket, and notify driver ops."
inputParameters:
- name: driver_id
in: body
type: string
description: "The driver partner ID."
- name: trip_id
in: body
type: string
description: "The trip ID in question."
- name: dispute_reason
in: body
type: string
description: "Reason for earnings dispute."
steps:
- name: query-earnings
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT fare, earnings, tips, adjustments FROM driver.trip_earnings WHERE driver_id='{{driver_id}}' AND trip_id='{{trip_id}}'"
- name: create-dispute-ticket
type: call
call: "jira.create-issue"
with:
project_key: "DRIVER"
issuetype: "Task"
summary: "Earnings dispute: Driver {{driver_id}} — Trip {{trip_id}}"
description: "Reason: {{dispute_reason}}\nEarnings data: {{query-earnings.data}}"
- name: notify-driver-ops
type: call
call: "slack.post-message"
with:
channel: "driver-operations"
text: "Earnings dispute: Driver {{driver_id}}, Trip {{trip_id}}. Reason: {{dispute_reason}}. Ticket: {{create-dispute-ticket.key}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://uber.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a fraud detection system flags a driver partner account, creates a ServiceNow fraud investigation ticket, notifies the trust and safety team via Slack, and logs the event in Datadog.
naftiko: "0.5"
info:
label: "Driver Partner Fraud Alert Escalation"
description: "When a fraud detection system flags a driver partner account, creates a ServiceNow fraud investigation ticket, notifies the trust and safety team via Slack, and logs the event in Datadog."
tags:
- trust-safety
- fraud
- servicenow
- slack
- datadog
capability:
exposes:
- type: mcp
namespace: fraud-ops
port: 8080
tools:
- name: escalate-fraud-alert
description: "Given a driver partner ID, fraud type, and confidence score, create a ServiceNow investigation ticket, notify the Trust and Safety team via Slack, and post a Datadog security event."
inputParameters:
- name: driver_id
in: body
type: string
description: "The driver partner ID flagged for potential fraud."
- name: fraud_type
in: body
type: string
description: "Type of fraud detected (e.g., GPS spoofing, account takeover, trip manipulation)."
- name: confidence_score
in: body
type: number
description: "Fraud detection confidence score (0.0 to 1.0)."
steps:
- name: create-fraud-ticket
type: call
call: "servicenow-fraud.create-incident"
with:
short_description: "Fraud alert: Driver {{driver_id}} — {{fraud_type}}"
category: "trust_safety"
priority: "2"
description: "Confidence score: {{confidence_score}}"
- name: notify-trust-safety
type: call
call: "slack-fraud.post-message"
with:
channel: "trust-safety-alerts"
text: "Fraud Alert: Driver {{driver_id}} | Type: {{fraud_type}} | Confidence: {{confidence_score}} | ServiceNow: {{create-fraud-ticket.number}}"
- name: log-security-event
type: call
call: "datadog-fraud.create-event"
with:
title: "Fraud Detection: {{fraud_type}} — Driver {{driver_id}}"
text: "Confidence: {{confidence_score}}. ServiceNow ticket: {{create-fraud-ticket.number}}"
alert_type: "warning"
consumes:
- type: http
namespace: servicenow-fraud
baseUri: "https://uber.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: slack-fraud
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
- type: http
namespace: datadog-fraud
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: events
path: "/events"
operations:
- name: create-event
method: POST
When a critical safety incident is reported on the Uber platform, creates a ServiceNow safety incident ticket, escalates to the safety operations team, and notifies legal and compliance via Slack.
naftiko: "0.5"
info:
label: "Driver Safety Incident Escalation"
description: "When a critical safety incident is reported on the Uber platform, creates a ServiceNow safety incident ticket, escalates to the safety operations team, and notifies legal and compliance via Slack."
tags:
- safety
- operations
- servicenow
- slack
- compliance
capability:
exposes:
- type: mcp
namespace: safety-ops
port: 8080
tools:
- name: escalate-safety-incident
description: "Given a safety incident ID, trip ID, and severity, create a ServiceNow safety ticket, escalate to the safety operations and legal teams via Slack."
inputParameters:
- name: incident_id
in: body
type: string
description: "The internal safety incident ID."
- name: trip_id
in: body
type: string
description: "The Uber trip ID associated with the safety incident."
- name: severity
in: body
type: string
description: "Safety incident severity: critical, high, medium."
- name: incident_description
in: body
type: string
description: "Brief description of the safety incident."
steps:
- name: create-safety-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Safety Incident {{incident_id}}: {{severity}} — Trip {{trip_id}}"
category: "safety"
priority: "1"
description: "{{incident_description}}"
- name: notify-safety-ops
type: call
call: "slack-safety.post-message"
with:
channel: "safety-operations"
text: "SAFETY INCIDENT: {{incident_id}} | Trip: {{trip_id}} | Severity: {{severity}} | ServiceNow: {{create-safety-ticket.number}} | Details: {{incident_description}}"
- name: notify-legal
type: call
call: "slack-safety.post-message"
with:
channel: "legal-escalations"
text: "Safety incident flagged for legal review: {{incident_id}} | Severity: {{severity}} | ServiceNow: {{create-safety-ticket.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://uber.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: slack-safety
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a Datadog anomaly is detected in surge pricing metrics, queries Snowflake for pricing data, creates a Jira investigation ticket, and alerts the pricing team via Slack.
naftiko: "0.5"
info:
label: "Dynamic Pricing Anomaly Alert"
description: "When a Datadog anomaly is detected in surge pricing metrics, queries Snowflake for pricing data, creates a Jira investigation ticket, and alerts the pricing team via Slack."
tags:
- pricing
- datadog
- snowflake
- jira
- slack
capability:
exposes:
- type: mcp
namespace: pricing-ops
port: 8080
tools:
- name: investigate-pricing-anomaly
description: "Given a market and anomaly details, query pricing data, create an investigation ticket, and notify the pricing team."
inputParameters:
- name: market
in: body
type: string
description: "The market/city where the anomaly was detected."
- name: anomaly_type
in: body
type: string
description: "Type of anomaly (e.g., surge_spike, multiplier_floor)."
- name: alert_url
in: body
type: string
description: "URL to the Datadog alert."
steps:
- name: query-pricing-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT avg(surge_multiplier), max(surge_multiplier) FROM pricing.surge_events WHERE market='{{market}}' AND event_time>=DATEADD(hour, -1, CURRENT_TIMESTAMP())"
- name: create-investigation
type: call
call: "jira.create-issue"
with:
project_key: "PRICING"
issuetype: "Bug"
summary: "Pricing anomaly: {{anomaly_type}} in {{market}}"
description: "Alert: {{alert_url}}\nData: {{query-pricing-data.data}}"
- name: alert-pricing-team
type: call
call: "slack.post-message"
with:
channel: "pricing-alerts"
text: "Pricing anomaly in {{market}}: {{anomaly_type}}. Jira: {{create-investigation.key}}. Data: avg={{query-pricing-data.data[0][0]}}, max={{query-pricing-data.data[0][1]}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://uber.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When order volume drops unexpectedly in a market, queries Snowflake for order metrics, creates a Jira investigation ticket, and alerts the Eats operations team via Slack.
naftiko: "0.5"
info:
label: "Eats Order Volume Anomaly Handler"
description: "When order volume drops unexpectedly in a market, queries Snowflake for order metrics, creates a Jira investigation ticket, and alerts the Eats operations team via Slack."
tags:
- eats
- snowflake
- jira
- slack
capability:
exposes:
- type: mcp
namespace: eats-ops
port: 8080
tools:
- name: investigate-order-anomaly
description: "Given a market and anomaly details, query order data, create an investigation, and notify the Eats team."
inputParameters:
- name: market
in: body
type: string
description: "The market/city."
- name: drop_percentage
in: body
type: number
description: "Percentage drop in order volume."
steps:
- name: query-order-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT hour, order_count, avg_order_value FROM eats.order_metrics WHERE market='{{market}}' AND date=CURRENT_DATE() ORDER BY hour"
- name: create-investigation
type: call
call: "jira.create-issue"
with:
project_key: "EATS"
issuetype: "Bug"
summary: "Order volume drop in {{market}}: {{drop_percentage}}%"
- name: alert-eats-ops
type: call
call: "slack.post-message"
with:
channel: "eats-operations"
text: "Order volume anomaly: {{market}} down {{drop_percentage}}%. Data: {{query-order-data.data}}. Jira: {{create-investigation.key}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://uber.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a new restaurant partner signs up, creates a Salesforce account, provisions a Jira onboarding project, and sends a welcome email via SendGrid.
naftiko: "0.5"
info:
label: "Eats Restaurant Onboarding Workflow"
description: "When a new restaurant partner signs up, creates a Salesforce account, provisions a Jira onboarding project, and sends a welcome email via SendGrid."
tags:
- eats
- salesforce
- jira
- sendgrid
- onboarding
capability:
exposes:
- type: mcp
namespace: restaurant-ops
port: 8080
tools:
- name: onboard-restaurant-partner
description: "Given restaurant details, create a Salesforce account, Jira onboarding project, and send a welcome email."
inputParameters:
- name: restaurant_name
in: body
type: string
description: "Name of the restaurant."
- name: contact_email
in: body
type: string
description: "Primary contact email."
- name: city
in: body
type: string
description: "City where the restaurant operates."
steps:
- name: create-sf-account
type: call
call: "salesforce.create-account"
with:
Name: "{{restaurant_name}}"
Type: "Restaurant Partner"
BillingCity: "{{city}}"
- name: create-onboarding-project
type: call
call: "jira.create-issue"
with:
project_key: "EATS"
issuetype: "Epic"
summary: "Onboarding: {{restaurant_name}} — {{city}}"
- name: send-welcome-email
type: call
call: "sendgrid.send-email"
with:
to: "{{contact_email}}"
subject: "Welcome to Uber Eats, {{restaurant_name}}!"
body: "Your onboarding has begun. Tracking: {{create-onboarding-project.key}}. Your Salesforce ID: {{create-sf-account.id}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://uber.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account"
operations:
- name: create-account
method: POST
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: 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 employee pulse survey scores from Snowflake, summarizes trends with Anthropic AI, and posts insights to the people team Slack channel.
naftiko: "0.5"
info:
label: "Employee Satisfaction Pulse Check"
description: "Queries employee pulse survey scores from Snowflake, summarizes trends with Anthropic AI, and posts insights to the people team Slack channel."
tags:
- hr
- snowflake
- anthropic
- slack
- ai
capability:
exposes:
- type: mcp
namespace: people-ops
port: 8080
tools:
- name: analyze-pulse-survey
description: "Given a survey month, pull scores, summarize with AI, and share insights."
inputParameters:
- name: survey_month
in: body
type: string
description: "The survey month (e.g., 2026-03)."
steps:
- name: query-scores
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT department, AVG(score) as avg_score, COUNT(*) as responses FROM hr.pulse_surveys WHERE survey_month='{{survey_month}}' GROUP BY department ORDER BY avg_score"
- name: summarize-trends
type: call
call: "anthropic.create-message"
with:
model: "claude-3-5-sonnet-20241022"
max_tokens: 800
messages: "[{\"role\": \"user\", \"content\": \"Analyze these employee satisfaction scores by department and identify trends and areas of concern:\\n{{query-scores.data}}\"}]"
- name: share-insights
type: call
call: "slack.post-message"
with:
channel: "people-team"
text: "Pulse survey insights for {{survey_month}}:\n{{summarize-trends.content}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://uber.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: anthropic
baseUri: "https://api.anthropic.com/v1"
authentication:
type: apikey
key: "x-api-key"
value: "$secrets.anthropic_api_key"
placement: header
resources:
- name: messages
path: "/messages"
operations:
- name: create-message
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: post-message
method: POST
When a new software engineer joins Uber, creates a Jira onboarding epic, provisions GitHub org access, provisions Okta account, and sends a Slack welcome to the team channel.
naftiko: "0.5"
info:
label: "Engineer Onboarding Orchestrator"
description: "When a new software engineer joins Uber, creates a Jira onboarding epic, provisions GitHub org access, provisions Okta account, and sends a Slack welcome to the team channel."
tags:
- hr
- onboarding
- workday
- jira
- github
- okta
- slack
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-engineer-onboarding
description: "Given a Workday employee ID, GitHub username, and team assignment, orchestrate full engineering onboarding across Jira, GitHub, Okta, and Slack."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday employee ID for the new engineer."
- name: github_username
in: body
type: string
description: "New hire's GitHub username for org provisioning."
- name: team_name
in: body
type: string
description: "The engineering team (e.g., Rides, Eats, Platform, Maps)."
- name: start_date
in: body
type: string
description: "Start date in YYYY-MM-DD format."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
- name: create-onboarding-epic
type: call
call: "jira.create-issue"
with:
project_key: "ENG"
issuetype: "Epic"
summary: "Onboarding: {{get-employee.full_name}} - {{team_name}} - {{start_date}}"
- name: provision-github
type: call
call: "github.add-org-member"
with:
username: "{{github_username}}"
role: "member"
- name: provision-okta
type: call
call: "okta.create-user"
with:
email: "{{get-employee.work_email}}"
firstName: "{{get-employee.first_name}}"
lastName: "{{get-employee.last_name}}"
- name: welcome-slack
type: call
call: "slack.post-message"
with:
channel: "{{team_name}}-engineering"
text: "Welcome {{get-employee.first_name}} {{get-employee.last_name}} to the {{team_name}} team! They start {{start_date}}. Onboarding: {{create-onboarding-epic.key}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: org-members
path: "/orgs/uber/memberships/{{username}}"
inputParameters:
- name: username
in: path
operations:
- name: add-org-member
method: PUT
- type: http
namespace: okta
baseUri: "https://uber.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users"
operations:
- name: create-user
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: post-message
method: POST
When an engineering blog post draft is approved, creates a GitHub PR for the blog repo, notifies the comms team via Slack, and shares on LinkedIn.
naftiko: "0.5"
info:
label: "Engineering Blog Publication Workflow"
description: "When an engineering blog post draft is approved, creates a GitHub PR for the blog repo, notifies the comms team via Slack, and shares on LinkedIn."
tags:
- communications
- github
- slack
- linkedin
capability:
exposes:
- type: mcp
namespace: eng-comms
port: 8080
tools:
- name: publish-blog-post
description: "Given a blog post title and author, create a GitHub PR for publication and notify the comms team."
inputParameters:
- name: post_title
in: body
type: string
description: "Title of the blog post."
- name: author
in: body
type: string
description: "Author's name."
- name: github_branch
in: body
type: string
description: "The branch containing the blog post."
steps:
- name: create-blog-pr
type: call
call: "github.create-pull-request"
with:
repo: "uber-engineering-blog"
title: "Publish: {{post_title}} by {{author}}"
head: "{{github_branch}}"
base: "main"
- name: notify-comms
type: call
call: "slack.post-message"
with:
channel: "eng-communications"
text: "Blog post ready for review: {{post_title}} by {{author}}. PR: {{create-blog-pr.html_url}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: pulls
path: "/repos/uber/{{repo}}/pulls"
inputParameters:
- name: repo
in: path
operations:
- name: create-pull-request
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: post-message
method: POST
When an executive requisition is opened, creates a Salesforce recruiting campaign, posts to LinkedIn, and notifies the executive recruiting Slack channel.
naftiko: "0.5"
info:
label: "Executive Talent Acquisition Pipeline"
description: "When an executive requisition is opened, creates a Salesforce recruiting campaign, posts to LinkedIn, and notifies the executive recruiting Slack channel."
tags:
- recruiting
- salesforce
- linkedin
- slack
capability:
exposes:
- type: mcp
namespace: exec-recruiting
port: 8080
tools:
- name: launch-exec-search
description: "Given a role title and hiring manager, create a Salesforce recruiting campaign, post to LinkedIn, and notify the team."
inputParameters:
- name: role_title
in: body
type: string
description: "The executive role title."
- name: hiring_manager
in: body
type: string
description: "The hiring manager's name."
- name: level
in: body
type: string
description: "The role level (VP, SVP, C-suite)."
steps:
- name: create-campaign
type: call
call: "salesforce.create-campaign"
with:
Name: "Exec search: {{role_title}} ({{level}})"
Type: "Executive Recruiting"
- name: notify-recruiting
type: call
call: "slack.post-message"
with:
channel: "executive-recruiting"
text: "New executive search: {{role_title}} ({{level}}). Hiring manager: {{hiring_manager}}. Campaign: {{create-campaign.id}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://uber.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: campaigns
path: "/sobjects/Campaign"
operations:
- name: create-campaign
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a feature flag is enabled for a new percentage of users, logs the rollout in Snowflake, creates a Jira tracking ticket, and notifies the product team via Slack.
naftiko: "0.5"
info:
label: "Feature Flag Rollout Tracker"
description: "When a feature flag is enabled for a new percentage of users, logs the rollout in Snowflake, creates a Jira tracking ticket, and notifies the product team via Slack."
tags:
- engineering
- snowflake
- jira
- slack
capability:
exposes:
- type: mcp
namespace: feature-ops
port: 8080
tools:
- name: track-flag-rollout
description: "Given a feature flag name and rollout percentage, log the change, create a tracking ticket, and notify the team."
inputParameters:
- name: flag_name
in: body
type: string
description: "The feature flag name."
- name: rollout_pct
in: body
type: number
description: "New rollout percentage."
- name: team_name
in: body
type: string
description: "Owning team name."
steps:
- name: log-rollout
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO eng.feature_rollouts (flag_name, rollout_pct, team, changed_at) VALUES ('{{flag_name}}', {{rollout_pct}}, '{{team_name}}', CURRENT_TIMESTAMP())"
- name: create-tracking-ticket
type: call
call: "jira.create-issue"
with:
project_key: "ENG"
issuetype: "Task"
summary: "Feature rollout: {{flag_name}} at {{rollout_pct}}%"
- name: notify-team
type: call
call: "slack.post-message"
with:
channel: "{{team_name}}-engineering"
text: "Feature flag {{flag_name}} rolled out to {{rollout_pct}}% of users. Tracking: {{create-tracking-ticket.key}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://uber.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a freight shipment status changes, updates the Salesforce opportunity, notifies the shipper via Slack, and logs the event in Snowflake.
naftiko: "0.5"
info:
label: "Freight Shipment Status Tracker"
description: "When a freight shipment status changes, updates the Salesforce opportunity, notifies the shipper via Slack, and logs the event in Snowflake."
tags:
- freight
- salesforce
- slack
- snowflake
capability:
exposes:
- type: mcp
namespace: freight-ops
port: 8080
tools:
- name: track-shipment-status-change
description: "Given a shipment ID and new status, update Salesforce, notify the shipper on Slack, and log in Snowflake."
inputParameters:
- name: shipment_id
in: body
type: string
description: "The freight shipment ID."
- name: new_status
in: body
type: string
description: "New shipment status (e.g., in_transit, delivered, delayed)."
- name: shipper_channel
in: body
type: string
description: "The Slack channel for the shipper."
steps:
- name: update-salesforce
type: call
call: "salesforce.update-opportunity"
with:
opportunity_id: "{{shipment_id}}"
StageName: "{{new_status}}"
- name: notify-shipper
type: call
call: "slack.post-message"
with:
channel: "{{shipper_channel}}"
text: "Shipment {{shipment_id}} status changed to {{new_status}}"
- name: log-event
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO freight.shipment_events (shipment_id, status, event_time) VALUES ('{{shipment_id}}', '{{new_status}}', CURRENT_TIMESTAMP())"
consumes:
- type: http
namespace: salesforce
baseUri: "https://uber.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{opportunity_id}}"
inputParameters:
- name: opportunity_id
in: path
operations:
- name: update-opportunity
method: PATCH
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
- type: http
namespace: snowflake
baseUri: "https://uber.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
Retrieves the latest run status for a specific GitHub Actions workflow.
naftiko: "0.5"
info:
label: "GitHub Actions Workflow Status"
description: "Retrieves the latest run status for a specific GitHub Actions workflow."
tags:
- cicd
- github
- github-actions
capability:
exposes:
- type: mcp
namespace: cicd-ops
port: 8080
tools:
- name: get-workflow-status
description: "Given a repo and workflow file name, return the latest run status and conclusion. Use for deployment readiness checks."
inputParameters:
- name: repo_name
in: body
type: string
description: "The GitHub repository name."
- name: workflow_file
in: body
type: string
description: "The workflow file name (e.g., ci.yml)."
call: "github-actions.list-workflow-runs"
with:
repo: "{{repo_name}}"
workflow_id: "{{workflow_file}}"
outputParameters:
- name: status
type: string
mapping: "$.workflow_runs[0].status"
- name: conclusion
type: string
mapping: "$.workflow_runs[0].conclusion"
consumes:
- type: http
namespace: github-actions
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: workflow-runs
path: "/repos/uber/{{repo}}/actions/workflows/{{workflow_id}}/runs"
inputParameters:
- name: repo
in: path
- name: workflow_id
in: path
operations:
- name: list-workflow-runs
method: GET
Retrieves the branch protection rules for a given GitHub repository's main branch.
naftiko: "0.5"
info:
label: "GitHub Branch Protection Audit"
description: "Retrieves the branch protection rules for a given GitHub repository's main branch."
tags:
- security
- github
capability:
exposes:
- type: mcp
namespace: repo-security
port: 8080
tools:
- name: get-branch-protection
description: "Given a repo name, return the branch protection rules for main. Use for security compliance audits."
inputParameters:
- name: repo_name
in: body
type: string
description: "The GitHub repository name."
call: "github-repos.get-branch-protection"
with:
repo: "{{repo_name}}"
outputParameters:
- name: required_reviews
type: number
mapping: "$.required_pull_request_reviews.required_approving_review_count"
- name: enforce_admins
type: boolean
mapping: "$.enforce_admins.enabled"
consumes:
- type: http
namespace: github-repos
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: branch-protection
path: "/repos/uber/{{repo}}/branches/main/protection"
inputParameters:
- name: repo
in: path
operations:
- name: get-branch-protection
method: GET
Retrieves open Dependabot alerts for a GitHub repository, creates Jira security tickets for critical vulnerabilities, and posts a remediation summary to the security Slack channel.
naftiko: "0.5"
info:
label: "GitHub Dependabot Vulnerability Triage"
description: "Retrieves open Dependabot alerts for a GitHub repository, creates Jira security tickets for critical vulnerabilities, and posts a remediation summary to the security Slack channel."
tags:
- security
- devops
- github
- jira
- slack
capability:
exposes:
- type: mcp
namespace: vuln-management
port: 8080
tools:
- name: triage-dependabot-alerts
description: "Given a GitHub repository, retrieve all open critical and high Dependabot vulnerability alerts, create Jira security tickets for each, and post a triage summary to Slack."
inputParameters:
- name: repo_name
in: body
type: string
description: "The GitHub repository to scan (e.g., uber/rides-backend)."
- name: security_channel
in: body
type: string
description: "Slack channel for the security team."
steps:
- name: get-vuln-alerts
type: call
call: "github-vuln.get-dependabot-alerts"
with:
repo: "{{repo_name}}"
severity: "high"
- name: create-security-ticket
type: call
call: "jira-vuln.create-issue"
with:
project_key: "SEC"
issuetype: "Bug"
summary: "Dependabot vulnerabilities: {{repo_name}} — {{get-vuln-alerts.critical_count}} critical"
description: "Repo: {{repo_name}}\nCritical: {{get-vuln-alerts.critical_count}}\nHigh: {{get-vuln-alerts.high_count}}"
- name: post-triage-summary
type: call
call: "slack-vuln.post-message"
with:
channel: "{{security_channel}}"
text: "Vuln Triage: {{repo_name}} | Critical: {{get-vuln-alerts.critical_count}} | High: {{get-vuln-alerts.high_count}} | Jira: {{create-security-ticket.key}}"
consumes:
- type: http
namespace: github-vuln
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: dependabot-alerts
path: "/repos/{{repo}}/dependabot/alerts"
inputParameters:
- name: repo
in: path
- name: severity
in: query
operations:
- name: get-dependabot-alerts
method: GET
- type: http
namespace: jira-vuln
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack-vuln
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a pull request modifying security-sensitive code is opened, creates a Jira security review task, assigns it to the security team, and notifies them via Slack.
naftiko: "0.5"
info:
label: "GitHub Pull Request Security Review"
description: "When a pull request modifying security-sensitive code is opened, creates a Jira security review task, assigns it to the security team, and notifies them via Slack."
tags:
- security
- devops
- github
- jira
- slack
capability:
exposes:
- type: mcp
namespace: security-review
port: 8080
tools:
- name: request-security-review
description: "Given a GitHub PR number and repository touching security-sensitive files, create a Jira security review task, assign to the AppSec team, and notify them in Slack."
inputParameters:
- name: repo_name
in: body
type: string
description: "The GitHub repository name."
- name: pr_number
in: body
type: integer
description: "The pull request number requiring security review."
- name: sensitive_files
in: body
type: string
description: "Comma-separated list of security-sensitive files modified in the PR."
steps:
- name: get-pr-details
type: call
call: "github-security.get-pull-request"
with:
repo: "{{repo_name}}"
pull_number: "{{pr_number}}"
- name: create-security-task
type: call
call: "jira-security.create-issue"
with:
project_key: "SEC"
issuetype: "Task"
summary: "Security review: {{repo_name}} PR #{{pr_number}} — {{get-pr-details.title}}"
description: "Sensitive files: {{sensitive_files}}\nPR: {{get-pr-details.html_url}}"
- name: notify-appsec
type: call
call: "slack-security.post-message"
with:
channel: "appsec-reviews"
text: "Security review needed: {{repo_name}} PR #{{pr_number}} | Files: {{sensitive_files}} | PR: {{get-pr-details.html_url}} | Jira: {{create-security-task.key}}"
consumes:
- type: http
namespace: github-security
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: pull-requests
path: "/repos/{{repo}}/pulls/{{pull_number}}"
inputParameters:
- name: repo
in: path
- name: pull_number
in: path
operations:
- name: get-pull-request
method: GET
- type: http
namespace: jira-security
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack-security
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a new GitHub release is published, posts the release notes to the relevant engineering Slack channel and creates a Confluence changelog entry.
naftiko: "0.5"
info:
label: "GitHub Release to Slack Announcement"
description: "When a new GitHub release is published, posts the release notes to the relevant engineering Slack channel and creates a Confluence changelog entry."
tags:
- engineering
- github
- slack
- confluence
capability:
exposes:
- type: mcp
namespace: release-comms
port: 8080
tools:
- name: announce-release
description: "Given a GitHub repo and release tag, fetch release notes, post to Slack, and create a Confluence changelog page."
inputParameters:
- name: repo_name
in: body
type: string
description: "The GitHub repository name."
- name: release_tag
in: body
type: string
description: "The release tag (e.g., v2.1.0)."
steps:
- name: get-release
type: call
call: "github.get-release-by-tag"
with:
repo: "{{repo_name}}"
tag: "{{release_tag}}"
- name: post-to-slack
type: call
call: "slack.post-message"
with:
channel: "releases-{{repo_name}}"
text: "New release {{release_tag}} for {{repo_name}}:\n{{get-release.body}}"
- name: create-changelog
type: call
call: "confluence.create-page"
with:
spaceKey: "ENG"
title: "Release {{release_tag}} — {{repo_name}}"
body: "{{get-release.body}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: releases
path: "/repos/uber/{{repo}}/releases/tags/{{tag}}"
inputParameters:
- name: repo
in: path
- name: tag
in: path
operations:
- name: get-release-by-tag
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: post-message
method: POST
- type: http
namespace: confluence
baseUri: "https://uber.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Retrieves the programming language distribution for a given GitHub repository within the Uber organization.
naftiko: "0.5"
info:
label: "GitHub Repo Language Breakdown"
description: "Retrieves the programming language distribution for a given GitHub repository within the Uber organization."
tags:
- engineering
- github
capability:
exposes:
- type: mcp
namespace: eng-insights
port: 8080
tools:
- name: get-repo-languages
description: "Given a GitHub repository name under the Uber org, return the byte-count breakdown by programming language. Use for tech stack audits and migration planning."
inputParameters:
- name: repo_name
in: body
type: string
description: "The repository name within the uber org."
call: "github-repos.get-languages"
with:
repo: "{{repo_name}}"
outputParameters:
- name: languages
type: object
mapping: "$"
consumes:
- type: http
namespace: github-repos
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: languages
path: "/repos/uber/{{repo}}/languages"
inputParameters:
- name: repo
in: path
operations:
- name: get-languages
method: GET
When a GitHub repository secret approaches its rotation deadline, creates a Jira ticket for the owning team and posts a reminder to the security Slack channel.
naftiko: "0.5"
info:
label: "GitHub Secret Rotation Reminder"
description: "When a GitHub repository secret approaches its rotation deadline, creates a Jira ticket for the owning team and posts a reminder to the security Slack channel."
tags:
- security
- github
- jira
- slack
capability:
exposes:
- type: mcp
namespace: secret-mgmt
port: 8080
tools:
- name: remind-secret-rotation
description: "Given a repo and secret name nearing expiration, create a rotation ticket and notify security."
inputParameters:
- name: repo_name
in: body
type: string
description: "The GitHub repository name."
- name: secret_name
in: body
type: string
description: "The secret name requiring rotation."
- name: expiration_date
in: body
type: string
description: "The secret expiration date."
steps:
- name: create-rotation-ticket
type: call
call: "jira.create-issue"
with:
project_key: "SEC"
issuetype: "Task"
summary: "Secret rotation required: {{secret_name}} in {{repo_name}} by {{expiration_date}}"
- name: notify-security
type: call
call: "slack.post-message"
with:
channel: "security-ops"
text: "Secret rotation reminder: {{secret_name}} in {{repo_name}} expires {{expiration_date}}. Ticket: {{create-rotation-ticket.key}}"
consumes:
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Converts a street address to latitude and longitude coordinates using the Google Maps Geocoding API.
naftiko: "0.5"
info:
label: "Google Maps Geocode Lookup"
description: "Converts a street address to latitude and longitude coordinates using the Google Maps Geocoding API."
tags:
- maps
- google-maps
- geolocation
capability:
exposes:
- type: mcp
namespace: geo-ops
port: 8080
tools:
- name: geocode-address
description: "Given a street address, return latitude and longitude coordinates. Use for driver service area validation and market analysis."
inputParameters:
- name: address
in: body
type: string
description: "The street address to geocode."
call: "google-maps.geocode"
with:
address: "{{address}}"
outputParameters:
- name: latitude
type: number
mapping: "$.results[0].geometry.location.lat"
- name: longitude
type: number
mapping: "$.results[0].geometry.location.lng"
consumes:
- type: http
namespace: google-maps
baseUri: "https://maps.googleapis.com/maps/api"
authentication:
type: apikey
key: "key"
value: "$secrets.google_maps_api_key"
placement: query
resources:
- name: geocode
path: "/geocode/json"
operations:
- name: geocode
method: GET
When a candidate advances in the hiring pipeline, updates the Salesforce recruiting record, creates a Jira interview scheduling ticket, and notifies the hiring team via Slack.
naftiko: "0.5"
info:
label: "Greenhouse Candidate Stage Sync"
description: "When a candidate advances in the hiring pipeline, updates the Salesforce recruiting record, creates a Jira interview scheduling ticket, and notifies the hiring team via Slack."
tags:
- recruiting
- salesforce
- jira
- slack
capability:
exposes:
- type: mcp
namespace: recruiting-sync
port: 8080
tools:
- name: sync-candidate-stage
description: "Given candidate details and new pipeline stage, update Salesforce, create scheduling ticket, and notify the team."
inputParameters:
- name: candidate_name
in: body
type: string
description: "The candidate's name."
- name: new_stage
in: body
type: string
description: "New pipeline stage (e.g., phone_screen, onsite, offer)."
- name: role_title
in: body
type: string
description: "The role they applied for."
- name: hiring_manager
in: body
type: string
description: "The hiring manager's name."
steps:
- name: create-scheduling-ticket
type: call
call: "jira.create-issue"
with:
project_key: "RECRUIT"
issuetype: "Task"
summary: "Schedule {{new_stage}}: {{candidate_name}} for {{role_title}}"
- name: notify-hiring-team
type: call
call: "slack.post-message"
with:
channel: "hiring-{{role_title}}"
text: "{{candidate_name}} advanced to {{new_stage}} for {{role_title}}. HM: {{hiring_manager}}. Scheduling: {{create-scheduling-ticket.key}}"
consumes:
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a new intern cohort starts, creates Jira project boards for each intern, provisions GitHub repo access, and sends welcome messages to the intern Slack channel.
naftiko: "0.5"
info:
label: "Intern Project Kickoff"
description: "When a new intern cohort starts, creates Jira project boards for each intern, provisions GitHub repo access, and sends welcome messages to the intern Slack channel."
tags:
- hr
- onboarding
- jira
- github
- slack
capability:
exposes:
- type: mcp
namespace: intern-ops
port: 8080
tools:
- name: kickoff-intern-project
description: "Given intern details, create a Jira board, grant GitHub access, and welcome them on Slack."
inputParameters:
- name: intern_name
in: body
type: string
description: "The intern's full name."
- name: github_username
in: body
type: string
description: "The intern's GitHub username."
- name: team_name
in: body
type: string
description: "The team the intern is assigned to."
- name: project_name
in: body
type: string
description: "The intern project name."
steps:
- name: create-project-board
type: call
call: "jira.create-issue"
with:
project_key: "INTERN"
issuetype: "Epic"
summary: "Intern project: {{project_name}} — {{intern_name}} ({{team_name}})"
- name: grant-github-access
type: call
call: "github.add-team-member"
with:
team_slug: "{{team_name}}-interns"
username: "{{github_username}}"
- name: welcome-intern
type: call
call: "slack.post-message"
with:
channel: "interns-2026"
text: "Welcome {{intern_name}} to the {{team_name}} team! Project: {{project_name}}. Jira: {{create-project-board.key}}"
consumes:
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: team-members
path: "/orgs/uber/teams/{{team_slug}}/memberships/{{username}}"
inputParameters:
- name: team_slug
in: path
- name: username
in: path
operations:
- name: add-team-member
method: PUT
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When Jira tickets are blocked for more than 48 hours, creates an escalation summary and posts it to the engineering management Slack channel.
naftiko: "0.5"
info:
label: "Jira Blocked Tickets Escalation"
description: "When Jira tickets are blocked for more than 48 hours, creates an escalation summary and posts it to the engineering management Slack channel."
tags:
- project-management
- jira
- slack
capability:
exposes:
- type: mcp
namespace: pm-ops
port: 8080
tools:
- name: escalate-blocked-tickets
description: "Given a project key, find blocked tickets older than 48h and escalate to management."
inputParameters:
- name: project_key
in: body
type: string
description: "The Jira project key."
steps:
- name: find-blocked
type: call
call: "jira.search-issues"
with:
jql: "project={{project_key}} AND status=Blocked AND updated<='-48h'"
- name: escalate
type: call
call: "slack.post-message"
with:
channel: "eng-management"
text: "Blocked tickets escalation for {{project_key}}: {{find-blocked.total}} tickets blocked >48h. Review at https://uber.atlassian.net/issues/?jql=project%3D{{project_key}}%20AND%20status%3DBlocked"
consumes:
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: search
path: "/search"
operations:
- name: search-issues
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: post-message
method: POST
Retrieves the current status, assignee, and priority for a Jira issue by key.
naftiko: "0.5"
info:
label: "Jira Issue Status Lookup"
description: "Retrieves the current status, assignee, and priority for a Jira issue by key."
tags:
- project-management
- jira
capability:
exposes:
- type: mcp
namespace: project-ops
port: 8080
tools:
- name: get-issue-status
description: "Given a Jira issue key, return its current status, assignee, and priority. Use for standup preparation and escalation decisions."
inputParameters:
- name: issue_key
in: body
type: string
description: "The Jira issue key (e.g., ENG-1234)."
call: "jira-issues.get-issue"
with:
issue_key: "{{issue_key}}"
outputParameters:
- name: status
type: string
mapping: "$.fields.status.name"
- name: assignee
type: string
mapping: "$.fields.assignee.displayName"
- name: priority
type: string
mapping: "$.fields.priority.name"
consumes:
- type: http
namespace: jira-issues
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue/{{issue_key}}"
inputParameters:
- name: issue_key
in: path
operations:
- name: get-issue
method: GET
Pulls backlog and sprint data from Jira for a given engineering team, summarizes capacity and priority issues, and posts the sprint planning digest to the team's Slack channel.
naftiko: "0.5"
info:
label: "Jira Sprint Planning Digest"
description: "Pulls backlog and sprint data from Jira for a given engineering team, summarizes capacity and priority issues, and posts the sprint planning digest to the team's Slack channel."
tags:
- devops
- agile
- jira
- slack
- reporting
capability:
exposes:
- type: mcp
namespace: sprint-planning
port: 8080
tools:
- name: digest-sprint-planning
description: "Given a Jira board ID, retrieve the backlog top priority items and upcoming sprint capacity, and post a sprint planning digest to the team's Slack channel."
inputParameters:
- name: board_id
in: body
type: string
description: "The Jira board ID for the engineering team."
- name: team_channel
in: body
type: string
description: "Slack channel for the engineering team."
steps:
- name: get-backlog
type: call
call: "jira-sprint.get-backlog-issues"
with:
boardId: "{{board_id}}"
- name: post-planning-digest
type: call
call: "slack-sprint.post-message"
with:
channel: "{{team_channel}}"
text: "Sprint Planning: Board {{board_id}} | Backlog items: {{get-backlog.total}} | P1 items: {{get-backlog.p1_count}} | Ready to sprint: {{get-backlog.ready_count}}"
consumes:
- type: http
namespace: jira-sprint
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: backlog-issues
path: "/board/{{boardId}}/backlog"
inputParameters:
- name: boardId
in: path
operations:
- name: get-backlog-issues
method: GET
- type: http
namespace: slack-sprint
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When Datadog detects Kubernetes pod crash loops, creates a PagerDuty incident, opens a Jira ticket, and alerts the platform team in Slack.
naftiko: "0.5"
info:
label: "Kubernetes Pod Failure Responder"
description: "When Datadog detects Kubernetes pod crash loops, creates a PagerDuty incident, opens a Jira ticket, and alerts the platform team in Slack."
tags:
- infrastructure
- datadog
- pagerduty
- jira
- slack
capability:
exposes:
- type: mcp
namespace: k8s-ops
port: 8080
tools:
- name: respond-to-pod-failures
description: "Given a namespace, deployment, and failure count, escalate via PagerDuty, create a Jira ticket, and notify the team."
inputParameters:
- name: namespace
in: body
type: string
description: "The Kubernetes namespace."
- name: deployment
in: body
type: string
description: "The deployment name."
- name: restart_count
in: body
type: number
description: "Number of pod restarts."
steps:
- name: create-pd-incident
type: call
call: "pagerduty.create-incident"
with:
title: "K8s pod crash: {{deployment}} in {{namespace}} ({{restart_count}} restarts)"
service_id: "PLATFORM_SRE"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project_key: "PLATFORM"
issuetype: "Bug"
summary: "K8s pod crash loop: {{deployment}} in {{namespace}}"
description: "{{restart_count}} restarts detected."
- name: alert-platform
type: call
call: "slack.post-message"
with:
channel: "platform-alerts"
text: "K8s crash loop: {{deployment}} in {{namespace}} ({{restart_count}} restarts). PD: {{create-pd-incident.incident.id}}. Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves LinkedIn Company Page follower growth and engagement metrics for Uber and posts a weekly employer brand digest to the talent marketing Slack channel.
naftiko: "0.5"
info:
label: "LinkedIn Employer Brand Performance Digest"
description: "Retrieves LinkedIn Company Page follower growth and engagement metrics for Uber and posts a weekly employer brand digest to the talent marketing Slack channel."
tags:
- marketing
- employer-brand
- linkedin
- slack
- reporting
capability:
exposes:
- type: mcp
namespace: employer-brand
port: 8080
tools:
- name: digest-linkedin-brand-metrics"
description: "Given a reporting week, retrieve LinkedIn Company Page follower count, engagement rate, and top post performance for Uber, and post a digest to the talent marketing Slack channel."
inputParameters:
- name: linkedin_org_id
in: body
type: string
description: "Uber's LinkedIn organization URN ID."
- name: talent_channel
in: body
type: string
description: "Slack channel for the talent marketing team."
steps:
- name: get-page-stats
type: call
call: "linkedin.get-organization-statistics"
with:
organizationId: "{{linkedin_org_id}}"
- name: post-brand-digest
type: call
call: "slack-brand.post-message"
with:
channel: "{{talent_channel}}"
text: "LinkedIn Brand Report: Uber | Followers: {{get-page-stats.follower_count}} | New followers (7d): {{get-page-stats.new_followers}} | Engagement rate: {{get-page-stats.engagement_rate}}% | Page views: {{get-page-stats.page_views}}"
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: organization-statistics
path: "/organizationPageStatistics"
inputParameters:
- name: organizationId
in: query
operations:
- name: get-organization-statistics
method: GET
- type: http
namespace: slack-brand
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves view count and applicant metrics for an active LinkedIn job posting.
naftiko: "0.5"
info:
label: "LinkedIn Job Posting Analytics"
description: "Retrieves view count and applicant metrics for an active LinkedIn job posting."
tags:
- recruiting
- linkedin
capability:
exposes:
- type: mcp
namespace: recruiting-analytics
port: 8080
tools:
- name: get-job-posting-metrics
description: "Given a LinkedIn job posting ID, return view count and application count. Use for recruiting pipeline optimization."
inputParameters:
- name: job_posting_id
in: body
type: string
description: "The LinkedIn job posting ID."
call: "linkedin-jobs.get-job-analytics"
with:
job_id: "{{job_posting_id}}"
outputParameters:
- name: views
type: number
mapping: "$.views"
- name: applications
type: number
mapping: "$.applications"
consumes:
- type: http
namespace: linkedin-jobs
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: job-analytics
path: "/jobPostingAnalytics/{{job_id}}"
inputParameters:
- name: job_id
in: path
operations:
- name: get-job-analytics
method: GET
When a maps data quality issue is detected, creates a Jira ticket for the maps team, queries Snowflake for affected routes, and posts an alert to the maps engineering Slack channel.
naftiko: "0.5"
info:
label: "Maps Data Quality Alert"
description: "When a maps data quality issue is detected, creates a Jira ticket for the maps team, queries Snowflake for affected routes, and posts an alert to the maps engineering Slack channel."
tags:
- maps
- jira
- snowflake
- slack
capability:
exposes:
- type: mcp
namespace: maps-quality
port: 8080
tools:
- name: report-maps-quality-issue
description: "Given a region and quality issue type, query affected routes, create a Jira ticket, and notify the maps team."
inputParameters:
- name: region
in: body
type: string
description: "The geographic region affected."
- name: issue_type
in: body
type: string
description: "Type of quality issue (e.g., missing_road, incorrect_routing, stale_poi)."
steps:
- name: query-affected-routes
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT COUNT(*) AS affected_trips FROM maps.trip_routing WHERE region='{{region}}' AND quality_flag='{{issue_type}}' AND created_at>=DATEADD(day, -1, CURRENT_TIMESTAMP())"
- name: create-quality-ticket
type: call
call: "jira.create-issue"
with:
project_key: "MAPS"
issuetype: "Bug"
summary: "Maps quality: {{issue_type}} in {{region}}"
description: "Affected trips in last 24h: {{query-affected-routes.data}}"
- name: alert-maps-team
type: call
call: "slack.post-message"
with:
channel: "maps-engineering"
text: "Maps quality alert: {{issue_type}} in {{region}}. Jira: {{create-quality-ticket.key}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://uber.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Pulls service dependency data from Datadog service map, creates a Confluence dependency report, and posts a summary to the architecture Slack channel.
naftiko: "0.5"
info:
label: "Microservice Dependency Audit"
description: "Pulls service dependency data from Datadog service map, creates a Confluence dependency report, and posts a summary to the architecture Slack channel."
tags:
- architecture
- datadog
- confluence
- slack
capability:
exposes:
- type: mcp
namespace: arch-ops
port: 8080
tools:
- name: audit-service-dependencies
description: "Given a service name, pull its dependency graph from Datadog, document in Confluence, and notify architects."
inputParameters:
- name: service_name
in: body
type: string
description: "The microservice name to audit."
steps:
- name: get-dependencies
type: call
call: "datadog.get-service-dependencies"
with:
service: "{{service_name}}"
- name: create-dependency-doc
type: call
call: "confluence.create-page"
with:
spaceKey: "ARCH"
title: "Dependency audit: {{service_name}}"
body: "Service: {{service_name}}\nDependencies: {{get-dependencies.data}}"
- name: notify-architects
type: call
call: "slack.post-message"
with:
channel: "architecture"
text: "Dependency audit for {{service_name}} completed. Doc: {{create-dependency-doc._links.webui}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: service-map
path: "/service_dependencies"
operations:
- name: get-service-dependencies
method: GET
- type: http
namespace: confluence
baseUri: "https://uber.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
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: post-message
method: POST
When an ML model's performance drops below threshold, queries Snowflake for model metrics, creates a Jira ticket for the ML team, and alerts the data science Slack channel.
naftiko: "0.5"
info:
label: "ML Model Performance Degradation Alert"
description: "When an ML model's performance drops below threshold, queries Snowflake for model metrics, creates a Jira ticket for the ML team, and alerts the data science Slack channel."
tags:
- machine-learning
- snowflake
- jira
- slack
capability:
exposes:
- type: mcp
namespace: ml-ops
port: 8080
tools:
- name: alert-model-degradation
description: "Given a model name and degraded metric, query performance data, create a Jira ticket, and notify the ML team."
inputParameters:
- name: model_name
in: body
type: string
description: "The ML model name."
- name: metric_name
in: body
type: string
description: "The degraded metric (e.g., accuracy, precision, AUC)."
- name: current_value
in: body
type: number
description: "Current metric value."
- name: threshold
in: body
type: number
description: "Expected minimum threshold."
steps:
- name: query-model-history
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT model_version, {{metric_name}}, evaluated_at FROM ml.model_metrics WHERE model_name='{{model_name}}' ORDER BY evaluated_at DESC LIMIT 10"
- name: create-ml-ticket
type: call
call: "jira.create-issue"
with:
project_key: "ML"
issuetype: "Bug"
summary: "Model degradation: {{model_name}} — {{metric_name}} at {{current_value}} (threshold: {{threshold}})"
description: "Recent metrics: {{query-model-history.data}}"
- name: alert-ml-team
type: call
call: "slack.post-message"
with:
channel: "ml-platform-alerts"
text: "Model {{model_name}} degraded: {{metric_name}}={{current_value}} (threshold: {{threshold}}). Jira: {{create-ml-ticket.key}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://uber.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When mobile app crash rates spike, queries Datadog for crash metrics, creates a Jira P1 ticket for the mobile team, and alerts the mobile engineering Slack channel.
naftiko: "0.5"
info:
label: "Mobile App Crash Rate Monitor"
description: "When mobile app crash rates spike, queries Datadog for crash metrics, creates a Jira P1 ticket for the mobile team, and alerts the mobile engineering Slack channel."
tags:
- mobile
- datadog
- jira
- slack
capability:
exposes:
- type: mcp
namespace: mobile-ops
port: 8080
tools:
- name: handle-crash-rate-spike
description: "Given a platform and crash rate, create a P1 ticket and alert the mobile team."
inputParameters:
- name: platform
in: body
type: string
description: "Mobile platform (ios or android)."
- name: crash_rate
in: body
type: number
description: "Current crash rate percentage."
- name: app_version
in: body
type: string
description: "The app version experiencing crashes."
steps:
- name: create-crash-ticket
type: call
call: "jira.create-issue"
with:
project_key: "MOBILE"
issuetype: "Bug"
summary: "[P1] Crash rate spike: {{platform}} v{{app_version}} at {{crash_rate}}%"
priority: "Highest"
- name: alert-mobile-team
type: call
call: "slack.post-message"
with:
channel: "mobile-{{platform}}-engineering"
text: "CRASH RATE SPIKE: {{platform}} v{{app_version}} at {{crash_rate}}%. Jira: {{create-crash-ticket.key}}"
consumes:
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When entering a new regulatory market, creates a Jira epic for regulatory compliance tasks, documents requirements in Confluence, and notifies the legal team via Slack.
naftiko: "0.5"
info:
label: "New City Regulatory Checklist"
description: "When entering a new regulatory market, creates a Jira epic for regulatory compliance tasks, documents requirements in Confluence, and notifies the legal team via Slack."
tags:
- legal
- regulatory
- jira
- confluence
- slack
capability:
exposes:
- type: mcp
namespace: regulatory-ops
port: 8080
tools:
- name: create-regulatory-checklist
description: "Given a city and regulatory framework, create compliance tracking in Jira, document in Confluence, and notify legal."
inputParameters:
- name: city
in: body
type: string
description: "The city or jurisdiction."
- name: regulatory_framework
in: body
type: string
description: "The regulatory framework (e.g., TNC, taxi, rideshare)."
steps:
- name: create-compliance-epic
type: call
call: "jira.create-issue"
with:
project_key: "LEGAL"
issuetype: "Epic"
summary: "Regulatory compliance: {{city}} — {{regulatory_framework}}"
- name: create-requirements-doc
type: call
call: "confluence.create-page"
with:
spaceKey: "LEGAL"
title: "Regulatory requirements: {{city}} ({{regulatory_framework}})"
body: "City: {{city}}\nFramework: {{regulatory_framework}}\nEpic: {{create-compliance-epic.key}}\nStatus: In Progress"
- name: notify-legal
type: call
call: "slack.post-message"
with:
channel: "legal-regulatory"
text: "New regulatory checklist for {{city}} ({{regulatory_framework}}). Epic: {{create-compliance-epic.key}}. Docs: {{create-requirements-doc._links.webui}}"
consumes:
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: confluence
baseUri: "https://uber.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
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: post-message
method: POST
When a new city market launch is initiated, creates a Jira epic with subtasks for regulatory, operations, and marketing workstreams, provisions a Slack channel, and posts a kickoff announcement.
naftiko: "0.5"
info:
label: "New Market Launch Checklist"
description: "When a new city market launch is initiated, creates a Jira epic with subtasks for regulatory, operations, and marketing workstreams, provisions a Slack channel, and posts a kickoff announcement."
tags:
- operations
- jira
- slack
- market-expansion
capability:
exposes:
- type: mcp
namespace: market-ops
port: 8080
tools:
- name: initiate-market-launch
description: "Given a city name and launch date, create a Jira launch epic, provision a dedicated Slack channel, and announce the kickoff."
inputParameters:
- name: city_name
in: body
type: string
description: "The name of the city for market launch."
- name: launch_date
in: body
type: string
description: "Target launch date in YYYY-MM-DD format."
- name: market_lead
in: body
type: string
description: "The email of the market launch lead."
steps:
- name: create-launch-epic
type: call
call: "jira.create-issue"
with:
project_key: "LAUNCH"
issuetype: "Epic"
summary: "Market Launch: {{city_name}} — Target {{launch_date}}"
- name: create-slack-channel
type: call
call: "slack.create-channel"
with:
name: "launch-{{city_name}}"
is_private: false
- name: post-kickoff
type: call
call: "slack.post-message"
with:
channel: "{{create-slack-channel.channel.id}}"
text: "Market launch for {{city_name}} initiated! Epic: {{create-launch-epic.key}}. Lead: {{market_lead}}. Target: {{launch_date}}"
consumes:
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: channels
path: "/conversations.create"
operations:
- name: create-channel
method: POST
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Queries Workday headcount data, compares against office capacity in Snowflake, and posts a capacity forecast to the workplace ops Slack channel.
naftiko: "0.5"
info:
label: "Office Space Capacity Planner"
description: "Queries Workday headcount data, compares against office capacity in Snowflake, and posts a capacity forecast to the workplace ops Slack channel."
tags:
- workplace
- workday
- snowflake
- slack
capability:
exposes:
- type: mcp
namespace: workplace-ops
port: 8080
tools:
- name: forecast-office-capacity
description: "Given an office location, pull headcount and capacity data, and post a forecast."
inputParameters:
- name: office_location
in: body
type: string
description: "The office location (e.g., SF-HQ, NYC, Amsterdam)."
steps:
- name: query-capacity
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT total_desks, occupied_desks, utilization_pct FROM workplace.office_capacity WHERE location='{{office_location}}'"
- name: post-forecast
type: call
call: "slack.post-message"
with:
channel: "workplace-ops"
text: "Office capacity for {{office_location}}: {{query-capacity.data}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://uber.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
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: post-message
method: POST
When a Workday team change occurs, updates the employee's Okta group memberships, provisions new GitHub team access, and logs the change in Jira.
naftiko: "0.5"
info:
label: "Okta Group Membership Sync"
description: "When a Workday team change occurs, updates the employee's Okta group memberships, provisions new GitHub team access, and logs the change in Jira."
tags:
- identity
- okta
- workday
- github
- jira
capability:
exposes:
- type: mcp
namespace: identity-sync
port: 8080
tools:
- name: sync-group-membership
description: "Given an employee ID, old team, and new team, update Okta groups, GitHub teams, and log the change."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday employee ID."
- name: old_team
in: body
type: string
description: "Previous team name."
- name: new_team
in: body
type: string
description: "New team name."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
- name: update-okta-group
type: call
call: "okta.add-user-to-group"
with:
user_id: "{{get-employee.okta_id}}"
group_id: "{{new_team}}_okta_group"
- name: update-github-team
type: call
call: "github.add-team-member"
with:
team_slug: "{{new_team}}"
username: "{{get-employee.github_username}}"
- name: log-change
type: call
call: "jira.create-issue"
with:
project_key: "IT"
issuetype: "Task"
summary: "Team transfer: {{get-employee.full_name}} from {{old_team}} to {{new_team}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: okta
baseUri: "https://uber.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: group-members
path: "/groups/{{group_id}}/users/{{user_id}}"
inputParameters:
- name: group_id
in: path
- name: user_id
in: path
operations:
- name: add-user-to-group
method: PUT
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: team-members
path: "/orgs/uber/teams/{{team_slug}}/memberships/{{username}}"
inputParameters:
- name: team_slug
in: path
- name: username
in: path
operations:
- name: add-team-member
method: PUT
- type: http
namespace: jira
baseUri: "https://uber.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
When an Okta suspicious login event is detected, suspends the user account, creates a CrowdStrike investigation, and alerts the security team via Slack.
naftiko: "0.5"
info:
label: "Okta Suspicious Login Response"
description: "When an Okta suspicious login event is detected, suspends the user account, creates a CrowdStrike investigation, and alerts the security team via Slack."
tags:
- security
- okta
- crowdstrike
- slack
capability:
exposes:
- type: mcp
namespace: security-response
port: 8080
tools:
- name: respond-to-suspicious-login
description: "Given an Okta user ID and suspicious event details, suspend the account, open a CrowdStrike investigation, and notify security."
inputParameters:
- name: user_id
in: body
type: string
description: "The Okta user ID."
- name: event_type
in: body
type: string
description: "Type of suspicious event (e.g., impossible_travel, brute_force)."
- name: source_ip
in: body
type: string
description: "The source IP address of the suspicious login."
steps:
- name: suspend-user
type: call
call: "okta.suspend-user"
with:
user_id: "{{user_id}}"
- name: create-investigation
type: call
call: "crowdstrike.create-detection"
with:
description: "Okta suspicious login: {{event_type}} from {{source_ip}} for user {{user_id}}"
- name: alert-security
type: call
call: "slack.post-message"
with:
channel: "security-incidents"
text: "ALERT: Okta user {{user_id}} suspended. Event: {{event_type}} from IP {{source_ip}}. CS investigation: {{create-investigation.detection_id}}"
consumes:
- type: http
namespace: okta
baseUri: "https://uber.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users/{{user_id}}/lifecycle/suspend"
inputParameters:
- name: user_id
in: path
operations:
- name: suspend-user
method: POST
- type: http
namespace: crowdstrike
baseUri: "https://api.crowdstrike.com"
authentication:
type: bearer
token: "$secrets.crowdstrike_token"
resources:
- name: detections
path: "/detects/entities/detects/v2"
operations:
- name: create-detection
method: PATCH
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When an Uber employee separates, deactivates their Okta account, removes GitHub org membership, and notifies HR via Slack with a confirmation of access removal.
naftiko: "0.5"
info:
label: "Okta User Deprovisioning on Offboarding"
description: "When an Uber employee separates, deactivates their Okta account, removes GitHub org membership, and notifies HR via Slack with a confirmation of access removal."
tags:
- hr
- offboarding
- okta
- github
- slack
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: deprovision-departing-employee
description: "Given an Okta user ID and GitHub username, deactivate Okta access, remove from GitHub org, and notify HR in Slack confirming all access has been revoked."
inputParameters:
- name: okta_user_id
in: body
type: string
description: "The departing employee's Okta user ID."
- name: github_username
in: body
type: string
description: "The departing employee's GitHub username."
- name: employee_name
in: body
type: string
description: "Full name of the departing employee."
- name: hr_channel
in: body
type: string
description: "Slack channel for HR to receive the offboarding confirmation."
steps:
- name: deactivate-okta
type: call
call: "okta-off.deactivate-user"
with:
user_id: "{{okta_user_id}}"
- name: remove-github
type: call
call: "github-off.remove-member"
with:
username: "{{github_username}}"
- name: confirm-hr
type: call
call: "slack-off.post-message"
with:
channel: "{{hr_channel}}"
text: "Offboarding complete: {{employee_name}} | Okta deactivated: {{deactivate-okta.status}} | GitHub removed: {{remove-github.status}}"
consumes:
- type: http
namespace: okta-off
baseUri: "https://uber.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users/{{user_id}}/lifecycle/deactivate"
inputParameters:
- name: user_id
in: path
operations:
- name: deactivate-user
method: POST
- type: http
namespace: github-off
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: org-members
path: "/orgs/uber/members/{{username}}"
inputParameters:
- name: username
in: path
operations:
- name: remove-member
method: DELETE
- type: http
namespace: slack-off
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves the current status and profile for an Okta user by email address.
naftiko: "0.5"
info:
label: "Okta User Status Lookup"
description: "Retrieves the current status and profile for an Okta user by email address."
tags:
- identity
- okta
- security
capability:
exposes:
- type: mcp
namespace: identity-ops
port: 8080
tools:
- name: get-okta-user-status
description: "Given an employee email, return their Okta account status, last login, and group memberships. Use for access reviews and incident response."
inputParameters:
- name: email
in: body
type: string
description: "The employee email address."
call: "okta-users.get-user"
with:
login: "{{email}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: last_login
type: string
mapping: "$.lastLogin"
consumes:
- type: http
namespace: okta-users
baseUri: "https://uber.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users/{{login}}"
inputParameters:
- name: login
in: path
operations:
- name: get-user
method: GET
Scans a GitHub repository's dependency tree for license compliance issues, creates a Jira ticket for any violations, and alerts the legal-engineering Slack channel.
naftiko: "0.5"
info:
label: "Open Source License Compliance Check"
description: "Scans a GitHub repository's dependency tree for license compliance issues, creates a Jira ticket for any violations, and alerts the legal-engineering Slack channel."
tags:
- legal
- github
- jira
- slack
- compliance
capability:
exposes:
- type: mcp
namespace: oss-compliance
port: 8080
tools:
- name: check-license-compliance
description: "Given a GitHub repo, scan dependencies for license issues, create a ticket if violations found, and notify legal."
inputParameters:
- name: repo_name
in: body
type: string
description: "The GitHub repository name."
steps:
- name: get-dependency-graph
type: call
call: "github.get-dependency-graph"
with:
repo: "{{repo_name}}"
- name: create-compliance-ticket
type: call
call: "jira.create-issue"
with:
project_key: "LEGAL"
issuetype: "Task"
summary: "OSS license audit: {{repo_name}}"
description: "Dependency graph: {{get-dependency-graph.sbom}}"
- name: notify-legal-eng
type: call
call: "slack.post-message"
with:
channel: "legal-engineering"
text: "OSS license audit initiated for {{repo_name}}. Jira: {{create-compliance-ticket.key}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: dependency-graph
path: "/repos/uber/{{repo}}/dependency-graph/sbom"
inputParameters:
- name: repo
in: path
operations:
- name: get-dependency-graph
method: GET
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves the current on-call engineer for a given PagerDuty schedule.
naftiko: "0.5"
info:
label: "PagerDuty On-Call Schedule Lookup"
description: "Retrieves the current on-call engineer for a given PagerDuty schedule."
tags:
- incident-response
- pagerduty
capability:
exposes:
- type: mcp
namespace: oncall-ops
port: 8080
tools:
- name: get-oncall-engineer
description: "Given a PagerDuty schedule ID, return the currently on-call engineer's name and contact info. Use during incident escalation."
inputParameters:
- name: schedule_id
in: body
type: string
description: "The PagerDuty schedule ID."
call: "pagerduty-schedules.get-oncall"
with:
schedule_id: "{{schedule_id}}"
outputParameters:
- name: oncall_name
type: string
mapping: "$.schedule.final_schedule.rendered_schedule_entries[0].user.summary"
- name: oncall_email
type: string
mapping: "$.schedule.final_schedule.rendered_schedule_entries[0].user.email"
consumes:
- type: http
namespace: pagerduty-schedules
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: schedules
path: "/schedules/{{schedule_id}}"
inputParameters:
- name: schedule_id
in: path
operations:
- name: get-oncall
method: GET
When a new partner integration is approved, provisions an API key, creates a Jira onboarding ticket, and sends credentials to the partner via SendGrid.
naftiko: "0.5"
info:
label: "Partner API Key Provisioning"
description: "When a new partner integration is approved, provisions an API key, creates a Jira onboarding ticket, and sends credentials to the partner via SendGrid."
tags:
- partnerships
- jira
- sendgrid
- api-management
capability:
exposes:
- type: mcp
namespace: partner-ops
port: 8080
tools:
- name: provision-partner-api-key
description: "Given partner details and integration scope, create an onboarding ticket and send credentials."
inputParameters:
- name: partner_name
in: body
type: string
description: "Partner company name."
- name: contact_email
in: body
type: string
description: "Partner technical contact email."
- name: integration_scope
in: body
type: string
description: "API scope (e.g., rides, eats, freight)."
steps:
- name: create-onboarding-ticket
type: call
call: "jira.create-issue"
with:
project_key: "PARTNER"
issuetype: "Task"
summary: "API onboarding: {{partner_name}} — {{integration_scope}}"
- name: send-credentials
type: call
call: "sendgrid.send-email"
with:
to: "{{contact_email}}"
subject: "Your Uber API integration is ready"
body: "Welcome {{partner_name}}! Your integration for {{integration_scope}} has been provisioned. Onboarding ticket: {{create-onboarding-ticket.key}}."
consumes:
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: 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
When a payment processing failure rate exceeds threshold, creates a PagerDuty incident, opens a Jira P1 ticket, and alerts the payments team via Slack.
naftiko: "0.5"
info:
label: "Payment Processing Failure Handler"
description: "When a payment processing failure rate exceeds threshold, creates a PagerDuty incident, opens a Jira P1 ticket, and alerts the payments team via Slack."
tags:
- payments
- pagerduty
- jira
- slack
capability:
exposes:
- type: mcp
namespace: payments-ops
port: 8080
tools:
- name: handle-payment-failure
description: "Given payment provider and failure rate, page on-call, create a P1 ticket, and alert the payments team."
inputParameters:
- name: payment_provider
in: body
type: string
description: "The payment provider experiencing failures."
- name: failure_rate
in: body
type: number
description: "Current failure rate percentage."
- name: affected_market
in: body
type: string
description: "The market affected."
steps:
- name: page-payments-oncall
type: call
call: "pagerduty.create-incident"
with:
title: "Payment failure: {{payment_provider}} at {{failure_rate}}% in {{affected_market}}"
service_id: "PAYMENTS_SRE"
- name: create-p1-ticket
type: call
call: "jira.create-issue"
with:
project_key: "PAY"
issuetype: "Bug"
summary: "[P1] Payment failures: {{payment_provider}} — {{failure_rate}}% — {{affected_market}}"
priority: "Highest"
- name: alert-payments
type: call
call: "slack.post-message"
with:
channel: "payments-alerts"
text: "PAYMENT FAILURE: {{payment_provider}} at {{failure_rate}}% in {{affected_market}}. PD: {{page-payments-oncall.incident.id}}. Jira: {{create-p1-ticket.key}}"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a P1 incident is resolved, creates a Confluence postmortem page from a template, assigns action items in Jira, and schedules a review meeting reminder in Slack.
naftiko: "0.5"
info:
label: "Postmortem Creation Workflow"
description: "When a P1 incident is resolved, creates a Confluence postmortem page from a template, assigns action items in Jira, and schedules a review meeting reminder in Slack."
tags:
- sre
- confluence
- jira
- slack
- incident-response
capability:
exposes:
- type: mcp
namespace: postmortem-ops
port: 8080
tools:
- name: create-postmortem
description: "Given an incident ticket key and details, create a Confluence postmortem, Jira action items, and schedule a Slack review."
inputParameters:
- name: incident_key
in: body
type: string
description: "The Jira incident ticket key."
- name: incident_summary
in: body
type: string
description: "Brief summary of the incident."
- name: owning_team
in: body
type: string
description: "The team that owned the incident response."
steps:
- name: create-postmortem-page
type: call
call: "confluence.create-page"
with:
spaceKey: "SRE"
title: "Postmortem: {{incident_key}} — {{incident_summary}}"
body: "# Postmortem: {{incident_key}}\n## Summary\n{{incident_summary}}\n## Timeline\nTBD\n## Root Cause\nTBD\n## Action Items\nTBD"
- name: create-action-item
type: call
call: "jira.create-issue"
with:
project_key: "SRE"
issuetype: "Task"
summary: "Postmortem action items: {{incident_key}}"
description: "Complete postmortem action items from {{create-postmortem-page.id}}"
- name: schedule-review
type: call
call: "slack.post-message"
with:
channel: "{{owning_team}}-engineering"
text: "Postmortem created for {{incident_key}}: {{incident_summary}}. Page: {{create-postmortem-page._links.webui}}. Action items: {{create-action-item.key}}. Please schedule a review within 5 business days."
consumes:
- type: http
namespace: confluence
baseUri: "https://uber.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When Datadog detects a P1 service degradation for a core Uber product, triggers PagerDuty, opens a Jira incident issue, and posts an incident bridge to the Slack ops channel.
naftiko: "0.5"
info:
label: "Production Service Incident Response"
description: "When Datadog detects a P1 service degradation for a core Uber product, triggers PagerDuty, opens a Jira incident issue, and posts an incident bridge to the Slack ops channel."
tags:
- operations
- incident-response
- datadog
- pagerduty
- jira
- slack
capability:
exposes:
- type: mcp
namespace: incident-response
port: 8080
tools:
- name: handle-service-incident
description: "Given a Datadog alert for service degradation, trigger PagerDuty on-call, create a Jira incident for post-mortem tracking, and post an ops bridge to Slack."
inputParameters:
- name: service_name
in: body
type: string
description: "The affected Uber service (e.g., rides-dispatch, eats-ordering, maps-routing)."
- name: monitor_name
in: body
type: string
description: "The Datadog monitor name that fired."
- name: severity
in: body
type: string
description: "Incident severity: P1, P2, P3."
- name: monitor_url
in: body
type: string
description: "URL to the Datadog monitor for diagnostics."
steps:
- name: trigger-pagerduty
type: call
call: "pagerduty.create-incident"
with:
title: "{{severity}}: {{service_name}} — {{monitor_name}}"
service_id: "$secrets.pagerduty_service_id"
urgency: "high"
- name: create-jira-incident
type: call
call: "jira-incident.create-issue"
with:
project_key: "OPS"
issuetype: "Incident"
summary: "{{severity}} Incident: {{service_name}} — {{monitor_name}}"
description: "Monitor: {{monitor_name}}\nService: {{service_name}}\nSeverity: {{severity}}\nDatadog: {{monitor_url}}\nPD: {{trigger-pagerduty.incident_url}}"
- name: post-ops-bridge
type: call
call: "slack-incident.post-message"
with:
channel: "incidents"
text: "{{severity}} INCIDENT: {{service_name}} | {{monitor_name}} | Jira: {{create-jira-incident.key}} | PD: {{trigger-pagerduty.incident_url}} | Datadog: {{monitor_url}}"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: jira-incident
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack-incident
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Pulls key metrics from Snowflake, revenue data from Salesforce, and engineering velocity from Jira, then compiles and posts a QBR summary to the leadership Slack channel.
naftiko: "0.5"
info:
label: "Quarterly Business Review Digest"
description: "Pulls key metrics from Snowflake, revenue data from Salesforce, and engineering velocity from Jira, then compiles and posts a QBR summary to the leadership Slack channel."
tags:
- business-intelligence
- snowflake
- salesforce
- jira
- slack
capability:
exposes:
- type: mcp
namespace: qbr-digest
port: 8080
tools:
- name: generate-qbr-digest
description: "Given a fiscal quarter, pull metrics from Snowflake, Salesforce revenue data, and Jira delivery stats, then post a compiled summary to Slack."
inputParameters:
- name: fiscal_quarter
in: body
type: string
description: "The fiscal quarter (e.g., Q1-2026)."
- name: business_unit
in: body
type: string
description: "Business unit (e.g., Rides, Eats, Freight)."
steps:
- name: query-metrics
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM analytics.qbr_metrics WHERE quarter='{{fiscal_quarter}}' AND bu='{{business_unit}}'"
- name: get-revenue-pipeline
type: call
call: "salesforce.query-records"
with:
q: "SELECT SUM(Amount) FROM Opportunity WHERE FiscalQuarter='{{fiscal_quarter}}' AND Business_Unit__c='{{business_unit}}' AND StageName='Closed Won'"
- name: get-delivery-velocity
type: call
call: "jira.search-issues"
with:
jql: "project={{business_unit}} AND status=Done AND resolved>=-90d"
- name: post-qbr-summary
type: call
call: "slack.post-message"
with:
channel: "leadership-{{business_unit}}"
text: "QBR Digest for {{business_unit}} — {{fiscal_quarter}}\nMetrics: {{query-metrics.data}}\nRevenue: {{get-revenue-pipeline.records[0].expr0}}\nTickets Delivered: {{get-delivery-velocity.total}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://uber.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: salesforce
baseUri: "https://uber.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query"
operations:
- name: query-records
method: GET
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: search
path: "/search"
operations:
- name: search-issues
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: post-message
method: POST
Initiates a quarterly access review by querying Okta for all active users, creating Jira review tickets for each team manager, and posting the review kickoff to the security Slack channel.
naftiko: "0.5"
info:
label: "Quarterly Security Access Review"
description: "Initiates a quarterly access review by querying Okta for all active users, creating Jira review tickets for each team manager, and posting the review kickoff to the security Slack channel."
tags:
- security
- okta
- jira
- slack
- compliance
capability:
exposes:
- type: mcp
namespace: access-review
port: 8080
tools:
- name: launch-access-review
description: "Given a review quarter and deadline, create review tracking tickets and notify the security team."
inputParameters:
- name: review_quarter
in: body
type: string
description: "The quarter (e.g., Q1-2026)."
- name: deadline
in: body
type: string
description: "Review completion deadline."
steps:
- name: create-review-epic
type: call
call: "jira.create-issue"
with:
project_key: "SEC"
issuetype: "Epic"
summary: "Quarterly access review: {{review_quarter}} — due {{deadline}}"
- name: announce-review
type: call
call: "slack.post-message"
with:
channel: "security-ops"
text: "Quarterly access review {{review_quarter}} launched! Deadline: {{deadline}}. Epic: {{create-review-epic.key}}. All managers: please review your team's access in Okta."
consumes:
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Pulls open requisitions and candidate pipeline metrics from Workday Recruiting for all engineering teams and posts a weekly hiring health digest to the HR leadership Slack channel.
naftiko: "0.5"
info:
label: "Recruiting Pipeline Health Digest"
description: "Pulls open requisitions and candidate pipeline metrics from Workday Recruiting for all engineering teams and posts a weekly hiring health digest to the HR leadership Slack channel."
tags:
- hr
- recruiting
- workday
- slack
- reporting
capability:
exposes:
- type: mcp
namespace: recruiting-ops
port: 8080
tools:
- name: digest-recruiting-health
description: "Given a business unit, retrieve open job requisitions and candidate pipeline stages from Workday, and post a weekly recruiting health digest to the HR leadership Slack channel."
inputParameters:
- name: business_unit
in: body
type: string
description: "Business unit to report on (e.g., Rides, Eats, Freight, Platform)."
- name: hr_channel
in: body
type: string
description: "Slack channel for HR leadership digest."
steps:
- name: get-open-reqs
type: call
call: "workday-recruiting.get-requisitions"
with:
businessUnit: "{{business_unit}}"
status: "open"
- name: post-recruiting-digest
type: call
call: "slack-recruiting.post-message"
with:
channel: "{{hr_channel}}"
text: "Recruiting Health — {{business_unit}}: Open reqs: {{get-open-reqs.open_count}} | Candidates: {{get-open-reqs.candidate_count}} | Avg time-to-fill: {{get-open-reqs.avg_days_open}} days | Offers pending: {{get-open-reqs.offers_pending}}"
consumes:
- type: http
namespace: workday-recruiting
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: requisitions
path: "/jobRequisitions"
inputParameters:
- name: businessUnit
in: query
- name: status
in: query
operations:
- name: get-requisitions
method: GET
- type: http
namespace: slack-recruiting
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a regulatory audit is initiated, creates a ServiceNow compliance project, assigns evidence collection tasks to the legal and engineering teams, and notifies all stakeholders via Slack.
naftiko: "0.5"
info:
label: "Regulatory Compliance Audit Tracking"
description: "When a regulatory audit is initiated, creates a ServiceNow compliance project, assigns evidence collection tasks to the legal and engineering teams, and notifies all stakeholders via Slack."
tags:
- compliance
- legal
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: compliance-ops
port: 8080
tools:
- name: initiate-compliance-audit"
description: "Given an audit type, regulatory body, and due date, create a ServiceNow compliance project with evidence collection tasks and notify all stakeholders via Slack."
inputParameters:
- name: audit_type
in: body
type: string
description: "Type of regulatory audit (e.g., SOC 2 Type II, GDPR, PCI DSS)."
- name: regulatory_body
in: body
type: string
description: "Name of the regulatory body conducting the audit."
- name: due_date
in: body
type: string
description: "Audit evidence submission deadline in YYYY-MM-DD format."
- name: compliance_channel
in: body
type: string
description: "Slack channel for the compliance and legal team."
steps:
- name: create-audit-project
type: call
call: "servicenow-compliance.create-task"
with:
short_description: "{{audit_type}} audit — {{regulatory_body}} — due {{due_date}}"
category: "compliance_audit"
assignment_group: "Legal_Compliance"
due_date: "{{due_date}}"
- name: notify-stakeholders
type: call
call: "slack-compliance.post-message"
with:
channel: "{{compliance_channel}}"
text: "Compliance audit initiated: {{audit_type}} | Regulator: {{regulatory_body}} | Evidence due: {{due_date}} | Task: {{create-audit-project.number}}"
consumes:
- type: http
namespace: servicenow-compliance
baseUri: "https://uber.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- type: http
namespace: slack-compliance
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When actual revenue deviates from forecast by more than a threshold, queries Snowflake for revenue data, creates a Jira analysis ticket, and alerts the finance team via Slack.
naftiko: "0.5"
info:
label: "Revenue Forecast Variance Alert"
description: "When actual revenue deviates from forecast by more than a threshold, queries Snowflake for revenue data, creates a Jira analysis ticket, and alerts the finance team via Slack."
tags:
- finance
- snowflake
- jira
- slack
capability:
exposes:
- type: mcp
namespace: finance-ops
port: 8080
tools:
- name: alert-revenue-variance
description: "Given a business unit and variance percentage, pull revenue data, create an analysis ticket, and notify finance."
inputParameters:
- name: business_unit
in: body
type: string
description: "The business unit."
- name: variance_pct
in: body
type: number
description: "Variance from forecast percentage."
- name: period
in: body
type: string
description: "The fiscal period (e.g., March 2026)."
steps:
- name: query-revenue
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT actual_revenue, forecast_revenue, (actual_revenue-forecast_revenue)/forecast_revenue*100 as variance_pct FROM finance.revenue_actuals WHERE bu='{{business_unit}}' AND period='{{period}}'"
- name: create-analysis-ticket
type: call
call: "jira.create-issue"
with:
project_key: "FIN"
issuetype: "Task"
summary: "Revenue variance: {{business_unit}} at {{variance_pct}}% for {{period}}"
- name: alert-finance
type: call
call: "slack.post-message"
with:
channel: "finance-alerts"
text: "Revenue variance alert: {{business_unit}} for {{period}} is {{variance_pct}}% from forecast. Data: {{query-revenue.data}}. Ticket: {{create-analysis-ticket.key}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://uber.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a high-priority rider complaint is logged, retrieves trip details from the internal trips API, creates a Jira ticket for the support team, and sends an escalation alert to the Slack support channel.
naftiko: "0.5"
info:
label: "Rider Support Escalation Workflow"
description: "When a high-priority rider complaint is logged, retrieves trip details from the internal trips API, creates a Jira ticket for the support team, and sends an escalation alert to the Slack support channel."
tags:
- customer-service
- jira
- slack
- support
capability:
exposes:
- type: mcp
namespace: rider-support
port: 8080
tools:
- name: escalate-rider-complaint
description: "Given a trip ID and complaint category, pull trip details, create a Jira support ticket, and alert the support Slack channel."
inputParameters:
- name: trip_id
in: body
type: string
description: "The Uber trip ID."
- name: complaint_category
in: body
type: string
description: "Category of complaint (e.g., safety, billing, driver_conduct)."
- name: rider_email
in: body
type: string
description: "The rider's email address."
steps:
- name: create-support-ticket
type: call
call: "jira.create-issue"
with:
project_key: "SUPPORT"
issuetype: "Bug"
summary: "Rider escalation: {{complaint_category}} — Trip {{trip_id}}"
description: "Rider {{rider_email}} reported {{complaint_category}} for trip {{trip_id}}."
priority: "High"
- name: notify-support-channel
type: call
call: "slack.post-message"
with:
channel: "rider-support-escalations"
text: "Escalation {{create-support-ticket.key}}: {{complaint_category}} for trip {{trip_id}} from {{rider_email}}"
consumes:
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves the access policy and public access configuration for an AWS S3 bucket.
naftiko: "0.5"
info:
label: "S3 Bucket Access Audit"
description: "Retrieves the access policy and public access configuration for an AWS S3 bucket."
tags:
- security
- aws
- s3
capability:
exposes:
- type: mcp
namespace: cloud-security
port: 8080
tools:
- name: audit-s3-access
description: "Given an S3 bucket name, return its access policy and public access block status. Use for security compliance checks."
inputParameters:
- name: bucket_name
in: body
type: string
description: "The S3 bucket name."
call: "aws-s3.get-bucket-policy-status"
with:
bucket: "{{bucket_name}}"
outputParameters:
- name: is_public
type: boolean
mapping: "$.PolicyStatus.IsPublic"
consumes:
- type: http
namespace: aws-s3
baseUri: "https://{{bucket}}.s3.amazonaws.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.aws_auth_header"
placement: header
resources:
- name: policy-status
path: "/?policyStatus"
inputParameters:
- name: bucket
in: path
operations:
- name: get-bucket-policy-status
method: GET
When a safety incident is reported, creates a Jira tracking ticket, logs incident details in Snowflake for regulatory reporting, and notifies the legal and safety teams via Slack.
naftiko: "0.5"
info:
label: "Safety Incident Regulatory Report"
description: "When a safety incident is reported, creates a Jira tracking ticket, logs incident details in Snowflake for regulatory reporting, and notifies the legal and safety teams via Slack."
tags:
- safety
- compliance
- jira
- snowflake
- slack
capability:
exposes:
- type: mcp
namespace: safety-compliance
port: 8080
tools:
- name: report-safety-incident
description: "Given incident details, create a tracking ticket, log for regulatory reporting, and notify legal and safety teams."
inputParameters:
- name: incident_type
in: body
type: string
description: "Type of safety incident."
- name: market
in: body
type: string
description: "City/market where the incident occurred."
- name: trip_id
in: body
type: string
description: "Associated trip ID."
- name: severity
in: body
type: string
description: "Severity level: critical, high, medium."
steps:
- name: create-safety-ticket
type: call
call: "jira.create-issue"
with:
project_key: "SAFETY"
issuetype: "Bug"
summary: "[{{severity}}] Safety incident: {{incident_type}} in {{market}}"
priority: "{{severity}}"
- name: log-for-regulatory
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO compliance.safety_incidents (incident_type, market, trip_id, severity, ticket_key, reported_at) VALUES ('{{incident_type}}', '{{market}}', '{{trip_id}}', '{{severity}}', '{{create-safety-ticket.key}}', CURRENT_TIMESTAMP())"
- name: notify-safety-legal
type: call
call: "slack.post-message"
with:
channel: "safety-legal-alerts"
text: "Safety incident [{{severity}}]: {{incident_type}} in {{market}}. Trip: {{trip_id}}. Jira: {{create-safety-ticket.key}}"
consumes:
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: snowflake
baseUri: "https://uber.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
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: post-message
method: POST
Retrieves account health score, contract renewal date, and ARR for a Salesforce enterprise account.
naftiko: "0.5"
info:
label: "Salesforce Account Health Lookup"
description: "Retrieves account health score, contract renewal date, and ARR for a Salesforce enterprise account."
tags:
- sales
- salesforce
- account-management
capability:
exposes:
- type: mcp
namespace: sales-ops
port: 8080
tools:
- name: get-account-health
description: "Given a Salesforce account ID, return health score, next renewal date, and current ARR. Use for customer success reviews and churn risk assessment."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account ID."
call: "salesforce-accounts.get-account"
with:
account_id: "{{account_id}}"
outputParameters:
- name: health_score
type: number
mapping: "$.Health_Score__c"
- name: renewal_date
type: string
mapping: "$.Contract_Renewal_Date__c"
- name: arr
type: number
mapping: "$.ARR__c"
consumes:
- type: http
namespace: salesforce-accounts
baseUri: "https://uber.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
When a Salesforce deal moves to Closed Won, creates a Jira implementation project, notifies the customer success team in Slack, and logs the win in Snowflake.
naftiko: "0.5"
info:
label: "Salesforce Deal Closed Won Orchestrator"
description: "When a Salesforce deal moves to Closed Won, creates a Jira implementation project, notifies the customer success team in Slack, and logs the win in Snowflake."
tags:
- sales
- salesforce
- jira
- slack
- snowflake
capability:
exposes:
- type: mcp
namespace: deal-ops
port: 8080
tools:
- name: process-closed-won
description: "Given a Salesforce opportunity ID, create implementation project, notify CS team, and log in analytics."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "The Salesforce opportunity ID."
- name: account_name
in: body
type: string
description: "The account name."
- name: deal_value
in: body
type: number
description: "The deal value in USD."
steps:
- name: create-implementation-project
type: call
call: "jira.create-issue"
with:
project_key: "IMPL"
issuetype: "Epic"
summary: "Implementation: {{account_name}} — ${{deal_value}}"
- name: notify-cs-team
type: call
call: "slack.post-message"
with:
channel: "customer-success"
text: "New Closed Won! {{account_name}} for ${{deal_value}}. Implementation: {{create-implementation-project.key}}"
- name: log-win
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO sales.deal_wins (opportunity_id, account_name, deal_value, won_date) VALUES ('{{opportunity_id}}', '{{account_name}}', {{deal_value}}, CURRENT_DATE())"
consumes:
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
- type: http
namespace: snowflake
baseUri: "https://uber.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
When a Salesforce enterprise opportunity is closed won, creates a Jira onboarding epic for the enterprise team, updates the account record, and notifies the account manager in Slack.
naftiko: "0.5"
info:
label: "Salesforce Enterprise Deal Closed Won"
description: "When a Salesforce enterprise opportunity is closed won, creates a Jira onboarding epic for the enterprise team, updates the account record, and notifies the account manager in Slack."
tags:
- sales
- crm
- salesforce
- jira
- slack
capability:
exposes:
- type: mcp
namespace: enterprise-sales
port: 8080
tools:
- name: handle-enterprise-deal-won
description: "Given a Salesforce opportunity ID closed won, update the account, create a Jira enterprise onboarding epic, and notify the account manager in Slack."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "The Salesforce opportunity ID that was closed won."
- name: account_id
in: body
type: string
description: "The Salesforce account ID of the customer."
- name: am_slack_id
in: body
type: string
description: "Slack user ID of the account manager to notify."
steps:
- name: get-opportunity
type: call
call: "salesforce.get-opportunity"
with:
opportunity_id: "{{opportunity_id}}"
- name: update-account
type: call
call: "salesforce.update-account"
with:
account_id: "{{account_id}}"
type: "Customer"
- name: create-onboarding-epic
type: call
call: "jira-sales.create-issue"
with:
project_key: "ENT"
issuetype: "Epic"
summary: "Enterprise Onboarding: {{get-opportunity.account_name}} — {{get-opportunity.name}}"
description: "ARR: {{get-opportunity.amount}}\nClose date: {{get-opportunity.close_date}}"
- name: notify-am
type: call
call: "slack-sales.post-message"
with:
channel: "{{am_slack_id}}"
text: "Deal closed! {{get-opportunity.account_name}} — ARR: ${{get-opportunity.amount}} | Onboarding epic: {{create-onboarding-epic.key}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://uber.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{opportunity_id}}"
inputParameters:
- name: opportunity_id
in: path
operations:
- name: get-opportunity
method: GET
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: update-account
method: PATCH
- type: http
namespace: jira-sales
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack-sales
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Pulls Salesforce pipeline data, syncs it to Snowflake for analytics, and posts a weekly pipeline summary to the sales leadership Slack channel.
naftiko: "0.5"
info:
label: "Salesforce Pipeline Forecast Sync"
description: "Pulls Salesforce pipeline data, syncs it to Snowflake for analytics, and posts a weekly pipeline summary to the sales leadership Slack channel."
tags:
- sales
- salesforce
- snowflake
- slack
capability:
exposes:
- type: mcp
namespace: pipeline-ops
port: 8080
tools:
- name: sync-pipeline-forecast
description: "Given a fiscal quarter, pull pipeline data from Salesforce, sync to Snowflake, and post summary."
inputParameters:
- name: fiscal_quarter
in: body
type: string
description: "The fiscal quarter (e.g., Q1-2026)."
steps:
- name: query-pipeline
type: call
call: "salesforce.query-records"
with:
q: "SELECT StageName, COUNT(Id), SUM(Amount) FROM Opportunity WHERE FiscalQuarter='{{fiscal_quarter}}' AND IsClosed=false GROUP BY StageName"
- name: sync-to-snowflake
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO sales.pipeline_snapshots (quarter, snapshot_data, snapshot_at) VALUES ('{{fiscal_quarter}}', '{{query-pipeline.records}}', CURRENT_TIMESTAMP())"
- name: post-summary
type: call
call: "slack.post-message"
with:
channel: "sales-leadership"
text: "Pipeline forecast for {{fiscal_quarter}}:\n{{query-pipeline.records}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://uber.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query"
operations:
- name: query-records
method: GET
- type: http
namespace: snowflake
baseUri: "https://uber.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
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: post-message
method: POST
When a critical vulnerability is detected by CrowdStrike, creates a Jira security ticket, assigns it to the owning team via GitHub CODEOWNERS, and posts an alert to the security Slack channel.
naftiko: "0.5"
info:
label: "Security Vulnerability Remediation Tracker"
description: "When a critical vulnerability is detected by CrowdStrike, creates a Jira security ticket, assigns it to the owning team via GitHub CODEOWNERS, and posts an alert to the security Slack channel."
tags:
- security
- crowdstrike
- jira
- github
- slack
capability:
exposes:
- type: mcp
namespace: vuln-remediation
port: 8080
tools:
- name: track-vulnerability-remediation
description: "Given a CrowdStrike vulnerability ID and affected service, create a Jira ticket, look up the owning team from GitHub, and alert the security channel."
inputParameters:
- name: vulnerability_id
in: body
type: string
description: "The CrowdStrike vulnerability ID."
- name: affected_service
in: body
type: string
description: "The service or repository affected."
- name: severity
in: body
type: string
description: "Severity: critical, high, medium."
steps:
- name: get-codeowners
type: call
call: "github.get-file-contents"
with:
repo: "{{affected_service}}"
path: "CODEOWNERS"
- name: create-security-ticket
type: call
call: "jira.create-issue"
with:
project_key: "SEC"
issuetype: "Bug"
summary: "[{{severity}}] Vulnerability {{vulnerability_id}} in {{affected_service}}"
description: "CrowdStrike detected vulnerability {{vulnerability_id}}. Owners: {{get-codeowners.content}}"
priority: "{{severity}}"
- name: alert-security
type: call
call: "slack.post-message"
with:
channel: "security-alerts"
text: "Vulnerability {{vulnerability_id}} ({{severity}}) in {{affected_service}}. Jira: {{create-security-ticket.key}}. Owners: {{get-codeowners.content}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: contents
path: "/repos/uber/{{repo}}/contents/{{path}}"
inputParameters:
- name: repo
in: path
- name: path
in: path
operations:
- name: get-file-contents
method: GET
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves email delivery statistics from SendGrid for a given date range.
naftiko: "0.5"
info:
label: "SendGrid Email Delivery Stats"
description: "Retrieves email delivery statistics from SendGrid for a given date range."
tags:
- communications
- sendgrid
- analytics
capability:
exposes:
- type: mcp
namespace: email-ops
port: 8080
tools:
- name: get-email-stats
description: "Given a date range, return email delivery, bounce, and open rates from SendGrid."
inputParameters:
- name: start_date
in: body
type: string
description: "Start date in YYYY-MM-DD format."
call: "sendgrid-stats.get-global-stats"
with:
start_date: "{{start_date}}"
outputParameters:
- name: delivered
type: number
mapping: "$.stats[0].metrics.delivered"
- name: bounces
type: number
mapping: "$.stats[0].metrics.bounces"
consumes:
- type: http
namespace: sendgrid-stats
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: stats
path: "/stats"
operations:
- name: get-global-stats
method: GET
When a microservice is scheduled for deprecation, notifies dependent teams via Slack, creates Jira migration tickets for each consumer, and updates the Confluence service catalog.
naftiko: "0.5"
info:
label: "Service Deprecation Notifier"
description: "When a microservice is scheduled for deprecation, notifies dependent teams via Slack, creates Jira migration tickets for each consumer, and updates the Confluence service catalog."
tags:
- engineering
- slack
- jira
- confluence
capability:
exposes:
- type: mcp
namespace: service-lifecycle
port: 8080
tools:
- name: notify-service-deprecation
description: "Given a service name, deprecation date, and list of dependent teams, create migration tickets and notify all consumers."
inputParameters:
- name: service_name
in: body
type: string
description: "The service being deprecated."
- name: deprecation_date
in: body
type: string
description: "Deprecation date in YYYY-MM-DD format."
- name: replacement_service
in: body
type: string
description: "The replacement service name."
steps:
- name: create-migration-ticket
type: call
call: "jira.create-issue"
with:
project_key: "ENG"
issuetype: "Epic"
summary: "Migrate from {{service_name}} to {{replacement_service}} by {{deprecation_date}}"
- name: update-service-catalog
type: call
call: "confluence.update-page"
with:
page_id: "service-catalog-{{service_name}}"
body: "DEPRECATED: This service will be removed on {{deprecation_date}}. Migrate to {{replacement_service}}."
- name: announce-deprecation
type: call
call: "slack.post-message"
with:
channel: "engineering-announcements"
text: "SERVICE DEPRECATION: {{service_name}} will be deprecated on {{deprecation_date}}. Migrate to {{replacement_service}}. Migration epic: {{create-migration-ticket.key}}"
consumes:
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: confluence
baseUri: "https://uber.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content/{{page_id}}"
inputParameters:
- name: page_id
in: path
operations:
- name: update-page
method: PUT
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When an SLA breach is detected, updates the Salesforce case, sends an apology email via SendGrid, and alerts the customer success team in Slack.
naftiko: "0.5"
info:
label: "SLA Breach Customer Notification"
description: "When an SLA breach is detected, updates the Salesforce case, sends an apology email via SendGrid, and alerts the customer success team in Slack."
tags:
- customer-success
- salesforce
- sendgrid
- slack
capability:
exposes:
- type: mcp
namespace: sla-ops
port: 8080
tools:
- name: handle-sla-breach
description: "Given an SLA breach case, update Salesforce, send customer notification, and alert CS team."
inputParameters:
- name: case_id
in: body
type: string
description: "Salesforce case ID."
- name: customer_email
in: body
type: string
description: "Customer email address."
- name: sla_type
in: body
type: string
description: "Type of SLA breached."
steps:
- name: update-case
type: call
call: "salesforce.update-case"
with:
case_id: "{{case_id}}"
SLA_Breach__c: true
- name: send-notification
type: call
call: "sendgrid.send-email"
with:
to: "{{customer_email}}"
subject: "Service update regarding your case"
body: "We apologize for the delay in resolving your case {{case_id}}. Our team is prioritizing this and will provide an update within 4 hours."
- name: alert-cs-team
type: call
call: "slack.post-message"
with:
channel: "customer-success-alerts"
text: "SLA breach: Case {{case_id}} ({{sla_type}}). Customer notified: {{customer_email}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://uber.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case/{{case_id}}"
inputParameters:
- name: case_id
in: path
operations:
- name: update-case
method: PATCH
- 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_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves usage metrics for a given Slack channel including message count, active members, and last activity timestamp.
naftiko: "0.5"
info:
label: "Slack Channel Usage Audit"
description: "Retrieves usage metrics for a given Slack channel including message count, active members, and last activity timestamp."
tags:
- communications
- slack
capability:
exposes:
- type: mcp
namespace: comms-audit
port: 8080
tools:
- name: get-channel-usage
description: "Given a Slack channel ID, return message volume, active member count, and last activity date. Use for workspace cleanup and channel consolidation efforts."
inputParameters:
- name: channel_id
in: body
type: string
description: "The Slack channel ID."
call: "slack-analytics.get-channel-info"
with:
channel: "{{channel_id}}"
outputParameters:
- name: message_count
type: number
mapping: "$.channel.num_members"
- name: last_activity
type: string
mapping: "$.channel.updated"
consumes:
- type: http
namespace: slack-analytics
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: channels
path: "/conversations.info"
operations:
- name: get-channel-info
method: GET
When a Datadog SLO burn rate exceeds the fast-burn threshold, creates a Jira incident for the on-call team and posts an urgent Slack alert to the engineering channel.
naftiko: "0.5"
info:
label: "SLO Burn Rate Alert"
description: "When a Datadog SLO burn rate exceeds the fast-burn threshold, creates a Jira incident for the on-call team and posts an urgent Slack alert to the engineering channel."
tags:
- observability
- slo
- datadog
- jira
- slack
capability:
exposes:
- type: mcp
namespace: slo-ops
port: 8080
tools:
- name: handle-slo-burn-alert
description: "Given a Datadog SLO ID and current burn rate, create a Jira incident for the on-call team and post an urgent Slack alert with error budget context."
inputParameters:
- name: slo_id
in: body
type: string
description: "The Datadog SLO ID experiencing fast burn."
- name: slo_name
in: body
type: string
description: "Human-readable name of the SLO."
- name: burn_rate
in: body
type: number
description: "Current burn rate multiplier (e.g., 14.4 for fast burn)."
- name: error_budget_remaining_pct
in: body
type: number
description: "Remaining error budget as a percentage."
- name: eng_channel
in: body
type: string
description: "Slack channel for the engineering on-call team."
steps:
- name: create-incident-ticket
type: call
call: "jira-slo.create-issue"
with:
project_key: "OPS"
issuetype: "Incident"
summary: "SLO Fast Burn: {{slo_name}} — {{burn_rate}}x burn rate"
description: "SLO: {{slo_id}}\nBurn rate: {{burn_rate}}x\nError budget remaining: {{error_budget_remaining_pct}}%"
- name: post-slack-alert
type: call
call: "slack-slo.post-message"
with:
channel: "{{eng_channel}}"
text: "SLO BURN ALERT: {{slo_name}} | Burn rate: {{burn_rate}}x | Error budget remaining: {{error_budget_remaining_pct}}% | Jira: {{create-incident-ticket.key}}"
consumes:
- type: http
namespace: jira-slo
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack-slo
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Monitors Snowflake data pipeline execution history for the Rides and Eats analytics domains, alerts on failures via Slack, and creates Jira remediation tasks.
naftiko: "0.5"
info:
label: "Snowflake Analytics Pipeline Monitoring"
description: "Monitors Snowflake data pipeline execution history for the Rides and Eats analytics domains, alerts on failures via Slack, and creates Jira remediation tasks."
tags:
- data
- analytics
- snowflake
- jira
- slack
capability:
exposes:
- type: mcp
namespace: analytics-monitoring
port: 8080
tools:
- name: monitor-analytics-pipelines
description: "Given a Snowflake database and pipeline prefix, check recent execution history for failures or anomalies, create a Jira remediation task for failures, and post a status digest to Slack."
inputParameters:
- name: database_name
in: body
type: string
description: "Snowflake database containing the analytics pipelines (e.g., ANALYTICS_RIDES)."
- name: pipeline_prefix
in: body
type: string
description: "Pipeline name prefix to filter (e.g., trips_, eats_orders_)."
- name: data_channel
in: body
type: string
description: "Slack channel for the data engineering team."
steps:
- name: check-pipeline-runs
type: call
call: "snowflake-analytics.query-runs"
with:
database: "{{database_name}}"
prefix: "{{pipeline_prefix}}"
- name: create-remediation-task
type: call
call: "jira-analytics.create-issue"
with:
project_key: "DATA"
issuetype: "Bug"
summary: "Pipeline failure: {{database_name}}.{{pipeline_prefix}}* — {{check-pipeline-runs.failed_count}} failed runs"
description: "Database: {{database_name}}\nFailed pipelines: {{check-pipeline-runs.failed_pipelines}}"
- name: post-status-digest
type: call
call: "slack-analytics.post-message"
with:
channel: "{{data_channel}}"
text: "Pipeline Monitor: {{database_name}}.{{pipeline_prefix}}* | Success: {{check-pipeline-runs.success_count}} | Failed: {{check-pipeline-runs.failed_count}} | Jira: {{create-remediation-task.key}}"
consumes:
- type: http
namespace: snowflake-analytics
baseUri: "https://uber.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query-runs
method: POST
- type: http
namespace: jira-analytics
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack-analytics
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Runs data quality checks against Snowflake tables and creates a Jira data quality issue when row count anomalies or null rate thresholds are exceeded, posting a summary to Slack.
naftiko: "0.5"
info:
label: "Snowflake Data Quality Alert"
description: "Runs data quality checks against Snowflake tables and creates a Jira data quality issue when row count anomalies or null rate thresholds are exceeded, posting a summary to Slack."
tags:
- data
- analytics
- snowflake
- jira
- slack
capability:
exposes:
- type: mcp
namespace: data-quality
port: 8080
tools:
- name: check-data-quality
description: "Given a Snowflake table name and quality thresholds, execute quality checks, create a Jira issue for failures, and post a quality digest to the data engineering Slack channel."
inputParameters:
- name: table_name
in: body
type: string
description: "The fully qualified Snowflake table name (e.g., ANALYTICS.RIDES.TRIP_EVENTS)."
- name: null_rate_threshold
in: body
type: number
description: "Maximum acceptable null rate as a percentage (e.g., 5.0 for 5%)."
- name: data_channel
in: body
type: string
description: "Slack channel for the data engineering team."
steps:
- name: run-quality-check
type: call
call: "snowflake.query-quality"
with:
table: "{{table_name}}"
null_threshold: "{{null_rate_threshold}}"
- name: create-quality-issue
type: call
call: "jira-quality.create-issue"
with:
project_key: "DATA"
issuetype: "Bug"
summary: "Data quality failure: {{table_name}}"
description: "Null rate: {{run-quality-check.null_rate}}% (threshold: {{null_rate_threshold}}%). Rows: {{run-quality-check.row_count}}"
- name: post-quality-digest
type: call
call: "slack-quality.post-message"
with:
channel: "{{data_channel}}"
text: "Data Quality: {{table_name}} | Null rate: {{run-quality-check.null_rate}}% | Rows: {{run-quality-check.row_count}} | Status: {{run-quality-check.status}} | Jira: {{create-quality-issue.key}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://uber.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query-quality
method: POST
- type: http
namespace: jira-quality
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack-quality
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a Snowflake ETL pipeline fails, creates a PagerDuty incident, logs the failure in Jira, and posts a diagnostic summary to the data engineering Slack channel.
naftiko: "0.5"
info:
label: "Snowflake ETL Failure Recovery"
description: "When a Snowflake ETL pipeline fails, creates a PagerDuty incident, logs the failure in Jira, and posts a diagnostic summary to the data engineering Slack channel."
tags:
- data-engineering
- snowflake
- pagerduty
- jira
- slack
capability:
exposes:
- type: mcp
namespace: etl-recovery
port: 8080
tools:
- name: handle-etl-failure
description: "Given a failed pipeline name and error details, page the data team, create a Jira ticket, and notify Slack."
inputParameters:
- name: pipeline_name
in: body
type: string
description: "The name of the failed ETL pipeline."
- name: error_message
in: body
type: string
description: "The error message from the failure."
- name: affected_tables
in: body
type: string
description: "Comma-separated list of affected Snowflake tables."
steps:
- name: page-data-team
type: call
call: "pagerduty.create-incident"
with:
title: "ETL Failure: {{pipeline_name}}"
service_id: "DATA_ENG_SERVICE"
body: "Pipeline {{pipeline_name}} failed. Error: {{error_message}}. Tables: {{affected_tables}}"
- name: create-incident-ticket
type: call
call: "jira.create-issue"
with:
project_key: "DATA"
issuetype: "Bug"
summary: "ETL failure: {{pipeline_name}}"
description: "Error: {{error_message}}\nAffected tables: {{affected_tables}}"
priority: "High"
- name: notify-data-eng
type: call
call: "slack.post-message"
with:
channel: "data-engineering-alerts"
text: "ETL FAILURE: {{pipeline_name}}\nError: {{error_message}}\nTables: {{affected_tables}}\nPD: {{page-data-team.incident.id}} | Jira: {{create-incident-ticket.key}}"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Checks the execution status and runtime of a Snowflake query by statement handle.
naftiko: "0.5"
info:
label: "Snowflake Query Execution Status"
description: "Checks the execution status and runtime of a Snowflake query by statement handle."
tags:
- data
- snowflake
- analytics
capability:
exposes:
- type: mcp
namespace: data-ops
port: 8080
tools:
- name: get-query-status
description: "Given a Snowflake statement handle, return execution status, row count, and elapsed time. Use for pipeline monitoring and debugging long-running queries."
inputParameters:
- name: statement_handle
in: body
type: string
description: "The Snowflake SQL statement handle."
call: "snowflake-sql.get-statement-status"
with:
statementHandle: "{{statement_handle}}"
outputParameters:
- name: status
type: string
mapping: "$.statementStatusUrl"
- name: row_count
type: number
mapping: "$.resultSetMetaData.numRows"
consumes:
- type: http
namespace: snowflake-sql
baseUri: "https://uber.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements/{{statementHandle}}"
inputParameters:
- name: statementHandle
in: path
operations:
- name: get-statement-status
method: GET
Retrieves credit consumption and query volume for a Snowflake warehouse.
naftiko: "0.5"
info:
label: "Snowflake Warehouse Usage Lookup"
description: "Retrieves credit consumption and query volume for a Snowflake warehouse."
tags:
- data
- snowflake
- finops
capability:
exposes:
- type: mcp
namespace: data-finops
port: 8080
tools:
- name: get-warehouse-usage
description: "Given a Snowflake warehouse name, return credit consumption and query count for the current day."
inputParameters:
- name: warehouse_name
in: body
type: string
description: "The Snowflake warehouse name."
call: "snowflake-usage.execute-statement"
with:
statement: "SELECT SUM(credits_used) as credits, COUNT(*) as queries FROM snowflake.account_usage.warehouse_metering_history WHERE warehouse_name='{{warehouse_name}}' AND start_time>=CURRENT_DATE()"
outputParameters:
- name: credits_used
type: number
mapping: "$.data[0][0]"
- name: query_count
type: number
mapping: "$.data[0][1]"
consumes:
- type: http
namespace: snowflake-usage
baseUri: "https://uber.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
When a supply-demand imbalance is detected in a market, queries Snowflake for real-time metrics, creates a Jira operations ticket, and alerts the marketplace ops Slack channel.
naftiko: "0.5"
info:
label: "Supply Demand Imbalance Responder"
description: "When a supply-demand imbalance is detected in a market, queries Snowflake for real-time metrics, creates a Jira operations ticket, and alerts the marketplace ops Slack channel."
tags:
- marketplace
- snowflake
- jira
- slack
capability:
exposes:
- type: mcp
namespace: marketplace-ops
port: 8080
tools:
- name: respond-to-imbalance
description: "Given a market and imbalance type, query supply-demand metrics, create an ops ticket, and alert the team."
inputParameters:
- name: market
in: body
type: string
description: "The market/city."
- name: imbalance_type
in: body
type: string
description: "Type: undersupply or oversupply."
- name: magnitude
in: body
type: number
description: "Severity magnitude percentage."
steps:
- name: query-metrics
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT available_drivers, active_riders, eta_p50, surge_multiplier FROM marketplace.realtime_metrics WHERE market='{{market}}' ORDER BY timestamp DESC LIMIT 1"
- name: create-ops-ticket
type: call
call: "jira.create-issue"
with:
project_key: "MKTPLACE"
issuetype: "Task"
summary: "{{imbalance_type}} in {{market}} ({{magnitude}}%)"
description: "Metrics: {{query-metrics.data}}"
- name: alert-marketplace-ops
type: call
call: "slack.post-message"
with:
channel: "marketplace-ops"
text: "Supply-demand imbalance in {{market}}: {{imbalance_type}} at {{magnitude}}%. Metrics: {{query-metrics.data}}. Ticket: {{create-ops-ticket.key}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://uber.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When Terraform drift is detected, creates a Jira ticket for the infrastructure team, triggers a plan run in Terraform Cloud, and alerts the platform engineering Slack channel.
naftiko: "0.5"
info:
label: "Terraform Drift Detection Remediation"
description: "When Terraform drift is detected, creates a Jira ticket for the infrastructure team, triggers a plan run in Terraform Cloud, and alerts the platform engineering Slack channel."
tags:
- infrastructure
- terraform
- jira
- slack
capability:
exposes:
- type: mcp
namespace: infra-drift
port: 8080
tools:
- name: remediate-drift
description: "Given a Terraform workspace and drift details, create a Jira ticket, trigger a plan, and notify the team."
inputParameters:
- name: workspace_name
in: body
type: string
description: "The Terraform Cloud workspace name."
- name: drift_description
in: body
type: string
description: "Description of the detected drift."
steps:
- name: create-drift-ticket
type: call
call: "jira.create-issue"
with:
project_key: "INFRA"
issuetype: "Bug"
summary: "Terraform drift detected: {{workspace_name}}"
description: "{{drift_description}}"
- name: trigger-plan
type: call
call: "terraform.create-run"
with:
workspace_name: "{{workspace_name}}"
message: "Automated drift detection plan for {{create-drift-ticket.key}}"
- name: notify-platform-eng
type: call
call: "slack.post-message"
with:
channel: "platform-engineering"
text: "Terraform drift in {{workspace_name}}. Jira: {{create-drift-ticket.key}}. Plan triggered: {{trigger-plan.data.id}}. Details: {{drift_description}}"
consumes:
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: runs
path: "/runs"
operations:
- name: create-run
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: post-message
method: POST
When a Terraform Cloud plan is created for a production workspace, creates a Jira change request for approval, notifies the infra team in Slack, and posts a Datadog deployment event.
naftiko: "0.5"
info:
label: "Terraform Production Provisioning Approval"
description: "When a Terraform Cloud plan is created for a production workspace, creates a Jira change request for approval, notifies the infra team in Slack, and posts a Datadog deployment event."
tags:
- cloud
- infrastructure
- terraform
- jira
- slack
- datadog
capability:
exposes:
- type: mcp
namespace: infra-provisioning
port: 8080
tools:
- name: request-terraform-approval
description: "Given a Terraform Cloud workspace name and plan ID, create a Jira change request, notify the infrastructure team in Slack, and post a Datadog audit event."
inputParameters:
- name: workspace_name
in: body
type: string
description: "The Terraform Cloud workspace name (e.g., rides-prod-us-east-1)."
- name: plan_id
in: body
type: string
description: "The Terraform Cloud plan ID pending approval."
- name: resource_changes
in: body
type: integer
description: "Number of resources to be changed, added, or destroyed."
- name: infra_channel
in: body
type: string
description: "Slack channel for the infrastructure team."
steps:
- name: get-plan-details
type: call
call: "terraform.get-plan"
with:
plan_id: "{{plan_id}}"
- name: create-change-request
type: call
call: "jira-infra.create-issue"
with:
project_key: "INFRA"
issuetype: "Task"
summary: "Terraform approval: {{workspace_name}} — {{resource_changes}} resource changes"
description: "Plan ID: {{plan_id}}\nWorkspace: {{workspace_name}}\nChanges: {{resource_changes}} resources"
- name: notify-infra-team
type: call
call: "slack-infra.post-message"
with:
channel: "{{infra_channel}}"
text: "Terraform plan needs approval: {{workspace_name}} | {{resource_changes}} changes | Jira: {{create-change-request.key}} | Plan: {{plan_id}}"
- name: log-datadog-event
type: call
call: "datadog-infra.create-event"
with:
title: "Terraform Plan Pending: {{workspace_name}}"
text: "Plan {{plan_id}} — {{resource_changes}} resource changes pending approval."
alert_type: "info"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: plans
path: "/plans/{{plan_id}}"
inputParameters:
- name: plan_id
in: path
operations:
- name: get-plan
method: GET
- type: http
namespace: jira-infra
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack-infra
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
- type: http
namespace: datadog-infra
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: events
path: "/events"
operations:
- name: create-event
method: POST
Retrieves the total resource count and workspace status from a Terraform Cloud workspace.
naftiko: "0.5"
info:
label: "Terraform State Resource Count"
description: "Retrieves the total resource count and workspace status from a Terraform Cloud workspace."
tags:
- infrastructure
- terraform
capability:
exposes:
- type: mcp
namespace: infra-ops
port: 8080
tools:
- name: get-workspace-resource-count
description: "Given a Terraform Cloud workspace name, return the total managed resources and workspace health. Use for infrastructure audits."
inputParameters:
- name: workspace_name
in: body
type: string
description: "The Terraform Cloud workspace name."
call: "terraform-workspaces.get-workspace"
with:
workspace_name: "{{workspace_name}}"
outputParameters:
- name: resource_count
type: number
mapping: "$.data.attributes.resource-count"
- name: status
type: string
mapping: "$.data.attributes.current-run.status"
consumes:
- type: http
namespace: terraform-workspaces
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: workspaces
path: "/organizations/uber/workspaces/{{workspace_name}}"
inputParameters:
- name: workspace_name
in: path
operations:
- name: get-workspace
method: GET
Checks the health status of a third-party API integration endpoint and returns response time and availability metrics.
naftiko: "0.5"
info:
label: "Third-Party API Health Monitor"
description: "Checks the health status of a third-party API integration endpoint and returns response time and availability metrics."
tags:
- integrations
- monitoring
- datadog
capability:
exposes:
- type: mcp
namespace: integration-health
port: 8080
tools:
- name: check-api-health
description: "Given a Datadog synthetic test ID, return the latest test result and response time."
inputParameters:
- name: test_id
in: body
type: string
description: "The Datadog synthetic test ID."
call: "datadog-synthetics.get-test-result"
with:
public_id: "{{test_id}}"
outputParameters:
- name: status
type: string
mapping: "$.results[0].status"
- name: response_time_ms
type: number
mapping: "$.results[0].response_time"
consumes:
- type: http
namespace: datadog-synthetics
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: synthetics
path: "/synthetics/tests/{{public_id}}/results"
inputParameters:
- name: public_id
in: path
operations:
- name: get-test-result
method: GET
When a vendor contract is within 60 days of renewal, creates a Jira procurement ticket, notifies the finance team via Slack, and logs renewal details in Snowflake.
naftiko: "0.5"
info:
label: "Vendor Contract Renewal Workflow"
description: "When a vendor contract is within 60 days of renewal, creates a Jira procurement ticket, notifies the finance team via Slack, and logs renewal details in Snowflake."
tags:
- procurement
- jira
- slack
- snowflake
capability:
exposes:
- type: mcp
namespace: procurement-ops
port: 8080
tools:
- name: initiate-contract-renewal
description: "Given a vendor name and contract details, create a procurement ticket, notify finance, and log the renewal."
inputParameters:
- name: vendor_name
in: body
type: string
description: "The vendor name."
- name: contract_value
in: body
type: number
description: "Annual contract value in USD."
- name: renewal_date
in: body
type: string
description: "Contract renewal date in YYYY-MM-DD format."
steps:
- name: create-procurement-ticket
type: call
call: "jira.create-issue"
with:
project_key: "PROC"
issuetype: "Task"
summary: "Contract renewal: {{vendor_name}} — ${{contract_value}} — {{renewal_date}}"
- name: notify-finance
type: call
call: "slack.post-message"
with:
channel: "finance-procurement"
text: "Contract renewal approaching: {{vendor_name}} (${{contract_value}}) renews {{renewal_date}}. Review: {{create-procurement-ticket.key}}"
- name: log-renewal
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO finance.contract_renewals (vendor, value, renewal_date, ticket_key) VALUES ('{{vendor_name}}', {{contract_value}}, '{{renewal_date}}', '{{create-procurement-ticket.key}}')"
consumes:
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
- type: http
namespace: snowflake
baseUri: "https://uber.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
Pulls DORA metrics from GitHub, deployment frequency from Datadog, and open incident count from Jira, then posts a weekly engineering health digest to Slack.
naftiko: "0.5"
info:
label: "Weekly Engineering Metrics Digest"
description: "Pulls DORA metrics from GitHub, deployment frequency from Datadog, and open incident count from Jira, then posts a weekly engineering health digest to Slack."
tags:
- engineering
- github
- datadog
- jira
- slack
capability:
exposes:
- type: mcp
namespace: eng-metrics
port: 8080
tools:
- name: generate-weekly-digest
description: "Given a team name, compile DORA metrics, deployment frequency, and incident counts into a Slack digest."
inputParameters:
- name: team_name
in: body
type: string
description: "The engineering team name."
steps:
- name: get-pr-metrics
type: call
call: "github.search-prs"
with:
q: "org:uber is:pr is:merged merged:>=7daysago team-review-requested:{{team_name}}"
- name: get-open-incidents
type: call
call: "jira.search-issues"
with:
jql: "project=INC AND status!=Done AND labels={{team_name}} AND created>=-7d"
- name: post-digest
type: call
call: "slack.post-message"
with:
channel: "{{team_name}}-engineering"
text: "Weekly Engineering Digest for {{team_name}}:\nPRs merged: {{get-pr-metrics.total_count}}\nOpen incidents: {{get-open-incidents.total}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: search
path: "/search/issues"
operations:
- name: search-prs
method: GET
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: search
path: "/search"
operations:
- name: search-issues
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: post-message
method: POST
When an employee leave of absence is approved, updates Okta access to limited mode, creates a Jira handoff ticket, and notifies the manager via Slack.
naftiko: "0.5"
info:
label: "Workday Leave of Absence Processor"
description: "When an employee leave of absence is approved, updates Okta access to limited mode, creates a Jira handoff ticket, and notifies the manager via Slack."
tags:
- hr
- workday
- okta
- jira
- slack
capability:
exposes:
- type: mcp
namespace: hr-leave
port: 8080
tools:
- name: process-leave-of-absence
description: "Given employee details and leave dates, limit Okta access, create a handoff ticket, and notify the manager."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday employee ID."
- name: leave_start
in: body
type: string
description: "Leave start date."
- name: leave_end
in: body
type: string
description: "Expected return date."
- name: manager_channel
in: body
type: string
description: "Manager's Slack DM or team channel."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
- name: create-handoff-ticket
type: call
call: "jira.create-issue"
with:
project_key: "IT"
issuetype: "Task"
summary: "LOA handoff: {{get-employee.full_name}} ({{leave_start}} to {{leave_end}})"
- name: notify-manager
type: call
call: "slack.post-message"
with:
channel: "{{manager_channel}}"
text: "LOA processed for {{get-employee.full_name}}: {{leave_start}} to {{leave_end}}. Handoff ticket: {{create-handoff-ticket.key}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves the reporting chain and direct reports for a Workday employee.
naftiko: "0.5"
info:
label: "Workday Org Chart Lookup"
description: "Retrieves the reporting chain and direct reports for a Workday employee."
tags:
- hr
- workday
capability:
exposes:
- type: mcp
namespace: hr-org
port: 8080
tools:
- name: get-org-chart
description: "Given a Workday employee ID, return their manager, direct reports, and department. Use for org planning and stakeholder identification."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday employee ID."
call: "workday-org.get-supervisory-org"
with:
worker_id: "{{employee_id}}"
outputParameters:
- name: manager
type: string
mapping: "$.manager.full_name"
- name: direct_reports_count
type: number
mapping: "$.direct_reports_count"
consumes:
- type: http
namespace: workday-org
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: org
path: "/workers/{{worker_id}}/supervisoryOrganization"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-supervisory-org
method: GET
Retrieves current headcount by business unit and employment type from Workday for payroll planning and workforce cost reporting.
naftiko: "0.5"
info:
label: "Workday Payroll Period Snapshot"
description: "Retrieves current headcount by business unit and employment type from Workday for payroll planning and workforce cost reporting."
tags:
- hr
- payroll
- workday
- reporting
capability:
exposes:
- type: mcp
namespace: hr-payroll
port: 8080
tools:
- name: get-payroll-headcount
description: "Returns current active headcount by business unit (Rides, Eats, Freight, Platform) and employment type from Workday. Use for payroll planning and cost center reporting."
inputParameters:
- name: business_unit
in: body
type: string
description: "Business unit to filter by (e.g., Rides, Eats, Freight, Platform). Leave blank for all."
call: "workday-payroll.get-workers"
with:
businessUnit: "{{business_unit}}"
outputParameters:
- name: total_count
type: number
mapping: "$.totalCount"
- name: full_time_count
type: number
mapping: "$.fullTimeCount"
- name: part_time_count
type: number
mapping: "$.partTimeCount"
consumes:
- type: http
namespace: workday-payroll
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers"
inputParameters:
- name: businessUnit
in: query
operations:
- name: get-workers
method: GET
Initiates the semi-annual engineering performance review cycle in Workday, notifies all engineering managers to begin peer review assignments via Slack.
naftiko: "0.5"
info:
label: "Workday Performance Review Kickoff"
description: "Initiates the semi-annual engineering performance review cycle in Workday, notifies all engineering managers to begin peer review assignments via Slack."
tags:
- hr
- performance-management
- workday
- slack
capability:
exposes:
- type: mcp
namespace: performance-reviews
port: 8080
tools:
- name: kickoff-performance-cycle
description: "Given a review cycle name and submission deadline, launch performance review templates in Workday for all active employees and notify managers via Slack."
inputParameters:
- name: cycle_name
in: body
type: string
description: "Name of the performance review cycle (e.g., 2026 H1 Performance Review)."
- name: submission_deadline
in: body
type: string
description: "Review submission deadline in YYYY-MM-DD format."
- name: managers_channel
in: body
type: string
description: "Slack channel for all engineering managers."
steps:
- name: launch-review-cycle
type: call
call: "workday-perf.create-review-cycle"
with:
cycleName: "{{cycle_name}}"
dueDate: "{{submission_deadline}}"
- name: notify-managers
type: call
call: "slack-perf.post-message"
with:
channel: "{{managers_channel}}"
text: "{{cycle_name}} is now open. Please complete peer review assignments and manager assessments in Workday by {{submission_deadline}}. Cycle ID: {{launch-review-cycle.cycle_id}}"
consumes:
- type: http
namespace: workday-perf
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: review-cycles
path: "/performanceReviewCycles"
operations:
- name: create-review-cycle
method: POST
- type: http
namespace: slack-perf
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When an employee promotion is approved, updates Workday compensation, creates a Jira ticket for access provisioning changes, and sends a congratulations message via Slack.
naftiko: "0.5"
info:
label: "Workday Promotion Workflow"
description: "When an employee promotion is approved, updates Workday compensation, creates a Jira ticket for access provisioning changes, and sends a congratulations message via Slack."
tags:
- hr
- workday
- jira
- slack
- promotion
capability:
exposes:
- type: mcp
namespace: hr-promotions
port: 8080
tools:
- name: process-promotion
description: "Given employee details and new role, update Workday, create access change ticket, and notify team."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday employee ID."
- name: new_title
in: body
type: string
description: "The new job title."
- name: new_level
in: body
type: string
description: "The new job level."
- name: team_channel
in: body
type: string
description: "The team Slack channel."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
- name: create-access-ticket
type: call
call: "jira.create-issue"
with:
project_key: "IT"
issuetype: "Task"
summary: "Access update for promotion: {{get-employee.full_name}} to {{new_title}} ({{new_level}})"
- name: congratulate-team
type: call
call: "slack.post-message"
with:
channel: "{{team_channel}}"
text: "Congratulations to {{get-employee.full_name}} on their promotion to {{new_title}}! Well deserved!"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: jira
baseUri: "https://uber.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves the current compensation plan and salary band for a Workday worker by employee ID.
naftiko: "0.5"
info:
label: "Workday Worker Compensation Lookup"
description: "Retrieves the current compensation plan and salary band for a Workday worker by employee ID."
tags:
- hr
- workday
- compensation
capability:
exposes:
- type: mcp
namespace: hr-compensation
port: 8080
tools:
- name: get-worker-compensation
description: "Given a Workday employee ID, return their current base pay, compensation plan, and pay grade. Use for compensation review cycles and equity analysis."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday employee ID."
call: "workday-comp.get-compensation"
with:
worker_id: "{{employee_id}}"
outputParameters:
- name: base_pay
type: number
mapping: "$.compensation.base_pay"
- name: pay_grade
type: string
mapping: "$.compensation.pay_grade"
consumes:
- type: http
namespace: workday-comp
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: compensation
path: "/workers/{{worker_id}}/compensation"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-compensation
method: GET