Meta Capabilities
Naftiko 0.5 capability definitions for Meta - 100 capabilities showing integration workflows and service orchestrations.
Synchronizes a custom audience segment from Snowflake to the Meta Ads platform for retargeting campaigns.
naftiko: "0.5"
info:
label: "Advertising Audience Segment Sync"
description: "Synchronizes a custom audience segment from Snowflake to the Meta Ads platform for retargeting campaigns."
tags:
- marketing
- ads
- snowflake
- meta-graph
- audience
capability:
exposes:
- type: mcp
namespace: audience-ops
port: 8080
tools:
- name: sync-audience-segment
description: "Given a Snowflake audience query and Meta Ads account ID, execute the query to retrieve the audience segment, then upload and update the custom audience in Meta Ads Manager."
inputParameters:
- name: ads_account_id
in: body
type: string
description: "The Meta Ads account ID to update the custom audience in."
- name: custom_audience_id
in: body
type: string
description: "The existing Meta custom audience ID to sync to."
- name: audience_query
in: body
type: string
description: "The Snowflake SQL query to retrieve the audience segment user IDs."
steps:
- name: get-audience
type: call
call: "snowflake.execute-query"
with:
query: "{{audience_query}}"
- name: update-audience
type: call
call: "meta-graph.update-custom-audience"
with:
ads_account_id: "{{ads_account_id}}"
audience_id: "{{custom_audience_id}}"
users: "{{get-audience.results}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://meta.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: meta-graph
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.meta_graph_token"
resources:
- name: custom-audiences
path: "/{{audience_id}}/users"
inputParameters:
- name: audience_id
in: path
operations:
- name: update-custom-audience
method: POST
Retrieves a GitHub pull request diff and uses the Anthropic API to generate a structured code review summary, posting it as a PR comment.
naftiko: "0.5"
info:
label: "AI-Assisted Code Review Summary"
description: "Retrieves a GitHub pull request diff and uses the Anthropic API to generate a structured code review summary, posting it as a PR comment."
tags:
- ai
- automation
- anthropic
- github
- code-review
- devops
capability:
exposes:
- type: mcp
namespace: ai-code-review
port: 8080
tools:
- name: summarize-pull-request
description: "Given a GitHub pull request URL, retrieve the PR diff, generate a structured code review summary using Anthropic Claude, and post it as a comment on the pull request."
inputParameters:
- name: repository
in: body
type: string
description: "The GitHub repository containing the pull request (e.g., facebook/react)."
- name: pull_request_number
in: body
type: integer
description: "The pull request number to review."
steps:
- name: get-pr-diff
type: call
call: "github.get-pull-request-diff"
with:
repository: "{{repository}}"
pull_number: "{{pull_request_number}}"
- name: generate-review
type: call
call: "anthropic.create-message"
with:
model: "claude-opus-4-5"
prompt: "Review this pull request diff and provide a structured summary covering: 1) What changed and why, 2) Potential issues or risks, 3) Suggestions for improvement. Diff: {{get-pr-diff.diff}}"
- name: post-comment
type: call
call: "github.create-pr-comment"
with:
repository: "{{repository}}"
pull_number: "{{pull_request_number}}"
body: "## AI Code Review Summary\n\n{{generate-review.content[0].text}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: pull-request-diff
path: "/repos/{{repository}}/pulls/{{pull_number}}"
inputParameters:
- name: repository
in: path
- name: pull_number
in: path
operations:
- name: get-pull-request-diff
method: GET
- name: pr-comments
path: "/repos/{{repository}}/issues/{{pull_number}}/comments"
inputParameters:
- name: repository
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
After a production incident is resolved, retrieves incident timeline from Datadog and uses Anthropic Claude to generate a structured post-mortem document posted to Slack.
naftiko: "0.5"
info:
label: "AI-Assisted Incident Post-Mortem"
description: "After a production incident is resolved, retrieves incident timeline from Datadog and uses Anthropic Claude to generate a structured post-mortem document posted to Slack."
tags:
- ai
- automation
- anthropic
- datadog
- slack
- incident-response
capability:
exposes:
- type: mcp
namespace: ai-postmortem
port: 8080
tools:
- name: generate-incident-postmortem
description: "Given a Datadog incident ID and ServiceNow incident number, retrieve the incident timeline and event log, use Anthropic Claude to generate a structured post-mortem with root cause and action items, and post it to the engineering Slack channel."
inputParameters:
- name: datadog_incident_id
in: body
type: string
description: "The Datadog incident ID with the event timeline."
- name: servicenow_incident_number
in: body
type: string
description: "The ServiceNow incident number for the resolved incident."
steps:
- name: get-incident-events
type: call
call: "datadog.get-incident-timeline"
with:
incident_id: "{{datadog_incident_id}}"
- name: generate-postmortem
type: call
call: "anthropic.create-message"
with:
model: "claude-opus-4-5"
prompt: "Write a structured production incident post-mortem document with sections: Summary, Timeline, Root Cause, Contributing Factors, Impact, and Action Items. Incident data: {{get-incident-events.timeline}}"
- name: post-postmortem
type: call
call: "slack.post-message"
with:
channel: "incident-postmortems"
text: "Post-Mortem Published - SNOW: {{servicenow_incident_number}}\n\n{{generate-postmortem.content[0].text}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v2"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: incident-timeline
path: "/incidents/{{incident_id}}/timeline"
inputParameters:
- name: incident_id
in: path
operations:
- name: get-incident-timeline
method: GET
- 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_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
On a GitHub Actions pipeline failure on a protected branch, creates a Jira bug, posts a Datadog deployment event, and alerts the engineering team on Slack.
naftiko: "0.5"
info:
label: "CI/CD Pipeline Failure Handler"
description: "On a GitHub Actions pipeline failure on a protected branch, creates a Jira bug, posts a Datadog deployment event, and alerts the engineering team on Slack."
tags:
- devops
- cicd
- github
- jira
- datadog
- slack
- incident-response
capability:
exposes:
- type: mcp
namespace: devops-ops
port: 8080
tools:
- name: handle-pipeline-failure
description: "Given a GitHub Actions pipeline failure with repository, branch, commit SHA, and run URL, create a Jira bug, log a Datadog event, and post an alert to the engineering Slack channel."
inputParameters:
- name: repository
in: body
type: string
description: "The GitHub repository where the failure occurred (e.g., facebook/react)."
- name: workflow_name
in: body
type: string
description: "The GitHub Actions workflow name that failed."
- name: branch
in: body
type: string
description: "The branch on which the failure occurred."
- name: run_url
in: body
type: string
description: "URL to the failed GitHub Actions run."
- name: commit_sha
in: body
type: string
description: "The commit SHA for the failed run."
steps:
- name: create-bug
type: call
call: "jira.create-issue"
with:
project_key: "ENG"
issuetype: "Bug"
summary: "[CI Failure] {{repository}} / {{branch}} - {{workflow_name}}"
description: "Workflow: {{workflow_name}}\nBranch: {{branch}}\nCommit: {{commit_sha}}\nRun: {{run_url}}"
- name: log-event
type: call
call: "datadog.create-event"
with:
title: "CI Failure: {{repository}}/{{branch}}"
text: "Workflow {{workflow_name}} failed at commit {{commit_sha}}"
alert_type: "error"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "engineering-alerts"
text: "Pipeline Failure: {{repository}} | {{branch}} | {{workflow_name}} | Jira: {{create-bug.key}} | Run: {{run_url}}"
consumes:
- type: http
namespace: jira
baseUri: "https://meta.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_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When Datadog detects a cloud cost anomaly on AWS or GCP, creates a ServiceNow change request and notifies the FinOps team via Slack.
naftiko: "0.5"
info:
label: "Cloud Cost Anomaly Response"
description: "When Datadog detects a cloud cost anomaly on AWS or GCP, creates a ServiceNow change request and notifies the FinOps team via Slack."
tags:
- cloud
- finops
- datadog
- servicenow
- slack
- cost-management
capability:
exposes:
- type: mcp
namespace: cloud-finops
port: 8080
tools:
- name: respond-to-cost-anomaly
description: "Given a Datadog cloud cost anomaly with cloud provider, service name, and excess amount, create a ServiceNow change request for the FinOps team and notify the cloud cost Slack channel."
inputParameters:
- name: cloud_provider
in: body
type: string
description: "The cloud provider generating the anomaly: AWS or GCP."
- name: service_name
in: body
type: string
description: "The cloud service or workload generating the cost anomaly."
- name: excess_amount_usd
in: body
type: number
description: "Dollar amount exceeding the expected cost baseline."
steps:
- name: create-change
type: call
call: "servicenow.create-change"
with:
short_description: "{{cloud_provider}} cost anomaly: {{service_name}} exceeded by ${{excess_amount_usd}}"
type: "normal"
category: "cloud_cost"
- name: notify-finops
type: call
call: "slack.post-message"
with:
channel: "cloud-finops"
text: "Cost Anomaly: {{cloud_provider}}/{{service_name}} exceeded baseline by ${{excess_amount_usd}}. ServiceNow: {{create-change.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://meta.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: change-request
path: "/table/change_request"
operations:
- name: create-change
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a Datadog error rate monitor fires after a deployment, triggers a GitHub Actions rollback workflow and creates a ServiceNow emergency change request.
naftiko: "0.5"
info:
label: "Datadog Deployment Rollback Trigger"
description: "When a Datadog error rate monitor fires after a deployment, triggers a GitHub Actions rollback workflow and creates a ServiceNow emergency change request."
tags:
- devops
- deployment
- datadog
- github
- servicenow
- rollback
capability:
exposes:
- type: mcp
namespace: deployment-safety
port: 8080
tools:
- name: trigger-deployment-rollback
description: "Given a Datadog monitor alert with repository, environment, and target rollback version, create a ServiceNow emergency change, trigger the rollback GitHub Actions workflow, and log a Datadog event."
inputParameters:
- name: repository
in: body
type: string
description: "The GitHub repository to roll back."
- name: environment
in: body
type: string
description: "The environment to roll back: production or staging."
- name: target_version
in: body
type: string
description: "The stable version tag to roll back to (e.g., v3.2.1)."
steps:
- name: create-emergency-change
type: call
call: "servicenow.create-change"
with:
short_description: "Emergency rollback: {{repository}} to {{target_version}} in {{environment}}"
type: "emergency"
category: "software_deployment"
- name: trigger-rollback
type: call
call: "github.trigger-workflow"
with:
repository: "{{repository}}"
workflow_id: "rollback.yml"
ref: "main"
- name: log-event
type: call
call: "datadog.create-event"
with:
title: "Rollback triggered: {{repository}}/{{environment}} to {{target_version}}"
alert_type: "warning"
consumes:
- type: http
namespace: servicenow
baseUri: "https://meta.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: change-request
path: "/table/change_request"
operations:
- name: create-change
method: POST
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: workflow-dispatches
path: "/repos/{{repository}}/actions/workflows/{{workflow_id}}/dispatches"
inputParameters:
- name: repository
in: path
- name: workflow_id
in: path
operations:
- name: trigger-workflow
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
When Datadog detects high Facebook News Feed latency, creates a Jira P1 incident and notifies the feed team in Slack.
naftiko: "0.5"
info:
label: "Datadog Facebook Feed Latency Alert to Jira"
description: "When Datadog detects high Facebook News Feed latency, creates a Jira P1 incident and notifies the feed team in Slack."
tags:
- platform
- datadog
- jira
- slack
capability:
exposes:
- type: mcp
namespace: feed-latency
port: 8080
tools:
- name: handle-feed-latency
description: "Given a Datadog monitor ID for feed latency, create a Jira P1 and notify the feed team."
inputParameters:
- name: monitor_id
in: body
type: integer
description: "Datadog monitor ID."
steps:
- name: get-monitor
type: call
call: dd-feed.get-monitor
with:
monitor_id: "{{monitor_id}}"
- name: create-p1
type: call
call: jira-feed.create-issue
with:
project_key: "FEED"
issuetype: "Incident"
summary: "P1: Feed latency — {{get-monitor.name}}"
priority: "Highest"
- name: notify-feed
type: call
call: slack-feed.post-message
with:
channel: "feed-engineering"
text: "FEED LATENCY P1: {{get-monitor.name}} | Jira: {{create-p1.key}}"
consumes:
- type: http
namespace: dd-feed
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
- type: http
namespace: jira-feed
baseUri: "https://meta.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-feed
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Generates weekly SLO compliance for the Facebook Graph API from Datadog and posts to Slack.
naftiko: "0.5"
info:
label: "Datadog Graph API SLO Weekly Report"
description: "Generates weekly SLO compliance for the Facebook Graph API from Datadog and posts to Slack."
tags:
- platform
- datadog
- slack
- slo
capability:
exposes:
- type: mcp
namespace: graph-api-ops
port: 8080
tools:
- name: handle-graph-api-slo
description: "Given a Datadog SLO ID, generate weekly report and post to Slack."
inputParameters:
- name: slo_id
in: body
type: string
description: "Datadog SLO ID."
steps:
- name: get-slo
type: call
call: dd-graph.get-slo-history
with:
slo_id: "{{slo_id}}"
- name: post-report
type: call
call: slack-graph.post-message
with:
channel: "graph-api"
text: "Graph API SLO: Target: {{get-slo.target}}% | Actual: {{get-slo.overall_status}} | Budget: {{get-slo.error_budget_remaining}}%"
consumes:
- type: http
namespace: dd-graph
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: slo
path: "/slo/{{slo_id}}/history"
inputParameters:
- name: slo_id
in: path
operations:
- name: get-slo-history
method: GET
- type: http
namespace: slack-graph
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When Datadog detects Horizon Worlds latency spikes, creates a Jira incident and notifies the VR team in Slack.
naftiko: "0.5"
info:
label: "Datadog Horizon Worlds Latency Alert"
description: "When Datadog detects Horizon Worlds latency spikes, creates a Jira incident and notifies the VR team in Slack."
tags:
- vr
- datadog
- jira
- slack
capability:
exposes:
- type: mcp
namespace: horizon-ops
port: 8080
tools:
- name: handle-horizon-latency
description: "Given a Datadog monitor ID, create a Jira incident and notify VR team."
inputParameters:
- name: monitor_id
in: body
type: integer
description: "Datadog monitor ID."
steps:
- name: get-monitor
type: call
call: dd-horizon.get-monitor
with:
monitor_id: "{{monitor_id}}"
- name: create-incident
type: call
call: jira-horizon.create-issue
with:
project_key: "HORIZON"
issuetype: "Incident"
summary: "Horizon latency: {{get-monitor.name}}"
priority: "High"
- name: notify-vr
type: call
call: slack-vr.post-message
with:
channel: "horizon-engineering"
text: "HORIZON LATENCY: {{get-monitor.name}} | Jira: {{create-incident.key}}"
consumes:
- type: http
namespace: dd-horizon
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
- type: http
namespace: jira-horizon
baseUri: "https://meta.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-vr
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a Datadog infrastructure monitor fires for a production service, creates a ServiceNow incident and pages the on-call engineer via PagerDuty.
naftiko: "0.5"
info:
label: "Datadog Infrastructure Alert to PagerDuty"
description: "When a Datadog infrastructure monitor fires for a production service, creates a ServiceNow incident and pages the on-call engineer via PagerDuty."
tags:
- observability
- infrastructure
- datadog
- servicenow
- pagerduty
- monitoring
capability:
exposes:
- type: mcp
namespace: infra-monitoring
port: 8080
tools:
- name: handle-infrastructure-alert
description: "Given a Datadog infrastructure alert with service, host, and metric details, open a high-priority ServiceNow incident and trigger a PagerDuty escalation to the on-call engineer."
inputParameters:
- name: monitor_name
in: body
type: string
description: "The Datadog monitor name that fired."
- name: service_name
in: body
type: string
description: "The affected production service name."
- name: host
in: body
type: string
description: "The affected host identifier."
- name: alert_url
in: body
type: string
description: "URL to the Datadog monitor alert."
steps:
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Infrastructure alert: {{monitor_name}} on {{host}}"
urgency: "1"
category: "infrastructure"
- name: page-oncall
type: call
call: "pagerduty.create-incident"
with:
title: "Infra Alert: {{monitor_name}} on {{service_name}}"
severity: "critical"
body: "Host: {{host}}. Alert: {{alert_url}}. SNOW: {{create-incident.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://meta.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incident
path: "/table/incident"
operations:
- name: create-incident
method: POST
- 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
Queries Datadog for Instagram API endpoint latency metrics.
naftiko: "0.5"
info:
label: "Datadog Instagram API Latency Check"
description: "Queries Datadog for Instagram API endpoint latency metrics."
tags:
- platform
- datadog
- instagram
capability:
exposes:
- type: mcp
namespace: ig-ops
port: 8080
tools:
- name: get-api-latency
description: "Given an API endpoint name, return Instagram API latency metrics from Datadog. Use for SLA monitoring."
inputParameters:
- name: endpoint_name
in: body
type: string
description: "Instagram API endpoint name."
call: "dd-ig.get-metrics"
with:
query: "avg:instagram.api.latency{endpoint:{{endpoint_name}}}"
outputParameters:
- name: series
type: array
mapping: "$.series"
consumes:
- type: http
namespace: dd-ig
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: metrics
path: "/query"
inputParameters:
- name: query
in: query
operations:
- name: get-metrics
method: GET
When Datadog detects Marketplace API availability issues, creates a Jira incident and notifies in Slack.
naftiko: "0.5"
info:
label: "Datadog Marketplace API Availability Alert"
description: "When Datadog detects Marketplace API availability issues, creates a Jira incident and notifies in Slack."
tags:
- platform
- datadog
- jira
- slack
capability:
exposes:
- type: mcp
namespace: marketplace-ops
port: 8080
tools:
- name: handle-marketplace-alert
description: "Given a monitor ID, create incident and notify."
inputParameters:
- name: monitor_id
in: body
type: integer
description: "Datadog monitor ID."
steps:
- name: get-monitor
type: call
call: dd-market.get-monitor
with:
monitor_id: "{{monitor_id}}"
- name: create-incident
type: call
call: jira-market.create-issue
with:
project_key: "MKTPL"
issuetype: "Incident"
summary: "Marketplace API: {{get-monitor.name}}"
- name: notify
type: call
call: slack-market.post-message
with:
channel: "marketplace-ops"
text: "MARKETPLACE ALERT: {{get-monitor.name}} | Jira: {{create-incident.key}}"
consumes:
- type: http
namespace: dd-market
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
- type: http
namespace: jira-market
baseUri: "https://meta.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-market
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Checks Messenger service health status from Datadog monitors.
naftiko: "0.5"
info:
label: "Datadog Messenger Service Health Check"
description: "Checks Messenger service health status from Datadog monitors."
tags:
- messaging
- datadog
- messenger
capability:
exposes:
- type: mcp
namespace: messenger-ops
port: 8080
tools:
- name: get-messenger-health
description: "Given a service name, return Messenger service health from Datadog. Use for reliability dashboards."
inputParameters:
- name: service_name
in: body
type: string
description: "Messenger service name."
call: "dd-msg.get-monitors"
with:
name: "{{service_name}}"
outputParameters:
- name: monitors
type: array
mapping: "$.monitors"
consumes:
- type: http
namespace: dd-msg
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"
inputParameters:
- name: name
in: query
operations:
- name: get-monitors
method: GET
Checks the News Feed ranking service SLO status from Datadog.
naftiko: "0.5"
info:
label: "Datadog News Feed Ranking SLO Check"
description: "Checks the News Feed ranking service SLO status from Datadog."
tags:
- platform
- datadog
- news-feed
capability:
exposes:
- type: mcp
namespace: feed-ops
port: 8080
tools:
- name: get-feed-slo
description: "Given a Datadog SLO ID, return News Feed ranking SLO status. Use for reliability tracking."
inputParameters:
- name: slo_id
in: body
type: string
description: "Datadog SLO ID."
call: "dd-feed.get-slo"
with:
slo_id: "{{slo_id}}"
outputParameters:
- name: slo
type: object
mapping: "$"
consumes:
- type: http
namespace: dd-feed
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: slos
path: "/slo/{{slo_id}}"
inputParameters:
- name: slo_id
in: path
operations:
- name: get-slo
method: GET
Monitors Quest firmware rollout health via Datadog and reports to the VR team in Slack.
naftiko: "0.5"
info:
label: "Datadog Oculus Firmware Rollout Monitor"
description: "Monitors Quest firmware rollout health via Datadog and reports to the VR team in Slack."
tags:
- vr
- datadog
- slack
- firmware
capability:
exposes:
- type: mcp
namespace: quest-firmware
port: 8080
tools:
- name: handle-firmware-rollout
description: "Given a service tag and version, monitor rollout and report."
inputParameters:
- name: service_tag
in: body
type: string
description: "Datadog service tag."
- name: firmware_version
in: body
type: string
description: "Firmware version."
steps:
- name: check-monitors
type: call
call: dd-quest.get-monitors
with:
tags: "{{service_tag}}"
- name: post-status
type: call
call: slack-quest.post-message
with:
channel: "quest-firmware"
text: "Quest FW Rollout: {{firmware_version}} | Monitors: {{check-monitors.total_count}} | Alerts: {{check-monitors.alert_count}}"
consumes:
- type: http
namespace: dd-quest
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"
inputParameters:
- name: tags
in: query
operations:
- name: get-monitors
method: GET
- type: http
namespace: slack-quest
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When Datadog detects Reels video encoding pipeline issues, creates a Jira incident and notifies the video team in Slack.
naftiko: "0.5"
info:
label: "Datadog Reels Video Encoding Alert"
description: "When Datadog detects Reels video encoding pipeline issues, creates a Jira incident and notifies the video team in Slack."
tags:
- video
- datadog
- jira
- slack
capability:
exposes:
- type: mcp
namespace: reels-ops
port: 8080
tools:
- name: handle-encoding-alert
description: "Given a Datadog monitor ID for Reels encoding, create a Jira incident and notify the video team."
inputParameters:
- name: monitor_id
in: body
type: integer
description: "Datadog monitor ID."
steps:
- name: get-monitor
type: call
call: dd-reels.get-monitor
with:
monitor_id: "{{monitor_id}}"
- name: create-incident
type: call
call: jira-video.create-issue
with:
project_key: "VIDEO"
issuetype: "Incident"
summary: "Reels encoding: {{get-monitor.name}}"
priority: "High"
- name: notify-video
type: call
call: slack-video.post-message
with:
channel: "video-engineering"
text: "REELS ENCODING ALERT: {{get-monitor.name}} | Jira: {{create-incident.key}}"
consumes:
- type: http
namespace: dd-reels
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
- type: http
namespace: jira-video
baseUri: "https://meta.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-video
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a Datadog SLO drops below target for a production service, creates a Jira incident ticket and posts an urgent escalation to the reliability engineering Slack channel.
naftiko: "0.5"
info:
label: "Datadog SLO Breach Escalation"
description: "When a Datadog SLO drops below target for a production service, creates a Jira incident ticket and posts an urgent escalation to the reliability engineering Slack channel."
tags:
- observability
- slo
- datadog
- jira
- slack
- reliability
capability:
exposes:
- type: mcp
namespace: slo-escalation
port: 8080
tools:
- name: escalate-slo-breach
description: "Given a Datadog SLO ID that has breached its target, retrieve SLO details, open a Jira issue for the owning team, and post an urgent escalation to the reliability engineering Slack channel."
inputParameters:
- name: slo_id
in: body
type: string
description: "The Datadog SLO ID that has breached its target."
- name: current_value
in: body
type: number
description: "The current SLO value as a percentage."
- name: target_value
in: body
type: number
description: "The target SLO value as a percentage."
steps:
- name: get-slo
type: call
call: "datadog.get-slo"
with:
slo_id: "{{slo_id}}"
- name: create-issue
type: call
call: "jira.create-issue"
with:
project_key: "REL"
issuetype: "Bug"
summary: "SLO Breach: {{get-slo.name}} at {{current_value}}% (target {{target_value}}%)"
description: "SLO {{get-slo.name}} has breached. Current: {{current_value}}% | Target: {{target_value}}%"
- name: notify-reliability
type: call
call: "slack.post-message"
with:
channel: "reliability-engineering"
text: "SLO BREACH: {{get-slo.name}} at {{current_value}}% against {{target_value}}% target. Jira: {{create-issue.key}}"
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: slos
path: "/slo/{{slo_id}}"
inputParameters:
- name: slo_id
in: path
operations:
- name: get-slo
method: GET
- type: http
namespace: jira
baseUri: "https://meta.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When Datadog detects CDN performance issues for Stories, creates Jira incident and notifies in Slack.
naftiko: "0.5"
info:
label: "Datadog Stories CDN Performance Alert"
description: "When Datadog detects CDN performance issues for Stories, creates Jira incident and notifies in Slack."
tags:
- infrastructure
- datadog
- jira
- slack
capability:
exposes:
- type: mcp
namespace: cdn-ops
port: 8080
tools:
- name: handle-cdn-alert
description: "Given a monitor ID, create Jira incident and notify CDN team."
inputParameters:
- name: monitor_id
in: body
type: integer
description: "Datadog monitor ID."
steps:
- name: get-monitor
type: call
call: dd-cdn.get-monitor
with:
monitor_id: "{{monitor_id}}"
- name: create-incident
type: call
call: jira-cdn.create-issue
with:
project_key: "CDN"
issuetype: "Incident"
summary: "Stories CDN: {{get-monitor.name}}"
- name: notify-cdn
type: call
call: slack-cdn.post-message
with:
channel: "cdn-engineering"
text: "CDN ALERT: {{get-monitor.name}} | Jira: {{create-incident.key}}"
consumes:
- type: http
namespace: dd-cdn
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
- type: http
namespace: jira-cdn
baseUri: "https://meta.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-cdn
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When Datadog detects high error rates on Threads API, creates a Jira incident and notifies the Threads team in Slack.
naftiko: "0.5"
info:
label: "Datadog Threads API Error Rate Handler"
description: "When Datadog detects high error rates on Threads API, creates a Jira incident and notifies the Threads team in Slack."
tags:
- platform
- datadog
- jira
- slack
capability:
exposes:
- type: mcp
namespace: threads-ops
port: 8080
tools:
- name: handle-threads-error
description: "Given a Datadog monitor ID for Threads API errors, create a Jira incident and notify the team."
inputParameters:
- name: monitor_id
in: body
type: integer
description: "Datadog monitor ID."
steps:
- name: get-monitor
type: call
call: dd-threads.get-monitor
with:
monitor_id: "{{monitor_id}}"
- name: create-incident
type: call
call: jira-threads.create-issue
with:
project_key: "THREADS"
issuetype: "Incident"
summary: "Threads API error: {{get-monitor.name}}"
priority: "High"
- name: notify-threads
type: call
call: slack-threads.post-message
with:
channel: "threads-engineering"
text: "THREADS API ERROR: {{get-monitor.name}} | Jira: {{create-incident.key}}"
consumes:
- type: http
namespace: dd-threads
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
- type: http
namespace: jira-threads
baseUri: "https://meta.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-threads
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Checks WhatsApp message delivery rate metrics from Datadog.
naftiko: "0.5"
info:
label: "Datadog WhatsApp Delivery Rate Check"
description: "Checks WhatsApp message delivery rate metrics from Datadog."
tags:
- messaging
- datadog
- whatsapp
capability:
exposes:
- type: mcp
namespace: wa-delivery
port: 8080
tools:
- name: get-delivery-rate
description: "Given a region, return WhatsApp delivery rate metrics from Datadog."
inputParameters:
- name: region
in: body
type: string
description: "Geographic region."
call: "dd-wa.get-metrics"
with:
query: "avg:whatsapp.delivery_rate{region:{{region}}}"
outputParameters:
- name: series
type: array
mapping: "$.series"
consumes:
- type: http
namespace: dd-wa
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: metrics
path: "/query"
inputParameters:
- name: query
in: query
operations:
- name: get-metrics
method: GET
Checks WhatsApp end-to-end encryption service health from Datadog and notifies security in Slack.
naftiko: "0.5"
info:
label: "Datadog WhatsApp Encryption Health Check"
description: "Checks WhatsApp end-to-end encryption service health from Datadog and notifies security in Slack."
tags:
- security
- datadog
- slack
- whatsapp
capability:
exposes:
- type: mcp
namespace: wa-security
port: 8080
tools:
- name: handle-encryption-health
description: "Given a service tag, check encryption health and notify."
inputParameters:
- name: service_tag
in: body
type: string
description: "Datadog service tag."
steps:
- name: check-monitors
type: call
call: dd-wa-enc.get-monitors
with:
tags: "{{service_tag}}"
- name: post-status
type: call
call: slack-wa-sec.post-message
with:
channel: "whatsapp-security"
text: "WA Encryption Health: Monitors: {{check-monitors.total_count}} | Alerts: {{check-monitors.alert_count}}"
consumes:
- type: http
namespace: dd-wa-enc
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"
inputParameters:
- name: tags
in: query
operations:
- name: get-monitors
method: GET
- type: http
namespace: slack-wa-sec
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When an employee departure is confirmed in Workday, deactivates their Okta account, removes GitHub org membership, and creates a ServiceNow offboarding checklist.
naftiko: "0.5"
info:
label: "Employee Offboarding and Access Revocation"
description: "When an employee departure is confirmed in Workday, deactivates their Okta account, removes GitHub org membership, and creates a ServiceNow offboarding checklist."
tags:
- hr
- offboarding
- workday
- okta
- github
- servicenow
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-offboarding
description: "Given a Workday employee ID and termination date, deactivate the Okta account, remove GitHub organization membership, and create a ServiceNow offboarding ticket."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday employee ID of the departing employee."
- name: termination_date
in: body
type: string
description: "The employee's last working day in ISO 8601 format (YYYY-MM-DD)."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
- name: deactivate-okta
type: call
call: "okta.deactivate-user"
with:
user_email: "{{get-employee.work_email}}"
- name: remove-github
type: call
call: "github.remove-org-member"
with:
org: "facebook"
username: "{{get-employee.github_username}}"
- name: create-offboarding-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Offboarding: {{get-employee.displayName}} - {{termination_date}}"
category: "hr_offboarding"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: basic
username: "$secrets.workday_user"
password: "$secrets.workday_password"
resources:
- name: workers
path: "/meta/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: okta
baseUri: "https://meta.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: user-lifecycle
path: "/users/{{user_id}}/lifecycle/deactivate"
inputParameters:
- name: user_id
in: path
operations:
- name: deactivate-user
method: POST
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: org-members
path: "/orgs/{{org}}/members/{{username}}"
inputParameters:
- name: org
in: path
- name: username
in: path
operations:
- name: remove-org-member
method: DELETE
- type: http
namespace: servicenow
baseUri: "https://meta.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incident
path: "/table/incident"
operations:
- name: create-incident
method: POST
When a new hire is created in Workday, provisions a Okta identity, creates a GitHub organization membership, opens a ServiceNow onboarding ticket, and sends a Workplace welcome message.
naftiko: "0.5"
info:
label: "Employee Onboarding Orchestrator"
description: "When a new hire is created in Workday, provisions a Okta identity, creates a GitHub organization membership, opens a ServiceNow onboarding ticket, and sends a Workplace welcome message."
tags:
- hr
- onboarding
- workday
- okta
- github
- servicenow
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-onboarding
description: "Given a Workday employee ID and start date, orchestrate full onboarding: create Okta identity, provision GitHub org membership, open a ServiceNow ticket, and send a Workplace by Meta welcome message."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday employee ID for the new hire."
- name: start_date
in: body
type: string
description: "The new hire's start date in ISO 8601 format (YYYY-MM-DD)."
- name: team_name
in: body
type: string
description: "The team the new hire is joining (e.g., Core Infra, Reality Labs)."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
- name: create-okta-user
type: call
call: "okta.create-user"
with:
email: "{{get-employee.work_email}}"
firstName: "{{get-employee.firstName}}"
lastName: "{{get-employee.lastName}}"
- name: add-github-member
type: call
call: "github.add-org-member"
with:
org: "facebook"
username: "{{get-employee.github_username}}"
role: "member"
- name: open-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "New hire onboarding: {{get-employee.displayName}}"
category: "hr_onboarding"
assigned_to: "IT_Onboarding"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: basic
username: "$secrets.workday_user"
password: "$secrets.workday_password"
resources:
- name: workers
path: "/meta/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: okta
baseUri: "https://meta.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: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: org-members
path: "/orgs/{{org}}/memberships/{{username}}"
inputParameters:
- name: org
in: path
- name: username
in: path
operations:
- name: add-org-member
method: PUT
- type: http
namespace: servicenow
baseUri: "https://meta.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incident
path: "/table/incident"
operations:
- name: create-incident
method: POST
Retrieves Facebook Page post engagement metrics for a given week from the Meta Graph API and posts a weekly summary to the social media Slack channel.
naftiko: "0.5"
info:
label: "Facebook Page Engagement Digest"
description: "Retrieves Facebook Page post engagement metrics for a given week from the Meta Graph API and posts a weekly summary to the social media Slack channel."
tags:
- marketing
- social-media
- meta-graph
- facebook
- slack
- reporting
capability:
exposes:
- type: mcp
namespace: social-reporting
port: 8080
tools:
- name: digest-page-engagement
description: "Given a Facebook Page ID and date range, retrieve post impressions, engagements, and reach from the Meta Graph API and post a weekly engagement digest to the social media Slack channel."
inputParameters:
- name: page_id
in: body
type: string
description: "The Facebook Page ID to pull engagement metrics for."
- name: date_start
in: body
type: string
description: "Start date for the digest period (YYYY-MM-DD)."
- name: date_stop
in: body
type: string
description: "End date for the digest period (YYYY-MM-DD)."
steps:
- name: get-page-insights
type: call
call: "meta-graph.get-page-insights"
with:
page_id: "{{page_id}}"
since: "{{date_start}}"
until: "{{date_stop}}"
- name: post-digest
type: call
call: "slack.post-message"
with:
channel: "social-media-team"
text: "Facebook Page Weekly Report ({{date_start}} to {{date_stop}}): Reach: {{get-page-insights.reach}} | Impressions: {{get-page-insights.impressions}} | Engagements: {{get-page-insights.engagements}}"
consumes:
- type: http
namespace: meta-graph
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.meta_graph_token"
resources:
- name: page-insights
path: "/{{page_id}}/insights"
inputParameters:
- name: page_id
in: path
operations:
- name: get-page-insights
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Orchestrates Relay framework releases from GitHub and notifies the developer experience Slack channel.
naftiko: "0.5"
info:
label: "GitHub GraphQL Relay Release"
description: "Orchestrates Relay framework releases from GitHub and notifies the developer experience Slack channel."
tags:
- developer-tools
- github
- slack
- graphql
capability:
exposes:
- type: mcp
namespace: relay-release
port: 8080
tools:
- name: handle-relay-release
description: "Given a tag, check release and notify."
inputParameters:
- name: release_tag
in: body
type: string
description: "Release tag."
steps:
- name: get-release
type: call
call: github-relay.get-release
with:
tag: "{{release_tag}}"
- name: notify
type: call
call: slack-relay.post-message
with:
channel: "developer-experience"
text: "Relay Release: {{release_tag}} | {{get-release.name}} | {{get-release.html_url}}"
consumes:
- type: http
namespace: github-relay
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: releases
path: "/repos/facebook/relay/releases/tags/{{tag}}"
inputParameters:
- name: tag
in: path
operations:
- name: get-release
method: GET
- type: http
namespace: slack-relay
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Checks CI status for a branch in the HHVM/Hack repository.
naftiko: "0.5"
info:
label: "GitHub Hack Language CI Status"
description: "Checks CI status for a branch in the HHVM/Hack repository."
tags:
- engineering
- github
- hack
capability:
exposes:
- type: mcp
namespace: hack-dev
port: 8080
tools:
- name: get-hack-ci
description: "Given a branch name, return CI status for the Hack language repository."
inputParameters:
- name: branch_name
in: body
type: string
description: "Branch name."
call: "github-hack.get-branch"
with:
branch_name: "{{branch_name}}"
outputParameters:
- name: branch
type: object
mapping: "$"
consumes:
- type: http
namespace: github-hack
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: branches
path: "/repos/facebook/hhvm/branches/{{branch_name}}"
inputParameters:
- name: branch_name
in: path
operations:
- name: get-branch
method: GET
When a Terraform PR is opened, validates and posts summary to platform Slack.
naftiko: "0.5"
info:
label: "GitHub Infra Terraform Review"
description: "When a Terraform PR is opened, validates and posts summary to platform Slack."
tags:
- infrastructure
- github
- slack
- terraform
capability:
exposes:
- type: mcp
namespace: infra-review
port: 8080
tools:
- name: handle-terraform-pr
description: "Given a PR number, check status and post review to Slack."
inputParameters:
- name: pr_number
in: body
type: integer
description: "PR number."
steps:
- name: get-pr
type: call
call: github-infra.get-pr
with:
pr_number: "{{pr_number}}"
- name: notify-platform
type: call
call: slack-infra.post-message
with:
channel: "platform-engineering"
text: "Terraform PR: #{{pr_number}} | {{get-pr.title}} | {{get-pr.html_url}}"
consumes:
- type: http
namespace: github-infra
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: pulls
path: "/repos/facebook/infrastructure/pulls/{{pr_number}}"
inputParameters:
- name: pr_number
in: path
operations:
- name: get-pr
method: GET
- type: http
namespace: slack-infra
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Orchestrates Jest framework releases from GitHub and notifies the developer experience Slack channel.
naftiko: "0.5"
info:
label: "GitHub Jest Testing Framework Release"
description: "Orchestrates Jest framework releases from GitHub and notifies the developer experience Slack channel."
tags:
- developer-tools
- github
- slack
- testing
capability:
exposes:
- type: mcp
namespace: jest-release
port: 8080
tools:
- name: handle-jest-release
description: "Given a release tag, create release and notify."
inputParameters:
- name: release_tag
in: body
type: string
description: "Release tag."
steps:
- name: get-release
type: call
call: github-jest.get-release
with:
tag: "{{release_tag}}"
- name: notify
type: call
call: slack-dx.post-message
with:
channel: "developer-experience"
text: "Jest Release: {{release_tag}} | {{get-release.name}} | {{get-release.html_url}}"
consumes:
- type: http
namespace: github-jest
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: releases
path: "/repos/facebook/jest/releases/tags/{{tag}}"
inputParameters:
- name: tag
in: path
operations:
- name: get-release
method: GET
- type: http
namespace: slack-dx
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Validates Llama model benchmarks in Snowflake before approving a GitHub release, with Slack notification.
naftiko: "0.5"
info:
label: "GitHub Llama Model Deployment Gate"
description: "Validates Llama model benchmarks in Snowflake before approving a GitHub release, with Slack notification."
tags:
- ai
- github
- snowflake
- slack
capability:
exposes:
- type: mcp
namespace: llama-deploy
port: 8080
tools:
- name: handle-llama-deployment
description: "Given a release tag and model ID, validate benchmarks and notify the AI team."
inputParameters:
- name: release_tag
in: body
type: string
description: "GitHub release tag."
- name: model_id
in: body
type: string
description: "Llama model identifier."
steps:
- name: check-benchmarks
type: call
call: snowflake-llama.run-query
with:
model_id: "{{model_id}}"
- name: get-release
type: call
call: github-llama.get-release
with:
tag: "{{release_tag}}"
- name: notify-ai
type: call
call: slack-ai.post-message
with:
channel: "llama-deployments"
text: "Llama Deploy Gate: {{release_tag}} | Model: {{model_id}} | Benchmark: {{check-benchmarks.score}} | Release: {{get-release.html_url}}"
consumes:
- type: http
namespace: snowflake-llama
baseUri: "https://meta.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: github-llama
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: releases
path: "/repos/meta-llama/llama/releases/tags/{{tag}}"
inputParameters:
- name: tag
in: path
operations:
- name: get-release
method: GET
- type: http
namespace: slack-ai
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves the latest Llama model release information from GitHub.
naftiko: "0.5"
info:
label: "GitHub Llama Model Release Lookup"
description: "Retrieves the latest Llama model release information from GitHub."
tags:
- ai
- github
- llama
capability:
exposes:
- type: mcp
namespace: llama-ops
port: 8080
tools:
- name: get-llama-release
description: "Return the latest Llama release from GitHub. Use for model deployment planning."
inputParameters:
- name: repo_name
in: body
type: string
description: "GitHub repository name."
call: "github-llama.get-release"
with:
repo_name: "{{repo_name}}"
outputParameters:
- name: release
type: object
mapping: "$"
consumes:
- type: http
namespace: github-llama
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: releases
path: "/repos/meta-llama/{{repo_name}}/releases/latest"
inputParameters:
- name: repo_name
in: path
operations:
- name: get-release
method: GET
Tracks open source contributions across Meta repos on GitHub and posts to the open source Slack channel.
naftiko: "0.5"
info:
label: "GitHub Open Source Contribution Tracker"
description: "Tracks open source contributions across Meta repos on GitHub and posts to the open source Slack channel."
tags:
- open-source
- github
- slack
- community
capability:
exposes:
- type: mcp
namespace: oss-ops
port: 8080
tools:
- name: handle-oss-tracking
description: "Given a repo name, track contributions and post."
inputParameters:
- name: repo_name
in: body
type: string
description: "Repository name."
steps:
- name: get-repo
type: call
call: github-oss.get-repo
with:
repo_name: "{{repo_name}}"
- name: post-update
type: call
call: slack-oss.post-message
with:
channel: "open-source"
text: "OSS: {{repo_name}} | Stars: {{get-repo.stargazers_count}} | Forks: {{get-repo.forks_count}} | Issues: {{get-repo.open_issues_count}}"
consumes:
- type: http
namespace: github-oss
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: repos
path: "/repos/facebook/{{repo_name}}"
inputParameters:
- name: repo_name
in: path
operations:
- name: get-repo
method: GET
- type: http
namespace: slack-oss
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Identifies GitHub pull requests that have been open without review for more than 48 hours and posts reminders to the team's Slack channel.
naftiko: "0.5"
info:
label: "GitHub Pull Request Review Reminder"
description: "Identifies GitHub pull requests that have been open without review for more than 48 hours and posts reminders to the team's Slack channel."
tags:
- devops
- github
- slack
- code-review
- engineering
capability:
exposes:
- type: mcp
namespace: code-review-ops
port: 8080
tools:
- name: remind-stale-pull-requests
description: "Given a GitHub organization and repository, find pull requests open for more than a specified number of hours without a review, and post reminder messages to the team Slack channel."
inputParameters:
- name: repository
in: body
type: string
description: "The GitHub repository to check (e.g., facebook/react)."
- name: stale_hours
in: body
type: integer
description: "Number of hours a PR must be open without review to be considered stale."
- name: slack_channel
in: body
type: string
description: "Slack channel ID to post reminders to."
steps:
- name: get-pull-requests
type: call
call: "github.list-pull-requests"
with:
repository: "{{repository}}"
state: "open"
- name: post-reminder
type: call
call: "slack.post-message"
with:
channel: "{{slack_channel}}"
text: "PR Review Reminder: {{get-pull-requests.stale_count}} pull requests in {{repository}} have been open for >{{stale_hours}} hours without review. Please review: {{get-pull-requests.stale_pr_links}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: pull-requests
path: "/repos/{{repository}}/pulls"
inputParameters:
- name: repository
in: path
operations:
- name: list-pull-requests
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Runs PyTorch benchmark validation from GitHub CI, logs to Snowflake, and posts to the AI team Slack channel.
naftiko: "0.5"
info:
label: "GitHub PyTorch Benchmark Pipeline"
description: "Runs PyTorch benchmark validation from GitHub CI, logs to Snowflake, and posts to the AI team Slack channel."
tags:
- ai
- github
- snowflake
- slack
capability:
exposes:
- type: mcp
namespace: pytorch-bench
port: 8080
tools:
- name: handle-pytorch-benchmark
description: "Given a run ID and model, check benchmark and post to Slack."
inputParameters:
- name: run_id
in: body
type: integer
description: "GitHub Actions run ID."
- name: model_name
in: body
type: string
description: "Model name."
steps:
- name: get-run
type: call
call: github-pt.get-run
with:
run_id: "{{run_id}}"
- name: log-results
type: call
call: snowflake-pt.run-query
with:
model: "{{model_name}}"
- name: notify-ai
type: call
call: slack-pt.post-message
with:
channel: "pytorch-benchmarks"
text: "PyTorch Benchmark: {{model_name}} | Run: {{run_id}} | Status: {{get-run.conclusion}}"
consumes:
- type: http
namespace: github-pt
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: runs
path: "/repos/pytorch/pytorch/actions/runs/{{run_id}}"
inputParameters:
- name: run_id
in: path
operations:
- name: get-run
method: GET
- type: http
namespace: snowflake-pt
baseUri: "https://meta.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: slack-pt
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves the latest PyTorch release information from GitHub.
naftiko: "0.5"
info:
label: "GitHub PyTorch Release Tag Lookup"
description: "Retrieves the latest PyTorch release information from GitHub."
tags:
- ai
- github
- pytorch
capability:
exposes:
- type: mcp
namespace: pytorch-ops
port: 8080
tools:
- name: get-pytorch-release
description: "Return the latest PyTorch release from GitHub. Use for framework version tracking."
inputParameters:
- name: repo_name
in: body
type: string
description: "Repository name (e.g. pytorch)."
call: "github-pt.get-release"
with:
repo_name: "{{repo_name}}"
outputParameters:
- name: release
type: object
mapping: "$"
consumes:
- type: http
namespace: github-pt
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: releases
path: "/repos/pytorch/{{repo_name}}/releases/latest"
inputParameters:
- name: repo_name
in: path
operations:
- name: get-release
method: GET
When CI fails in the React repository, creates a Jira bug and notifies the frontend team in Slack.
naftiko: "0.5"
info:
label: "GitHub React CI Failure Handler"
description: "When CI fails in the React repository, creates a Jira bug and notifies the frontend team in Slack."
tags:
- engineering
- github
- jira
- slack
capability:
exposes:
- type: mcp
namespace: react-ci
port: 8080
tools:
- name: handle-react-ci-failure
description: "Given a GitHub run ID for a failed React CI, create a Jira bug and notify in Slack."
inputParameters:
- name: run_id
in: body
type: integer
description: "GitHub Actions run ID."
steps:
- name: get-run
type: call
call: github-react.get-run
with:
run_id: "{{run_id}}"
- name: create-bug
type: call
call: jira-react.create-issue
with:
project_key: "REACT"
issuetype: "Bug"
summary: "CI failure: {{get-run.name}}"
- name: notify-frontend
type: call
call: slack-react.post-message
with:
channel: "react-engineering"
text: "CI FAILURE: React | {{get-run.name}} | Jira: {{create-bug.key}}"
consumes:
- type: http
namespace: github-react
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: runs
path: "/repos/facebook/react/actions/runs/{{run_id}}"
inputParameters:
- name: run_id
in: path
operations:
- name: get-run
method: GET
- type: http
namespace: jira-react
baseUri: "https://meta.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-react
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves the review status of a pull request in the React Native repository.
naftiko: "0.5"
info:
label: "GitHub React Native PR Status"
description: "Retrieves the review status of a pull request in the React Native repository."
tags:
- engineering
- github
- react-native
capability:
exposes:
- type: mcp
namespace: rn-dev
port: 8080
tools:
- name: get-rn-pr
description: "Given a PR number, return the React Native PR review status. Use for merge readiness checks."
inputParameters:
- name: pr_number
in: body
type: integer
description: "Pull request number."
call: "github-rn.get-pr"
with:
pr_number: "{{pr_number}}"
outputParameters:
- name: pr
type: object
mapping: "$"
consumes:
- type: http
namespace: github-rn
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: pulls
path: "/repos/facebook/react-native/pulls/{{pr_number}}"
inputParameters:
- name: pr_number
in: path
operations:
- name: get-pr
method: GET
Orchestrates React Native releases by validating tests, creating a GitHub release, and notifying in Slack.
naftiko: "0.5"
info:
label: "GitHub React Native Release Pipeline"
description: "Orchestrates React Native releases by validating tests, creating a GitHub release, and notifying in Slack."
tags:
- engineering
- github
- snowflake
- slack
capability:
exposes:
- type: mcp
namespace: rn-release
port: 8080
tools:
- name: handle-rn-release
description: "Given a version, validate tests and create release."
inputParameters:
- name: version
in: body
type: string
description: "Release version."
steps:
- name: validate
type: call
call: snowflake-rn.run-query
with:
version: "{{version}}"
- name: create-release
type: call
call: github-rn.create-release
with:
tag_name: "{{version}}"
name: "React Native {{version}}"
- name: notify
type: call
call: slack-rn.post-message
with:
channel: "react-native-releases"
text: "RN Release: {{version}} | Tests: {{validate.pass_rate}}% | {{create-release.html_url}}"
consumes:
- type: http
namespace: snowflake-rn
baseUri: "https://meta.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: github-rn
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: releases
path: "/repos/facebook/react-native/releases"
operations:
- name: create-release
method: POST
- type: http
namespace: slack-rn
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Scans GitHub repositories for exposed secrets using secret scanning alerts, creates Jira security issues for each finding, and notifies the security team via Slack.
naftiko: "0.5"
info:
label: "GitHub Repository Secrets Audit"
description: "Scans GitHub repositories for exposed secrets using secret scanning alerts, creates Jira security issues for each finding, and notifies the security team via Slack."
tags:
- security
- github
- jira
- slack
- secrets-management
- devops
capability:
exposes:
- type: mcp
namespace: secrets-audit
port: 8080
tools:
- name: audit-repository-secrets
description: "Given a GitHub repository, retrieve all open secret scanning alerts, create Jira security issues for each, and post a summary to the security Slack channel."
inputParameters:
- name: repository
in: body
type: string
description: "The GitHub repository to audit for exposed secrets (e.g., facebook/react)."
steps:
- name: get-secret-alerts
type: call
call: "github.list-secret-scanning-alerts"
with:
repository: "{{repository}}"
state: "open"
- name: create-security-issue
type: call
call: "jira.create-issue"
with:
project_key: "SEC"
issuetype: "Bug"
summary: "Secret scanning alerts in {{repository}}: {{get-secret-alerts.alert_count}} open"
description: "{{get-secret-alerts.alert_summary}}"
- name: notify-security
type: call
call: "slack.post-message"
with:
channel: "security-alerts"
text: "Secret Scanning Alert: {{repository}} has {{get-secret-alerts.alert_count}} open secret exposures. Jira: {{create-security-issue.key}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: secret-scanning-alerts
path: "/repos/{{repository}}/secret-scanning/alerts"
inputParameters:
- name: repository
in: path
operations:
- name: list-secret-scanning-alerts
method: GET
- type: http
namespace: jira
baseUri: "https://meta.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Processes GitHub security findings, creates Jira tickets, and notifies the security team in Slack.
naftiko: "0.5"
info:
label: "GitHub Security Scan to Jira Ticket"
description: "Processes GitHub security findings, creates Jira tickets, and notifies the security team in Slack."
tags:
- security
- github
- jira
- slack
capability:
exposes:
- type: mcp
namespace: appsec-ops
port: 8080
tools:
- name: handle-security-finding
description: "Given a GitHub repo and alert, create a Jira ticket and notify security."
inputParameters:
- name: repo_name
in: body
type: string
description: "GitHub repository."
- name: alert_number
in: body
type: integer
description: "Security alert number."
steps:
- name: get-alert
type: call
call: github-sec.get-alert
with:
repo_name: "{{repo_name}}"
alert_number: "{{alert_number}}"
- name: create-ticket
type: call
call: jira-sec.create-issue
with:
project_key: "SEC"
issuetype: "Bug"
summary: "Security: {{get-alert.rule.description}} in {{repo_name}}"
priority: "Critical"
- name: notify-sec
type: call
call: slack-sec.post-message
with:
channel: "security-alerts"
text: "SECURITY: {{repo_name}} | {{get-alert.rule.description}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: github-sec
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: alerts
path: "/repos/facebook/{{repo_name}}/code-scanning/alerts/{{alert_number}}"
inputParameters:
- name: repo_name
in: path
- name: alert_number
in: path
operations:
- name: get-alert
method: GET
- type: http
namespace: jira-sec
baseUri: "https://meta.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-sec
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When the Meta Graph API surfaces a flagged content report for an Instagram business account, creates a ServiceNow ticket and notifies the trust and safety team via Slack.
naftiko: "0.5"
info:
label: "Instagram Content Moderation Alert"
description: "When the Meta Graph API surfaces a flagged content report for an Instagram business account, creates a ServiceNow ticket and notifies the trust and safety team via Slack."
tags:
- trust-safety
- instagram
- meta-graph
- servicenow
- slack
- content-moderation
capability:
exposes:
- type: mcp
namespace: content-safety
port: 8080
tools:
- name: handle-content-moderation-flag
description: "Given a flagged content report ID and Instagram account ID, retrieve the flagged content details from the Meta Graph API, create a ServiceNow ticket, and alert the trust and safety Slack channel."
inputParameters:
- name: content_id
in: body
type: string
description: "The Instagram content ID that has been flagged for review."
- name: account_id
in: body
type: string
description: "The Instagram business account ID associated with the content."
- name: violation_type
in: body
type: string
description: "The type of policy violation detected (e.g., hate_speech, spam, misinformation)."
steps:
- name: get-content
type: call
call: "meta-graph.get-media-object"
with:
content_id: "{{content_id}}"
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Content moderation flag: {{violation_type}} on account {{account_id}}"
urgency: "2"
category: "trust_safety"
- name: notify-trust-safety
type: call
call: "slack.post-message"
with:
channel: "trust-safety-ops"
text: "Content Flagged: {{violation_type}} | Account: {{account_id}} | Content: {{content_id}} | Ticket: {{create-ticket.number}}"
consumes:
- type: http
namespace: meta-graph
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.meta_graph_token"
resources:
- name: media
path: "/{{content_id}}"
inputParameters:
- name: content_id
in: path
operations:
- name: get-media-object
method: GET
- type: http
namespace: servicenow
baseUri: "https://meta.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incident
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Tracks AI ethics review requests in Jira and notifies the responsible AI team in Slack.
naftiko: "0.5"
info:
label: "Jira AI Ethics Review Workflow"
description: "Tracks AI ethics review requests in Jira and notifies the responsible AI team in Slack."
tags:
- ethics
- jira
- slack
- ai
capability:
exposes:
- type: mcp
namespace: ethics-ops
port: 8080
tools:
- name: handle-ethics-review
description: "Given a project key, track ethics reviews."
inputParameters:
- name: project_key
in: body
type: string
description: "Jira project key."
steps:
- name: search-reviews
type: call
call: jira-ethics.search-issues
with:
jql: "project = {{project_key}} AND status = 'Pending Review'"
- name: post-status
type: call
call: slack-ethics.post-message
with:
channel: "responsible-ai"
text: "Ethics Queue: {{search-reviews.total}} pending reviews"
consumes:
- type: http
namespace: jira-ethics
baseUri: "https://meta.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: search
path: "/search"
inputParameters:
- name: jql
in: query
operations:
- name: search-issues
method: GET
- type: http
namespace: slack-ethics
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Tracks compliance audit items in Jira and posts updates to the compliance Slack channel.
naftiko: "0.5"
info:
label: "Jira Compliance Audit Tracker"
description: "Tracks compliance audit items in Jira and posts updates to the compliance Slack channel."
tags:
- compliance
- jira
- slack
- audit
capability:
exposes:
- type: mcp
namespace: compliance-ops
port: 8080
tools:
- name: handle-audit-tracking
description: "Given a project key, track audit items."
inputParameters:
- name: project_key
in: body
type: string
description: "Jira project key."
steps:
- name: search-items
type: call
call: jira-comp.search-issues
with:
jql: "project = {{project_key}} AND status != Done"
- name: post-status
type: call
call: slack-comp.post-message
with:
channel: "compliance"
text: "Audit: {{project_key}} | Open: {{search-items.total}}"
consumes:
- type: http
namespace: jira-comp
baseUri: "https://meta.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: search
path: "/search"
inputParameters:
- name: jql
in: query
operations:
- name: search-issues
method: GET
- type: http
namespace: slack-comp
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Escalates content policy violations from Jira, creates Salesforce cases for advertisers, and notifies the policy team in Slack.
naftiko: "0.5"
info:
label: "Jira Content Policy Violation Escalation"
description: "Escalates content policy violations from Jira, creates Salesforce cases for advertisers, and notifies the policy team in Slack."
tags:
- trust-safety
- jira
- salesforce
- slack
capability:
exposes:
- type: mcp
namespace: policy-ops
port: 8080
tools:
- name: handle-policy-violation
description: "Given a Jira issue key for a content policy violation, create a Salesforce case and notify the policy team."
inputParameters:
- name: issue_key
in: body
type: string
description: "Jira issue key."
- name: advertiser_id
in: body
type: string
description: "Salesforce advertiser account ID."
steps:
- name: get-issue
type: call
call: jira-policy.get-issue
with:
issue_key: "{{issue_key}}"
- name: create-case
type: call
call: sf-policy.create-case
with:
account_id: "{{advertiser_id}}"
subject: "Policy violation: {{get-issue.fields.summary}}"
- name: notify-policy
type: call
call: slack-policy.post-message
with:
channel: "content-policy"
text: "POLICY VIOLATION: {{issue_key}} | {{get-issue.fields.summary}} | Advertiser: {{advertiser_id}} | Case: {{create-case.id}}"
consumes:
- type: http
namespace: jira-policy
baseUri: "https://meta.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
- type: http
namespace: sf-policy
baseUri: "https://meta.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case"
operations:
- name: create-case
method: POST
- type: http
namespace: slack-policy
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Identifies cross-team dependencies in Jira and posts a status report to program management Slack.
naftiko: "0.5"
info:
label: "Jira Cross-Team Dependency Tracker"
description: "Identifies cross-team dependencies in Jira and posts a status report to program management Slack."
tags:
- project-management
- jira
- slack
- dependencies
capability:
exposes:
- type: mcp
namespace: dep-ops
port: 8080
tools:
- name: handle-dependency-report
description: "Given a project key, identify blocked items and post a report."
inputParameters:
- name: project_key
in: body
type: string
description: "Jira project key."
steps:
- name: search-blocked
type: call
call: jira-deps.search-issues
with:
jql: "project = {{project_key}} AND status = Blocked"
- name: post-report
type: call
call: slack-pm.post-message
with:
channel: "program-management"
text: "Dependencies: {{project_key}} | Blocked: {{search-blocked.total}}"
consumes:
- type: http
namespace: jira-deps
baseUri: "https://meta.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: search
path: "/search"
inputParameters:
- name: jql
in: query
operations:
- name: search-issues
method: GET
- type: http
namespace: slack-pm
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Generates a sprint velocity report from Jira for an engineering team and posts the summary to their Slack channel.
naftiko: "0.5"
info:
label: "Jira Engineering Sprint Digest"
description: "Generates a sprint velocity report from Jira for an engineering team and posts the summary to their Slack channel."
tags:
- devops
- agile
- jira
- slack
- reporting
capability:
exposes:
- type: mcp
namespace: agile-reporting
port: 8080
tools:
- name: digest-sprint
description: "Given a Jira board ID and sprint ID, fetch completed and open issues, compute velocity, and post a formatted sprint summary to the team Slack channel."
inputParameters:
- name: board_id
in: body
type: string
description: "The Jira board ID for the team sprint."
- name: sprint_id
in: body
type: string
description: "The Jira sprint ID to summarize."
- name: slack_channel
in: body
type: string
description: "Slack channel ID to post the sprint digest to."
steps:
- name: get-issues
type: call
call: "jira.list-sprint-issues"
with:
board_id: "{{board_id}}"
sprint_id: "{{sprint_id}}"
- name: post-digest
type: call
call: "slack.post-message"
with:
channel: "{{slack_channel}}"
text: "Sprint {{sprint_id}} Update: {{get-issues.done_count}} done, {{get-issues.inprogress_count}} in progress, {{get-issues.todo_count}} remaining. Velocity: {{get-issues.story_points_completed}} pts."
consumes:
- type: http
namespace: jira
baseUri: "https://meta.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprint-issues
path: "/board/{{board_id}}/sprint/{{sprint_id}}/issue"
inputParameters:
- name: board_id
in: path
- name: sprint_id
in: path
operations:
- name: list-sprint-issues
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Validates Instagram feature release readiness from Jira and Datadog, then posts to the Instagram Slack channel.
naftiko: "0.5"
info:
label: "Jira Instagram Feature Release Checklist"
description: "Validates Instagram feature release readiness from Jira and Datadog, then posts to the Instagram Slack channel."
tags:
- instagram
- jira
- datadog
- slack
capability:
exposes:
- type: mcp
namespace: ig-release
port: 8080
tools:
- name: handle-ig-release
description: "Given a Jira fix version and Datadog service tag, validate readiness and post to Slack."
inputParameters:
- name: fix_version
in: body
type: string
description: "Jira fix version."
- name: service_tag
in: body
type: string
description: "Datadog service tag."
steps:
- name: check-tickets
type: call
call: jira-ig.search-issues
with:
jql: "fixVersion = {{fix_version}} AND status != Done"
- name: check-health
type: call
call: dd-ig.get-monitors
with:
tags: "{{service_tag}}"
- name: post-readiness
type: call
call: slack-ig.post-message
with:
channel: "instagram-releases"
text: "IG Release: {{fix_version}} | Open: {{check-tickets.total}} | Alerts: {{check-health.alert_count}}"
consumes:
- type: http
namespace: jira-ig
baseUri: "https://meta.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: search
path: "/search"
inputParameters:
- name: jql
in: query
operations:
- name: search-issues
method: GET
- type: http
namespace: dd-ig
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"
inputParameters:
- name: tags
in: query
operations:
- name: get-monitors
method: GET
- type: http
namespace: slack-ig
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Triages Messenger bugs from Jira, creates Snowflake impact reports, and notifies the messaging team in Slack.
naftiko: "0.5"
info:
label: "Jira Messenger Bug Triage"
description: "Triages Messenger bugs from Jira, creates Snowflake impact reports, and notifies the messaging team in Slack."
tags:
- messaging
- jira
- snowflake
- slack
capability:
exposes:
- type: mcp
namespace: msg-triage
port: 8080
tools:
- name: handle-messenger-triage
description: "Given a Jira issue key, assess impact and notify."
inputParameters:
- name: issue_key
in: body
type: string
description: "Jira issue key."
steps:
- name: get-issue
type: call
call: jira-msg.get-issue
with:
issue_key: "{{issue_key}}"
- name: check-impact
type: call
call: snowflake-msg.run-query
with:
bug_id: "{{issue_key}}"
- name: notify
type: call
call: slack-msg.post-message
with:
channel: "messenger-engineering"
text: "BUG TRIAGE: {{issue_key}} | {{get-issue.fields.summary}} | Affected: {{check-impact.affected_users}}"
consumes:
- type: http
namespace: jira-msg
baseUri: "https://meta.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
- type: http
namespace: snowflake-msg
baseUri: "https://meta.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: slack-msg
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Returns the count of open bugs in the Metaverse platform Jira project.
naftiko: "0.5"
info:
label: "Jira Metaverse Platform Bug Count"
description: "Returns the count of open bugs in the Metaverse platform Jira project."
tags:
- vr
- jira
- metaverse
capability:
exposes:
- type: mcp
namespace: metaverse-eng
port: 8080
tools:
- name: get-metaverse-bugs
description: "Given a priority, return open Metaverse platform bugs from Jira. Use for quality dashboards."
inputParameters:
- name: priority
in: body
type: string
description: "Bug priority filter."
call: "jira-mv.search-issues"
with:
jql: "project = MV AND type = Bug AND status != Done AND priority = {{priority}}"
outputParameters:
- name: total
type: number
mapping: "$.total"
consumes:
- type: http
namespace: jira-mv
baseUri: "https://meta.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: search
path: "/search"
inputParameters:
- name: jql
in: query
operations:
- name: search-issues
method: GET
Compiles quarterly roadmap progress from Jira epics and posts to the executive Slack channel.
naftiko: "0.5"
info:
label: "Jira Quarterly Roadmap Report"
description: "Compiles quarterly roadmap progress from Jira epics and posts to the executive Slack channel."
tags:
- project-management
- jira
- slack
- reporting
capability:
exposes:
- type: mcp
namespace: roadmap-ops
port: 8080
tools:
- name: handle-roadmap
description: "Given a project key and quarter, compile roadmap progress."
inputParameters:
- name: project_key
in: body
type: string
description: "Jira project key."
- name: quarter
in: body
type: string
description: "Quarter identifier."
steps:
- name: search-epics
type: call
call: jira-roadmap.search-issues
with:
jql: "project = {{project_key}} AND type = Epic"
- name: post-summary
type: call
call: slack-exec.post-message
with:
channel: "executive-updates"
text: "Roadmap ({{quarter}}): {{project_key}} | Epics: {{search-epics.total}}"
consumes:
- type: http
namespace: jira-roadmap
baseUri: "https://meta.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: search
path: "/search"
inputParameters:
- name: jql
in: query
operations:
- name: search-issues
method: GET
- type: http
namespace: slack-exec
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves the current sprint status for the Reality Labs Jira board.
naftiko: "0.5"
info:
label: "Jira Reality Labs Sprint Status"
description: "Retrieves the current sprint status for the Reality Labs Jira board."
tags:
- vr
- jira
- reality-labs
capability:
exposes:
- type: mcp
namespace: rl-pm
port: 8080
tools:
- name: get-rl-sprint
description: "Given a board ID, return the Reality Labs sprint status. Use for standup meetings."
inputParameters:
- name: board_id
in: body
type: integer
description: "Jira board ID."
call: "jira-rl.get-sprints"
with:
board_id: "{{board_id}}"
outputParameters:
- name: sprints
type: array
mapping: "$.values"
consumes:
- type: http
namespace: jira-rl
baseUri: "https://meta.atlassian.net/rest/agile/1.0"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprints
path: "/board/{{board_id}}/sprint"
inputParameters:
- name: board_id
in: path
operations:
- name: get-sprints
method: GET
Compiles sprint metrics from Jira and posts a retrospective to Slack.
naftiko: "0.5"
info:
label: "Jira Sprint Retro Summary"
description: "Compiles sprint metrics from Jira and posts a retrospective to Slack."
tags:
- engineering
- jira
- slack
- agile
capability:
exposes:
- type: mcp
namespace: agile-ops
port: 8080
tools:
- name: handle-sprint-retro
description: "Given a sprint ID, compile metrics and post retro to Slack."
inputParameters:
- name: sprint_id
in: body
type: integer
description: "Jira sprint ID."
steps:
- name: get-sprint
type: call
call: jira-agile.get-sprint
with:
sprint_id: "{{sprint_id}}"
- name: get-issues
type: call
call: jira-agile.get-sprint-issues
with:
sprint_id: "{{sprint_id}}"
- name: post-retro
type: call
call: slack-eng.post-message
with:
channel: "engineering"
text: "Sprint Retro: {{get-sprint.name}} | Completed: {{get-issues.total}} | Goal: {{get-sprint.goal}}"
consumes:
- type: http
namespace: jira-agile
baseUri: "https://meta.atlassian.net/rest/agile/1.0"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprints
path: "/sprint/{{sprint_id}}"
inputParameters:
- name: sprint_id
in: path
operations:
- name: get-sprint
method: GET
- name: sprint-issues
path: "/sprint/{{sprint_id}}/issue"
inputParameters:
- name: sprint_id
in: path
operations:
- name: get-sprint-issues
method: GET
- type: http
namespace: slack-eng
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Returns the current count of open bugs in the WhatsApp Jira project.
naftiko: "0.5"
info:
label: "Jira WhatsApp Bug Count"
description: "Returns the current count of open bugs in the WhatsApp Jira project."
tags:
- engineering
- jira
- whatsapp
capability:
exposes:
- type: mcp
namespace: wa-eng
port: 8080
tools:
- name: get-wa-bugs
description: "Given a priority, return the count of open WhatsApp bugs. Use for quality tracking."
inputParameters:
- name: priority
in: body
type: string
description: "Bug priority filter."
call: "jira-wa.search-issues"
with:
jql: "project = WA AND type = Bug AND status != Done AND priority = {{priority}}"
outputParameters:
- name: total
type: number
mapping: "$.total"
consumes:
- type: http
namespace: jira-wa
baseUri: "https://meta.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: search
path: "/search"
inputParameters:
- name: jql
in: query
operations:
- name: search-issues
method: GET
Retrieves LinkedIn Campaign Manager performance metrics for sponsored content and posts a weekly summary to the B2B marketing Slack channel.
naftiko: "0.5"
info:
label: "LinkedIn Sponsored Content Performance"
description: "Retrieves LinkedIn Campaign Manager performance metrics for sponsored content and posts a weekly summary to the B2B marketing Slack channel."
tags:
- marketing
- linkedin
- slack
- reporting
- social-media
capability:
exposes:
- type: mcp
namespace: linkedin-marketing
port: 8080
tools:
- name: digest-sponsored-content-performance
description: "Given a LinkedIn Campaign Manager account ID and date range, retrieve sponsored content performance metrics and post a formatted digest to the B2B marketing Slack channel."
inputParameters:
- name: account_id
in: body
type: string
description: "The LinkedIn Campaign Manager account ID."
- name: date_start
in: body
type: string
description: "Start date for the performance period (YYYY-MM-DD)."
- name: date_end
in: body
type: string
description: "End date for the performance period (YYYY-MM-DD)."
steps:
- name: get-analytics
type: call
call: "linkedin.get-campaign-analytics"
with:
account_id: "{{account_id}}"
start_date: "{{date_start}}"
end_date: "{{date_end}}"
- name: post-digest
type: call
call: "slack.post-message"
with:
channel: "b2b-marketing"
text: "LinkedIn Campaign Report ({{date_start}} to {{date_end}}): Impressions: {{get-analytics.impressions}} | Clicks: {{get-analytics.clicks}} | CTR: {{get-analytics.ctr}}% | Spend: ${{get-analytics.costInLocalCurrency}}"
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: campaign-analytics
path: "/adAnalyticsV2"
operations:
- name: get-campaign-analytics
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Pulls demographic and interest audience insights from the Meta Graph API for an ad account and posts a weekly summary to the ads strategy Slack channel.
naftiko: "0.5"
info:
label: "Meta Ads Audience Insights Report"
description: "Pulls demographic and interest audience insights from the Meta Graph API for an ad account and posts a weekly summary to the ads strategy Slack channel."
tags:
- marketing
- meta-ads
- meta-graph
- slack
- audience
- reporting
capability:
exposes:
- type: mcp
namespace: audience-insights
port: 8080
tools:
- name: publish-audience-insights-report
description: "Given a Meta Ads account ID and date range, retrieve audience demographic and interest breakdown data and post a weekly insights summary to the ads strategy Slack channel."
inputParameters:
- name: ad_account_id
in: body
type: string
description: "The Meta Ads account ID (format: act_XXXXXXXXX)."
- name: date_start
in: body
type: string
description: "Start date for the insights period (YYYY-MM-DD)."
- name: date_end
in: body
type: string
description: "End date for the insights period (YYYY-MM-DD)."
steps:
- name: get-audience-insights
type: call
call: "meta-graph.get-audience-insights"
with:
ad_account_id: "{{ad_account_id}}"
date_start: "{{date_start}}"
date_end: "{{date_end}}"
- name: post-report
type: call
call: "slack.post-message"
with:
channel: "ads-strategy"
text: "Audience Insights ({{date_start}} to {{date_end}}): Top age group: {{get-audience-insights.top_age_group}} | Top country: {{get-audience-insights.top_country}} | Top interest: {{get-audience-insights.top_interest}}"
consumes:
- type: http
namespace: meta-graph
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.meta_graph_token"
resources:
- name: audience-insights
path: "/{{ad_account_id}}/insights"
inputParameters:
- name: ad_account_id
in: path
operations:
- name: get-audience-insights
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Fetches performance metrics for a Meta Ads campaign from the Meta Graph API and posts a formatted summary to the marketing Slack channel.
naftiko: "0.5"
info:
label: "Meta Ads Campaign Performance Digest"
description: "Fetches performance metrics for a Meta Ads campaign from the Meta Graph API and posts a formatted summary to the marketing Slack channel."
tags:
- marketing
- meta-ads
- ads
- slack
- reporting
capability:
exposes:
- type: mcp
namespace: ads-reporting
port: 8080
tools:
- name: digest-campaign-performance
description: "Given a Meta Ads campaign ID and date range, retrieve impressions, clicks, spend, and ROAS from the Meta Graph API and post a formatted performance digest to the marketing Slack channel."
inputParameters:
- name: campaign_id
in: body
type: string
description: "The Meta Ads campaign ID to report on."
- name: date_start
in: body
type: string
description: "Start date for the reporting period (YYYY-MM-DD)."
- name: date_stop
in: body
type: string
description: "End date for the reporting period (YYYY-MM-DD)."
- name: slack_channel
in: body
type: string
description: "Slack channel ID to post the digest to."
steps:
- name: get-insights
type: call
call: "meta-graph.get-campaign-insights"
with:
campaign_id: "{{campaign_id}}"
date_start: "{{date_start}}"
date_stop: "{{date_stop}}"
- name: post-digest
type: call
call: "slack.post-message"
with:
channel: "{{slack_channel}}"
text: "Campaign Report ({{date_start}} to {{date_stop}}): Impressions: {{get-insights.impressions}} | Clicks: {{get-insights.clicks}} | Spend: ${{get-insights.spend}} | ROAS: {{get-insights.roas}}"
consumes:
- type: http
namespace: meta-graph
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.meta_graph_token"
resources:
- name: campaign-insights
path: "/{{campaign_id}}/insights"
inputParameters:
- name: campaign_id
in: path
operations:
- name: get-campaign-insights
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
On a Meta Quest app store launch, pulls performance data from the Meta Graph API and posts an executive launch report to the marketing Slack channel.
naftiko: "0.5"
info:
label: "Meta Quest VR App Launch Marketing Digest"
description: "On a Meta Quest app store launch, pulls performance data from the Meta Graph API and posts an executive launch report to the marketing Slack channel."
tags:
- marketing
- meta-quest
- vr
- meta-graph
- slack
- reporting
capability:
exposes:
- type: mcp
namespace: quest-marketing
port: 8080
tools:
- name: publish-app-launch-digest
description: "Given a Meta Quest app ID and launch date, retrieve first-week download counts, ratings, and revenue from the Meta Graph API and post a launch performance digest to the product Slack channel."
inputParameters:
- name: app_id
in: body
type: string
description: "The Meta Quest app ID to report on."
- name: launch_date
in: body
type: string
description: "The app launch date in ISO 8601 format (YYYY-MM-DD)."
- name: slack_channel
in: body
type: string
description: "The Slack channel ID to post the report to."
steps:
- name: get-app-metrics
type: call
call: "meta-graph.get-app-insights"
with:
app_id: "{{app_id}}"
since: "{{launch_date}}"
- name: post-report
type: call
call: "slack.post-message"
with:
channel: "{{slack_channel}}"
text: "Quest App Launch Report - {{app_id}}: Downloads: {{get-app-metrics.installs}} | Revenue: ${{get-app-metrics.revenue}} | Rating: {{get-app-metrics.avg_rating}}/5"
consumes:
- type: http
namespace: meta-graph
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.meta_graph_token"
resources:
- name: app-insights
path: "/{{app_id}}/app_insights"
inputParameters:
- name: app_id
in: path
operations:
- name: get-app-insights
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When Okta detects a suspicious login event, suspends the affected user account, creates a high-priority ServiceNow security incident, and alerts the security operations Slack channel.
naftiko: "0.5"
info:
label: "Okta Suspicious Login Security Response"
description: "When Okta detects a suspicious login event, suspends the affected user account, creates a high-priority ServiceNow security incident, and alerts the security operations Slack channel."
tags:
- security
- identity
- okta
- servicenow
- slack
- siem
capability:
exposes:
- type: mcp
namespace: security-response
port: 8080
tools:
- name: respond-to-suspicious-login
description: "Given an Okta suspicious login event with user email and IP address, suspend the user account, create a ServiceNow security incident, and alert the security operations Slack channel."
inputParameters:
- name: user_email
in: body
type: string
description: "The email of the user who triggered the suspicious login."
- name: event_id
in: body
type: string
description: "The Okta system log event ID for the suspicious login."
- name: ip_address
in: body
type: string
description: "The IP address from which the suspicious login was attempted."
steps:
- name: get-user
type: call
call: "okta.get-user-by-email"
with:
email: "{{user_email}}"
- name: suspend-user
type: call
call: "okta.suspend-user"
with:
user_id: "{{get-user.id}}"
- name: create-security-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Suspicious login: {{user_email}} from {{ip_address}}"
urgency: "1"
category: "security"
- name: alert-soc
type: call
call: "slack.post-message"
with:
channel: "security-operations"
text: "SECURITY RESPONSE: User {{user_email}} suspended after suspicious login from {{ip_address}}. SNOW: {{create-security-incident.number}}"
consumes:
- type: http
namespace: okta
baseUri: "https://meta.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users-by-email
path: "/users"
operations:
- name: get-user-by-email
method: GET
- name: user-suspend
path: "/users/{{user_id}}/lifecycle/suspend"
inputParameters:
- name: user_id
in: path
operations:
- name: suspend-user
method: POST
- type: http
namespace: servicenow
baseUri: "https://meta.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incident
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Provisions Okta application access based on an employee's team and role, and logs the provisioning action in ServiceNow.
naftiko: "0.5"
info:
label: "Okta User Access Provisioning"
description: "Provisions Okta application access based on an employee's team and role, and logs the provisioning action in ServiceNow."
tags:
- identity
- security
- okta
- servicenow
- access-management
capability:
exposes:
- type: mcp
namespace: identity-provisioning
port: 8080
tools:
- name: provision-user-access
description: "Given an employee email, team name, and list of application IDs, assign the user to the appropriate Okta groups and log the access provisioning event in ServiceNow."
inputParameters:
- name: user_email
in: body
type: string
description: "The employee's work email address."
- name: team_name
in: body
type: string
description: "The team name for role-based group assignment."
- name: application_ids
in: body
type: string
description: "Comma-separated list of Okta application IDs to provision."
steps:
- name: get-user
type: call
call: "okta.get-user-by-email"
with:
email: "{{user_email}}"
- name: assign-groups
type: call
call: "okta.add-user-to-group"
with:
user_id: "{{get-user.id}}"
team: "{{team_name}}"
- name: log-provisioning
type: call
call: "servicenow.create-incident"
with:
short_description: "Access provisioned for {{user_email}} - Team: {{team_name}}"
category: "access_management"
consumes:
- type: http
namespace: okta
baseUri: "https://meta.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users"
operations:
- name: get-user-by-email
method: GET
- name: group-membership
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: servicenow
baseUri: "https://meta.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incident
path: "/table/incident"
operations:
- name: create-incident
method: POST
Triggers a Power BI dataset refresh for the executive business intelligence dashboard and notifies the analytics team via Slack when complete.
naftiko: "0.5"
info:
label: "Power BI Executive Dashboard Refresh"
description: "Triggers a Power BI dataset refresh for the executive business intelligence dashboard and notifies the analytics team via Slack when complete."
tags:
- analytics
- reporting
- power-bi
- slack
- data
capability:
exposes:
- type: mcp
namespace: bi-reporting
port: 8080
tools:
- name: refresh-executive-dashboard
description: "Given a Power BI workspace ID and dataset ID, trigger a dataset refresh for the executive BI dashboard and notify the analytics Slack channel upon initiation."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Power BI workspace ID containing the executive dashboard dataset."
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID for the executive dashboard."
steps:
- name: trigger-refresh
type: call
call: "powerbi.refresh-dataset"
with:
workspace_id: "{{workspace_id}}"
dataset_id: "{{dataset_id}}"
- name: notify-analytics
type: call
call: "slack.post-message"
with:
channel: "analytics-team"
text: "Executive dashboard refresh initiated for dataset {{dataset_id}}. Expected completion: 10-15 minutes."
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-refreshes
path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: workspace_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a Meta Quest hardware defect report crosses a volume threshold, creates a high-priority ServiceNow incident, opens a Jira engineering ticket, and alerts the Reality Labs product team via Slack.
naftiko: "0.5"
info:
label: "Reality Labs Hardware Defect Escalation"
description: "When a Meta Quest hardware defect report crosses a volume threshold, creates a high-priority ServiceNow incident, opens a Jira engineering ticket, and alerts the Reality Labs product team via Slack."
tags:
- manufacturing
- quality
- servicenow
- jira
- slack
- reality-labs
capability:
exposes:
- type: mcp
namespace: hardware-quality
port: 8080
tools:
- name: escalate-hardware-defect
description: "Given a Quest hardware defect type, device model, and defect count, create a high-priority ServiceNow incident, open a Jira engineering ticket, and alert the Reality Labs product Slack channel."
inputParameters:
- name: device_model
in: body
type: string
description: "The Meta Quest device model affected (e.g., Quest 3, Quest Pro)."
- name: defect_type
in: body
type: string
description: "The type of hardware defect reported (e.g., display_failure, controller_drift)."
- name: defect_count
in: body
type: integer
description: "Number of units reported with this defect in the current period."
steps:
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Hardware defect escalation: {{device_model}} - {{defect_type}}"
urgency: "1"
category: "hardware_quality"
- name: create-eng-ticket
type: call
call: "jira.create-issue"
with:
project_key: "RL"
issuetype: "Bug"
summary: "Hardware defect: {{device_model}} {{defect_type}} - {{defect_count}} units affected"
description: "SNOW: {{create-incident.number}} | Device: {{device_model}} | Defect: {{defect_type}} | Count: {{defect_count}}"
- name: notify-product-team
type: call
call: "slack.post-message"
with:
channel: "reality-labs-product"
text: "HARDWARE ALERT: {{device_model}} reporting {{defect_count}} units with {{defect_type}}. SNOW: {{create-incident.number}} | Jira: {{create-eng-ticket.key}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://meta.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incident
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: jira
baseUri: "https://meta.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Generates ad spend forecast from Salesforce opportunities, enriches with Snowflake data, and posts to the revenue Slack channel.
naftiko: "0.5"
info:
label: "Salesforce Ad Spend Forecast Report"
description: "Generates ad spend forecast from Salesforce opportunities, enriches with Snowflake data, and posts to the revenue Slack channel."
tags:
- finance
- salesforce
- snowflake
- slack
capability:
exposes:
- type: mcp
namespace: ad-finance
port: 8080
tools:
- name: handle-ad-forecast
description: "Given a quarter, compile ad spend forecast and post to revenue team."
inputParameters:
- name: quarter
in: body
type: string
description: "Quarter (e.g. Q1-2026)."
steps:
- name: query-pipeline
type: call
call: sf-ad-rev.query-opportunities
with:
quarter: "{{quarter}}"
- name: enrich
type: call
call: snowflake-rev.run-query
with:
quarter: "{{quarter}}"
- name: post-forecast
type: call
call: slack-rev.post-message
with:
channel: "revenue-operations"
text: "Ad Spend Forecast ({{quarter}}): Pipeline: ${{query-pipeline.totalAmount}} | Weighted: ${{enrich.weighted}} | Growth: {{enrich.yoy_growth}}%"
consumes:
- type: http
namespace: sf-ad-rev
baseUri: "https://meta.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query"
inputParameters:
- name: quarter
in: query
operations:
- name: query-opportunities
method: GET
- type: http
namespace: snowflake-rev
baseUri: "https://meta.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: slack-rev
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Looks up advertiser account details in Salesforce for ad sales operations.
naftiko: "0.5"
info:
label: "Salesforce Advertiser Account Lookup"
description: "Looks up advertiser account details in Salesforce for ad sales operations."
tags:
- sales
- salesforce
- advertising
capability:
exposes:
- type: mcp
namespace: ad-sales
port: 8080
tools:
- name: get-advertiser
description: "Given an account ID, return advertiser details from Salesforce. Use for ad sales qualification."
inputParameters:
- name: account_id
in: body
type: string
description: "Salesforce account ID."
call: "sf-ads.get-account"
with:
account_id: "{{account_id}}"
outputParameters:
- name: account
type: object
mapping: "$"
consumes:
- type: http
namespace: sf-ads
baseUri: "https://meta.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
Queries Snowflake for advertiser churn signals, creates Salesforce tasks, and notifies customer success in Slack.
naftiko: "0.5"
info:
label: "Salesforce Advertiser Churn Risk Alert"
description: "Queries Snowflake for advertiser churn signals, creates Salesforce tasks, and notifies customer success in Slack."
tags:
- customer-success
- salesforce
- snowflake
- slack
capability:
exposes:
- type: mcp
namespace: churn-ops
port: 8080
tools:
- name: handle-churn-risk
description: "Given a risk threshold, identify at-risk advertisers and create follow-up tasks."
inputParameters:
- name: risk_threshold
in: body
type: number
description: "Churn risk score threshold."
steps:
- name: query-risk
type: call
call: snowflake-churn.run-query
with:
threshold: "{{risk_threshold}}"
- name: create-task
type: call
call: sf-churn.create-task
with:
subject: "At-risk advertisers above {{risk_threshold}}"
- name: notify-cs
type: call
call: slack-cs.post-message
with:
channel: "ad-customer-success"
text: "CHURN RISK: {{query-risk.at_risk_count}} advertisers above {{risk_threshold}} | Task: {{create-task.id}}"
consumes:
- type: http
namespace: snowflake-churn
baseUri: "https://meta.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: sf-churn
baseUri: "https://meta.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: tasks
path: "/sobjects/Task"
operations:
- name: create-task
method: POST
- type: http
namespace: slack-cs
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Compiles agency partner revenue from Salesforce, enriches with Snowflake data, and posts to partnerships Slack.
naftiko: "0.5"
info:
label: "Salesforce Agency Partner Revenue Report"
description: "Compiles agency partner revenue from Salesforce, enriches with Snowflake data, and posts to partnerships Slack."
tags:
- partnerships
- salesforce
- snowflake
- slack
capability:
exposes:
- type: mcp
namespace: agency-ops
port: 8080
tools:
- name: handle-agency-revenue
description: "Given a partner ID and period, compile revenue and post."
inputParameters:
- name: partner_id
in: body
type: string
description: "Partner account ID."
- name: period
in: body
type: string
description: "Reporting period."
steps:
- name: get-account
type: call
call: sf-agency.get-account
with:
account_id: "{{partner_id}}"
- name: get-usage
type: call
call: snowflake-agency.run-query
with:
partner_id: "{{partner_id}}"
- name: post-report
type: call
call: slack-agency.post-message
with:
channel: "agency-partnerships"
text: "Agency Revenue ({{period}}): {{get-account.Name}} | Revenue: ${{get-account.AnnualRevenue}} | Ad spend: ${{get-usage.total_spend}}"
consumes:
- type: http
namespace: sf-agency
baseUri: "https://meta.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
- type: http
namespace: snowflake-agency
baseUri: "https://meta.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: slack-agency
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Escalates support cases from Salesforce to Jira engineering and notifies in Slack.
naftiko: "0.5"
info:
label: "Salesforce Customer Support Case Escalation"
description: "Escalates support cases from Salesforce to Jira engineering and notifies in Slack."
tags:
- support
- salesforce
- jira
- slack
capability:
exposes:
- type: mcp
namespace: support-ops
port: 8080
tools:
- name: handle-case-escalation
description: "Given a SF case ID, create Jira ticket and notify."
inputParameters:
- name: case_id
in: body
type: string
description: "Salesforce case ID."
steps:
- name: get-case
type: call
call: sf-support.get-case
with:
case_id: "{{case_id}}"
- name: create-ticket
type: call
call: jira-support.create-issue
with:
project_key: "ENG"
issuetype: "Bug"
summary: "Escalation: {{get-case.Subject}}"
- name: notify
type: call
call: slack-support.post-message
with:
channel: "support-escalations"
text: "ESCALATION: {{get-case.Subject}} | Case: {{case_id}} | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: sf-support
baseUri: "https://meta.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: get-case
method: GET
- type: http
namespace: jira-support
baseUri: "https://meta.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-support
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Looks up enterprise messaging deal details in Salesforce for WhatsApp Business sales.
naftiko: "0.5"
info:
label: "Salesforce Enterprise Messaging Deal Lookup"
description: "Looks up enterprise messaging deal details in Salesforce for WhatsApp Business sales."
tags:
- sales
- salesforce
- messaging
capability:
exposes:
- type: mcp
namespace: msg-sales
port: 8080
tools:
- name: get-messaging-deal
description: "Given an opportunity ID, return enterprise messaging deal details. Use for deal tracking."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "Salesforce opportunity ID."
call: "sf-msg.get-opportunity"
with:
opportunity_id: "{{opportunity_id}}"
outputParameters:
- name: opportunity
type: object
mapping: "$"
consumes:
- type: http
namespace: sf-msg
baseUri: "https://meta.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
When a high-value ad deal is created in Salesforce, creates Jira delivery epic and alerts sales leadership in Slack.
naftiko: "0.5"
info:
label: "Salesforce High-Value Advertiser Alert"
description: "When a high-value ad deal is created in Salesforce, creates Jira delivery epic and alerts sales leadership in Slack."
tags:
- sales
- salesforce
- jira
- slack
capability:
exposes:
- type: mcp
namespace: ad-deals
port: 8080
tools:
- name: handle-high-value-deal
description: "Given a Salesforce opportunity ID, create a delivery epic and notify leadership."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "Salesforce opportunity ID."
steps:
- name: get-opp
type: call
call: sf-deals.get-opportunity
with:
opportunity_id: "{{opportunity_id}}"
- name: create-epic
type: call
call: jira-deals.create-issue
with:
project_key: "ADS"
issuetype: "Epic"
summary: "Ad delivery: {{get-opp.Name}} — ${{get-opp.Amount}}"
- name: notify-leadership
type: call
call: slack-sales.post-message
with:
channel: "sales-leadership"
text: "HIGH-VALUE AD DEAL: {{get-opp.Name}} | ${{get-opp.Amount}} | Jira: {{create-epic.key}}"
consumes:
- type: http
namespace: sf-deals
baseUri: "https://meta.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
- type: http
namespace: jira-deals
baseUri: "https://meta.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_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Orchestrates developer partner onboarding in Salesforce and notifies the partnerships team in Slack.
naftiko: "0.5"
info:
label: "Salesforce Partner Developer Onboarding"
description: "Orchestrates developer partner onboarding in Salesforce and notifies the partnerships team in Slack."
tags:
- partnerships
- salesforce
- slack
- developer
capability:
exposes:
- type: mcp
namespace: dev-partner
port: 8080
tools:
- name: handle-dev-onboarding
description: "Given partner details, create SF account and notify partnerships."
inputParameters:
- name: partner_name
in: body
type: string
description: "Partner name."
- name: partner_type
in: body
type: string
description: "Partner type."
steps:
- name: create-account
type: call
call: sf-partner.create-account
with:
name: "{{partner_name}}"
type: "{{partner_type}}"
- name: notify-team
type: call
call: slack-partner.post-message
with:
channel: "developer-partnerships"
text: "NEW DEV PARTNER: {{partner_name}} | Type: {{partner_type}} | SF: {{create-account.id}}"
consumes:
- type: http
namespace: sf-partner
baseUri: "https://meta.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: slack-partner
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Compiles SMB advertiser health scores from Salesforce and posts to the SMB team Slack channel.
naftiko: "0.5"
info:
label: "Salesforce SMB Advertiser Health Digest"
description: "Compiles SMB advertiser health scores from Salesforce and posts to the SMB team Slack channel."
tags:
- customer-success
- salesforce
- slack
- smb
capability:
exposes:
- type: mcp
namespace: smb-ops
port: 8080
tools:
- name: handle-smb-health
description: "Given a segment, compile health scores and post."
inputParameters:
- name: segment
in: body
type: string
description: "Customer segment."
steps:
- name: query-health
type: call
call: sf-smb.query-accounts
with:
segment: "{{segment}}"
- name: post-digest
type: call
call: slack-smb.post-message
with:
channel: "smb-success"
text: "SMB Health ({{segment}}): Accounts: {{query-health.totalSize}} | At-risk: {{query-health.at_risk}} | Healthy: {{query-health.healthy}}"
consumes:
- type: http
namespace: sf-smb
baseUri: "https://meta.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/query"
inputParameters:
- name: segment
in: query
operations:
- name: query-accounts
method: GET
- type: http
namespace: slack-smb
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Orchestrates WhatsApp Business customer onboarding in Salesforce and notifies the messaging team in Slack.
naftiko: "0.5"
info:
label: "Salesforce WhatsApp Business Onboarding"
description: "Orchestrates WhatsApp Business customer onboarding in Salesforce and notifies the messaging team in Slack."
tags:
- messaging
- salesforce
- slack
- onboarding
capability:
exposes:
- type: mcp
namespace: wa-onboard
port: 8080
tools:
- name: handle-wa-onboarding
description: "Given customer details, create a Salesforce account and notify the messaging team."
inputParameters:
- name: company_name
in: body
type: string
description: "Company name."
- name: tier
in: body
type: string
description: "WhatsApp Business tier."
steps:
- name: create-account
type: call
call: sf-wa.create-account
with:
name: "{{company_name}}"
type: "WhatsApp Business — {{tier}}"
- name: notify-messaging
type: call
call: slack-wa.post-message
with:
channel: "whatsapp-business"
text: "WA ONBOARDING: {{company_name}} | Tier: {{tier}} | SF: {{create-account.id}}"
consumes:
- type: http
namespace: sf-wa
baseUri: "https://meta.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: slack-wa
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves a ServiceNow change request, notifies the Change Advisory Board via Slack, and updates the change record with the approval decision.
naftiko: "0.5"
info:
label: "ServiceNow Change Request Approval Flow"
description: "Retrieves a ServiceNow change request, notifies the Change Advisory Board via Slack, and updates the change record with the approval decision."
tags:
- itsm
- change-management
- servicenow
- slack
- approval
capability:
exposes:
- type: mcp
namespace: change-management
port: 8080
tools:
- name: process-change-approval
description: "Given a ServiceNow change request number and approval decision, retrieve the change details, update the ServiceNow record with the approval status, and notify the CAB via Slack."
inputParameters:
- name: change_number
in: body
type: string
description: "The ServiceNow change request number (e.g., CHG0012345)."
- name: approval_decision
in: body
type: string
description: "The approval decision: approved or rejected."
- name: approver_comments
in: body
type: string
description: "Comments from the approver explaining the decision."
steps:
- name: get-change
type: call
call: "servicenow-lookup.get-change"
with:
number: "{{change_number}}"
- name: update-change
type: call
call: "servicenow-update.update-change-status"
with:
sys_id: "{{get-change.sys_id}}"
state: "{{approval_decision}}"
comments: "{{approver_comments}}"
- name: notify-cab
type: call
call: "slack.post-message"
with:
channel: "change-advisory-board"
text: "Change {{change_number}} - {{get-change.short_description}}: {{approval_decision}}. Comments: {{approver_comments}}"
consumes:
- type: http
namespace: servicenow-lookup
baseUri: "https://meta.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: change-request
path: "/table/change_request"
operations:
- name: get-change
method: GET
- type: http
namespace: servicenow-update
baseUri: "https://meta.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: change-record
path: "/table/change_request/{{sys_id}}"
inputParameters:
- name: sys_id
in: path
operations:
- name: update-change-status
method: PATCH
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Queries Snowflake for advertising fraud detection metrics and posts to the trust and safety Slack channel.
naftiko: "0.5"
info:
label: "Snowflake Ad Fraud Detection Report"
description: "Queries Snowflake for advertising fraud detection metrics and posts to the trust and safety Slack channel."
tags:
- trust-safety
- snowflake
- slack
- advertising
capability:
exposes:
- type: mcp
namespace: fraud-ops
port: 8080
tools:
- name: handle-fraud-report
description: "Given a period, query ad fraud metrics and post to trust and safety."
inputParameters:
- name: period
in: body
type: string
description: "Reporting period."
steps:
- name: query-fraud
type: call
call: snowflake-fraud.run-query
with:
period: "{{period}}"
- name: post-report
type: call
call: slack-trust.post-message
with:
channel: "trust-safety"
text: "Ad Fraud Report ({{period}}): Flagged: {{query-fraud.flagged_count}} | Blocked: {{query-fraud.blocked_count}} | Rate: {{query-fraud.fraud_rate}}%"
consumes:
- type: http
namespace: snowflake-fraud
baseUri: "https://meta.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: slack-trust
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Queries Snowflake for advertising revenue analytics by platform and region.
naftiko: "0.5"
info:
label: "Snowflake Ad Revenue Analytics Query"
description: "Queries Snowflake for advertising revenue analytics by platform and region."
tags:
- analytics
- snowflake
- advertising
capability:
exposes:
- type: mcp
namespace: ad-analytics
port: 8080
tools:
- name: get-ad-revenue
description: "Given a platform and region, return ad revenue analytics from Snowflake. Use for business intelligence dashboards."
inputParameters:
- name: platform
in: body
type: string
description: "Platform (e.g. Facebook, Instagram, WhatsApp)."
- name: region
in: body
type: string
description: "Geographic region."
call: "snowflake-ads.run-query"
with:
platform: "{{platform}}"
region: "{{region}}"
outputParameters:
- name: revenue
type: object
mapping: "$.data"
consumes:
- type: http
namespace: snowflake-ads
baseUri: "https://meta.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Generates AI training cost analytics from Snowflake and posts to the finance Slack channel.
naftiko: "0.5"
info:
label: "Snowflake AI Model Training Cost Report"
description: "Generates AI training cost analytics from Snowflake and posts to the finance Slack channel."
tags:
- finance
- snowflake
- slack
- ai
capability:
exposes:
- type: mcp
namespace: ai-finance
port: 8080
tools:
- name: handle-training-costs
description: "Given a period, generate training cost report."
inputParameters:
- name: period
in: body
type: string
description: "Reporting period."
steps:
- name: query-costs
type: call
call: snowflake-ai-cost.run-query
with:
period: "{{period}}"
- name: post-report
type: call
call: slack-fin.post-message
with:
channel: "finance-ops"
text: "AI Training Costs ({{period}}): Total: ${{query-costs.total}} | GPU-hours: {{query-costs.gpu_hours}} | Cost/hour: ${{query-costs.cost_per_hour}}"
consumes:
- type: http
namespace: snowflake-ai-cost
baseUri: "https://meta.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: slack-fin
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Queries business messaging KPIs from Snowflake and posts to the business messaging Slack channel.
naftiko: "0.5"
info:
label: "Snowflake Business Messaging KPI Report"
description: "Queries business messaging KPIs from Snowflake and posts to the business messaging Slack channel."
tags:
- messaging
- snowflake
- slack
- kpi
capability:
exposes:
- type: mcp
namespace: biz-msg-ops
port: 8080
tools:
- name: handle-messaging-kpi
description: "Given a period, query messaging KPIs and post."
inputParameters:
- name: period
in: body
type: string
description: "Reporting period."
steps:
- name: query-kpis
type: call
call: snowflake-bizmsg.run-query
with:
period: "{{period}}"
- name: post-report
type: call
call: slack-bizmsg.post-message
with:
channel: "business-messaging"
text: "Messaging KPIs ({{period}}): Businesses: {{query-kpis.active_businesses}} | Messages: {{query-kpis.total_messages}} | Revenue: ${{query-kpis.revenue}}"
consumes:
- type: http
namespace: snowflake-bizmsg
baseUri: "https://meta.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: slack-bizmsg
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Queries Snowflake for content moderation effectiveness metrics across platforms.
naftiko: "0.5"
info:
label: "Snowflake Content Moderation Metrics Query"
description: "Queries Snowflake for content moderation effectiveness metrics across platforms."
tags:
- trust-safety
- snowflake
- moderation
capability:
exposes:
- type: mcp
namespace: moderation-analytics
port: 8080
tools:
- name: get-moderation-metrics
description: "Given a platform and period, return content moderation metrics from Snowflake."
inputParameters:
- name: platform
in: body
type: string
description: "Platform name."
- name: period
in: body
type: string
description: "Reporting period."
call: "snowflake-mod.run-query"
with:
platform: "{{platform}}"
period: "{{period}}"
outputParameters:
- name: metrics
type: object
mapping: "$.data"
consumes:
- type: http
namespace: snowflake-mod
baseUri: "https://meta.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Queries Snowflake for data quality rule violations in production data pipelines, creates Jira issues for critical failures, and posts alerts to the data engineering Slack channel.
naftiko: "0.5"
info:
label: "Snowflake Data Quality Alert"
description: "Queries Snowflake for data quality rule violations in production data pipelines, creates Jira issues for critical failures, and posts alerts to the data engineering Slack channel."
tags:
- data
- analytics
- snowflake
- jira
- slack
- monitoring
capability:
exposes:
- type: mcp
namespace: data-quality-ops
port: 8080
tools:
- name: check-data-quality
description: "Execute data quality checks in Snowflake for a specified database, create Jira issues for any violations, and post a summary to the data engineering Slack channel."
inputParameters:
- name: database_name
in: body
type: string
description: "The Snowflake database to run quality checks against."
- name: quality_schema
in: body
type: string
description: "The schema containing data quality check results."
steps:
- name: run-quality-checks
type: call
call: "snowflake.query-quality-violations"
with:
database_name: "{{database_name}}"
schema: "{{quality_schema}}"
- name: create-issue
type: call
call: "jira.create-issue"
with:
project_key: "DATA"
issuetype: "Bug"
summary: "Data quality violations in {{database_name}}: {{run-quality-checks.violation_count}} issues"
description: "{{run-quality-checks.violation_summary}}"
- name: notify-data-team
type: call
call: "slack.post-message"
with:
channel: "data-engineering"
text: "Data Quality Alert in {{database_name}}: {{run-quality-checks.violation_count}} violations. Jira: {{create-issue.key}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://meta.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query-quality-violations
method: POST
- type: http
namespace: jira
baseUri: "https://meta.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Queries data center power consumption from Snowflake and posts to the sustainability Slack channel.
naftiko: "0.5"
info:
label: "Snowflake Data Center Power Report"
description: "Queries data center power consumption from Snowflake and posts to the sustainability Slack channel."
tags:
- sustainability
- snowflake
- slack
- datacenter
capability:
exposes:
- type: mcp
namespace: power-ops
port: 8080
tools:
- name: handle-power-report
description: "Given a DC ID and period, query power data and post."
inputParameters:
- name: datacenter_id
in: body
type: string
description: "Data center ID."
- name: period
in: body
type: string
description: "Period."
steps:
- name: query-power
type: call
call: snowflake-power.run-query
with:
dc: "{{datacenter_id}}"
period: "{{period}}"
- name: post-report
type: call
call: slack-green.post-message
with:
channel: "sustainability"
text: "Power ({{datacenter_id}}, {{period}}): Total: {{query-power.total_kwh}} kWh | PUE: {{query-power.pue}}"
consumes:
- type: http
namespace: snowflake-power
baseUri: "https://meta.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: slack-green
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Queries developer platform growth metrics from Snowflake and posts to developer relations Slack.
naftiko: "0.5"
info:
label: "Snowflake Developer Platform Growth Report"
description: "Queries developer platform growth metrics from Snowflake and posts to developer relations Slack."
tags:
- devrel
- snowflake
- slack
- growth
capability:
exposes:
- type: mcp
namespace: devrel-ops
port: 8080
tools:
- name: handle-devrel-growth
description: "Given a period, query developer growth and post."
inputParameters:
- name: period
in: body
type: string
description: "Period."
steps:
- name: query-growth
type: call
call: snowflake-devrel.run-query
with:
period: "{{period}}"
- name: post-report
type: call
call: slack-devrel.post-message
with:
channel: "developer-relations"
text: "DevRel ({{period}}): New devs: {{query-growth.new_devs}} | Active apps: {{query-growth.active_apps}} | API calls: {{query-growth.api_calls}}"
consumes:
- type: http
namespace: snowflake-devrel
baseUri: "https://meta.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: slack-devrel
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Queries Snowflake for Meta app marketplace analytics and posts to the platform Slack channel.
naftiko: "0.5"
info:
label: "Snowflake Marketplace App Analytics"
description: "Queries Snowflake for Meta app marketplace analytics and posts to the platform Slack channel."
tags:
- platform
- snowflake
- slack
- marketplace
capability:
exposes:
- type: mcp
namespace: marketplace-analytics
port: 8080
tools:
- name: handle-marketplace-report
description: "Given a period, query marketplace analytics and post to Slack."
inputParameters:
- name: period
in: body
type: string
description: "Reporting period."
steps:
- name: query-apps
type: call
call: snowflake-market.run-query
with:
period: "{{period}}"
- name: post-report
type: call
call: slack-market.post-message
with:
channel: "platform-analytics"
text: "Marketplace ({{period}}): New apps: {{query-apps.new_apps}} | DAU: {{query-apps.total_dau}} | Revenue: ${{query-apps.total_revenue}}"
consumes:
- type: http
namespace: snowflake-market
baseUri: "https://meta.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: slack-market
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Queries Snowflake for privacy compliance metrics and posts to the privacy team Slack channel.
naftiko: "0.5"
info:
label: "Snowflake Privacy Compliance Report"
description: "Queries Snowflake for privacy compliance metrics and posts to the privacy team Slack channel."
tags:
- privacy
- snowflake
- slack
- compliance
capability:
exposes:
- type: mcp
namespace: privacy-ops
port: 8080
tools:
- name: handle-privacy-report
description: "Given a period, query privacy compliance metrics and post to Slack."
inputParameters:
- name: period
in: body
type: string
description: "Reporting period."
steps:
- name: query-compliance
type: call
call: snowflake-privacy.run-query
with:
period: "{{period}}"
- name: post-report
type: call
call: slack-privacy.post-message
with:
channel: "privacy-compliance"
text: "Privacy Report ({{period}}): Data requests: {{query-compliance.total_requests}} | Processed: {{query-compliance.processed}} | SLA met: {{query-compliance.sla_met}}%"
consumes:
- type: http
namespace: snowflake-privacy
baseUri: "https://meta.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: slack-privacy
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Queries Quest headset telemetry from Snowflake and posts a digest to the Reality Labs Slack channel.
naftiko: "0.5"
info:
label: "Snowflake Quest Headset Telemetry Digest"
description: "Queries Quest headset telemetry from Snowflake and posts a digest to the Reality Labs Slack channel."
tags:
- vr
- snowflake
- slack
- reality-labs
capability:
exposes:
- type: mcp
namespace: quest-analytics
port: 8080
tools:
- name: handle-quest-telemetry
description: "Given a period, query Quest telemetry and post to Reality Labs."
inputParameters:
- name: period
in: body
type: string
description: "Reporting period."
steps:
- name: query-telemetry
type: call
call: snowflake-quest.run-query
with:
period: "{{period}}"
- name: post-digest
type: call
call: slack-rl.post-message
with:
channel: "reality-labs"
text: "Quest Telemetry ({{period}}): Active devices: {{query-telemetry.active_devices}} | Avg session: {{query-telemetry.avg_session_min}}min | Crash rate: {{query-telemetry.crash_rate}}%"
consumes:
- type: http
namespace: snowflake-quest
baseUri: "https://meta.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: slack-rl
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Queries Reels engagement analytics from Snowflake and posts to the product Slack channel.
naftiko: "0.5"
info:
label: "Snowflake Reels Engagement Analytics"
description: "Queries Reels engagement analytics from Snowflake and posts to the product Slack channel."
tags:
- product
- snowflake
- slack
- reels
capability:
exposes:
- type: mcp
namespace: reels-analytics
port: 8080
tools:
- name: handle-reels-analytics
description: "Given a period, query Reels engagement and post to Slack."
inputParameters:
- name: period
in: body
type: string
description: "Reporting period."
steps:
- name: query-engagement
type: call
call: snowflake-reels.run-query
with:
period: "{{period}}"
- name: post-report
type: call
call: slack-reels.post-message
with:
channel: "reels-product"
text: "Reels ({{period}}): Views: {{query-engagement.total_views}} | Shares: {{query-engagement.shares}} | Completion: {{query-engagement.completion_rate}}%"
consumes:
- type: http
namespace: snowflake-reels
baseUri: "https://meta.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: slack-reels
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Queries Snowflake for user growth metrics across Meta platforms.
naftiko: "0.5"
info:
label: "Snowflake User Growth Metrics Query"
description: "Queries Snowflake for user growth metrics across Meta platforms."
tags:
- analytics
- snowflake
- growth
capability:
exposes:
- type: mcp
namespace: growth-analytics
port: 8080
tools:
- name: get-user-growth
description: "Given a platform and period, return user growth metrics from Snowflake. Use for product analytics."
inputParameters:
- name: platform
in: body
type: string
description: "Platform name (Facebook, Instagram, Threads)."
- name: period
in: body
type: string
description: "Reporting period."
call: "snowflake-growth.run-query"
with:
platform: "{{platform}}"
period: "{{period}}"
outputParameters:
- name: growth
type: object
mapping: "$.data"
consumes:
- type: http
namespace: snowflake-growth
baseUri: "https://meta.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Queries Snowflake for WhatsApp Business API message volume analytics.
naftiko: "0.5"
info:
label: "Snowflake WhatsApp Message Volume Query"
description: "Queries Snowflake for WhatsApp Business API message volume analytics."
tags:
- analytics
- snowflake
- whatsapp
capability:
exposes:
- type: mcp
namespace: wa-analytics
port: 8080
tools:
- name: get-message-volume
description: "Given a date range, return WhatsApp message volume stats from Snowflake. Use for capacity planning."
inputParameters:
- name: date_from
in: body
type: string
description: "Start date (YYYY-MM-DD)."
call: "snowflake-wa.run-query"
with:
date_from: "{{date_from}}"
outputParameters:
- name: volume
type: object
mapping: "$.data"
consumes:
- type: http
namespace: snowflake-wa
baseUri: "https://meta.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-query
method: POST
Creates a new Terraform Cloud workspace for an engineering team, links it to GitHub, and notifies the platform engineering team via Slack.
naftiko: "0.5"
info:
label: "Terraform Cloud Infrastructure Workspace Provisioning"
description: "Creates a new Terraform Cloud workspace for an engineering team, links it to GitHub, and notifies the platform engineering team via Slack."
tags:
- cloud
- infrastructure
- terraform
- github
- slack
- provisioning
capability:
exposes:
- type: mcp
namespace: infra-provisioning
port: 8080
tools:
- name: provision-team-workspace
description: "Given a team name, GitHub repository, and target environment, create a Terraform Cloud workspace, link the VCS repository, and notify the platform engineering Slack channel."
inputParameters:
- name: team_name
in: body
type: string
description: "The engineering team name for workspace naming."
- name: repository
in: body
type: string
description: "The GitHub repository to link (e.g., facebook/infrastructure)."
- name: environment
in: body
type: string
description: "Target environment: dev, staging, or production."
steps:
- name: create-workspace
type: call
call: "terraform.create-workspace"
with:
name: "{{team_name}}-{{environment}}"
vcs_repo: "{{repository}}"
- name: notify-platform
type: call
call: "slack.post-message"
with:
channel: "platform-engineering"
text: "Workspace created: {{team_name}}-{{environment}} linked to {{repository}}. ID: {{create-workspace.workspace_id}}"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: workspaces
path: "/organizations/meta/workspaces"
operations:
- name: create-workspace
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves message delivery and read rate metrics from the Meta Graph API for WhatsApp Business accounts and posts a daily performance report to Slack.
naftiko: "0.5"
info:
label: "WhatsApp Business API Delivery Report"
description: "Retrieves message delivery and read rate metrics from the Meta Graph API for WhatsApp Business accounts and posts a daily performance report to Slack."
tags:
- marketing
- whatsapp
- meta-graph
- slack
- reporting
capability:
exposes:
- type: mcp
namespace: whatsapp-reporting
port: 8080
tools:
- name: publish-whatsapp-delivery-report
description: "Given a WhatsApp Business Account ID and date, retrieve message delivery and read rate analytics from the Meta Graph API and post a daily report to the messaging Slack channel."
inputParameters:
- name: waba_id
in: body
type: string
description: "The WhatsApp Business Account ID to report on."
- name: report_date
in: body
type: string
description: "The date to retrieve metrics for (YYYY-MM-DD)."
steps:
- name: get-analytics
type: call
call: "meta-graph.get-whatsapp-analytics"
with:
waba_id: "{{waba_id}}"
start: "{{report_date}}"
end: "{{report_date}}"
- name: post-report
type: call
call: "slack.post-message"
with:
channel: "whatsapp-ops"
text: "WhatsApp Report ({{report_date}}): Sent: {{get-analytics.sent}} | Delivered: {{get-analytics.delivered}} | Read: {{get-analytics.read}} | Delivery Rate: {{get-analytics.delivery_rate}}%"
consumes:
- type: http
namespace: meta-graph
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.meta_graph_token"
resources:
- name: whatsapp-analytics
path: "/{{waba_id}}/analytics"
inputParameters:
- name: waba_id
in: path
operations:
- name: get-whatsapp-analytics
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Initiates annual performance reviews in Workday, creates tracking tasks, and notifies HR in Slack.
naftiko: "0.5"
info:
label: "Workday Annual Review Cycle Launcher"
description: "Initiates annual performance reviews in Workday, creates tracking tasks, and notifies HR in Slack."
tags:
- hr
- workday
- jira
- slack
capability:
exposes:
- type: mcp
namespace: review-ops
port: 8080
tools:
- name: handle-review-launch
description: "Given a cycle name and date, create tracking and notify HR."
inputParameters:
- name: cycle_name
in: body
type: string
description: "Review cycle name."
- name: target_date
in: body
type: string
description: "Target completion date."
steps:
- name: create-tracking
type: call
call: jira-hr.create-issue
with:
project_key: "HR"
issuetype: "Epic"
summary: "Review: {{cycle_name}} — Due {{target_date}}"
- name: notify-hr
type: call
call: slack-hr.post-message
with:
channel: "hr-business-partners"
text: "REVIEW CYCLE: {{cycle_name}} | Due: {{target_date}} | {{create-tracking.key}}"
consumes:
- type: http
namespace: jira-hr
baseUri: "https://meta.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-hr
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Checks employee benefits enrollment status in Workday.
naftiko: "0.5"
info:
label: "Workday Benefits Enrollment Check"
description: "Checks employee benefits enrollment status in Workday."
tags:
- hr
- workday
- benefits
capability:
exposes:
- type: mcp
namespace: benefits-ops
port: 8080
tools:
- name: get-enrollment
description: "Given an employee ID, return benefits enrollment status from Workday."
inputParameters:
- name: employee_id
in: body
type: string
description: "Workday employee ID."
call: "workday-benefits.get-enrollment"
with:
employee_id: "{{employee_id}}"
outputParameters:
- name: enrollment
type: object
mapping: "$"
consumes:
- type: http
namespace: workday-benefits
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/meta"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: enrollments
path: "/benefitEnrollments/{{employee_id}}"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-enrollment
method: GET
Retrieves compensation band details from Workday and posts to the HR ops Slack channel.
naftiko: "0.5"
info:
label: "Workday Compensation Band Lookup"
description: "Retrieves compensation band details from Workday and posts to the HR ops Slack channel."
tags:
- hr
- workday
- slack
- compensation
capability:
exposes:
- type: mcp
namespace: comp-ops
port: 8080
tools:
- name: handle-comp-lookup
description: "Given a job profile, retrieve comp band and notify HR."
inputParameters:
- name: job_profile_id
in: body
type: string
description: "Workday job profile ID."
steps:
- name: get-band
type: call
call: workday-comp.get-band
with:
job_profile_id: "{{job_profile_id}}"
- name: notify-hr
type: call
call: slack-comp.post-message
with:
channel: "hr-operations"
text: "Comp Band: {{job_profile_id}} | Min: ${{get-band.min}} | Mid: ${{get-band.mid}} | Max: ${{get-band.max}}"
consumes:
- type: http
namespace: workday-comp
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/meta"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: bands
path: "/compensationBands/{{job_profile_id}}"
inputParameters:
- name: job_profile_id
in: path
operations:
- name: get-band
method: GET
- type: http
namespace: slack-comp
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Orchestrates contractor onboarding from Workday and notifies the hiring manager in Slack.
naftiko: "0.5"
info:
label: "Workday Contractor Onboarding"
description: "Orchestrates contractor onboarding from Workday and notifies the hiring manager in Slack."
tags:
- hr
- workday
- slack
- contractors
capability:
exposes:
- type: mcp
namespace: contractor-ops
port: 8080
tools:
- name: handle-contractor-start
description: "Given a worker ID, retrieve details and notify hiring manager."
inputParameters:
- name: worker_id
in: body
type: string
description: "Workday worker ID."
steps:
- name: get-worker
type: call
call: workday-contr.get-worker
with:
worker_id: "{{worker_id}}"
- name: notify-manager
type: call
call: slack-contr.post-message
with:
channel: "contractor-onboarding"
text: "CONTRACTOR: {{get-worker.fullName}} | Role: {{get-worker.jobTitle}} | Provision access."
consumes:
- type: http
namespace: workday-contr
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/meta"
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: slack-contr
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Pulls diversity metrics from Workday and posts to the HR leadership Slack channel.
naftiko: "0.5"
info:
label: "Workday Diversity Metrics Report"
description: "Pulls diversity metrics from Workday and posts to the HR leadership Slack channel."
tags:
- hr
- workday
- slack
- dei
capability:
exposes:
- type: mcp
namespace: dei-ops
port: 8080
tools:
- name: handle-dei-report
description: "Given a quarter, pull diversity metrics and post to HR leadership."
inputParameters:
- name: quarter
in: body
type: string
description: "Quarter identifier."
steps:
- name: get-metrics
type: call
call: workday-dei.get-report
with:
quarter: "{{quarter}}"
- name: post-report
type: call
call: slack-dei.post-message
with:
channel: "hr-leadership"
text: "DEI ({{quarter}}): Headcount: {{get-metrics.total}} | Gender: {{get-metrics.gender_ratio}}"
consumes:
- type: http
namespace: workday-dei
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/meta"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: reports
path: "/diversityMetrics"
inputParameters:
- name: quarter
in: query
operations:
- name: get-report
method: GET
- type: http
namespace: slack-dei
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves current engineering team headcount from Workday by department.
naftiko: "0.5"
info:
label: "Workday Engineering Headcount Snapshot"
description: "Retrieves current engineering team headcount from Workday by department."
tags:
- hr
- workday
- engineering
capability:
exposes:
- type: mcp
namespace: hr-analytics
port: 8080
tools:
- name: get-eng-headcount
description: "Given a department, return current engineering headcount from Workday. Use for workforce planning."
inputParameters:
- name: department
in: body
type: string
description: "Department name."
call: "workday-eng.get-headcount"
with:
department: "{{department}}"
outputParameters:
- name: headcount
type: object
mapping: "$"
consumes:
- type: http
namespace: workday-eng
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/meta"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: headcount
path: "/headcountReport"
inputParameters:
- name: department
in: query
operations:
- name: get-headcount
method: GET
Retrieves current headcount grouped by team and cost center from Workday for workforce planning and finance reporting.
naftiko: "0.5"
info:
label: "Workday Headcount Snapshot"
description: "Retrieves current headcount grouped by team and cost center from Workday for workforce planning and finance reporting."
tags:
- hr
- reporting
- workday
- headcount
- finance
capability:
exposes:
- type: mcp
namespace: hr-reporting
port: 8080
tools:
- name: get-headcount-snapshot
description: "Returns current headcount grouped by team and cost center from Workday. Use for workforce planning, budget reviews, and executive reporting."
call: "workday.list-workers"
outputParameters:
- name: workers
type: array
mapping: "$.Report_Entry"
items:
- name: employee_id
type: string
mapping: "$.Employee_ID"
- name: full_name
type: string
mapping: "$.Employee_Name"
- name: team
type: string
mapping: "$.Department"
- name: cost_center
type: string
mapping: "$.Cost_Center"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: basic
username: "$secrets.workday_user"
password: "$secrets.workday_password"
resources:
- name: workers
path: "/meta/workers"
operations:
- name: list-workers
method: GET
Tracks intern program metrics from Workday and posts to the talent Slack channel.
naftiko: "0.5"
info:
label: "Workday Intern Program Tracker"
description: "Tracks intern program metrics from Workday and posts to the talent Slack channel."
tags:
- hr
- workday
- slack
- internship
capability:
exposes:
- type: mcp
namespace: intern-ops
port: 8080
tools:
- name: handle-intern-tracking
description: "Given a program year, track metrics and post."
inputParameters:
- name: program_year
in: body
type: string
description: "Program year."
steps:
- name: get-metrics
type: call
call: workday-intern.get-report
with:
year: "{{program_year}}"
- name: post-update
type: call
call: slack-talent.post-message
with:
channel: "talent-programs"
text: "Intern Program ({{program_year}}): Active: {{get-metrics.active}} | Offers: {{get-metrics.offers}} | Conversion: {{get-metrics.conversion}}%"
consumes:
- type: http
namespace: workday-intern
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/meta"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: reports
path: "/internProgram"
inputParameters:
- name: year
in: query
operations:
- name: get-report
method: GET
- type: http
namespace: slack-talent
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a new engineering position is approved in Workday, creates a GitHub team for the role and opens a Jira recruiting task for the talent acquisition team.
naftiko: "0.5"
info:
label: "Workday Job Requisition to GitHub Team"
description: "When a new engineering position is approved in Workday, creates a GitHub team for the role and opens a Jira recruiting task for the talent acquisition team."
tags:
- hr
- recruiting
- workday
- github
- jira
capability:
exposes:
- type: mcp
namespace: talent-acquisition
port: 8080
tools:
- name: create-engineering-requisition
description: "Given a Workday job requisition ID for an engineering role, retrieve requisition details, create a GitHub team for the role, and create a Jira recruiting task."
inputParameters:
- name: requisition_id
in: body
type: string
description: "The Workday position requisition ID for the engineering role."
steps:
- name: get-requisition
type: call
call: "workday.get-job-requisition"
with:
requisition_id: "{{requisition_id}}"
- name: create-github-team
type: call
call: "github.create-team"
with:
org: "facebook"
name: "candidate-{{requisition_id}}"
description: "Interview team for {{get-requisition.job_title}}"
- name: create-jira-task
type: call
call: "jira.create-issue"
with:
project_key: "TA"
issuetype: "Task"
summary: "Recruit: {{get-requisition.job_title}} - {{get-requisition.department}}"
description: "Workday Req: {{requisition_id}} | Team: {{get-requisition.department}} | Level: {{get-requisition.job_level}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: basic
username: "$secrets.workday_user"
password: "$secrets.workday_password"
resources:
- name: job-requisitions
path: "/meta/jobRequisitions/{{requisition_id}}"
inputParameters:
- name: requisition_id
in: path
operations:
- name: get-job-requisition
method: GET
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: teams
path: "/orgs/{{org}}/teams"
inputParameters:
- name: org
in: path
operations:
- name: create-team
method: POST
- type: http
namespace: jira
baseUri: "https://meta.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 a leave request is submitted in Workday, notifies the manager in Slack.
naftiko: "0.5"
info:
label: "Workday Leave Request Notification"
description: "When a leave request is submitted in Workday, notifies the manager in Slack."
tags:
- hr
- workday
- slack
- leave-management
capability:
exposes:
- type: mcp
namespace: leave-ops
port: 8080
tools:
- name: handle-leave-request
description: "Given employee ID and dates, notify manager."
inputParameters:
- name: employee_id
in: body
type: string
description: "Workday employee ID."
- name: leave_dates
in: body
type: string
description: "Leave dates."
steps:
- name: get-worker
type: call
call: workday-leave.get-worker
with:
employee_id: "{{employee_id}}"
- name: notify
type: call
call: slack-leave.post-message
with:
channel: "manager-approvals"
text: "LEAVE: {{get-worker.fullName}} | {{leave_dates}} | Review in Workday."
consumes:
- type: http
namespace: workday-leave
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/meta"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{employee_id}}"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: slack-leave
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a new hire starts in Workday, provisions access and notifies the team in Slack.
naftiko: "0.5"
info:
label: "Workday New Hire Onboarding Notification"
description: "When a new hire starts in Workday, provisions access and notifies the team in Slack."
tags:
- hr
- workday
- slack
- onboarding
capability:
exposes:
- type: mcp
namespace: onboarding-ops
port: 8080
tools:
- name: handle-new-hire
description: "Given a Workday employee ID, retrieve details and notify the team."
inputParameters:
- name: employee_id
in: body
type: string
description: "Workday employee ID."
steps:
- name: get-worker
type: call
call: workday-onboard.get-worker
with:
employee_id: "{{employee_id}}"
- name: notify-team
type: call
call: slack-onboard.post-message
with:
channel: "new-hires"
text: "NEW HIRE: {{get-worker.fullName}} | Role: {{get-worker.jobTitle}} | Please complete onboarding checklist."
consumes:
- type: http
namespace: workday-onboard
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/meta"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{employee_id}}"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: slack-onboard
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Returns the count of open job requisitions in Workday for hiring pipeline tracking.
naftiko: "0.5"
info:
label: "Workday Open Requisitions Count"
description: "Returns the count of open job requisitions in Workday for hiring pipeline tracking."
tags:
- hr
- workday
- recruiting
capability:
exposes:
- type: mcp
namespace: talent-ops
port: 8080
tools:
- name: get-open-reqs
description: "Given a team name, return open requisitions from Workday. Use for hiring dashboards."
inputParameters:
- name: team
in: body
type: string
description: "Team name."
call: "workday-recruit.get-requisitions"
with:
team: "{{team}}"
outputParameters:
- name: requisitions
type: object
mapping: "$"
consumes:
- type: http
namespace: workday-recruit
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/meta"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: requisitions
path: "/jobRequisitions"
inputParameters:
- name: team
in: query
operations:
- name: get-requisitions
method: GET
When an employee termination is processed in Workday, notifies IT security for access revocation in Slack.
naftiko: "0.5"
info:
label: "Workday Termination Access Revocation"
description: "When an employee termination is processed in Workday, notifies IT security for access revocation in Slack."
tags:
- hr
- workday
- slack
- security
capability:
exposes:
- type: mcp
namespace: offboard-ops
port: 8080
tools:
- name: handle-termination
description: "Given a Workday employee ID, notify IT for access revocation."
inputParameters:
- name: employee_id
in: body
type: string
description: "Workday employee ID."
steps:
- name: get-worker
type: call
call: workday-term.get-worker
with:
employee_id: "{{employee_id}}"
- name: notify-security
type: call
call: slack-sec.post-message
with:
channel: "it-security"
text: "ACCESS REVOCATION: {{get-worker.fullName}} ({{employee_id}}) | Revoke all access immediately."
consumes:
- type: http
namespace: workday-term
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/meta"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{employee_id}}"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: slack-sec
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST