Alphabet Capabilities
Naftiko 0.5 capability definitions for Alphabet - 100 capabilities showing integration workflows and service orchestrations.
When a Google Ads campaign exceeds its daily budget threshold, pauses the campaign, sends an alert to the marketing Slack channel via Google Chat, and logs the event to BigQuery.
naftiko: "0.5"
info:
label: "Ad Campaign Budget Adjustment Pipeline"
description: "When a Google Ads campaign exceeds its daily budget threshold, pauses the campaign, sends an alert to the marketing Slack channel via Google Chat, and logs the event to BigQuery."
tags:
- advertising
- marketing
- google-ads
- bigquery
- alerting
capability:
exposes:
- type: mcp
namespace: ads-budget-control
port: 8080
tools:
- name: enforce-budget-limit
description: "Check campaign spend against threshold, pause if exceeded, alert team, and log to BigQuery."
inputParameters:
- name: customer_id
in: body
type: string
description: "The Google Ads customer ID."
- name: campaign_id
in: body
type: string
description: "The campaign identifier."
- name: budget_threshold
in: body
type: number
description: "The daily budget ceiling in micros."
- name: chat_space
in: body
type: string
description: "The Google Chat space ID for alerts."
steps:
- name: get-spend
type: call
call: "googleads.query-campaign"
with:
customer_id: "{{customer_id}}"
campaign_id: "{{campaign_id}}"
- name: pause-campaign
type: call
call: "googleads.update-campaign-status"
with:
customer_id: "{{customer_id}}"
campaign_id: "{{campaign_id}}"
status: "PAUSED"
- name: alert-team
type: call
call: "googlechat.send-message"
with:
space: "{{chat_space}}"
text: "Budget alert: Campaign {{campaign_id}} paused. Spend {{get-spend.cost_micros}} exceeded threshold {{budget_threshold}}."
- name: log-event
type: call
call: "bigquery.insert-rows"
with:
project_id: "alphabet-ads-ops"
dataset_id: "budget_events"
table_id: "campaign_pauses"
rows: "[{\"campaign_id\": \"{{campaign_id}}\", \"spend\": \"{{get-spend.cost_micros}}\", \"threshold\": \"{{budget_threshold}}\"}]"
consumes:
- type: http
namespace: googleads
baseUri: "https://googleads.googleapis.com/v16"
authentication:
type: bearer
token: "$secrets.google_ads_token"
inputParameters:
- name: developer-token
in: header
value: "$secrets.google_ads_developer_token"
resources:
- name: campaign-query
path: "/customers/{{customer_id}}/googleAds:searchStream"
inputParameters:
- name: customer_id
in: path
operations:
- name: query-campaign
method: POST
- name: campaign-mutate
path: "/customers/{{customer_id}}/campaigns:mutate"
inputParameters:
- name: customer_id
in: path
operations:
- name: update-campaign-status
method: POST
- type: http
namespace: googlechat
baseUri: "https://chat.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.google_chat_token"
resources:
- name: messages
path: "/spaces/{{space}}/messages"
inputParameters:
- name: space
in: path
operations:
- name: send-message
method: POST
- type: http
namespace: bigquery
baseUri: "https://bigquery.googleapis.com/bigquery/v2"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: tabledata
path: "/projects/{{project_id}}/datasets/{{dataset_id}}/tables/{{table_id}}/insertAll"
inputParameters:
- name: project_id
in: path
- name: dataset_id
in: path
- name: table_id
in: path
operations:
- name: insert-rows
method: POST
Creates a Google Ads conversion action, generates the tracking tag, deploys it via Google Tag Manager, and confirms deployment by checking the GTM container version.
naftiko: "0.5"
info:
label: "Ads Conversion Tracking Setup"
description: "Creates a Google Ads conversion action, generates the tracking tag, deploys it via Google Tag Manager, and confirms deployment by checking the GTM container version."
tags:
- advertising
- marketing
- google-ads
- google-tag-manager
capability:
exposes:
- type: mcp
namespace: ads-conversion-setup
port: 8080
tools:
- name: setup-conversion-tracking
description: "Create a conversion action in Google Ads, deploy tracking tag via GTM, and verify."
inputParameters:
- name: customer_id
in: body
type: string
description: "The Google Ads customer ID."
- name: conversion_name
in: body
type: string
description: "The name for the conversion action."
- name: conversion_category
in: body
type: string
description: "The conversion category (e.g. PURCHASE, LEAD)."
- name: gtm_account_id
in: body
type: string
description: "The GTM account ID."
- name: gtm_container_id
in: body
type: string
description: "The GTM container ID."
steps:
- name: create-conversion
type: call
call: "googleads.create-conversion-action"
with:
customer_id: "{{customer_id}}"
name: "{{conversion_name}}"
category: "{{conversion_category}}"
- name: create-gtm-tag
type: call
call: "gtm.create-tag"
with:
account_id: "{{gtm_account_id}}"
container_id: "{{gtm_container_id}}"
tag_name: "{{conversion_name}}_tracking"
conversion_id: "{{create-conversion.results[0].conversionAction.id}}"
- name: publish-container
type: call
call: "gtm.publish-version"
with:
account_id: "{{gtm_account_id}}"
container_id: "{{gtm_container_id}}"
- name: verify-deployment
type: call
call: "gtm.get-latest-version"
with:
account_id: "{{gtm_account_id}}"
container_id: "{{gtm_container_id}}"
consumes:
- type: http
namespace: googleads
baseUri: "https://googleads.googleapis.com/v16"
authentication:
type: bearer
token: "$secrets.google_ads_token"
inputParameters:
- name: developer-token
in: header
value: "$secrets.google_ads_developer_token"
resources:
- name: conversion-actions
path: "/customers/{{customer_id}}/conversionActions:mutate"
inputParameters:
- name: customer_id
in: path
operations:
- name: create-conversion-action
method: POST
- type: http
namespace: gtm
baseUri: "https://tagmanager.googleapis.com/tagmanager/v2"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: tags
path: "/accounts/{{account_id}}/containers/{{container_id}}/workspaces/default/tags"
inputParameters:
- name: account_id
in: path
- name: container_id
in: path
operations:
- name: create-tag
method: POST
- name: versions
path: "/accounts/{{account_id}}/containers/{{container_id}}/versions"
inputParameters:
- name: account_id
in: path
- name: container_id
in: path
operations:
- name: publish-version
method: POST
- name: get-latest-version
method: GET
Searches application logs for matching patterns. Used by Alphabet teams.
naftiko: "0.5"
info:
label: "Alphabet Log Search Query"
description: "Searches application logs for matching patterns. Used by Alphabet teams."
tags:
- cloud
- kubernetes
capability:
exposes:
- type: mcp
namespace: kubernetes
port: 8080
tools:
- name: get-log_search_query
description: "Searches application logs for matching patterns. Used by Alphabet teams."
inputParameters:
- name: search_query
in: body
type: string
description: "The search_query to look up."
call: "kubernetes.get-search_query"
with:
search_query: "{{search_query}}"
consumes:
- type: http
namespace: k8s
baseUri: "https://alphabet-k8s.com/api/v1"
authentication:
type: bearer
token: "$secrets.k8s_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: alphabet_log_search_query
method: GET
Queries metric values from a monitoring dashboard. Used by Alphabet teams.
naftiko: "0.5"
info:
label: "Alphabet Metric Dashboard Query"
description: "Queries metric values from a monitoring dashboard. Used by Alphabet teams."
tags:
- cloud
- bigquery
capability:
exposes:
- type: mcp
namespace: bigquery
port: 8080
tools:
- name: get-metric_dashboard_query
description: "Queries metric values from a monitoring dashboard. Used by Alphabet teams."
inputParameters:
- name: metric_name
in: body
type: string
description: "The metric_name to look up."
call: "bigquery.get-metric_name"
with:
metric_name: "{{metric_name}}"
consumes:
- type: http
namespace: bigquery
baseUri: "https://bigquery.googleapis.com/bigquery/v2"
authentication:
type: bearer
token: "$secrets.gcp_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: alphabet_metric_dashboard_quer
method: GET
Checks the current status of a project. Used by Alphabet teams.
naftiko: "0.5"
info:
label: "Alphabet Project Status Check"
description: "Checks the current status of a project. Used by Alphabet teams."
tags:
- cloud
- jira
capability:
exposes:
- type: mcp
namespace: jira
port: 8080
tools:
- name: get-project_status_check
description: "Checks the current status of a project. Used by Alphabet teams."
inputParameters:
- name: project_key
in: body
type: string
description: "The project_key to look up."
call: "jira.get-project_key"
with:
project_key: "{{project_key}}"
consumes:
- type: http
namespace: jira
baseUri: "https://alphabet.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: alphabet_project_status_check
method: GET
Checks the health status of a monitored service. Used by Alphabet teams.
naftiko: "0.5"
info:
label: "Alphabet Service Health Check"
description: "Checks the health status of a monitored service. Used by Alphabet teams."
tags:
- cloud
- gcp
capability:
exposes:
- type: mcp
namespace: gcp
port: 8080
tools:
- name: get-service_health_check
description: "Checks the health status of a monitored service. Used by Alphabet teams."
inputParameters:
- name: health_target
in: body
type: string
description: "The health_target to look up."
call: "gcp.get-health_target"
with:
health_target: "{{health_target}}"
consumes:
- type: http
namespace: gcp
baseUri: "https://compute.googleapis.com/compute/v1/projects/alphabet"
authentication:
type: bearer
token: "$secrets.gcp_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: alphabet_service_health_check
method: GET
Retrieves the details of a support ticket. Used by Alphabet teams.
naftiko: "0.5"
info:
label: "Alphabet Ticket Details Lookup"
description: "Retrieves the details of a support ticket. Used by Alphabet teams."
tags:
- cloud
- grafana
capability:
exposes:
- type: mcp
namespace: grafana
port: 8080
tools:
- name: get-ticket_details_lookup
description: "Retrieves the details of a support ticket. Used by Alphabet teams."
inputParameters:
- name: ticket_id
in: body
type: string
description: "The ticket_id to look up."
call: "grafana.get-ticket_id"
with:
ticket_id: "{{ticket_id}}"
consumes:
- type: http
namespace: grafana
baseUri: "https://alphabet-grafana.com/api"
authentication:
type: bearer
token: "$secrets.grafana_api_key"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: alphabet_ticket_details_lookup
method: GET
Retrieves user account details from the directory. Used by Alphabet teams.
naftiko: "0.5"
info:
label: "Alphabet User Account Lookup"
description: "Retrieves user account details from the directory. Used by Alphabet teams."
tags:
- cloud
- salesforce
capability:
exposes:
- type: mcp
namespace: salesforce
port: 8080
tools:
- name: get-user_account_lookup
description: "Retrieves user account details from the directory. Used by Alphabet teams."
inputParameters:
- name: user_id
in: body
type: string
description: "The user_id to look up."
call: "salesforce.get-user_id"
with:
user_id: "{{user_id}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://alphabet.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: alphabet_user_account_lookup
method: GET
Uploads an APK to Google Play Developer API, promotes it to the internal test track, triggers Firebase Test Lab tests, and notifies the team on Google Chat.
naftiko: "0.5"
info:
label: "Android App Release Pipeline"
description: "Uploads an APK to Google Play Developer API, promotes it to the internal test track, triggers Firebase Test Lab tests, and notifies the team on Google Chat."
tags:
- mobile
- devops
- google-android
- firebase
- ci-cd
capability:
exposes:
- type: mcp
namespace: android-release
port: 8080
tools:
- name: release-android-app
description: "Upload APK, promote to test track, run Firebase tests, and notify team."
inputParameters:
- name: package_name
in: body
type: string
description: "The Android app package name."
- name: apk_path
in: body
type: string
description: "GCS path to the APK file."
- name: track
in: body
type: string
description: "The release track (internal, alpha, beta, production)."
- name: project_id
in: body
type: string
description: "Firebase project ID for Test Lab."
- name: chat_space
in: body
type: string
description: "Google Chat space for release notifications."
steps:
- name: upload-apk
type: call
call: "playdev.upload-apk"
with:
package_name: "{{package_name}}"
apk_path: "{{apk_path}}"
- name: promote-track
type: call
call: "playdev.update-track"
with:
package_name: "{{package_name}}"
track: "{{track}}"
version_code: "{{upload-apk.versionCode}}"
- name: run-tests
type: call
call: "testlab.run-test"
with:
project_id: "{{project_id}}"
apk_gcs_path: "{{apk_path}}"
- name: notify-team
type: call
call: "googlechat.send-message"
with:
space: "{{chat_space}}"
text: "Android release: {{package_name}} v{{upload-apk.versionCode}} promoted to {{track}}. Test Lab execution: {{run-tests.testExecutionId}}."
consumes:
- type: http
namespace: playdev
baseUri: "https://androidpublisher.googleapis.com/androidpublisher/v3"
authentication:
type: bearer
token: "$secrets.google_play_token"
resources:
- name: apks
path: "/applications/{{package_name}}/edits/upload"
inputParameters:
- name: package_name
in: path
operations:
- name: upload-apk
method: POST
- name: tracks
path: "/applications/{{package_name}}/edits/tracks/{{track}}"
inputParameters:
- name: package_name
in: path
- name: track
in: path
operations:
- name: update-track
method: PUT
- type: http
namespace: testlab
baseUri: "https://testing.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: test-executions
path: "/projects/{{project_id}}/testMatrices"
inputParameters:
- name: project_id
in: path
operations:
- name: run-test
method: POST
- type: http
namespace: googlechat
baseUri: "https://chat.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.google_chat_token"
resources:
- name: messages
path: "/spaces/{{space}}/messages"
inputParameters:
- name: space
in: path
operations:
- name: send-message
method: POST
Identifies deprecated API consumers, sends migration notices, tracks adoption, and reports progress.
naftiko: "0.5"
info:
label: "API Deprecation Notice Pipeline"
description: "Identifies deprecated API consumers, sends migration notices, tracks adoption, and reports progress."
tags:
- engineering
- datadog
- jira
- slack
capability:
exposes:
- type: mcp
namespace: engineering
port: 8080
tools:
- name: api_deprecation_notice_pipeline
description: "Orchestrate api deprecation notice pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-datadog
type: call
call: "datadog.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-jira
type: call
call: "jira.process-resource"
with:
data: "{{get-datadog.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "API Deprecation Notice Pipeline step 3 complete."
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
header: "DD-API-KEY"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: datadog-op
method: POST
- type: http
namespace: jira
baseUri: "https://alphabet.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: jira-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Profiles API latency, identifies bottlenecks, applies caching rules, and reports improvements.
naftiko: "0.5"
info:
label: "API Performance Optimization Pipeline"
description: "Profiles API latency, identifies bottlenecks, applies caching rules, and reports improvements."
tags:
- performance
- datadog
- grafana
- slack
capability:
exposes:
- type: mcp
namespace: performance
port: 8080
tools:
- name: api_performance_optimization_pipeline
description: "Orchestrate api performance optimization pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-datadog
type: call
call: "datadog.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-grafana
type: call
call: "grafana.process-resource"
with:
data: "{{get-datadog.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "API Performance Optimization Pipeline step 3 complete."
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
header: "DD-API-KEY"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: datadog-op
method: POST
- type: http
namespace: grafana
baseUri: "https://alphabet-grafana.com/api"
authentication:
type: bearer
token: "$secrets.grafana_api_key"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: grafana-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Extracts API traffic analytics from Apigee, transforms the data, loads into BigQuery, and refreshes a Looker dashboard.
naftiko: "0.5"
info:
label: "Apigee API Analytics to Looker Pipeline"
description: "Extracts API traffic analytics from Apigee, transforms the data, loads into BigQuery, and refreshes a Looker dashboard."
tags:
- analytics
- apigee
- bigquery
- looker
capability:
exposes:
- type: mcp
namespace: apigee-analytics
port: 8080
tools:
- name: run-apigee-analytics
description: "Extract Apigee analytics and load into BigQuery with Looker refresh."
inputParameters:
- name: org
in: body
type: string
description: "Apigee organization name."
- name: env
in: body
type: string
description: "Apigee environment."
- name: project_id
in: body
type: string
description: "GCP project ID."
- name: dataset
in: body
type: string
description: "BigQuery dataset."
- name: table
in: body
type: string
description: "BigQuery table."
steps:
- name: get-api-stats
type: call
call: "apigee.get-stats"
with:
org: "{{org}}"
env: "{{env}}"
- name: load-to-bq
type: call
call: "bigquery.insert-rows"
with:
project_id: "{{project_id}}"
dataset: "{{dataset}}"
table: "{{table}}"
- name: refresh-looker
type: call
call: "looker.run-look"
with:
look_id: "{{look_id}}"
consumes:
- type: http
namespace: apigee
baseUri: "https://apigee.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: stats
path: "/organizations/{{org}}/environments/{{env}}/stats/apiproxy"
inputParameters:
- name: org
in: path
- name: env
in: path
operations:
- name: get-stats
method: GET
- type: http
namespace: bigquery
baseUri: "https://bigquery.googleapis.com/bigquery/v2"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: tabledata
path: "/projects/{{project_id}}/datasets/{{dataset}}/tables/{{table}}/insertAll"
inputParameters:
- name: project_id
in: path
- name: dataset
in: path
- name: table
in: path
operations:
- name: insert-rows
method: POST
- type: http
namespace: looker
baseUri: "https://looker.com/api/4.0"
authentication:
type: bearer
token: "$secrets.looker_api_token"
resources:
- name: looks
path: "/looks/{{look_id}}/run/json"
inputParameters:
- name: look_id
in: path
operations:
- name: run-look
method: GET
Retrieves the latest deployed revision of an Apigee API proxy including deployment status and environment. Used by API platform teams for governance.
naftiko: "0.5"
info:
label: "Apigee API Proxy Revision"
description: "Retrieves the latest deployed revision of an Apigee API proxy including deployment status and environment. Used by API platform teams for governance."
tags:
- api-management
- apigee
- google-cloud-platform
capability:
exposes:
- type: mcp
namespace: apigee-governance
port: 8080
tools:
- name: get-proxy-deployment
description: "Look up Apigee proxy deployment details by org, proxy name, and environment."
inputParameters:
- name: org_name
in: body
type: string
description: "The Apigee organization name."
- name: api_proxy
in: body
type: string
description: "The API proxy name."
- name: environment
in: body
type: string
description: "The deployment environment (e.g. prod, test)."
call: "apigee.get-deployment"
with:
org_name: "{{org_name}}"
api_proxy: "{{api_proxy}}"
environment: "{{environment}}"
outputParameters:
- name: revision
type: string
mapping: "$.deployments[0].revision"
- name: deploy_state
type: string
mapping: "$.deployments[0].state"
consumes:
- type: http
namespace: apigee
baseUri: "https://apigee.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: deployments
path: "/organizations/{{org_name}}/environments/{{environment}}/apis/{{api_proxy}}/deployments"
inputParameters:
- name: org_name
in: path
- name: environment
in: path
- name: api_proxy
in: path
operations:
- name: get-deployment
method: GET
Lists container images stored in a Google Artifact Registry repository.
naftiko: "0.5"
info:
label: "Artifact Registry Image List"
description: "Lists container images stored in a Google Artifact Registry repository."
tags:
- containers
- google-cloud-platform
capability:
exposes:
- type: mcp
namespace: artifactregistry
port: 8080
tools:
- name: list-images
description: "List Docker images in an Artifact Registry repository."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: region
in: body
type: string
description: "The Artifact Registry region."
- name: repo_name
in: body
type: string
description: "The repository name."
call: "artifactregistry.list-images"
with:
project_id: "{{project_id}}"
region: "{{region}}"
repo_name: "{{repo_name}}"
consumes:
- type: http
namespace: artifactregistry
baseUri: "https://artifactregistry.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: images
path: "/projects/{{project_id}}/locations/{{region}}/repositories/{{repo_name}}/dockerImages"
inputParameters:
- name: project_id
in: path
- name: region
in: path
- name: repo_name
in: path
operations:
- name: list-images
method: GET
Runs data quality validation queries on BigQuery tables, logs results to a Looker dashboard, and sends alerts for failures via Gmail.
naftiko: "0.5"
info:
label: "BigQuery Data Quality Check Pipeline"
description: "Runs data quality validation queries on BigQuery tables, logs results to a Looker dashboard, and sends alerts for failures via Gmail."
tags:
- data
- bigquery
- looker
- gmail
capability:
exposes:
- type: mcp
namespace: bq-quality
port: 8080
tools:
- name: run-data-quality-check
description: "Validate data quality in BigQuery and report results."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: dataset
in: body
type: string
description: "The BigQuery dataset."
- name: table
in: body
type: string
description: "The BigQuery table."
- name: looker_instance
in: body
type: string
description: "Looker instance name."
- name: dashboard_id
in: body
type: string
description: "Looker dashboard ID."
- name: alert_email
in: body
type: string
description: "Email for failure alerts."
steps:
- name: run-quality-check
type: call
call: "bigquery.insert-job"
with:
project_id: "{{project_id}}"
query: "SELECT COUNT(*) as nulls FROM {{dataset}}.{{table}} WHERE key IS NULL"
- name: get-results
type: call
call: "bigquery.get-job"
with:
project_id: "{{project_id}}"
job_id: "{{run-quality-check.jobReference.jobId}}"
- name: update-dashboard
type: call
call: "looker.get-dashboard"
with:
dashboard_id: "{{dashboard_id}}"
- name: send-alert
type: call
call: "gmail.send-message"
with:
to: "{{alert_email}}"
subject: "Data quality alert for {{dataset}}.{{table}}"
body: "Nulls found: {{get-results.statistics.query.totalRows}}"
consumes:
- type: http
namespace: bigquery
baseUri: "https://bigquery.googleapis.com/bigquery/v2"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: jobs
path: "/projects/{{project_id}}/jobs"
inputParameters:
- name: project_id
in: path
operations:
- name: insert-job
method: POST
- name: get-job
method: GET
- type: http
namespace: looker
baseUri: "https://{{looker_instance}}.looker.com/api/4.0"
authentication:
type: bearer
token: "$secrets.looker_api_token"
resources:
- name: dashboards
path: "/dashboards/{{dashboard_id}}"
inputParameters:
- name: dashboard_id
in: path
operations:
- name: get-dashboard
method: GET
- type: http
namespace: gmail
baseUri: "https://gmail.googleapis.com/gmail/v1"
authentication:
type: bearer
token: "$secrets.gmail_token"
resources:
- name: messages
path: "/users/me/messages/send"
operations:
- name: send-message
method: POST
Retrieves metadata for a BigQuery dataset including table count, last modified timestamp, and access controls. Used by data engineers to audit dataset health.
naftiko: "0.5"
info:
label: "BigQuery Dataset Discovery"
description: "Retrieves metadata for a BigQuery dataset including table count, last modified timestamp, and access controls. Used by data engineers to audit dataset health."
tags:
- data
- analytics
- bigquery
- google-cloud-platform
capability:
exposes:
- type: mcp
namespace: bigquery-discovery
port: 8080
tools:
- name: get-dataset-info
description: "Look up a BigQuery dataset by project and dataset ID. Returns table count, size, last modified date, and ACLs."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID containing the dataset."
- name: dataset_id
in: body
type: string
description: "The BigQuery dataset identifier."
call: "bigquery.get-dataset"
with:
project_id: "{{project_id}}"
dataset_id: "{{dataset_id}}"
outputParameters:
- name: table_count
type: number
mapping: "$.tables.totalItems"
- name: last_modified
type: string
mapping: "$.lastModifiedTime"
- name: location
type: string
mapping: "$.location"
consumes:
- type: http
namespace: bigquery
baseUri: "https://bigquery.googleapis.com/bigquery/v2"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: datasets
path: "/projects/{{project_id}}/datasets/{{dataset_id}}"
inputParameters:
- name: project_id
in: path
- name: dataset_id
in: path
operations:
- name: get-dataset
method: GET
Audits a Cloud Storage bucket for compliance: checks metadata, verifies IAM policies, scans for public access, and logs findings to BigQuery with a Google Chat alert.
naftiko: "0.5"
info:
label: "Bucket Compliance Check Pipeline"
description: "Audits a Cloud Storage bucket for compliance: checks metadata, verifies IAM policies, scans for public access, and logs findings to BigQuery with a Google Chat alert."
tags:
- storage
- security
- compliance
- gcp-cloud-storage
- bigquery
- google-cloud-platform
capability:
exposes:
- type: mcp
namespace: storage-compliance
port: 8080
tools:
- name: audit-bucket-compliance
description: "Check bucket metadata, IAM policy, log findings to BigQuery, and alert on non-compliance."
inputParameters:
- name: bucket_name
in: body
type: string
description: "The Cloud Storage bucket name."
- name: project_id
in: body
type: string
description: "The GCP project ID for logging."
- name: chat_space
in: body
type: string
description: "Google Chat space for compliance alerts."
steps:
- name: get-bucket-info
type: call
call: "cloudstorage.get-bucket"
with:
bucket_name: "{{bucket_name}}"
- name: get-bucket-iam
type: call
call: "cloudstorage.get-bucket-iam"
with:
bucket_name: "{{bucket_name}}"
- name: log-findings
type: call
call: "bigquery.insert-rows"
with:
project_id: "{{project_id}}"
dataset_id: "compliance_audits"
table_id: "bucket_findings"
rows: "[{\"bucket\": \"{{bucket_name}}\", \"storage_class\": \"{{get-bucket-info.storageClass}}\", \"versioning\": \"{{get-bucket-info.versioning.enabled}}\", \"iam_bindings\": \"{{get-bucket-iam.bindings.length}}\"}]"
- name: alert-team
type: call
call: "googlechat.send-message"
with:
space: "{{chat_space}}"
text: "Bucket audit for {{bucket_name}}: class={{get-bucket-info.storageClass}}, versioning={{get-bucket-info.versioning.enabled}}, IAM bindings={{get-bucket-iam.bindings.length}}. Full report in compliance_audits.bucket_findings."
consumes:
- type: http
namespace: cloudstorage
baseUri: "https://storage.googleapis.com/storage/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: buckets
path: "/b/{{bucket_name}}"
inputParameters:
- name: bucket_name
in: path
operations:
- name: get-bucket
method: GET
- name: bucket-iam
path: "/b/{{bucket_name}}/iam"
inputParameters:
- name: bucket_name
in: path
operations:
- name: get-bucket-iam
method: GET
- type: http
namespace: bigquery
baseUri: "https://bigquery.googleapis.com/bigquery/v2"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: tabledata
path: "/projects/{{project_id}}/datasets/{{dataset_id}}/tables/{{table_id}}/insertAll"
inputParameters:
- name: project_id
in: path
- name: dataset_id
in: path
- name: table_id
in: path
operations:
- name: insert-rows
method: POST
- type: http
namespace: googlechat
baseUri: "https://chat.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.google_chat_token"
resources:
- name: messages
path: "/spaces/{{space}}/messages"
inputParameters:
- name: space
in: path
operations:
- name: send-message
method: POST
Generates a Campaign Manager 360 report, exports results to a Google Sheet, cross-references with Google Ads metrics, and emails a consolidated performance summary.
naftiko: "0.5"
info:
label: "Campaign Performance Review Pipeline"
description: "Generates a Campaign Manager 360 report, exports results to a Google Sheet, cross-references with Google Ads metrics, and emails a consolidated performance summary."
tags:
- advertising
- marketing
- google-campaign-manager
- google-sheets
- google-ads
- gmail
capability:
exposes:
- type: mcp
namespace: campaign-review
port: 8080
tools:
- name: generate-performance-review
description: "Run CM360 report, export to Sheets, merge with Ads data, and email summary."
inputParameters:
- name: profile_id
in: body
type: string
description: "The Campaign Manager user profile ID."
- name: advertiser_id
in: body
type: string
description: "The advertiser ID."
- name: customer_id
in: body
type: string
description: "The Google Ads customer ID."
- name: spreadsheet_id
in: body
type: string
description: "The Google Sheets spreadsheet ID for the report."
- name: report_email
in: body
type: string
description: "Email for the performance summary."
steps:
- name: run-cm360-report
type: call
call: "cm360.create-report"
with:
profile_id: "{{profile_id}}"
advertiser_id: "{{advertiser_id}}"
- name: get-ads-metrics
type: call
call: "googleads.query-campaign"
with:
customer_id: "{{customer_id}}"
- name: update-sheet
type: call
call: "sheets.update-values"
with:
spreadsheet_id: "{{spreadsheet_id}}"
range: "PerformanceReview!A1"
values: "{{run-cm360-report.rows}}"
- name: email-summary
type: call
call: "gmail.send-message"
with:
to: "{{report_email}}"
subject: "Campaign Performance Review"
body: "CM360 + Google Ads consolidated report ready. View: https://docs.google.com/spreadsheets/d/{{spreadsheet_id}}."
consumes:
- type: http
namespace: cm360
baseUri: "https://dfareporting.googleapis.com/dfareporting/v4"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: reports
path: "/userprofiles/{{profile_id}}/reports"
inputParameters:
- name: profile_id
in: path
operations:
- name: create-report
method: POST
- type: http
namespace: googleads
baseUri: "https://googleads.googleapis.com/v16"
authentication:
type: bearer
token: "$secrets.google_ads_token"
inputParameters:
- name: developer-token
in: header
value: "$secrets.google_ads_developer_token"
resources:
- name: campaigns
path: "/customers/{{customer_id}}/googleAds:searchStream"
inputParameters:
- name: customer_id
in: path
operations:
- name: query-campaign
method: POST
- type: http
namespace: sheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: values
path: "/spreadsheets/{{spreadsheet_id}}/values/{{range}}"
inputParameters:
- name: spreadsheet_id
in: path
- name: range
in: path
operations:
- name: update-values
method: PUT
- type: http
namespace: gmail
baseUri: "https://gmail.googleapis.com/gmail/v1"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: messages
path: "/users/me/messages/send"
operations:
- name: send-message
method: POST
Validates change requests, routes for approval, schedules implementation, and notifies stakeholders.
naftiko: "0.5"
info:
label: "Change Management Approval Pipeline"
description: "Validates change requests, routes for approval, schedules implementation, and notifies stakeholders."
tags:
- itsm
- servicenow
- jira
- slack
capability:
exposes:
- type: mcp
namespace: itsm
port: 8080
tools:
- name: change_management_approval_pipeline
description: "Orchestrate change management approval pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-servicenow
type: call
call: "servicenow.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-jira
type: call
call: "jira.process-resource"
with:
data: "{{get-servicenow.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Change Management Approval Pipeline step 3 complete."
consumes:
- type: http
namespace: servicenow
baseUri: "https://alphabet.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: jira
baseUri: "https://alphabet.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: jira-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Retrieves the details of a Google Cloud Armor security policy including rules and targets.
naftiko: "0.5"
info:
label: "Cloud Armor Security Policy Lookup"
description: "Retrieves the details of a Google Cloud Armor security policy including rules and targets."
tags:
- security
- google-cloud-platform
capability:
exposes:
- type: mcp
namespace: cloudarmor
port: 8080
tools:
- name: get-policy
description: "Retrieve a Cloud Armor security policy by name."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: policy_name
in: body
type: string
description: "The security policy name."
call: "cloudarmor.get-policy"
with:
project_id: "{{project_id}}"
policy_name: "{{policy_name}}"
consumes:
- type: http
namespace: cloudarmor
baseUri: "https://compute.googleapis.com/compute/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: policies
path: "/projects/{{project_id}}/global/securityPolicies/{{policy_name}}"
inputParameters:
- name: project_id
in: path
- name: policy_name
in: path
operations:
- name: get-policy
method: GET
Retrieves the status and configuration of a Cloud Build trigger.
naftiko: "0.5"
info:
label: "Cloud Build Trigger Status"
description: "Retrieves the status and configuration of a Cloud Build trigger."
tags:
- ci
- google-cloud-platform
capability:
exposes:
- type: mcp
namespace: cloudbuild
port: 8080
tools:
- name: get-trigger
description: "Get the configuration and status of a Cloud Build trigger."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: region
in: body
type: string
description: "The Cloud Build region."
- name: trigger_id
in: body
type: string
description: "The build trigger ID."
call: "cloudbuild.get-trigger"
with:
project_id: "{{project_id}}"
region: "{{region}}"
trigger_id: "{{trigger_id}}"
consumes:
- type: http
namespace: cloudbuild
baseUri: "https://cloudbuild.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: triggers
path: "/projects/{{project_id}}/locations/{{region}}/triggers/{{trigger_id}}"
inputParameters:
- name: project_id
in: path
- name: region
in: path
- name: trigger_id
in: path
operations:
- name: get-trigger
method: GET
Detects failed Airflow DAGs in Cloud Composer, restarts the tasks, logs to Cloud Logging, and notifies the data engineering team.
naftiko: "0.5"
info:
label: "Cloud Composer DAG Failure Recovery Pipeline"
description: "Detects failed Airflow DAGs in Cloud Composer, restarts the tasks, logs to Cloud Logging, and notifies the data engineering team."
tags:
- data
- google-cloud-platform
- apache-airflow
capability:
exposes:
- type: mcp
namespace: composer-recovery
port: 8080
tools:
- name: run-dag-recovery
description: "Detect and recover failed DAGs in Cloud Composer."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: region
in: body
type: string
description: "The Composer region."
- name: environment
in: body
type: string
description: "Cloud Composer environment name."
- name: dag_id
in: body
type: string
description: "The Airflow DAG ID."
- name: airflow_uri
in: body
type: string
description: "The Airflow webserver URI."
steps:
- name: check-environment
type: call
call: "composer.get-environment"
with:
project_id: "{{project_id}}"
region: "{{region}}"
environment: "{{environment}}"
- name: list-failed-runs
type: call
call: "airflow.list-runs"
with:
dag_id: "{{dag_id}}"
- name: restart-dag
type: call
call: "airflow.trigger-run"
with:
dag_id: "{{dag_id}}"
- name: log-recovery
type: call
call: "cloudlogging.write-entry"
with:
logName: "projects/{{project_id}}/logs/dag-recovery"
entry: "Restarted DAG {{dag_id}} after failure."
consumes:
- type: http
namespace: composer
baseUri: "https://composer.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: environments
path: "/projects/{{project_id}}/locations/{{region}}/environments/{{environment}}"
inputParameters:
- name: project_id
in: path
- name: region
in: path
- name: environment
in: path
operations:
- name: get-environment
method: GET
- type: http
namespace: airflow
baseUri: "https://{{airflow_uri}}"
authentication:
type: bearer
token: "$secrets.airflow_token"
resources:
- name: dags
path: "/api/v1/dags/{{dag_id}}/dagRuns"
inputParameters:
- name: dag_id
in: path
operations:
- name: list-runs
method: GET
- name: trigger-run
method: POST
- type: http
namespace: cloudlogging
baseUri: "https://logging.googleapis.com/v2"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: entries
path: "/entries:write"
operations:
- name: write-entry
method: POST
Checks the state and progress of a Google Cloud Dataflow job including current stage, elapsed time, and watermark. Used by data engineers for pipeline monitoring.
naftiko: "0.5"
info:
label: "Cloud Dataflow Job Status"
description: "Checks the state and progress of a Google Cloud Dataflow job including current stage, elapsed time, and watermark. Used by data engineers for pipeline monitoring."
tags:
- data
- pipelines
- google-cloud-dataflow
- google-cloud-platform
capability:
exposes:
- type: mcp
namespace: dataflow-ops
port: 8080
tools:
- name: get-job-status
description: "Retrieve Dataflow job status by project, region, and job ID."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: region
in: body
type: string
description: "The Dataflow region."
- name: job_id
in: body
type: string
description: "The Dataflow job identifier."
call: "dataflow.get-job"
with:
project_id: "{{project_id}}"
region: "{{region}}"
job_id: "{{job_id}}"
outputParameters:
- name: current_state
type: string
mapping: "$.currentState"
- name: create_time
type: string
mapping: "$.createTime"
- name: job_name
type: string
mapping: "$.name"
consumes:
- type: http
namespace: dataflow
baseUri: "https://dataflow.googleapis.com/v1b3"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: jobs
path: "/projects/{{project_id}}/locations/{{region}}/jobs/{{job_id}}"
inputParameters:
- name: project_id
in: path
- name: region
in: path
- name: job_id
in: path
operations:
- name: get-job
method: GET
Lists DNS records for a managed zone in Google Cloud DNS.
naftiko: "0.5"
info:
label: "Cloud DNS Zone Record Lookup"
description: "Lists DNS records for a managed zone in Google Cloud DNS."
tags:
- networking
- google-cloud-platform
capability:
exposes:
- type: mcp
namespace: clouddns
port: 8080
tools:
- name: list-records
description: "List DNS record sets for a managed zone."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: zone_name
in: body
type: string
description: "The managed zone name."
call: "clouddns.list-records"
with:
project_id: "{{project_id}}"
zone_name: "{{zone_name}}"
consumes:
- type: http
namespace: clouddns
baseUri: "https://dns.googleapis.com/dns/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: records
path: "/projects/{{project_id}}/managedZones/{{zone_name}}/rrsets"
inputParameters:
- name: project_id
in: path
- name: zone_name
in: path
operations:
- name: list-records
method: GET
Deploys a Cloud Function from a GCS archive, sets IAM invoker permissions, and verifies the function is active by calling its health endpoint.
naftiko: "0.5"
info:
label: "Cloud Function Deployment Pipeline"
description: "Deploys a Cloud Function from a GCS archive, sets IAM invoker permissions, and verifies the function is active by calling its health endpoint."
tags:
- serverless
- devops
- cloud-functions
- google-cloud-platform
capability:
exposes:
- type: mcp
namespace: cloudfunc-deploy
port: 8080
tools:
- name: deploy-cloud-function
description: "Deploy a Cloud Function, set IAM policy, and verify health."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: region
in: body
type: string
description: "The function region."
- name: function_name
in: body
type: string
description: "The Cloud Function name."
- name: source_archive_url
in: body
type: string
description: "GCS URI of the function source archive."
- name: entry_point
in: body
type: string
description: "The function entry point."
- name: runtime
in: body
type: string
description: "The runtime (e.g. python311, nodejs20)."
steps:
- name: create-function
type: call
call: "cloudfunctions.create-function"
with:
project_id: "{{project_id}}"
region: "{{region}}"
function_name: "{{function_name}}"
source_archive_url: "{{source_archive_url}}"
entry_point: "{{entry_point}}"
runtime: "{{runtime}}"
- name: set-iam-policy
type: call
call: "cloudfunctions.set-iam-policy"
with:
project_id: "{{project_id}}"
region: "{{region}}"
function_name: "{{function_name}}"
role: "roles/cloudfunctions.invoker"
member: "allUsers"
- name: verify-health
type: call
call: "cloudfunctions.get-function"
with:
project_id: "{{project_id}}"
region: "{{region}}"
function_name: "{{function_name}}"
consumes:
- type: http
namespace: cloudfunctions
baseUri: "https://cloudfunctions.googleapis.com/v2"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: functions
path: "/projects/{{project_id}}/locations/{{region}}/functions"
inputParameters:
- name: project_id
in: path
- name: region
in: path
operations:
- name: create-function
method: POST
- name: function-detail
path: "/projects/{{project_id}}/locations/{{region}}/functions/{{function_name}}"
inputParameters:
- name: project_id
in: path
- name: region
in: path
- name: function_name
in: path
operations:
- name: get-function
method: GET
- name: set-iam-policy
method: POST
Audits IAM role bindings across a GCP organization, identifies overprivileged accounts, exports findings to BigQuery, and alerts security team.
naftiko: "0.5"
info:
label: "Cloud IAM Role Audit Pipeline"
description: "Audits IAM role bindings across a GCP organization, identifies overprivileged accounts, exports findings to BigQuery, and alerts security team."
tags:
- security
- google-cloud-platform
- bigquery
capability:
exposes:
- type: mcp
namespace: iam-audit
port: 8080
tools:
- name: run-iam-audit
description: "Audit IAM role bindings and report overprivileged accounts."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: dataset
in: body
type: string
description: "BigQuery dataset for audit results."
- name: table
in: body
type: string
description: "BigQuery table."
- name: chat_space
in: body
type: string
description: "Google Chat space for security alerts."
steps:
- name: get-iam-policy
type: call
call: "cloudresourcemanager.get-iam-policy"
with:
project_id: "{{project_id}}"
- name: export-findings
type: call
call: "bigquery.insert-rows"
with:
project_id: "{{project_id}}"
dataset: "{{dataset}}"
table: "{{table}}"
- name: alert-security
type: call
call: "googlechat.send-message"
with:
space: "{{chat_space}}"
text: "IAM audit complete for {{project_id}}."
consumes:
- type: http
namespace: cloudresourcemanager
baseUri: "https://cloudresourcemanager.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: projects
path: "/projects/{{project_id}}:getIamPolicy"
inputParameters:
- name: project_id
in: path
operations:
- name: get-iam-policy
method: POST
- type: http
namespace: bigquery
baseUri: "https://bigquery.googleapis.com/bigquery/v2"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: tabledata
path: "/projects/{{project_id}}/datasets/{{dataset}}/tables/{{table}}/insertAll"
inputParameters:
- name: project_id
in: path
- name: dataset
in: path
- name: table
in: path
operations:
- name: insert-rows
method: POST
- type: http
namespace: googlechat
baseUri: "https://chat.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.google_chat_token"
resources:
- name: messages
path: "/spaces/{{space}}/messages"
inputParameters:
- name: space
in: path
operations:
- name: send-message
method: POST
Queries Cloud Logging for error entries in a given service, creates a summary, posts it to Google Chat, and opens a ServiceNow incident.
naftiko: "0.5"
info:
label: "Cloud Logging Error Alert Pipeline"
description: "Queries Cloud Logging for error entries in a given service, creates a summary, posts it to Google Chat, and opens a ServiceNow incident."
tags:
- operations
- monitoring
- cloud-logging
- servicenow
- google-cloud-platform
capability:
exposes:
- type: mcp
namespace: log-alerting
port: 8080
tools:
- name: alert-on-errors
description: "Query Cloud Logging for errors, alert via Google Chat, and create ServiceNow incident."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: service_name
in: body
type: string
description: "The service name to filter logs."
- name: chat_space
in: body
type: string
description: "Google Chat space for alerts."
- name: snow_assignment_group
in: body
type: string
description: "ServiceNow assignment group for the incident."
steps:
- name: query-errors
type: call
call: "logging.list-entries"
with:
project_id: "{{project_id}}"
filter: "resource.labels.service_name={{service_name}} severity=ERROR"
- name: post-alert
type: call
call: "googlechat.send-message"
with:
space: "{{chat_space}}"
text: "Error alert for {{service_name}}: {{query-errors.entries.length}} error entries detected in the last hour."
- name: open-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Elevated errors in {{service_name}}"
category: "application"
assigned_group: "{{snow_assignment_group}}"
description: "{{query-errors.entries.length}} error log entries detected for service {{service_name}} in project {{project_id}}."
consumes:
- type: http
namespace: logging
baseUri: "https://logging.googleapis.com/v2"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: entries
path: "/entries:list"
operations:
- name: list-entries
method: POST
- type: http
namespace: googlechat
baseUri: "https://chat.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.google_chat_token"
resources:
- name: messages
path: "/spaces/{{space}}/messages"
inputParameters:
- name: space
in: path
operations:
- name: send-message
method: POST
- type: http
namespace: servicenow
baseUri: "https://alphabet.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
Queries time-series metrics from Google Cloud Monitoring for a specified resource.
naftiko: "0.5"
info:
label: "Cloud Monitoring Metric Query"
description: "Queries time-series metrics from Google Cloud Monitoring for a specified resource."
tags:
- monitoring
- google-cloud-platform
capability:
exposes:
- type: mcp
namespace: cloudmonitoring
port: 8080
tools:
- name: list-timeseries
description: "Query time-series metrics from Cloud Monitoring."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: filter
in: body
type: string
description: "The monitoring filter expression."
call: "cloudmonitoring.list-timeseries"
with:
project_id: "{{project_id}}"
filter: "{{filter}}"
consumes:
- type: http
namespace: cloudmonitoring
baseUri: "https://monitoring.googleapis.com/v3"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: timeseries
path: "/projects/{{project_id}}/timeSeries"
inputParameters:
- name: project_id
in: path
- name: filter
in: query
operations:
- name: list-timeseries
method: GET
Publishes a message to a Google Cloud Pub/Sub topic.
naftiko: "0.5"
info:
label: "Cloud Pub/Sub Topic Message Publisher"
description: "Publishes a message to a Google Cloud Pub/Sub topic."
tags:
- messaging
- google-cloud-platform
capability:
exposes:
- type: mcp
namespace: pubsub
port: 8080
tools:
- name: publish-message
description: "Publish a message to a Pub/Sub topic."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: topic_name
in: body
type: string
description: "The Pub/Sub topic name."
- name: message_data
in: body
type: string
description: "The base64-encoded message data."
call: "pubsub.publish-message"
with:
project_id: "{{project_id}}"
topic_name: "{{topic_name}}"
data: "{{message_data}}"
consumes:
- type: http
namespace: pubsub
baseUri: "https://pubsub.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: topics
path: "/projects/{{project_id}}/topics/{{topic_name}}:publish"
inputParameters:
- name: project_id
in: path
- name: topic_name
in: path
operations:
- name: publish-message
method: POST
Audits cloud resources for compliance tags, creates remediation tickets, and reports to leadership.
naftiko: "0.5"
info:
label: "Cloud Resource Tagging Audit"
description: "Audits cloud resources for compliance tags, creates remediation tickets, and reports to leadership."
tags:
- compliance
- gcp
- jira
- confluence
capability:
exposes:
- type: mcp
namespace: compliance
port: 8080
tools:
- name: cloud_resource_tagging_audit
description: "Orchestrate cloud resource tagging audit workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-gcp
type: call
call: "gcp.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-jira
type: call
call: "jira.process-resource"
with:
data: "{{get-gcp.result}}"
- name: create-confluence
type: call
call: "confluence.create-resource"
with:
channel: "{{notification_channel}}"
text: "Cloud Resource Tagging Audit step 3 complete."
consumes:
- type: http
namespace: gcp
baseUri: "https://compute.googleapis.com/compute/v1/projects/alphabet"
authentication:
type: bearer
token: "$secrets.gcp_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: gcp-op
method: POST
- type: http
namespace: jira
baseUri: "https://alphabet.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: jira-op
method: POST
- type: http
namespace: confluence
baseUri: "https://alphabet.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: confluence-op
method: POST
Deploys a new Cloud Run revision, splits traffic between old and new versions, monitors error rates, and rolls back if thresholds are exceeded.
naftiko: "0.5"
info:
label: "Cloud Run Blue-Green Deployment Pipeline"
description: "Deploys a new Cloud Run revision, splits traffic between old and new versions, monitors error rates, and rolls back if thresholds are exceeded."
tags:
- containers
- google-cloud-platform
- monitoring
capability:
exposes:
- type: mcp
namespace: cloudrun-bg
port: 8080
tools:
- name: run-blue-green-deploy
description: "Execute a blue-green deployment on Cloud Run with traffic splitting and monitoring."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: region
in: body
type: string
description: "The Cloud Run region."
- name: service_name
in: body
type: string
description: "The Cloud Run service."
- name: new_image
in: body
type: string
description: "Container image URI for new revision."
- name: traffic_split
in: body
type: number
description: "Percentage of traffic for new revision."
steps:
- name: deploy-revision
type: call
call: "cloudrun.update-service"
with:
project_id: "{{project_id}}"
region: "{{region}}"
service_name: "{{service_name}}"
image: "{{new_image}}"
- name: split-traffic
type: call
call: "cloudrun.update-service"
with:
project_id: "{{project_id}}"
region: "{{region}}"
service_name: "{{service_name}}"
trafficSplit: "{{traffic_split}}"
- name: check-errors
type: call
call: "cloudmonitoring.list-timeseries"
with:
project_id: "{{project_id}}"
filter: "resource.type=cloud_run_revision AND metric.type=run.googleapis.com/request_count"
- name: finalize
type: call
call: "cloudrun.update-service"
with:
project_id: "{{project_id}}"
region: "{{region}}"
service_name: "{{service_name}}"
trafficSplit: "100"
consumes:
- type: http
namespace: cloudrun
baseUri: "https://run.googleapis.com/v2"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: services
path: "/projects/{{project_id}}/locations/{{region}}/services/{{service_name}}"
inputParameters:
- name: project_id
in: path
- name: region
in: path
- name: service_name
in: path
operations:
- name: get-service
method: GET
- name: update-service
method: PATCH
- type: http
namespace: cloudmonitoring
baseUri: "https://monitoring.googleapis.com/v3"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: timeseries
path: "/projects/{{project_id}}/timeSeries"
inputParameters:
- name: project_id
in: path
- name: filter
in: query
operations:
- name: list-timeseries
method: GET
Checks the status and revision details of a Cloud Run service including traffic allocation, container image, and readiness conditions.
naftiko: "0.5"
info:
label: "Cloud Run Service Status"
description: "Checks the status and revision details of a Cloud Run service including traffic allocation, container image, and readiness conditions."
tags:
- cloud
- infrastructure
- cloud-run
- google-cloud-platform
capability:
exposes:
- type: mcp
namespace: cloudrun-ops
port: 8080
tools:
- name: get-service-status
description: "Retrieve Cloud Run service details by name and region. Returns latest revision, traffic split, and readiness."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: region
in: body
type: string
description: "The Cloud Run region (e.g. us-central1)."
- name: service_name
in: body
type: string
description: "The Cloud Run service name."
call: "cloudrun.get-service"
with:
project_id: "{{project_id}}"
region: "{{region}}"
service_name: "{{service_name}}"
outputParameters:
- name: latest_revision
type: string
mapping: "$.status.latestReadyRevisionName"
- name: url
type: string
mapping: "$.status.url"
- name: ready
type: boolean
mapping: "$.status.conditions[0].status"
consumes:
- type: http
namespace: cloudrun
baseUri: "https://run.googleapis.com/v2"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: services
path: "/projects/{{project_id}}/locations/{{region}}/services/{{service_name}}"
inputParameters:
- name: project_id
in: path
- name: region
in: path
- name: service_name
in: path
operations:
- name: get-service
method: GET
Scans cloud infrastructure for misconfigurations, prioritizes findings, and creates remediation tasks.
naftiko: "0.5"
info:
label: "Cloud Security Posture Assessment"
description: "Scans cloud infrastructure for misconfigurations, prioritizes findings, and creates remediation tasks."
tags:
- security
- gcp
- jira
- servicenow
capability:
exposes:
- type: mcp
namespace: security
port: 8080
tools:
- name: cloud_security_posture_assessment
description: "Orchestrate cloud security posture assessment workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-gcp
type: call
call: "gcp.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-jira
type: call
call: "jira.process-resource"
with:
data: "{{get-gcp.result}}"
- name: create-servicenow
type: call
call: "servicenow.create-resource"
with:
channel: "{{notification_channel}}"
text: "Cloud Security Posture Assessment step 3 complete."
consumes:
- type: http
namespace: gcp
baseUri: "https://compute.googleapis.com/compute/v1/projects/alphabet"
authentication:
type: bearer
token: "$secrets.gcp_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: gcp-op
method: POST
- type: http
namespace: jira
baseUri: "https://alphabet.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: jira-op
method: POST
- type: http
namespace: servicenow
baseUri: "https://alphabet.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
Retrieves the status and configuration of a Cloud Spanner instance.
naftiko: "0.5"
info:
label: "Cloud Spanner Instance Status"
description: "Retrieves the status and configuration of a Cloud Spanner instance."
tags:
- databases
- google-cloud-platform
capability:
exposes:
- type: mcp
namespace: spanner
port: 8080
tools:
- name: get-instance
description: "Get the status and configuration details of a Cloud Spanner instance."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: instance_id
in: body
type: string
description: "The Spanner instance ID."
call: "spanner.get-instance"
with:
project_id: "{{project_id}}"
instance_id: "{{instance_id}}"
consumes:
- type: http
namespace: spanner
baseUri: "https://spanner.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: instances
path: "/projects/{{project_id}}/instances/{{instance_id}}"
inputParameters:
- name: project_id
in: path
- name: instance_id
in: path
operations:
- name: get-instance
method: GET
Checks Cloud SQL instance health, triggers an on-demand backup, verifies backup completion, and sends a health report to the DBA team via Gmail.
naftiko: "0.5"
info:
label: "Cloud SQL Backup and Health Pipeline"
description: "Checks Cloud SQL instance health, triggers an on-demand backup, verifies backup completion, and sends a health report to the DBA team via Gmail."
tags:
- database
- infrastructure
- cloud-sql
- gmail
- google-cloud-platform
capability:
exposes:
- type: mcp
namespace: cloudsql-ops
port: 8080
tools:
- name: backup-and-report
description: "Check Cloud SQL health, trigger backup, verify, and email report to DBA team."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: instance_name
in: body
type: string
description: "The Cloud SQL instance name."
- name: dba_email
in: body
type: string
description: "DBA team email for health reports."
steps:
- name: get-instance-health
type: call
call: "cloudsql.get-instance"
with:
project_id: "{{project_id}}"
instance_name: "{{instance_name}}"
- name: trigger-backup
type: call
call: "cloudsql.create-backup"
with:
project_id: "{{project_id}}"
instance_name: "{{instance_name}}"
- name: send-report
type: call
call: "gmail.send-message"
with:
to: "{{dba_email}}"
subject: "Cloud SQL Health: {{instance_name}}"
body: "Instance {{instance_name}} state: {{get-instance-health.state}}. Version: {{get-instance-health.databaseVersion}}. Backup initiated: {{trigger-backup.id}}."
consumes:
- type: http
namespace: cloudsql
baseUri: "https://sqladmin.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: instances
path: "/projects/{{project_id}}/instances/{{instance_name}}"
inputParameters:
- name: project_id
in: path
- name: instance_name
in: path
operations:
- name: get-instance
method: GET
- name: backups
path: "/projects/{{project_id}}/instances/{{instance_name}}/backupRuns"
inputParameters:
- name: project_id
in: path
- name: instance_name
in: path
operations:
- name: create-backup
method: POST
- type: http
namespace: gmail
baseUri: "https://gmail.googleapis.com/gmail/v1"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: messages
path: "/users/me/messages/send"
operations:
- name: send-message
method: POST
Scans Cloud Storage buckets for lifecycle policy compliance, logs violations to BigQuery, and alerts the security team in Slack.
naftiko: "0.5"
info:
label: "Cloud Storage Lifecycle Audit Pipeline"
description: "Scans Cloud Storage buckets for lifecycle policy compliance, logs violations to BigQuery, and alerts the security team in Slack."
tags:
- security
- compliance
- gcp-cloud-storage
- bigquery
capability:
exposes:
- type: mcp
namespace: storage-audit
port: 8080
tools:
- name: run-lifecycle-audit
description: "Audit Cloud Storage bucket lifecycle policies and report violations."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: bucket_name
in: body
type: string
description: "The bucket to audit."
- name: dataset
in: body
type: string
description: "BigQuery dataset for violations."
- name: table
in: body
type: string
description: "BigQuery table for violations."
- name: slack_channel
in: body
type: string
description: "Slack channel for alerts."
steps:
- name: get-bucket-config
type: call
call: "cloudstorage.get-bucket"
with:
bucket_name: "{{bucket_name}}"
- name: log-violation
type: call
call: "bigquery.insert-rows"
with:
project_id: "{{project_id}}"
dataset: "{{dataset}}"
table: "{{table}}"
rows: "{{get-bucket-config.lifecycle}}"
- name: alert-team
type: call
call: "slack.post-message"
with:
channel: "{{slack_channel}}"
text: "Lifecycle audit for {{bucket_name}}: {{get-bucket-config.lifecycle.rule}}"
consumes:
- type: http
namespace: cloudstorage
baseUri: "https://storage.googleapis.com/storage/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: buckets
path: "/b/{{bucket_name}}"
inputParameters:
- name: bucket_name
in: path
operations:
- name: get-bucket
method: GET
- type: http
namespace: bigquery
baseUri: "https://bigquery.googleapis.com/bigquery/v2"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: tabledata
path: "/projects/{{project_id}}/datasets/{{dataset}}/tables/{{table}}/insertAll"
inputParameters:
- name: project_id
in: path
- name: dataset
in: path
- name: table
in: path
operations:
- name: insert-rows
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: chat
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Collects audit events, validates against policies, generates compliance reports, and notifies auditors.
naftiko: "0.5"
info:
label: "Compliance Audit Trail Pipeline"
description: "Collects audit events, validates against policies, generates compliance reports, and notifies auditors."
tags:
- compliance
- elasticsearch
- confluence
- slack
capability:
exposes:
- type: mcp
namespace: compliance
port: 8080
tools:
- name: compliance_audit_trail_pipeline
description: "Orchestrate compliance audit trail pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-elasticsearch
type: call
call: "elasticsearch.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-confluence
type: call
call: "confluence.process-resource"
with:
data: "{{get-elasticsearch.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Compliance Audit Trail Pipeline step 3 complete."
consumes:
- type: http
namespace: elasticsearch
baseUri: "https://alphabet-es.com:9200"
authentication:
type: bearer
token: "$secrets.elasticsearch_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: elasticsearch-op
method: POST
- type: http
namespace: confluence
baseUri: "https://alphabet.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: confluence-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Runs a Security Command Center scan, exports findings to BigQuery, generates a compliance summary in Google Sheets, and emails the report to the compliance team.
naftiko: "0.5"
info:
label: "Compliance Scan and Report Pipeline"
description: "Runs a Security Command Center scan, exports findings to BigQuery, generates a compliance summary in Google Sheets, and emails the report to the compliance team."
tags:
- security
- compliance
- security-command-center
- bigquery
- google-sheets
- gmail
capability:
exposes:
- type: mcp
namespace: compliance-reporting
port: 8080
tools:
- name: run-compliance-report
description: "Scan via Security Command Center, store findings in BigQuery, create Sheets report, and email."
inputParameters:
- name: org_id
in: body
type: string
description: "The GCP organization ID."
- name: project_id
in: body
type: string
description: "The GCP project for BigQuery."
- name: bq_dataset
in: body
type: string
description: "The BigQuery dataset for findings."
- name: spreadsheet_id
in: body
type: string
description: "The compliance report spreadsheet ID."
- name: compliance_email
in: body
type: string
description: "The compliance team email address."
steps:
- name: list-findings
type: call
call: "scc.list-findings"
with:
org_id: "{{org_id}}"
- name: store-findings
type: call
call: "bigquery.insert-rows"
with:
project_id: "{{project_id}}"
dataset_id: "{{bq_dataset}}"
table_id: "scc_findings"
rows: "{{list-findings.findings}}"
- name: update-report
type: call
call: "sheets.update-values"
with:
spreadsheet_id: "{{spreadsheet_id}}"
range: "ComplianceReport!A1"
values: "{{list-findings.findings}}"
- name: email-report
type: call
call: "gmail.send-message"
with:
to: "{{compliance_email}}"
subject: "Compliance Scan Report"
body: "Security Command Center scan complete. {{list-findings.totalSize}} findings. Report: https://docs.google.com/spreadsheets/d/{{spreadsheet_id}}."
consumes:
- type: http
namespace: scc
baseUri: "https://securitycenter.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: findings
path: "/organizations/{{org_id}}/sources/-/findings"
inputParameters:
- name: org_id
in: path
operations:
- name: list-findings
method: GET
- type: http
namespace: bigquery
baseUri: "https://bigquery.googleapis.com/bigquery/v2"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: tabledata
path: "/projects/{{project_id}}/datasets/{{dataset_id}}/tables/{{table_id}}/insertAll"
inputParameters:
- name: project_id
in: path
- name: dataset_id
in: path
- name: table_id
in: path
operations:
- name: insert-rows
method: POST
- type: http
namespace: sheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: values
path: "/spreadsheets/{{spreadsheet_id}}/values/{{range}}"
inputParameters:
- name: spreadsheet_id
in: path
- name: range
in: path
operations:
- name: update-values
method: PUT
- type: http
namespace: gmail
baseUri: "https://gmail.googleapis.com/gmail/v1"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: messages
path: "/users/me/messages/send"
operations:
- name: send-message
method: POST
Submits text to the Perspective API for toxicity scoring, checks against threshold, flags the content in a Firestore collection, and notifies moderators via Gmail.
naftiko: "0.5"
info:
label: "Content Moderation Pipeline"
description: "Submits text to the Perspective API for toxicity scoring, checks against threshold, flags the content in a Firestore collection, and notifies moderators via Gmail."
tags:
- ai
- content-moderation
- perspective-api
- firebase
- gmail
capability:
exposes:
- type: mcp
namespace: content-moderation
port: 8080
tools:
- name: moderate-content
description: "Score text for toxicity, flag if above threshold, store in Firestore, and email moderators."
inputParameters:
- name: content_text
in: body
type: string
description: "The text content to moderate."
- name: content_id
in: body
type: string
description: "A unique identifier for the content."
- name: toxicity_threshold
in: body
type: number
description: "Toxicity score threshold (0.0-1.0)."
- name: moderator_email
in: body
type: string
description: "Email address of the content moderator."
- name: project_id
in: body
type: string
description: "The Firebase project ID."
steps:
- name: score-toxicity
type: call
call: "perspective.analyze-comment"
with:
text: "{{content_text}}"
- name: flag-content
type: call
call: "firestore.create-document"
with:
project_id: "{{project_id}}"
collection: "flagged_content"
document_id: "{{content_id}}"
fields: "{\"text\": \"{{content_text}}\", \"toxicity\": \"{{score-toxicity.attributeScores.TOXICITY.summaryScore.value}}\"}"
- name: notify-moderator
type: call
call: "gmail.send-message"
with:
to: "{{moderator_email}}"
subject: "Content flagged: {{content_id}}"
body: "Content ID {{content_id}} scored {{score-toxicity.attributeScores.TOXICITY.summaryScore.value}} toxicity. Review at dashboard."
consumes:
- type: http
namespace: perspective
baseUri: "https://commentanalyzer.googleapis.com/v1alpha1"
authentication:
type: apiKey
key: "$secrets.perspective_api_key"
in: query
name: key
resources:
- name: comments
path: "/comments:analyze"
operations:
- name: analyze-comment
method: POST
- type: http
namespace: firestore
baseUri: "https://firestore.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.firebase_token"
resources:
- name: documents
path: "/projects/{{project_id}}/databases/(default)/documents/{{collection}}/{{document_id}}"
inputParameters:
- name: project_id
in: path
- name: collection
in: path
- name: document_id
in: path
operations:
- name: create-document
method: PATCH
- type: http
namespace: gmail
baseUri: "https://gmail.googleapis.com/gmail/v1"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: messages
path: "/users/me/messages/send"
operations:
- name: send-message
method: POST
Tracks spending against budgets, forecasts overruns, creates alerts, and notifies finance leaders.
naftiko: "0.5"
info:
label: "Cost Center Budget Tracking Pipeline"
description: "Tracks spending against budgets, forecasts overruns, creates alerts, and notifies finance leaders."
tags:
- finance
- snowflake
- powerbi
- slack
capability:
exposes:
- type: mcp
namespace: finance
port: 8080
tools:
- name: cost_center_budget_tracking
description: "Orchestrate cost center budget tracking pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-snowflake
type: call
call: "snowflake.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-powerbi
type: call
call: "powerbi.process-resource"
with:
data: "{{get-snowflake.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Cost Center Budget Tracking Pipeline step 3 complete."
consumes:
- type: http
namespace: snowflake
baseUri: "https://alphabet.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-op
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: powerbi-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Aggregates customer data from multiple sources, deduplicates, enriches profiles, and syncs to CRM.
naftiko: "0.5"
info:
label: "Customer 360 Data Sync Pipeline"
description: "Aggregates customer data from multiple sources, deduplicates, enriches profiles, and syncs to CRM."
tags:
- data
- snowflake
- salesforce
- slack
capability:
exposes:
- type: mcp
namespace: data
port: 8080
tools:
- name: customer_360_data_sync_pipeline
description: "Orchestrate customer 360 data sync pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-snowflake
type: call
call: "snowflake.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-salesforce
type: call
call: "salesforce.process-resource"
with:
data: "{{get-snowflake.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Customer 360 Data Sync Pipeline step 3 complete."
consumes:
- type: http
namespace: snowflake
baseUri: "https://alphabet.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-op
method: POST
- type: http
namespace: salesforce
baseUri: "https://alphabet.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: salesforce-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Audits data lake access patterns, enforces retention policies, and publishes compliance reports.
naftiko: "0.5"
info:
label: "Data Lake Governance Pipeline"
description: "Audits data lake access patterns, enforces retention policies, and publishes compliance reports."
tags:
- data-governance
- bigquery
- confluence
- slack
capability:
exposes:
- type: mcp
namespace: data-governance
port: 8080
tools:
- name: data_lake_governance_pipeline
description: "Orchestrate data lake governance pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-bigquery
type: call
call: "bigquery.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-confluence
type: call
call: "confluence.process-resource"
with:
data: "{{get-bigquery.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Data Lake Governance Pipeline step 3 complete."
consumes:
- type: http
namespace: bigquery
baseUri: "https://bigquery.googleapis.com/bigquery/v2"
authentication:
type: bearer
token: "$secrets.gcp_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: bigquery-op
method: POST
- type: http
namespace: confluence
baseUri: "https://alphabet.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: confluence-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Extracts data from Cloud Storage, transforms it via a Dataflow template job, loads results into BigQuery, and notifies the data team in Google Chat.
naftiko: "0.5"
info:
label: "Data Pipeline ETL Orchestration"
description: "Extracts data from Cloud Storage, transforms it via a Dataflow template job, loads results into BigQuery, and notifies the data team in Google Chat."
tags:
- data
- etl
- google-cloud-dataflow
- bigquery
- gcp-cloud-storage
capability:
exposes:
- type: mcp
namespace: data-etl
port: 8080
tools:
- name: run-etl-pipeline
description: "Orchestrate an ETL pipeline: extract from GCS, transform via Dataflow, load to BigQuery, and notify."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: region
in: body
type: string
description: "The Dataflow region."
- name: source_bucket
in: body
type: string
description: "The GCS bucket containing source data."
- name: source_path
in: body
type: string
description: "The object path prefix in the source bucket."
- name: bq_dataset
in: body
type: string
description: "The target BigQuery dataset."
- name: bq_table
in: body
type: string
description: "The target BigQuery table."
- name: chat_space
in: body
type: string
description: "Google Chat space for notifications."
steps:
- name: list-source-objects
type: call
call: "cloudstorage.list-objects"
with:
bucket_name: "{{source_bucket}}"
prefix: "{{source_path}}"
- name: launch-dataflow
type: call
call: "dataflow.create-job-from-template"
with:
project_id: "{{project_id}}"
region: "{{region}}"
input_path: "gs://{{source_bucket}}/{{source_path}}"
output_table: "{{project_id}}:{{bq_dataset}}.{{bq_table}}"
- name: check-job
type: call
call: "dataflow.get-job"
with:
project_id: "{{project_id}}"
region: "{{region}}"
job_id: "{{launch-dataflow.job.id}}"
- name: notify-team
type: call
call: "googlechat.send-message"
with:
space: "{{chat_space}}"
text: "ETL pipeline complete. Job {{launch-dataflow.job.id}} status: {{check-job.currentState}}. Data loaded to {{bq_dataset}}.{{bq_table}}."
consumes:
- type: http
namespace: cloudstorage
baseUri: "https://storage.googleapis.com/storage/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: objects
path: "/b/{{bucket_name}}/o"
inputParameters:
- name: bucket_name
in: path
- name: prefix
in: query
operations:
- name: list-objects
method: GET
- type: http
namespace: dataflow
baseUri: "https://dataflow.googleapis.com/v1b3"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: templates
path: "/projects/{{project_id}}/locations/{{region}}/templates:launch"
inputParameters:
- name: project_id
in: path
- name: region
in: path
operations:
- name: create-job-from-template
method: POST
- name: jobs
path: "/projects/{{project_id}}/locations/{{region}}/jobs/{{job_id}}"
inputParameters:
- name: project_id
in: path
- name: region
in: path
- name: job_id
in: path
operations:
- name: get-job
method: GET
- type: http
namespace: googlechat
baseUri: "https://chat.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.google_chat_token"
resources:
- name: messages
path: "/spaces/{{space}}/messages"
inputParameters:
- name: space
in: path
operations:
- name: send-message
method: POST
Runs data quality checks, scores datasets, creates remediation tickets, and publishes scorecards.
naftiko: "0.5"
info:
label: "Data Quality Monitoring Pipeline"
description: "Runs data quality checks, scores datasets, creates remediation tickets, and publishes scorecards."
tags:
- data-quality
- snowflake
- jira
- grafana
capability:
exposes:
- type: mcp
namespace: data-quality
port: 8080
tools:
- name: data_quality_monitoring_pipeline
description: "Orchestrate data quality monitoring pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-snowflake
type: call
call: "snowflake.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-jira
type: call
call: "jira.process-resource"
with:
data: "{{get-snowflake.result}}"
- name: create-grafana
type: call
call: "grafana.create-resource"
with:
channel: "{{notification_channel}}"
text: "Data Quality Monitoring Pipeline step 3 complete."
consumes:
- type: http
namespace: snowflake
baseUri: "https://alphabet.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-op
method: POST
- type: http
namespace: jira
baseUri: "https://alphabet.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: jira-op
method: POST
- type: http
namespace: grafana
baseUri: "https://alphabet-grafana.com/api"
authentication:
type: bearer
token: "$secrets.grafana_api_key"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: grafana-op
method: POST
Submits a Spark job to a Dataproc cluster, monitors execution, exports results to Cloud Storage, and notifies the data team via Google Chat.
naftiko: "0.5"
info:
label: "Dataproc Spark Job Orchestration"
description: "Submits a Spark job to a Dataproc cluster, monitors execution, exports results to Cloud Storage, and notifies the data team via Google Chat."
tags:
- data
- analytics
- dataproc
- apache-spark
- google-cloud-platform
capability:
exposes:
- type: mcp
namespace: dataproc-jobs
port: 8080
tools:
- name: run-spark-job
description: "Submit a Spark job to Dataproc, monitor, export results, and notify team."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: region
in: body
type: string
description: "The Dataproc region."
- name: cluster_name
in: body
type: string
description: "The Dataproc cluster name."
- name: main_jar_uri
in: body
type: string
description: "GCS URI of the Spark job JAR."
- name: output_bucket
in: body
type: string
description: "GCS bucket for job output."
- name: chat_space
in: body
type: string
description: "Google Chat space for job notifications."
steps:
- name: submit-job
type: call
call: "dataproc.submit-job"
with:
project_id: "{{project_id}}"
region: "{{region}}"
cluster_name: "{{cluster_name}}"
main_jar_uri: "{{main_jar_uri}}"
output_uri: "gs://{{output_bucket}}/spark-output"
- name: check-job-status
type: call
call: "dataproc.get-job"
with:
project_id: "{{project_id}}"
region: "{{region}}"
job_id: "{{submit-job.reference.jobId}}"
- name: notify-team
type: call
call: "googlechat.send-message"
with:
space: "{{chat_space}}"
text: "Spark job {{submit-job.reference.jobId}} on cluster {{cluster_name}}: status {{check-job-status.status.state}}. Output: gs://{{output_bucket}}/spark-output."
consumes:
- type: http
namespace: dataproc
baseUri: "https://dataproc.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: jobs
path: "/projects/{{project_id}}/regions/{{region}}/jobs:submit"
inputParameters:
- name: project_id
in: path
- name: region
in: path
operations:
- name: submit-job
method: POST
- name: job-status
path: "/projects/{{project_id}}/regions/{{region}}/jobs/{{job_id}}"
inputParameters:
- name: project_id
in: path
- name: region
in: path
- name: job_id
in: path
operations:
- name: get-job
method: GET
- type: http
namespace: googlechat
baseUri: "https://chat.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.google_chat_token"
resources:
- name: messages
path: "/spaces/{{space}}/messages"
inputParameters:
- name: space
in: path
operations:
- name: send-message
method: POST
Runs test cases against a Dialogflow CX agent, collects results, logs failures to Jira, and sends a summary to Google Chat.
naftiko: "0.5"
info:
label: "Dialogflow CX Agent Test Pipeline"
description: "Runs test cases against a Dialogflow CX agent, collects results, logs failures to Jira, and sends a summary to Google Chat."
tags:
- ai
- google-dialogflow
- jira
- google-workspace
capability:
exposes:
- type: mcp
namespace: dfcx-test
port: 8080
tools:
- name: run-agent-tests
description: "Execute Dialogflow CX test cases and report failures."
inputParameters:
- name: project_id
in: body
type: string
description: "GCP project ID."
- name: region
in: body
type: string
description: "Dialogflow region."
- name: agent_id
in: body
type: string
description: "Dialogflow CX agent ID."
- name: jira_domain
in: body
type: string
description: "Jira domain."
- name: jira_project
in: body
type: string
description: "Jira project key."
- name: chat_space
in: body
type: string
description: "Google Chat space."
steps:
- name: run-tests
type: call
call: "dialogflowcx.batch-run-tests"
with:
project_id: "{{project_id}}"
region: "{{region}}"
agent_id: "{{agent_id}}"
- name: log-failures
type: call
call: "jira.create-issue"
with:
project: "{{jira_project}}"
summary: "Dialogflow CX test failures"
description: "{{run-tests.results}}"
- name: notify
type: call
call: "googlechat.send-message"
with:
space: "{{chat_space}}"
text: "Dialogflow CX test run complete. Failures logged to Jira."
consumes:
- type: http
namespace: dialogflowcx
baseUri: "https://dialogflow.googleapis.com/v3"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: testCases
path: "/projects/{{project_id}}/locations/{{region}}/agents/{{agent_id}}/testCases:batchRun"
inputParameters:
- name: project_id
in: path
- name: region
in: path
- name: agent_id
in: path
operations:
- name: batch-run-tests
method: POST
- type: http
namespace: jira
baseUri: "https://{{jira_domain}}.atlassian.net/rest/api/3"
authentication:
type: basic
token: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: googlechat
baseUri: "https://chat.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.google_chat_token"
resources:
- name: messages
path: "/spaces/{{space}}/messages"
inputParameters:
- name: space
in: path
operations:
- name: send-message
method: POST
Sends a user utterance to a Dialogflow CX agent and returns the matched intent, confidence score, and fulfillment text. Used for chatbot testing.
naftiko: "0.5"
info:
label: "Dialogflow Intent Resolution"
description: "Sends a user utterance to a Dialogflow CX agent and returns the matched intent, confidence score, and fulfillment text. Used for chatbot testing."
tags:
- ai
- conversational-ai
- google-dialogflow
capability:
exposes:
- type: mcp
namespace: dialogflow-testing
port: 8080
tools:
- name: detect-intent
description: "Send a text query to Dialogflow CX and return the matched intent and response."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: agent_id
in: body
type: string
description: "The Dialogflow CX agent ID."
- name: session_id
in: body
type: string
description: "A unique session identifier."
- name: query_text
in: body
type: string
description: "The user utterance to classify."
call: "dialogflow.detect-intent"
with:
project_id: "{{project_id}}"
agent_id: "{{agent_id}}"
session_id: "{{session_id}}"
query_text: "{{query_text}}"
outputParameters:
- name: matched_intent
type: string
mapping: "$.queryResult.intent.displayName"
- name: confidence
type: number
mapping: "$.queryResult.intentDetectionConfidence"
- name: fulfillment_text
type: string
mapping: "$.queryResult.responseMessages[0].text.text[0]"
consumes:
- type: http
namespace: dialogflow
baseUri: "https://dialogflow.googleapis.com/v3"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: sessions
path: "/projects/{{project_id}}/locations/global/agents/{{agent_id}}/sessions/{{session_id}}:detectIntent"
inputParameters:
- name: project_id
in: path
- name: agent_id
in: path
- name: session_id
in: path
operations:
- name: detect-intent
method: POST
Provisions new employee accounts, assigns training, creates IT tickets, and notifies managers.
naftiko: "0.5"
info:
label: "Employee Onboarding Automation Pipeline"
description: "Provisions new employee accounts, assigns training, creates IT tickets, and notifies managers."
tags:
- hr
- workday
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: employee_onboarding_automation
description: "Orchestrate employee onboarding automation pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-gcp
type: call
call: "gcp.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-servicenow
type: call
call: "servicenow.process-resource"
with:
data: "{{get-gcp.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Employee Onboarding Automation Pipeline step 3 complete."
consumes:
- type: http
namespace: gcp
baseUri: "https://compute.googleapis.com/compute/v1/projects/alphabet"
authentication:
type: bearer
token: "$secrets.gcp_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: gcp-op
method: POST
- type: http
namespace: servicenow
baseUri: "https://alphabet.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Publishes an event to a Pub/Sub topic, triggers a Cloud Function subscriber, logs the event to BigQuery, and confirms delivery via Google Chat.
naftiko: "0.5"
info:
label: "Event-Driven Notification Pipeline"
description: "Publishes an event to a Pub/Sub topic, triggers a Cloud Function subscriber, logs the event to BigQuery, and confirms delivery via Google Chat."
tags:
- messaging
- infrastructure
- pubsub
- cloud-functions
- bigquery
capability:
exposes:
- type: mcp
namespace: event-notifications
port: 8080
tools:
- name: publish-and-track-event
description: "Publish to Pub/Sub, verify Cloud Function processing, log to BigQuery, and confirm via Chat."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: topic_id
in: body
type: string
description: "The Pub/Sub topic ID."
- name: message_data
in: body
type: string
description: "The base64-encoded message data."
- name: chat_space
in: body
type: string
description: "Google Chat space for delivery confirmations."
steps:
- name: publish-event
type: call
call: "pubsub.publish"
with:
project_id: "{{project_id}}"
topic_id: "{{topic_id}}"
message_data: "{{message_data}}"
- name: log-event
type: call
call: "bigquery.insert-rows"
with:
project_id: "{{project_id}}"
dataset_id: "event_logs"
table_id: "pubsub_events"
rows: "[{\"topic\": \"{{topic_id}}\", \"message_id\": \"{{publish-event.messageIds[0]}}\"}]"
- name: confirm-delivery
type: call
call: "googlechat.send-message"
with:
space: "{{chat_space}}"
text: "Event published to {{topic_id}}. Message ID: {{publish-event.messageIds[0]}}. Logged to event_logs.pubsub_events."
consumes:
- type: http
namespace: pubsub
baseUri: "https://pubsub.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: topics
path: "/projects/{{project_id}}/topics/{{topic_id}}:publish"
inputParameters:
- name: project_id
in: path
- name: topic_id
in: path
operations:
- name: publish
method: POST
- type: http
namespace: bigquery
baseUri: "https://bigquery.googleapis.com/bigquery/v2"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: tabledata
path: "/projects/{{project_id}}/datasets/{{dataset_id}}/tables/{{table_id}}/insertAll"
inputParameters:
- name: project_id
in: path
- name: dataset_id
in: path
- name: table_id
in: path
operations:
- name: insert-rows
method: POST
- type: http
namespace: googlechat
baseUri: "https://chat.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.google_chat_token"
resources:
- name: messages
path: "/spaces/{{space}}/messages"
inputParameters:
- name: space
in: path
operations:
- name: send-message
method: POST
Updates a Firebase Remote Config parameter for a feature flag, publishes a Pub/Sub event to notify downstream services, and posts the rollout status to Google Chat.
naftiko: "0.5"
info:
label: "Feature Flag Rollout Pipeline"
description: "Updates a Firebase Remote Config parameter for a feature flag, publishes a Pub/Sub event to notify downstream services, and posts the rollout status to Google Chat."
tags:
- mobile
- firebase
- feature-flags
- pubsub
capability:
exposes:
- type: mcp
namespace: feature-rollout
port: 8080
tools:
- name: rollout-feature-flag
description: "Update a Firebase Remote Config flag, publish event to Pub/Sub, and notify via Chat."
inputParameters:
- name: project_id
in: body
type: string
description: "The Firebase project ID."
- name: parameter_key
in: body
type: string
description: "The Remote Config parameter key to update."
- name: parameter_value
in: body
type: string
description: "The new value for the parameter."
- name: topic_id
in: body
type: string
description: "Pub/Sub topic for feature flag events."
- name: chat_space
in: body
type: string
description: "Google Chat space for rollout notifications."
steps:
- name: get-current-config
type: call
call: "firebase.get-remote-config"
with:
project_id: "{{project_id}}"
- name: update-config
type: call
call: "firebase.update-remote-config"
with:
project_id: "{{project_id}}"
parameter_key: "{{parameter_key}}"
parameter_value: "{{parameter_value}}"
- name: publish-event
type: call
call: "pubsub.publish"
with:
project_id: "{{project_id}}"
topic_id: "{{topic_id}}"
message_data: "{\"flag\": \"{{parameter_key}}\", \"value\": \"{{parameter_value}}\"}"
- name: notify-team
type: call
call: "googlechat.send-message"
with:
space: "{{chat_space}}"
text: "Feature flag {{parameter_key}} updated to {{parameter_value}}. Config version: {{update-config.version.versionNumber}}."
consumes:
- type: http
namespace: firebase
baseUri: "https://firebaseremoteconfig.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.firebase_token"
resources:
- name: remote-config
path: "/projects/{{project_id}}/remoteConfig"
inputParameters:
- name: project_id
in: path
operations:
- name: get-remote-config
method: GET
- name: update-remote-config
method: PUT
- type: http
namespace: pubsub
baseUri: "https://pubsub.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: topics
path: "/projects/{{project_id}}/topics/{{topic_id}}:publish"
inputParameters:
- name: project_id
in: path
- name: topic_id
in: path
operations:
- name: publish
method: POST
- type: http
namespace: googlechat
baseUri: "https://chat.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.google_chat_token"
resources:
- name: messages
path: "/spaces/{{space}}/messages"
inputParameters:
- name: space
in: path
operations:
- name: send-message
method: POST
Fetches the current Firebase Remote Config template for a project.
naftiko: "0.5"
info:
label: "Firebase Remote Config Fetch"
description: "Fetches the current Firebase Remote Config template for a project."
tags:
- mobile
- google-cloud-platform
capability:
exposes:
- type: mcp
namespace: firebase
port: 8080
tools:
- name: get-config
description: "Fetch the current Remote Config template for a Firebase project."
inputParameters:
- name: project_id
in: body
type: string
description: "The Firebase project ID."
call: "firebase.get-config"
with:
project_id: "{{project_id}}"
consumes:
- type: http
namespace: firebase
baseUri: "https://firebaseremoteconfig.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: remoteConfig
path: "/projects/{{project_id}}/remoteConfig"
inputParameters:
- name: project_id
in: path
operations:
- name: get-config
method: GET
Sends a prompt to the Gemini generative model and returns the generated text response. Used for content generation, summarization, and Q&A.
naftiko: "0.5"
info:
label: "Gemini Text Generation"
description: "Sends a prompt to the Gemini generative model and returns the generated text response. Used for content generation, summarization, and Q&A."
tags:
- ai
- machine-learning
- gemini
- generative-ai
capability:
exposes:
- type: mcp
namespace: gemini-gen
port: 8080
tools:
- name: generate-text
description: "Generate text via Gemini model given a prompt and optional temperature setting."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: prompt
in: body
type: string
description: "The text prompt for generation."
- name: temperature
in: body
type: number
description: "Sampling temperature between 0.0 and 1.0."
call: "gemini.generate-content"
with:
project_id: "{{project_id}}"
prompt: "{{prompt}}"
temperature: "{{temperature}}"
consumes:
- type: http
namespace: gemini
baseUri: "https://generativelanguage.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: models
path: "/projects/{{project_id}}/locations/us-central1/publishers/google/models/gemini-pro:generateContent"
inputParameters:
- name: project_id
in: path
operations:
- name: generate-content
method: POST
On a GitHub pull request merge, triggers a Cloud Build, deploys the built image to GKE, runs Prometheus health checks, and updates the GitHub commit status.
naftiko: "0.5"
info:
label: "GitHub PR to Cloud Build to GKE Pipeline"
description: "On a GitHub pull request merge, triggers a Cloud Build, deploys the built image to GKE, runs Prometheus health checks, and updates the GitHub commit status."
tags:
- devops
- ci-cd
- github
- cloud-build
- gke
- prometheus
capability:
exposes:
- type: mcp
namespace: github-deploy-pipeline
port: 8080
tools:
- name: deploy-on-merge
description: "Build via Cloud Build, deploy to GKE, verify with Prometheus, update GitHub status."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: github_repo
in: body
type: string
description: "The GitHub repository (owner/repo)."
- name: commit_sha
in: body
type: string
description: "The merged commit SHA."
- name: image_name
in: body
type: string
description: "The container image name."
- name: cluster_name
in: body
type: string
description: "The GKE cluster name."
- name: zone
in: body
type: string
description: "The GKE cluster zone."
- name: deployment_name
in: body
type: string
description: "The Kubernetes deployment name."
- name: prometheus_endpoint
in: body
type: string
description: "The Prometheus query endpoint URL."
steps:
- name: trigger-build
type: call
call: "cloudbuild.create-build"
with:
project_id: "{{project_id}}"
commit_sha: "{{commit_sha}}"
image_name: "{{image_name}}"
- name: deploy-to-gke
type: call
call: "gke.update-deployment-image"
with:
project_id: "{{project_id}}"
zone: "{{zone}}"
cluster_name: "{{cluster_name}}"
deployment_name: "{{deployment_name}}"
image: "{{trigger-build.results.images[0].name}}"
- name: health-check
type: call
call: "prometheus.query"
with:
endpoint: "{{prometheus_endpoint}}"
query: "up{job=\"{{deployment_name}}\"}"
- name: update-github-status
type: call
call: "github.create-commit-status"
with:
repo: "{{github_repo}}"
sha: "{{commit_sha}}"
state: "success"
description: "Deployed to {{cluster_name}}. Health: {{health_check.data.result[0].value[1]}}"
consumes:
- type: http
namespace: cloudbuild
baseUri: "https://cloudbuild.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: builds
path: "/projects/{{project_id}}/builds"
inputParameters:
- name: project_id
in: path
operations:
- name: create-build
method: POST
- type: http
namespace: gke
baseUri: "https://container.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: deployments
path: "/projects/{{project_id}}/zones/{{zone}}/clusters/{{cluster_name}}/deployments/{{deployment_name}}"
inputParameters:
- name: project_id
in: path
- name: zone
in: path
- name: cluster_name
in: path
- name: deployment_name
in: path
operations:
- name: update-deployment-image
method: PATCH
- type: http
namespace: prometheus
baseUri: "{{prometheus_endpoint}}"
authentication:
type: bearer
token: "$secrets.prometheus_token"
resources:
- name: query
path: "/api/v1/query"
inputParameters:
- name: query
in: query
operations:
- name: query
method: GET
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: statuses
path: "/repos/{{repo}}/statuses/{{sha}}"
inputParameters:
- name: repo
in: path
- name: sha
in: path
operations:
- name: create-commit-status
method: POST
Retrieves the node pool configuration and status for a GKE cluster including node count, machine type, and autoscaling settings.
naftiko: "0.5"
info:
label: "GKE Cluster Node Pool Status"
description: "Retrieves the node pool configuration and status for a GKE cluster including node count, machine type, and autoscaling settings."
tags:
- infrastructure
- kubernetes
- gke
- google-cloud-platform
capability:
exposes:
- type: mcp
namespace: gke-ops
port: 8080
tools:
- name: get-nodepool-status
description: "Fetch GKE node pool details by cluster name, zone, and node pool name."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: zone
in: body
type: string
description: "The GKE cluster zone."
- name: cluster_name
in: body
type: string
description: "The GKE cluster name."
- name: nodepool_name
in: body
type: string
description: "The node pool name."
call: "gke.get-nodepool"
with:
project_id: "{{project_id}}"
zone: "{{zone}}"
cluster_name: "{{cluster_name}}"
nodepool_name: "{{nodepool_name}}"
outputParameters:
- name: node_count
type: number
mapping: "$.initialNodeCount"
- name: machine_type
type: string
mapping: "$.config.machineType"
- name: autoscaling_enabled
type: boolean
mapping: "$.autoscaling.enabled"
consumes:
- type: http
namespace: gke
baseUri: "https://container.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: nodepools
path: "/projects/{{project_id}}/zones/{{zone}}/clusters/{{cluster_name}}/nodePools/{{nodepool_name}}"
inputParameters:
- name: project_id
in: path
- name: zone
in: path
- name: cluster_name
in: path
- name: nodepool_name
in: path
operations:
- name: get-nodepool
method: GET
Builds a container image via Cloud Build, pushes to Artifact Registry, updates a GKE deployment manifest, and triggers a rolling update with Slack notification.
naftiko: "0.5"
info:
label: "GKE Deployment Rollout Pipeline"
description: "Builds a container image via Cloud Build, pushes to Artifact Registry, updates a GKE deployment manifest, and triggers a rolling update with Slack notification."
tags:
- devops
- ci-cd
- gke
- cloud-build
- google-cloud-platform
capability:
exposes:
- type: mcp
namespace: gke-deployment
port: 8080
tools:
- name: deploy-to-gke
description: "Build, push, and deploy a container to GKE with Cloud Build and Artifact Registry."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: repo_source
in: body
type: string
description: "The Cloud Source Repository name."
- name: branch
in: body
type: string
description: "The branch to build from."
- name: image_name
in: body
type: string
description: "The container image name."
- name: cluster_name
in: body
type: string
description: "The GKE cluster name."
- name: zone
in: body
type: string
description: "The GKE cluster zone."
- name: deployment_name
in: body
type: string
description: "The Kubernetes deployment name."
- name: chat_space
in: body
type: string
description: "Google Chat space for deploy notifications."
steps:
- name: trigger-build
type: call
call: "cloudbuild.create-build"
with:
project_id: "{{project_id}}"
repo_source: "{{repo_source}}"
branch: "{{branch}}"
image_name: "{{image_name}}"
- name: check-build
type: call
call: "cloudbuild.get-build"
with:
project_id: "{{project_id}}"
build_id: "{{trigger-build.metadata.build.id}}"
- name: update-deployment
type: call
call: "gke.update-deployment-image"
with:
project_id: "{{project_id}}"
zone: "{{zone}}"
cluster_name: "{{cluster_name}}"
deployment_name: "{{deployment_name}}"
image: "{{check-build.results.images[0].name}}"
- name: notify-deploy
type: call
call: "googlechat.send-message"
with:
space: "{{chat_space}}"
text: "Deployed {{image_name}} to {{cluster_name}}/{{deployment_name}}. Build: {{trigger-build.metadata.build.id}}. Image: {{check-build.results.images[0].name}}."
consumes:
- type: http
namespace: cloudbuild
baseUri: "https://cloudbuild.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: builds
path: "/projects/{{project_id}}/builds"
inputParameters:
- name: project_id
in: path
operations:
- name: create-build
method: POST
- name: build-status
path: "/projects/{{project_id}}/builds/{{build_id}}"
inputParameters:
- name: project_id
in: path
- name: build_id
in: path
operations:
- name: get-build
method: GET
- type: http
namespace: gke
baseUri: "https://container.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: deployments
path: "/projects/{{project_id}}/zones/{{zone}}/clusters/{{cluster_name}}/deployments/{{deployment_name}}"
inputParameters:
- name: project_id
in: path
- name: zone
in: path
- name: cluster_name
in: path
- name: deployment_name
in: path
operations:
- name: update-deployment-image
method: PATCH
- type: http
namespace: googlechat
baseUri: "https://chat.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.google_chat_token"
resources:
- name: messages
path: "/spaces/{{space}}/messages"
inputParameters:
- name: space
in: path
operations:
- name: send-message
method: POST
Collects resource utilization from Cloud Monitoring, adjusts HPA thresholds on GKE, validates the change, and posts results to Microsoft Teams.
naftiko: "0.5"
info:
label: "GKE Pod Autoscaler Tuning Pipeline"
description: "Collects resource utilization from Cloud Monitoring, adjusts HPA thresholds on GKE, validates the change, and posts results to Microsoft Teams."
tags:
- containers
- monitoring
- google-cloud-platform
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: gke-autoscale
port: 8080
tools:
- name: run-autoscaler-tuning
description: "Tune GKE pod autoscaler based on monitoring metrics and notify via Teams."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: zone
in: body
type: string
description: "The cluster zone."
- name: cluster_name
in: body
type: string
description: "The GKE cluster name."
- name: team_id
in: body
type: string
description: "Microsoft Teams team ID."
- name: channel_id
in: body
type: string
description: "Teams channel ID."
steps:
- name: get-metrics
type: call
call: "cloudmonitoring.list-timeseries"
with:
project_id: "{{project_id}}"
filter: "resource.type=k8s_container"
- name: get-cluster-info
type: call
call: "gke.get-cluster"
with:
project_id: "{{project_id}}"
zone: "{{zone}}"
cluster_name: "{{cluster_name}}"
- name: update-hpa
type: call
call: "gke.update-cluster"
with:
project_id: "{{project_id}}"
zone: "{{zone}}"
cluster_name: "{{cluster_name}}"
metrics: "{{get-metrics}}"
- name: notify-team
type: call
call: "teams.send-message"
with:
team_id: "{{team_id}}"
channel_id: "{{channel_id}}"
text: "HPA tuning for {{cluster_name}}: updated based on utilization metrics."
consumes:
- type: http
namespace: cloudmonitoring
baseUri: "https://monitoring.googleapis.com/v3"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: timeseries
path: "/projects/{{project_id}}/timeSeries"
inputParameters:
- name: project_id
in: path
- name: filter
in: query
operations:
- name: list-timeseries
method: GET
- type: http
namespace: gke
baseUri: "https://container.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: clusters
path: "/projects/{{project_id}}/locations/{{zone}}/clusters/{{cluster_name}}"
inputParameters:
- name: project_id
in: path
- name: zone
in: path
- name: cluster_name
in: path
operations:
- name: get-cluster
method: GET
- name: update-cluster
method: PUT
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.microsoft_graph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Creates a Gmail label and associates a filter rule to automatically categorize incoming messages matching a specified query.
naftiko: "0.5"
info:
label: "Gmail Label and Filter Management"
description: "Creates a Gmail label and associates a filter rule to automatically categorize incoming messages matching a specified query."
tags:
- productivity
- gmail
- automation
capability:
exposes:
- type: mcp
namespace: gmail-automation
port: 8080
tools:
- name: create-label-and-filter
description: "Create a Gmail label and a matching filter to auto-categorize emails."
inputParameters:
- name: label_name
in: body
type: string
description: "The new label name."
- name: filter_query
in: body
type: string
description: "The Gmail search query for the filter (e.g. from:noreply@example.com)."
steps:
- name: create-label
type: call
call: "gmail.create-label"
with:
name: "{{label_name}}"
- name: create-filter
type: call
call: "gmail.create-filter"
with:
query: "{{filter_query}}"
add_label_id: "{{create-label.id}}"
consumes:
- type: http
namespace: gmail
baseUri: "https://gmail.googleapis.com/gmail/v1"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: labels
path: "/users/me/labels"
operations:
- name: create-label
method: POST
- name: filters
path: "/users/me/settings/filters"
operations:
- name: create-filter
method: POST
Pulls campaign performance from Google Ads, calculates optimal budget distribution, updates campaigns, and logs changes to Google Sheets.
naftiko: "0.5"
info:
label: "Google Ads Budget Reallocation Pipeline"
description: "Pulls campaign performance from Google Ads, calculates optimal budget distribution, updates campaigns, and logs changes to Google Sheets."
tags:
- marketing
- google-ads
- google-sheets
capability:
exposes:
- type: mcp
namespace: ads-budget-realloc
port: 8080
tools:
- name: run-budget-reallocation
description: "Optimize Google Ads campaign budgets based on performance data."
inputParameters:
- name: customer_id
in: body
type: string
description: "Google Ads customer ID."
- name: spreadsheet_id
in: body
type: string
description: "Google Sheets spreadsheet ID."
- name: range
in: body
type: string
description: "Cell range."
steps:
- name: get-performance
type: call
call: "googleads.search-stream"
with:
customer_id: "{{customer_id}}"
query: "SELECT campaign.id, metrics.cost_micros FROM campaign"
- name: update-budgets
type: call
call: "googleads.search-stream"
with:
customer_id: "{{customer_id}}"
query: "UPDATE campaign SET budget={{get-performance.optimal_budget}}"
- name: log-changes
type: call
call: "googlesheets.append-values"
with:
spreadsheet_id: "{{spreadsheet_id}}"
range: "{{range}}"
consumes:
- type: http
namespace: googleads
baseUri: "https://googleads.googleapis.com/v14"
authentication:
type: bearer
token: "$secrets.google_ads_token"
resources:
- name: customers
path: "/customers/{{customer_id}}/googleAds:searchStream"
inputParameters:
- name: customer_id
in: path
operations:
- name: search-stream
method: POST
- type: http
namespace: googlesheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values/{{range}}:append"
inputParameters:
- name: spreadsheet_id
in: path
- name: range
in: path
operations:
- name: append-values
method: POST
Fetches performance metrics for a Google Ads campaign including impressions, clicks, conversions, and cost. Used by marketing teams for daily reporting.
naftiko: "0.5"
info:
label: "Google Ads Campaign Performance"
description: "Fetches performance metrics for a Google Ads campaign including impressions, clicks, conversions, and cost. Used by marketing teams for daily reporting."
tags:
- advertising
- marketing
- google-ads
capability:
exposes:
- type: mcp
namespace: ads-reporting
port: 8080
tools:
- name: get-campaign-metrics
description: "Retrieve Google Ads campaign performance by customer ID and campaign ID. Returns impressions, clicks, conversions, and spend."
inputParameters:
- name: customer_id
in: body
type: string
description: "The Google Ads customer ID (10-digit, no dashes)."
- name: campaign_id
in: body
type: string
description: "The campaign identifier."
call: "googleads.query-campaign"
with:
customer_id: "{{customer_id}}"
campaign_id: "{{campaign_id}}"
outputParameters:
- name: impressions
type: number
mapping: "$.results[0].metrics.impressions"
- name: clicks
type: number
mapping: "$.results[0].metrics.clicks"
- name: conversions
type: number
mapping: "$.results[0].metrics.conversions"
- name: cost_micros
type: number
mapping: "$.results[0].metrics.costMicros"
consumes:
- type: http
namespace: googleads
baseUri: "https://googleads.googleapis.com/v16"
authentication:
type: bearer
token: "$secrets.google_ads_token"
inputParameters:
- name: developer-token
in: header
value: "$secrets.google_ads_developer_token"
resources:
- name: campaigns
path: "/customers/{{customer_id}}/googleAds:searchStream"
inputParameters:
- name: customer_id
in: path
operations:
- name: query-campaign
method: POST
Runs a Google Analytics Data API report for page views and sessions by page path over a date range. Used for content performance analysis.
naftiko: "0.5"
info:
label: "Google Analytics Page Report"
description: "Runs a Google Analytics Data API report for page views and sessions by page path over a date range. Used for content performance analysis."
tags:
- analytics
- marketing
- google-analytics
capability:
exposes:
- type: mcp
namespace: ga-reporting
port: 8080
tools:
- name: get-page-report
description: "Run a GA4 report for page views and sessions grouped by page path."
inputParameters:
- name: property_id
in: body
type: string
description: "The GA4 property ID (numeric)."
- name: start_date
in: body
type: string
description: "Report start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "Report end date in YYYY-MM-DD format."
call: "ga4.run-report"
with:
property_id: "{{property_id}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
consumes:
- type: http
namespace: ga4
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: reports
path: "/properties/{{property_id}}:runReport"
inputParameters:
- name: property_id
in: path
operations:
- name: run-report
method: POST
Retrieves details of a specific event from a Google Calendar.
naftiko: "0.5"
info:
label: "Google Calendar Event Retrieval"
description: "Retrieves details of a specific event from a Google Calendar."
tags:
- collaboration
- google-workspace
capability:
exposes:
- type: mcp
namespace: googlecalendar
port: 8080
tools:
- name: get-event
description: "Retrieve a specific calendar event by ID."
inputParameters:
- name: calendar_id
in: body
type: string
description: "The Google Calendar ID."
- name: event_id
in: body
type: string
description: "The calendar event ID."
call: "googlecalendar.get-event"
with:
calendar_id: "{{calendar_id}}"
event_id: "{{event_id}}"
consumes:
- type: http
namespace: googlecalendar
baseUri: "https://www.googleapis.com/calendar/v3"
authentication:
type: bearer
token: "$secrets.google_calendar_token"
resources:
- name: events
path: "/calendars/{{calendar_id}}/events/{{event_id}}"
inputParameters:
- name: calendar_id
in: path
- name: event_id
in: path
operations:
- name: get-event
method: GET
Creates a Google Calendar event with attendees, generates a Google Meet link, and sends a custom invitation email via Gmail.
naftiko: "0.5"
info:
label: "Google Calendar Meeting Scheduler"
description: "Creates a Google Calendar event with attendees, generates a Google Meet link, and sends a custom invitation email via Gmail."
tags:
- productivity
- google-workspace
- google-calendar
- gmail
capability:
exposes:
- type: mcp
namespace: calendar-scheduling
port: 8080
tools:
- name: schedule-meeting
description: "Create a Calendar event with Meet link and send custom email invitation."
inputParameters:
- name: summary
in: body
type: string
description: "The meeting title."
- name: start_time
in: body
type: string
description: "The start time in RFC 3339 format."
- name: end_time
in: body
type: string
description: "The end time in RFC 3339 format."
- name: attendees
in: body
type: string
description: "Comma-separated list of attendee email addresses."
- name: custom_message
in: body
type: string
description: "Custom message body for the invitation email."
steps:
- name: create-event
type: call
call: "calendar.create-event"
with:
summary: "{{summary}}"
start_time: "{{start_time}}"
end_time: "{{end_time}}"
attendees: "{{attendees}}"
conference_data: "hangoutsMeet"
- name: send-invite
type: call
call: "gmail.send-message"
with:
to: "{{attendees}}"
subject: "Meeting: {{summary}}"
body: "{{custom_message}}\n\nJoin: {{create-event.hangoutLink}}\nWhen: {{start_time}} - {{end_time}}"
consumes:
- type: http
namespace: calendar
baseUri: "https://www.googleapis.com/calendar/v3"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: events
path: "/calendars/primary/events"
operations:
- name: create-event
method: POST
- type: http
namespace: gmail
baseUri: "https://gmail.googleapis.com/gmail/v1"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: messages
path: "/users/me/messages/send"
operations:
- name: send-message
method: POST
Lists all members of a Google Chat space.
naftiko: "0.5"
info:
label: "Google Chat Space Membership List"
description: "Lists all members of a Google Chat space."
tags:
- communications
- google-workspace
capability:
exposes:
- type: mcp
namespace: googlechat
port: 8080
tools:
- name: list-members
description: "List all members in a Google Chat space."
inputParameters:
- name: space
in: body
type: string
description: "The Google Chat space name."
call: "googlechat.list-members"
with:
space: "{{space}}"
consumes:
- type: http
namespace: googlechat
baseUri: "https://chat.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.google_chat_token"
resources:
- name: memberships
path: "/spaces/{{space}}/members"
inputParameters:
- name: space
in: path
operations:
- name: list-members
method: GET
Extracts structured data from a Google Doc, parses key-value pairs, appends them to a Google Sheet, and sends a confirmation via Gmail.
naftiko: "0.5"
info:
label: "Google Docs to Sheets Data Sync"
description: "Extracts structured data from a Google Doc, parses key-value pairs, appends them to a Google Sheet, and sends a confirmation via Gmail."
tags:
- productivity
- google-docs
- google-sheets
- gmail
capability:
exposes:
- type: mcp
namespace: docs-to-sheets
port: 8080
tools:
- name: sync-doc-to-sheet
description: "Extract data from a Google Doc and append to a Google Sheet with email confirmation."
inputParameters:
- name: document_id
in: body
type: string
description: "The Google Docs document ID."
- name: spreadsheet_id
in: body
type: string
description: "The Google Sheets spreadsheet ID."
- name: sheet_range
in: body
type: string
description: "The target sheet range (e.g. Sheet1!A1)."
- name: notify_email
in: body
type: string
description: "Email address for sync confirmation."
steps:
- name: get-doc-content
type: call
call: "docs.get-document"
with:
document_id: "{{document_id}}"
- name: append-to-sheet
type: call
call: "sheets.append-values"
with:
spreadsheet_id: "{{spreadsheet_id}}"
range: "{{sheet_range}}"
values: "{{get-doc-content.body.content}}"
- name: send-confirmation
type: call
call: "gmail.send-message"
with:
to: "{{notify_email}}"
subject: "Doc-to-Sheet sync complete"
body: "Data from document {{document_id}} has been synced to spreadsheet {{spreadsheet_id}} at range {{sheet_range}}. Rows appended: {{append-to-sheet.updates.updatedRows}}."
consumes:
- type: http
namespace: docs
baseUri: "https://docs.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: documents
path: "/documents/{{document_id}}"
inputParameters:
- name: document_id
in: path
operations:
- name: get-document
method: GET
- type: http
namespace: sheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: values
path: "/spreadsheets/{{spreadsheet_id}}/values/{{range}}:append"
inputParameters:
- name: spreadsheet_id
in: path
- name: range
in: path
operations:
- name: append-values
method: POST
- type: http
namespace: gmail
baseUri: "https://gmail.googleapis.com/gmail/v1"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: messages
path: "/users/me/messages/send"
operations:
- name: send-message
method: POST
Retrieves metadata for a file stored in Google Drive including permissions and sharing status.
naftiko: "0.5"
info:
label: "Google Drive File Metadata Lookup"
description: "Retrieves metadata for a file stored in Google Drive including permissions and sharing status."
tags:
- collaboration
- google-drive
capability:
exposes:
- type: mcp
namespace: googledrive
port: 8080
tools:
- name: get-file
description: "Retrieve metadata for a Google Drive file."
inputParameters:
- name: file_id
in: body
type: string
description: "The Google Drive file ID."
call: "googledrive.get-file"
with:
file_id: "{{file_id}}"
consumes:
- type: http
namespace: googledrive
baseUri: "https://www.googleapis.com/drive/v3"
authentication:
type: bearer
token: "$secrets.google_drive_token"
resources:
- name: files
path: "/files/{{file_id}}"
inputParameters:
- name: file_id
in: path
operations:
- name: get-file
method: GET
Fetches responses from a Google Form, aggregates summary statistics, writes them to a Google Sheet, and sends the report via Gmail.
naftiko: "0.5"
info:
label: "Google Forms Response Aggregator"
description: "Fetches responses from a Google Form, aggregates summary statistics, writes them to a Google Sheet, and sends the report via Gmail."
tags:
- productivity
- google-forms
- google-sheets
- gmail
capability:
exposes:
- type: mcp
namespace: forms-aggregation
port: 8080
tools:
- name: aggregate-form-responses
description: "Collect Google Forms responses, summarize, push to Sheets, and email report."
inputParameters:
- name: form_id
in: body
type: string
description: "The Google Form ID."
- name: spreadsheet_id
in: body
type: string
description: "The target Google Sheets spreadsheet ID."
- name: sheet_range
in: body
type: string
description: "The target range in the spreadsheet."
- name: report_email
in: body
type: string
description: "Email to send the aggregated report."
steps:
- name: get-responses
type: call
call: "forms.list-responses"
with:
form_id: "{{form_id}}"
- name: write-to-sheet
type: call
call: "sheets.update-values"
with:
spreadsheet_id: "{{spreadsheet_id}}"
range: "{{sheet_range}}"
values: "{{get-responses.responses}}"
- name: send-report
type: call
call: "gmail.send-message"
with:
to: "{{report_email}}"
subject: "Form Responses Report for {{form_id}}"
body: "Total responses: {{get-responses.responses.length}}. Data written to spreadsheet {{spreadsheet_id}}."
consumes:
- type: http
namespace: forms
baseUri: "https://forms.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: responses
path: "/forms/{{form_id}}/responses"
inputParameters:
- name: form_id
in: path
operations:
- name: list-responses
method: GET
- type: http
namespace: sheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: values
path: "/spreadsheets/{{spreadsheet_id}}/values/{{range}}"
inputParameters:
- name: spreadsheet_id
in: path
- name: range
in: path
operations:
- name: update-values
method: PUT
- type: http
namespace: gmail
baseUri: "https://gmail.googleapis.com/gmail/v1"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: messages
path: "/users/me/messages/send"
operations:
- name: send-message
method: POST
Tracks fleet vehicle positions via Google Maps Routes API, updates a Cloud Firestore collection, and sends delay alerts to Microsoft Teams.
naftiko: "0.5"
info:
label: "Google Maps Fleet Tracking Pipeline"
description: "Tracks fleet vehicle positions via Google Maps Routes API, updates a Cloud Firestore collection, and sends delay alerts to Microsoft Teams."
tags:
- logistics
- google-maps
- google-cloud-platform
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: fleet-tracking
port: 8080
tools:
- name: run-fleet-tracking
description: "Track fleet positions and notify on delays."
inputParameters:
- name: project_id
in: body
type: string
description: "GCP project ID."
- name: collection
in: body
type: string
description: "Firestore collection."
- name: origins
in: body
type: string
description: "Origin addresses."
- name: destinations
in: body
type: string
description: "Destination addresses."
- name: team_id
in: body
type: string
description: "Teams team ID."
- name: channel_id
in: body
type: string
description: "Teams channel ID."
steps:
- name: compute-distances
type: call
call: "routes.compute-matrix"
with:
origins: "{{origins}}"
destinations: "{{destinations}}"
- name: update-firestore
type: call
call: "firestore.create-document"
with:
project_id: "{{project_id}}"
collection: "{{collection}}"
- name: alert-delays
type: call
call: "teams.send-message"
with:
team_id: "{{team_id}}"
channel_id: "{{channel_id}}"
text: "Fleet tracking update complete."
consumes:
- type: http
namespace: routes
baseUri: "https://routes.googleapis.com/distanceMatrix/v2"
authentication:
type: bearer
token: "$secrets.google_maps_key"
resources:
- name: distanceMatrix
path: "/distanceMatrix:compute"
operations:
- name: compute-matrix
method: POST
- type: http
namespace: firestore
baseUri: "https://firestore.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: documents
path: "/projects/{{project_id}}/databases/(default)/documents/{{collection}}"
inputParameters:
- name: project_id
in: path
- name: collection
in: path
operations:
- name: create-document
method: POST
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.microsoft_graph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Resolves a street address to geographic coordinates using the Google Maps Geocoding API. Returns latitude, longitude, and formatted address.
naftiko: "0.5"
info:
label: "Google Maps Geocoding"
description: "Resolves a street address to geographic coordinates using the Google Maps Geocoding API. Returns latitude, longitude, and formatted address."
tags:
- maps
- geocoding
- google-maps
capability:
exposes:
- type: mcp
namespace: maps-geocoding
port: 8080
tools:
- name: geocode-address
description: "Convert a street address to lat/lng coordinates via Google Maps Geocoding."
inputParameters:
- name: address
in: body
type: string
description: "The street address to geocode."
call: "maps.geocode"
with:
address: "{{address}}"
outputParameters:
- name: latitude
type: number
mapping: "$.results[0].geometry.location.lat"
- name: longitude
type: number
mapping: "$.results[0].geometry.location.lng"
- name: formatted_address
type: string
mapping: "$.results[0].formatted_address"
consumes:
- type: http
namespace: maps
baseUri: "https://maps.googleapis.com/maps/api"
authentication:
type: apiKey
key: "$secrets.google_maps_api_key"
in: query
name: key
resources:
- name: geocode
path: "/geocode/json"
inputParameters:
- name: address
in: query
operations:
- name: geocode
method: GET
Retrieves organic search performance data from Search Console including clicks, impressions, CTR, and average position for a given site.
naftiko: "0.5"
info:
label: "Google Search Console Performance"
description: "Retrieves organic search performance data from Search Console including clicks, impressions, CTR, and average position for a given site."
tags:
- seo
- analytics
- google-search-console
capability:
exposes:
- type: mcp
namespace: search-console
port: 8080
tools:
- name: get-search-performance
description: "Query Search Console search analytics for a verified property. Returns clicks, impressions, CTR, and position."
inputParameters:
- name: site_url
in: body
type: string
description: "The verified site URL (e.g. https://example.com)."
- name: start_date
in: body
type: string
description: "Start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "End date in YYYY-MM-DD format."
call: "searchconsole.query-analytics"
with:
site_url: "{{site_url}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
consumes:
- type: http
namespace: searchconsole
baseUri: "https://searchconsole.googleapis.com/webmasters/v3"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: search-analytics
path: "/sites/{{site_url}}/searchAnalytics/query"
inputParameters:
- name: site_url
in: path
operations:
- name: query-analytics
method: POST
Reads a range of cells from a Google Sheets spreadsheet.
naftiko: "0.5"
info:
label: "Google Sheets Cell Range Reader"
description: "Reads a range of cells from a Google Sheets spreadsheet."
tags:
- data
- google-sheets
capability:
exposes:
- type: mcp
namespace: googlesheets
port: 8080
tools:
- name: get-values
description: "Read cell values from a specified range in Google Sheets."
inputParameters:
- name: spreadsheet_id
in: body
type: string
description: "The Google Sheets spreadsheet ID."
- name: range
in: body
type: string
description: "The A1 notation range to read."
call: "googlesheets.get-values"
with:
spreadsheet_id: "{{spreadsheet_id}}"
range: "{{range}}"
consumes:
- type: http
namespace: googlesheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values/{{range}}"
inputParameters:
- name: spreadsheet_id
in: path
- name: range
in: path
operations:
- name: get-values
method: GET
Creates a new Google Slides presentation from a template, populates it with data from a Google Sheet, and shares it via Google Drive with email notification.
naftiko: "0.5"
info:
label: "Google Slides Presentation Generator"
description: "Creates a new Google Slides presentation from a template, populates it with data from a Google Sheet, and shares it via Google Drive with email notification."
tags:
- productivity
- google-slides
- google-sheets
- google-drive
- gmail
capability:
exposes:
- type: mcp
namespace: slides-generator
port: 8080
tools:
- name: generate-presentation
description: "Create a Slides deck from a template, fill with Sheets data, share via Drive, and notify."
inputParameters:
- name: template_presentation_id
in: body
type: string
description: "The Slides template presentation ID."
- name: spreadsheet_id
in: body
type: string
description: "The source Google Sheets spreadsheet ID."
- name: sheet_range
in: body
type: string
description: "The data range to pull from the spreadsheet."
- name: share_email
in: body
type: string
description: "Email address to share the generated presentation with."
steps:
- name: copy-template
type: call
call: "drive.copy-file"
with:
file_id: "{{template_presentation_id}}"
name: "Generated Report"
- name: get-sheet-data
type: call
call: "sheets.get-values"
with:
spreadsheet_id: "{{spreadsheet_id}}"
range: "{{sheet_range}}"
- name: update-slides
type: call
call: "slides.batch-update"
with:
presentation_id: "{{copy-template.id}}"
data: "{{get-sheet-data.values}}"
- name: share-presentation
type: call
call: "drive.share-file"
with:
file_id: "{{copy-template.id}}"
email: "{{share_email}}"
role: "reader"
- name: notify-recipient
type: call
call: "gmail.send-message"
with:
to: "{{share_email}}"
subject: "New presentation ready"
body: "Your generated presentation is ready: https://docs.google.com/presentation/d/{{copy-template.id}}"
consumes:
- type: http
namespace: drive
baseUri: "https://www.googleapis.com/drive/v3"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: files
path: "/files/{{file_id}}/copy"
inputParameters:
- name: file_id
in: path
operations:
- name: copy-file
method: POST
- name: permissions
path: "/files/{{file_id}}/permissions"
inputParameters:
- name: file_id
in: path
operations:
- name: share-file
method: POST
- type: http
namespace: sheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: values
path: "/spreadsheets/{{spreadsheet_id}}/values/{{range}}"
inputParameters:
- name: spreadsheet_id
in: path
- name: range
in: path
operations:
- name: get-values
method: GET
- type: http
namespace: slides
baseUri: "https://slides.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: presentations
path: "/presentations/{{presentation_id}}:batchUpdate"
inputParameters:
- name: presentation_id
in: path
operations:
- name: batch-update
method: POST
- type: http
namespace: gmail
baseUri: "https://gmail.googleapis.com/gmail/v1"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: messages
path: "/users/me/messages/send"
operations:
- name: send-message
method: POST
Retrieves the latest published container version from Google Tag Manager including tag count, trigger count, and publish timestamp.
naftiko: "0.5"
info:
label: "Google Tag Manager Container Version"
description: "Retrieves the latest published container version from Google Tag Manager including tag count, trigger count, and publish timestamp."
tags:
- marketing
- analytics
- google-tag-manager
capability:
exposes:
- type: mcp
namespace: gtm-governance
port: 8080
tools:
- name: get-container-version
description: "Look up the latest GTM container version by account and container ID."
inputParameters:
- name: account_id
in: body
type: string
description: "The GTM account ID."
- name: container_id
in: body
type: string
description: "The GTM container ID."
call: "gtm.get-latest-version"
with:
account_id: "{{account_id}}"
container_id: "{{container_id}}"
outputParameters:
- name: version_id
type: string
mapping: "$.containerVersionId"
- name: tag_count
type: number
mapping: "$.tag.length"
- name: trigger_count
type: number
mapping: "$.trigger.length"
consumes:
- type: http
namespace: gtm
baseUri: "https://tagmanager.googleapis.com/tagmanager/v2"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: versions
path: "/accounts/{{account_id}}/containers/{{container_id}}/versions/latest"
inputParameters:
- name: account_id
in: path
- name: container_id
in: path
operations:
- name: get-latest-version
method: GET
Audits Google Workspace license usage, identifies inactive users, generates a report in Google Sheets, and sends a summary to the IT admin.
naftiko: "0.5"
info:
label: "Google Workspace License Optimization Pipeline"
description: "Audits Google Workspace license usage, identifies inactive users, generates a report in Google Sheets, and sends a summary to the IT admin."
tags:
- management
- google-workspace
- google-sheets
capability:
exposes:
- type: mcp
namespace: ws-license-opt
port: 8080
tools:
- name: run-license-optimization
description: "Audit Workspace license usage and generate an optimization report."
inputParameters:
- name: domain
in: body
type: string
description: "The Google Workspace domain."
- name: product_id
in: body
type: string
description: "The licensing product ID."
- name: sku_id
in: body
type: string
description: "The SKU ID."
- name: spreadsheet_id
in: body
type: string
description: "Google Sheets spreadsheet ID."
- name: range
in: body
type: string
description: "Cell range to append data."
steps:
- name: list-users
type: call
call: "admindir.list-users"
with:
domain: "{{domain}}"
maxResults: "500"
- name: list-licenses
type: call
call: "licensing.list-assignments"
with:
product_id: "{{product_id}}"
sku_id: "{{sku_id}}"
- name: write-report
type: call
call: "googlesheets.append-values"
with:
spreadsheet_id: "{{spreadsheet_id}}"
range: "{{range}}"
values: "{{list-licenses.items}}"
- name: notify-admin
type: call
call: "admindir.list-users"
with:
domain: "{{domain}}"
maxResults: "1"
consumes:
- type: http
namespace: admindir
baseUri: "https://admin.googleapis.com/admin/directory/v1"
authentication:
type: bearer
token: "$secrets.google_admin_token"
resources:
- name: users
path: "/users"
inputParameters:
- name: domain
in: query
- name: maxResults
in: query
operations:
- name: list-users
method: GET
- type: http
namespace: licensing
baseUri: "https://licensing.googleapis.com/apps/licensing/v1"
authentication:
type: bearer
token: "$secrets.google_admin_token"
resources:
- name: licenseAssignments
path: "/product/{{product_id}}/sku/{{sku_id}}/users"
inputParameters:
- name: product_id
in: path
- name: sku_id
in: path
operations:
- name: list-assignments
method: GET
- type: http
namespace: googlesheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values/{{range}}:append"
inputParameters:
- name: spreadsheet_id
in: path
- name: range
in: path
operations:
- name: append-values
method: POST
Retrieves a Google Workspace user profile by email including org unit, last login, and admin status. Used by IT admins for identity audits.
naftiko: "0.5"
info:
label: "Google Workspace User Lookup"
description: "Retrieves a Google Workspace user profile by email including org unit, last login, and admin status. Used by IT admins for identity audits."
tags:
- identity
- google-workspace
- admin
capability:
exposes:
- type: mcp
namespace: workspace-admin
port: 8080
tools:
- name: get-workspace-user
description: "Look up a Google Workspace user by primary email address."
inputParameters:
- name: user_email
in: body
type: string
description: "The user's primary email address."
call: "workspace.get-user"
with:
user_email: "{{user_email}}"
outputParameters:
- name: full_name
type: string
mapping: "$.name.fullName"
- name: org_unit
type: string
mapping: "$.orgUnitPath"
- name: last_login
type: string
mapping: "$.lastLoginTime"
- name: is_admin
type: boolean
mapping: "$.isAdmin"
consumes:
- type: http
namespace: workspace
baseUri: "https://admin.googleapis.com/admin/directory/v1"
authentication:
type: bearer
token: "$secrets.workspace_admin_token"
resources:
- name: users
path: "/users/{{user_email}}"
inputParameters:
- name: user_email
in: path
operations:
- name: get-user
method: GET
On a Cloud Monitoring alert, creates a PagerDuty incident, opens a Google Chat war room, queries recent Cloud Logging entries, and posts a summary to the war room.
naftiko: "0.5"
info:
label: "Incident Response Orchestrator"
description: "On a Cloud Monitoring alert, creates a PagerDuty incident, opens a Google Chat war room, queries recent Cloud Logging entries, and posts a summary to the war room."
tags:
- operations
- incident-management
- cloud-monitoring
- google-cloud-platform
- pagerduty
capability:
exposes:
- type: mcp
namespace: incident-response
port: 8080
tools:
- name: trigger-incident-response
description: "Orchestrate incident response across monitoring, logging, PagerDuty, and Google Chat."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project with the alert."
- name: alert_policy_name
in: body
type: string
description: "The Cloud Monitoring alert policy resource name."
- name: service_name
in: body
type: string
description: "The affected service name for context."
- name: pagerduty_service_id
in: body
type: string
description: "The PagerDuty service ID to create the incident in."
- name: chat_space
in: body
type: string
description: "The Google Chat space for the war room."
steps:
- name: get-alert
type: call
call: "monitoring.get-alert-policy"
with:
alert_policy_name: "{{alert_policy_name}}"
- name: create-incident
type: call
call: "pagerduty.create-incident"
with:
service_id: "{{pagerduty_service_id}}"
title: "Alert fired: {{get-alert.displayName}} on {{service_name}}"
urgency: "high"
- name: fetch-logs
type: call
call: "logging.list-entries"
with:
project_id: "{{project_id}}"
filter: "resource.labels.service_name={{service_name}} severity>=ERROR"
- name: post-summary
type: call
call: "googlechat.send-message"
with:
space: "{{chat_space}}"
text: "Incident {{create-incident.incident.id}}: {{get-alert.displayName}}. PagerDuty: {{create-incident.incident.html_url}}. Recent errors: {{fetch-logs.entries.length}} entries."
consumes:
- type: http
namespace: monitoring
baseUri: "https://monitoring.googleapis.com/v3"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: alert-policies
path: "/{{alert_policy_name}}"
inputParameters:
- name: alert_policy_name
in: path
operations:
- name: get-alert-policy
method: GET
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: logging
baseUri: "https://logging.googleapis.com/v2"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: entries
path: "/entries:list"
operations:
- name: list-entries
method: POST
- type: http
namespace: googlechat
baseUri: "https://chat.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.google_chat_token"
resources:
- name: messages
path: "/spaces/{{space}}/messages"
inputParameters:
- name: space
in: path
operations:
- name: send-message
method: POST
Compares deployed state against desired config, identifies drift, creates remediation tickets, and alerts ops.
naftiko: "0.5"
info:
label: "Infrastructure Drift Detection Pipeline"
description: "Compares deployed state against desired config, identifies drift, creates remediation tickets, and alerts ops."
tags:
- devops
- github
- jira
- slack
capability:
exposes:
- type: mcp
namespace: devops
port: 8080
tools:
- name: infrastructure_drift_detection
description: "Orchestrate infrastructure drift detection pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-github
type: call
call: "github.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-jira
type: call
call: "jira.process-resource"
with:
data: "{{get-github.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Infrastructure Drift Detection Pipeline step 3 complete."
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: github-op
method: POST
- type: http
namespace: jira
baseUri: "https://alphabet.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: jira-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Executes a saved Looker look by ID and returns the result set. Used by analytics teams to pull report data programmatically.
naftiko: "0.5"
info:
label: "Looker Dashboard Query"
description: "Executes a saved Looker look by ID and returns the result set. Used by analytics teams to pull report data programmatically."
tags:
- analytics
- bi
- looker
capability:
exposes:
- type: mcp
namespace: looker-analytics
port: 8080
tools:
- name: run-look
description: "Execute a saved Looker look by look ID and return the result data."
inputParameters:
- name: look_id
in: body
type: string
description: "The Looker look identifier."
- name: result_format
in: body
type: string
description: "Output format: json, csv, or txt."
call: "looker.run-look"
with:
look_id: "{{look_id}}"
result_format: "{{result_format}}"
consumes:
- type: http
namespace: looker
baseUri: "https://alphabet.cloud.looker.com/api/4.0"
authentication:
type: bearer
token: "$secrets.looker_api_token"
resources:
- name: looks
path: "/looks/{{look_id}}/run/{{result_format}}"
inputParameters:
- name: look_id
in: path
- name: result_format
in: path
operations:
- name: run-look
method: GET
Runs a Looker dashboard query, exports the results to a BigQuery table, and posts a completion notification to Google Chat.
naftiko: "0.5"
info:
label: "Looker to BigQuery Scheduled Export"
description: "Runs a Looker dashboard query, exports the results to a BigQuery table, and posts a completion notification to Google Chat."
tags:
- analytics
- bi
- looker
- bigquery
capability:
exposes:
- type: mcp
namespace: looker-export
port: 8080
tools:
- name: export-looker-to-bq
description: "Run a Looker query, export results to BigQuery, and notify via Google Chat."
inputParameters:
- name: look_id
in: body
type: string
description: "The Looker look ID to execute."
- name: project_id
in: body
type: string
description: "The GCP project ID for BigQuery."
- name: bq_dataset
in: body
type: string
description: "The target BigQuery dataset."
- name: bq_table
in: body
type: string
description: "The target BigQuery table."
- name: chat_space
in: body
type: string
description: "Google Chat space for notifications."
steps:
- name: run-looker-query
type: call
call: "looker.run-look"
with:
look_id: "{{look_id}}"
result_format: "json"
- name: load-to-bq
type: call
call: "bigquery.insert-rows"
with:
project_id: "{{project_id}}"
dataset_id: "{{bq_dataset}}"
table_id: "{{bq_table}}"
rows: "{{run-looker-query}}"
- name: notify-completion
type: call
call: "googlechat.send-message"
with:
space: "{{chat_space}}"
text: "Looker export complete. Look {{look_id}} data loaded to {{bq_dataset}}.{{bq_table}}."
consumes:
- type: http
namespace: looker
baseUri: "https://alphabet.cloud.looker.com/api/4.0"
authentication:
type: bearer
token: "$secrets.looker_api_token"
resources:
- name: looks
path: "/looks/{{look_id}}/run/{{result_format}}"
inputParameters:
- name: look_id
in: path
- name: result_format
in: path
operations:
- name: run-look
method: GET
- type: http
namespace: bigquery
baseUri: "https://bigquery.googleapis.com/bigquery/v2"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: tabledata
path: "/projects/{{project_id}}/datasets/{{dataset_id}}/tables/{{table_id}}/insertAll"
inputParameters:
- name: project_id
in: path
- name: dataset_id
in: path
- name: table_id
in: path
operations:
- name: insert-rows
method: POST
- type: http
namespace: googlechat
baseUri: "https://chat.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.google_chat_token"
resources:
- name: messages
path: "/spaces/{{space}}/messages"
inputParameters:
- name: space
in: path
operations:
- name: send-message
method: POST
Triggers a Vertex AI custom training job, waits for completion, uploads the trained model to the Model Registry, and deploys it to an existing endpoint with traffic split.
naftiko: "0.5"
info:
label: "ML Model Training to Deployment Pipeline"
description: "Triggers a Vertex AI custom training job, waits for completion, uploads the trained model to the Model Registry, and deploys it to an existing endpoint with traffic split."
tags:
- ai
- machine-learning
- vertex-ai
- mlops
- google-cloud-platform
capability:
exposes:
- type: mcp
namespace: vertex-mlops
port: 8080
tools:
- name: train-and-deploy-model
description: "Run end-to-end ML workflow: launch training, register model, deploy to endpoint."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: region
in: body
type: string
description: "The Vertex AI region."
- name: training_pipeline_id
in: body
type: string
description: "The training pipeline configuration ID."
- name: endpoint_id
in: body
type: string
description: "The target endpoint for deployment."
- name: traffic_percentage
in: body
type: number
description: "Traffic percentage to route to the new model (0-100)."
steps:
- name: launch-training
type: call
call: "vertexai.create-training-pipeline"
with:
project_id: "{{project_id}}"
region: "{{region}}"
pipeline_id: "{{training_pipeline_id}}"
- name: get-training-status
type: call
call: "vertexai.get-training-pipeline"
with:
project_id: "{{project_id}}"
region: "{{region}}"
pipeline_name: "{{launch-training.name}}"
- name: upload-model
type: call
call: "vertexai.upload-model"
with:
project_id: "{{project_id}}"
region: "{{region}}"
artifact_uri: "{{get-training-status.modelToUpload.artifactUri}}"
- name: deploy-model
type: call
call: "vertexai.deploy-model"
with:
project_id: "{{project_id}}"
region: "{{region}}"
endpoint_id: "{{endpoint_id}}"
model_id: "{{upload-model.model}}"
traffic_percentage: "{{traffic_percentage}}"
consumes:
- type: http
namespace: vertexai
baseUri: "https://us-central1-aiplatform.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: training-pipelines
path: "/projects/{{project_id}}/locations/{{region}}/trainingPipelines"
inputParameters:
- name: project_id
in: path
- name: region
in: path
operations:
- name: create-training-pipeline
method: POST
- name: get-training-pipeline
method: GET
- name: models
path: "/projects/{{project_id}}/locations/{{region}}/models:upload"
inputParameters:
- name: project_id
in: path
- name: region
in: path
operations:
- name: upload-model
method: POST
- name: endpoint-deployments
path: "/projects/{{project_id}}/locations/{{region}}/endpoints/{{endpoint_id}}:deployModel"
inputParameters:
- name: project_id
in: path
- name: region
in: path
- name: endpoint_id
in: path
operations:
- name: deploy-model
method: POST
Exports GCP billing data from BigQuery, fetches comparable data from the Cloud Billing API, generates a cost summary, and posts it to a Google Sheets dashboard with Gmail notification.
naftiko: "0.5"
info:
label: "Multi-Cloud Cost Reporting Pipeline"
description: "Exports GCP billing data from BigQuery, fetches comparable data from the Cloud Billing API, generates a cost summary, and posts it to a Google Sheets dashboard with Gmail notification."
tags:
- finops
- billing
- bigquery
- google-sheets
- gmail
capability:
exposes:
- type: mcp
namespace: cost-reporting
port: 8080
tools:
- name: generate-cost-report
description: "Build a cost report from BigQuery billing exports and publish to Sheets with email alert."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: billing_dataset
in: body
type: string
description: "The BigQuery dataset containing billing exports."
- name: billing_table
in: body
type: string
description: "The billing export table name."
- name: spreadsheet_id
in: body
type: string
description: "The Google Sheets spreadsheet ID for the dashboard."
- name: notify_email
in: body
type: string
description: "Finance team email for report notifications."
steps:
- name: query-billing
type: call
call: "bigquery.run-query"
with:
project_id: "{{project_id}}"
query: "SELECT service.description, SUM(cost) as total_cost FROM `{{project_id}}.{{billing_dataset}}.{{billing_table}}` GROUP BY service.description ORDER BY total_cost DESC"
- name: update-sheet
type: call
call: "sheets.update-values"
with:
spreadsheet_id: "{{spreadsheet_id}}"
range: "CostReport!A1"
values: "{{query-billing.rows}}"
- name: email-report
type: call
call: "gmail.send-message"
with:
to: "{{notify_email}}"
subject: "GCP Cost Report Updated"
body: "The cost dashboard has been refreshed. View at https://docs.google.com/spreadsheets/d/{{spreadsheet_id}}. Total services: {{query-billing.totalRows}}."
consumes:
- type: http
namespace: bigquery
baseUri: "https://bigquery.googleapis.com/bigquery/v2"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: jobs
path: "/projects/{{project_id}}/queries"
inputParameters:
- name: project_id
in: path
operations:
- name: run-query
method: POST
- type: http
namespace: sheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: values
path: "/spreadsheets/{{spreadsheet_id}}/values/{{range}}"
inputParameters:
- name: spreadsheet_id
in: path
- name: range
in: path
operations:
- name: update-values
method: PUT
- type: http
namespace: gmail
baseUri: "https://gmail.googleapis.com/gmail/v1"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: messages
path: "/users/me/messages/send"
operations:
- name: send-message
method: POST
Initiates failover to secondary region, validates services, runs health checks, and reports results.
naftiko: "0.5"
info:
label: "Multi-Region Failover Test Pipeline"
description: "Initiates failover to secondary region, validates services, runs health checks, and reports results."
tags:
- disaster-recovery
- kubernetes
- datadog
- slack
capability:
exposes:
- type: mcp
namespace: disaster-recovery
port: 8080
tools:
- name: multi_region_failover_test_pipeline
description: "Orchestrate multi-region failover test pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-k8s
type: call
call: "k8s.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-datadog
type: call
call: "datadog.process-resource"
with:
data: "{{get-k8s.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Multi-Region Failover Test Pipeline step 3 complete."
consumes:
- type: http
namespace: k8s
baseUri: "https://alphabet-k8s.com/api/v1"
authentication:
type: bearer
token: "$secrets.k8s_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: kubernetes-op
method: POST
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
header: "DD-API-KEY"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: datadog-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Retrieves a Google Pay transaction, cross-references with Salesforce order data, logs the reconciliation to BigQuery, and alerts finance via Gmail on discrepancies.
naftiko: "0.5"
info:
label: "Payment Reconciliation Pipeline"
description: "Retrieves a Google Pay transaction, cross-references with Salesforce order data, logs the reconciliation to BigQuery, and alerts finance via Gmail on discrepancies."
tags:
- payments
- google-pay
- finance
- salesforce
- bigquery
- gmail
capability:
exposes:
- type: mcp
namespace: payment-reconciliation
port: 8080
tools:
- name: reconcile-payment
description: "Reconcile Google Pay transaction with Salesforce order, log to BigQuery, alert on mismatch."
inputParameters:
- name: order_id
in: body
type: string
description: "The Google Pay order identifier."
- name: sfdc_order_id
in: body
type: string
description: "The corresponding Salesforce order ID."
- name: project_id
in: body
type: string
description: "GCP project for BigQuery logging."
- name: finance_email
in: body
type: string
description: "Finance team email for discrepancy alerts."
steps:
- name: get-gpay-transaction
type: call
call: "googlepay.get-order"
with:
order_id: "{{order_id}}"
- name: get-sfdc-order
type: call
call: "salesforce.get-order"
with:
order_id: "{{sfdc_order_id}}"
- name: log-reconciliation
type: call
call: "bigquery.insert-rows"
with:
project_id: "{{project_id}}"
dataset_id: "finance_ops"
table_id: "payment_reconciliation"
rows: "[{\"gpay_order\": \"{{order_id}}\", \"gpay_amount\": \"{{get-gpay-transaction.totalPrice}}\", \"sfdc_amount\": \"{{get-sfdc-order.TotalAmount}}\"}]"
- name: alert-discrepancy
type: call
call: "gmail.send-message"
with:
to: "{{finance_email}}"
subject: "Payment Reconciliation: {{order_id}}"
body: "GPay amount: {{get-gpay-transaction.totalPrice}} {{get-gpay-transaction.currencyCode}}. SFDC amount: {{get-sfdc-order.TotalAmount}}. Status: {{get-gpay-transaction.orderStatus}}."
consumes:
- type: http
namespace: googlepay
baseUri: "https://payments.googleapis.com/pay/v1"
authentication:
type: bearer
token: "$secrets.google_pay_token"
resources:
- name: orders
path: "/orders/{{order_id}}"
inputParameters:
- name: order_id
in: path
operations:
- name: get-order
method: GET
- type: http
namespace: salesforce
baseUri: "https://alphabet.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: orders
path: "/sobjects/Order/{{order_id}}"
inputParameters:
- name: order_id
in: path
operations:
- name: get-order
method: GET
- type: http
namespace: bigquery
baseUri: "https://bigquery.googleapis.com/bigquery/v2"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: tabledata
path: "/projects/{{project_id}}/datasets/{{dataset_id}}/tables/{{table_id}}/insertAll"
inputParameters:
- name: project_id
in: path
- name: dataset_id
in: path
- name: table_id
in: path
operations:
- name: insert-rows
method: POST
- type: http
namespace: gmail
baseUri: "https://gmail.googleapis.com/gmail/v1"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: messages
path: "/users/me/messages/send"
operations:
- name: send-message
method: POST
Initiates review cycles, collects feedback, aggregates scores, and distributes to managers.
naftiko: "0.5"
info:
label: "Performance Review Cycle Pipeline"
description: "Initiates review cycles, collects feedback, aggregates scores, and distributes to managers."
tags:
- hr
- workday
- confluence
- slack
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: performance_review_cycle_pipeline
description: "Orchestrate performance review cycle pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-gcp
type: call
call: "gcp.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-confluence
type: call
call: "confluence.process-resource"
with:
data: "{{get-gcp.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Performance Review Cycle Pipeline step 3 complete."
consumes:
- type: http
namespace: gcp
baseUri: "https://compute.googleapis.com/compute/v1/projects/alphabet"
authentication:
type: bearer
token: "$secrets.gcp_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: gcp-op
method: POST
- type: http
namespace: confluence
baseUri: "https://alphabet.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: confluence-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Queries Salesforce for new leads, transforms the data, loads into a BigQuery table, and triggers a Looker dashboard refresh.
naftiko: "0.5"
info:
label: "Salesforce to BigQuery Lead Sync"
description: "Queries Salesforce for new leads, transforms the data, loads into a BigQuery table, and triggers a Looker dashboard refresh."
tags:
- crm
- data
- salesforce
- bigquery
- looker
capability:
exposes:
- type: mcp
namespace: sfdc-bq-sync
port: 8080
tools:
- name: sync-leads-to-bigquery
description: "Fetch Salesforce leads, load to BigQuery, and refresh Looker dashboard."
inputParameters:
- name: sfdc_query
in: body
type: string
description: "SOQL query to fetch leads from Salesforce."
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: bq_dataset
in: body
type: string
description: "The BigQuery dataset."
- name: bq_table
in: body
type: string
description: "The BigQuery table."
- name: looker_dashboard_id
in: body
type: string
description: "The Looker dashboard ID to refresh."
steps:
- name: query-salesforce
type: call
call: "salesforce.query"
with:
q: "{{sfdc_query}}"
- name: load-to-bq
type: call
call: "bigquery.insert-rows"
with:
project_id: "{{project_id}}"
dataset_id: "{{bq_dataset}}"
table_id: "{{bq_table}}"
rows: "{{query-salesforce.records}}"
- name: refresh-looker
type: call
call: "looker.run-dashboard"
with:
dashboard_id: "{{looker_dashboard_id}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://alphabet.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query"
inputParameters:
- name: q
in: query
operations:
- name: query
method: GET
- type: http
namespace: bigquery
baseUri: "https://bigquery.googleapis.com/bigquery/v2"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: tabledata
path: "/projects/{{project_id}}/datasets/{{dataset_id}}/tables/{{table_id}}/insertAll"
inputParameters:
- name: project_id
in: path
- name: dataset_id
in: path
- name: table_id
in: path
operations:
- name: insert-rows
method: POST
- type: http
namespace: looker
baseUri: "https://alphabet.cloud.looker.com/api/4.0"
authentication:
type: bearer
token: "$secrets.looker_api_token"
resources:
- name: dashboards
path: "/dashboards/{{dashboard_id}}/run"
inputParameters:
- name: dashboard_id
in: path
operations:
- name: run-dashboard
method: POST
Accesses a secret version from Google Cloud Secret Manager.
naftiko: "0.5"
info:
label: "Secret Manager Secret Retrieval"
description: "Accesses a secret version from Google Cloud Secret Manager."
tags:
- security
- google-cloud-platform
capability:
exposes:
- type: mcp
namespace: secretmanager
port: 8080
tools:
- name: access-secret
description: "Access a specific version of a secret from Secret Manager."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: secret_id
in: body
type: string
description: "The secret identifier."
- name: version
in: body
type: string
description: "The secret version number or latest."
call: "secretmanager.access-secret"
with:
project_id: "{{project_id}}"
secret_id: "{{secret_id}}"
version: "{{version}}"
consumes:
- type: http
namespace: secretmanager
baseUri: "https://secretmanager.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: secrets
path: "/projects/{{project_id}}/secrets/{{secret_id}}/versions/{{version}}:access"
inputParameters:
- name: project_id
in: path
- name: secret_id
in: path
- name: version
in: path
operations:
- name: access-secret
method: GET
Detects security incidents, enriches with context, creates response tickets, and notifies the SOC.
naftiko: "0.5"
info:
label: "Security Incident Response Pipeline"
description: "Detects security incidents, enriches with context, creates response tickets, and notifies the SOC."
tags:
- security
- splunk
- servicenow
- pagerduty
capability:
exposes:
- type: mcp
namespace: security
port: 8080
tools:
- name: security_incident_response_pipeline
description: "Orchestrate security incident response pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-splunk
type: call
call: "splunk.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-servicenow
type: call
call: "servicenow.process-resource"
with:
data: "{{get-splunk.result}}"
- name: create-bigquery
type: call
call: "bigquery.create-resource"
with:
channel: "{{notification_channel}}"
text: "Security Incident Response Pipeline step 3 complete."
consumes:
- type: http
namespace: splunk
baseUri: "https://alphabet-splunk.com/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: splunk-op
method: POST
- type: http
namespace: servicenow
baseUri: "https://alphabet.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: bigquery
baseUri: "https://bigquery.googleapis.com/bigquery/v2"
authentication:
type: bearer
token: "$secrets.gcp_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: bigquery-op
method: POST
Runs a Container Analysis scan on an Artifact Registry image, checks for critical CVEs, creates a Jira ticket if vulnerabilities found, and posts findings to Google Chat.
naftiko: "0.5"
info:
label: "Security Vulnerability Scan Pipeline"
description: "Runs a Container Analysis scan on an Artifact Registry image, checks for critical CVEs, creates a Jira ticket if vulnerabilities found, and posts findings to Google Chat."
tags:
- security
- devops
- artifact-registry
- jira
- google-cloud-platform
capability:
exposes:
- type: mcp
namespace: security-scanning
port: 8080
tools:
- name: scan-and-report-vulnerabilities
description: "Scan a container image for vulnerabilities, report criticals to Jira and Google Chat."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: image_uri
in: body
type: string
description: "The full Artifact Registry image URI."
- name: jira_project_key
in: body
type: string
description: "The Jira project key for security tickets."
- name: chat_space
in: body
type: string
description: "Google Chat space for security alerts."
steps:
- name: get-vulnerabilities
type: call
call: "containeranalysis.list-occurrences"
with:
project_id: "{{project_id}}"
image_uri: "{{image_uri}}"
- name: create-jira-ticket
type: call
call: "jira.create-issue"
with:
project_key: "{{jira_project_key}}"
summary: "Critical CVEs found in {{image_uri}}"
description: "Vulnerabilities detected: {{get-vulnerabilities.occurrences.length}} findings. Image: {{image_uri}}"
issue_type: "Bug"
priority: "Critical"
- name: alert-security-team
type: call
call: "googlechat.send-message"
with:
space: "{{chat_space}}"
text: "Security scan for {{image_uri}}: {{get-vulnerabilities.occurrences.length}} vulnerabilities found. Jira: {{create-jira-ticket.key}}."
consumes:
- type: http
namespace: containeranalysis
baseUri: "https://containeranalysis.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: occurrences
path: "/projects/{{project_id}}/occurrences"
inputParameters:
- name: project_id
in: path
- name: filter
in: query
operations:
- name: list-occurrences
method: GET
- type: http
namespace: jira
baseUri: "https://alphabet.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: googlechat
baseUri: "https://chat.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.google_chat_token"
resources:
- name: messages
path: "/spaces/{{space}}/messages"
inputParameters:
- name: space
in: path
operations:
- name: send-message
method: POST
Exports data from Snowflake to a staging GCS bucket, loads it into BigQuery via a load job, and sends a migration report to Google Chat.
naftiko: "0.5"
info:
label: "Snowflake to BigQuery Data Migration"
description: "Exports data from Snowflake to a staging GCS bucket, loads it into BigQuery via a load job, and sends a migration report to Google Chat."
tags:
- data
- migration
- snowflake
- bigquery
- gcp-cloud-storage
capability:
exposes:
- type: mcp
namespace: data-migration
port: 8080
tools:
- name: migrate-snowflake-to-bq
description: "Export Snowflake data to GCS, load to BigQuery, and notify via Chat."
inputParameters:
- name: snowflake_query
in: body
type: string
description: "The Snowflake SQL query to export."
- name: stage_bucket
in: body
type: string
description: "The GCS staging bucket."
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: bq_dataset
in: body
type: string
description: "The target BigQuery dataset."
- name: bq_table
in: body
type: string
description: "The target BigQuery table."
- name: chat_space
in: body
type: string
description: "Google Chat space for notifications."
steps:
- name: export-from-snowflake
type: call
call: "snowflake.execute-query"
with:
query: "{{snowflake_query}}"
stage: "@gcs_stage/{{stage_bucket}}"
- name: load-to-bq
type: call
call: "bigquery.create-load-job"
with:
project_id: "{{project_id}}"
dataset_id: "{{bq_dataset}}"
table_id: "{{bq_table}}"
source_uri: "gs://{{stage_bucket}}/export/*"
- name: notify-migration
type: call
call: "googlechat.send-message"
with:
space: "{{chat_space}}"
text: "Migration complete. Data loaded from Snowflake to {{bq_dataset}}.{{bq_table}}. Job status: {{load-to-bq.status.state}}."
consumes:
- type: http
namespace: snowflake
baseUri: "https://alphabet.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: bigquery
baseUri: "https://bigquery.googleapis.com/bigquery/v2"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: jobs
path: "/projects/{{project_id}}/jobs"
inputParameters:
- name: project_id
in: path
operations:
- name: create-load-job
method: POST
- type: http
namespace: googlechat
baseUri: "https://chat.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.google_chat_token"
resources:
- name: messages
path: "/spaces/{{space}}/messages"
inputParameters:
- name: space
in: path
operations:
- name: send-message
method: POST
Audits license usage, identifies underutilized licenses, recommends optimization, and notifies IT.
naftiko: "0.5"
info:
label: "Software License Optimization Pipeline"
description: "Audits license usage, identifies underutilized licenses, recommends optimization, and notifies IT."
tags:
- operations
- servicenow
- snowflake
- slack
capability:
exposes:
- type: mcp
namespace: operations
port: 8080
tools:
- name: software_license_optimization
description: "Orchestrate software license optimization pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-servicenow
type: call
call: "servicenow.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-snowflake
type: call
call: "snowflake.process-resource"
with:
data: "{{get-servicenow.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Software License Optimization Pipeline step 3 complete."
consumes:
- type: http
namespace: servicenow
baseUri: "https://alphabet.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: snowflake
baseUri: "https://alphabet.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: snowflake-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Checks Cloud Spanner instance metrics, queries CPU utilization from Cloud Monitoring, and posts a capacity summary with scaling recommendations to Google Chat.
naftiko: "0.5"
info:
label: "Spanner Capacity Planning Pipeline"
description: "Checks Cloud Spanner instance metrics, queries CPU utilization from Cloud Monitoring, and posts a capacity summary with scaling recommendations to Google Chat."
tags:
- database
- infrastructure
- cloud-spanner
- cloud-monitoring
- google-cloud-platform
capability:
exposes:
- type: mcp
namespace: spanner-capacity
port: 8080
tools:
- name: assess-spanner-capacity
description: "Check Spanner instance, query CPU metrics, and post capacity recommendations."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: instance_id
in: body
type: string
description: "The Spanner instance identifier."
- name: chat_space
in: body
type: string
description: "Google Chat space for capacity alerts."
steps:
- name: get-instance
type: call
call: "spanner.get-instance"
with:
project_id: "{{project_id}}"
instance_id: "{{instance_id}}"
- name: get-cpu-metrics
type: call
call: "monitoring.query-timeseries"
with:
project_id: "{{project_id}}"
filter: "metric.type=\"spanner.googleapis.com/instance/cpu/utilization\" AND resource.labels.instance_id=\"{{instance_id}}\""
- name: post-summary
type: call
call: "googlechat.send-message"
with:
space: "{{chat_space}}"
text: "Spanner capacity report for {{instance_id}}: {{get-instance.nodeCount}} nodes, state: {{get-instance.state}}. Avg CPU: {{get-cpu-metrics.timeSeries[0].points[0].value.doubleValue}}."
consumes:
- type: http
namespace: spanner
baseUri: "https://spanner.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: instances
path: "/projects/{{project_id}}/instances/{{instance_id}}"
inputParameters:
- name: project_id
in: path
- name: instance_id
in: path
operations:
- name: get-instance
method: GET
- type: http
namespace: monitoring
baseUri: "https://monitoring.googleapis.com/v3"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: timeseries
path: "/projects/{{project_id}}/timeSeries"
inputParameters:
- name: project_id
in: path
- name: filter
in: query
operations:
- name: query-timeseries
method: GET
- type: http
namespace: googlechat
baseUri: "https://chat.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.google_chat_token"
resources:
- name: messages
path: "/spaces/{{space}}/messages"
inputParameters:
- name: space
in: path
operations:
- name: send-message
method: POST
Fetches Terraform Cloud workspace state, compares it against Cloud Asset Inventory, identifies drift, and creates a GitHub issue for remediation.
naftiko: "0.5"
info:
label: "Terraform GCP Infrastructure Audit"
description: "Fetches Terraform Cloud workspace state, compares it against Cloud Asset Inventory, identifies drift, and creates a GitHub issue for remediation."
tags:
- infrastructure
- devops
- terraform
- github
- google-cloud-platform
capability:
exposes:
- type: mcp
namespace: infra-audit
port: 8080
tools:
- name: audit-infrastructure-drift
description: "Compare Terraform state with GCP Cloud Asset Inventory and report drift to GitHub."
inputParameters:
- name: terraform_workspace
in: body
type: string
description: "The Terraform Cloud workspace ID."
- name: project_id
in: body
type: string
description: "The GCP project ID to audit."
- name: github_repo
in: body
type: string
description: "The GitHub repository (owner/repo) for drift issues."
steps:
- name: get-tf-state
type: call
call: "terraform.get-workspace-state"
with:
workspace_id: "{{terraform_workspace}}"
- name: get-asset-inventory
type: call
call: "cloudasset.search-resources"
with:
project_id: "{{project_id}}"
- name: create-drift-issue
type: call
call: "github.create-issue"
with:
repo: "{{github_repo}}"
title: "Infrastructure drift detected in {{project_id}}"
body: "Terraform state resources: {{get-tf-state.resources.length}}. GCP asset inventory resources: {{get-asset-inventory.results.length}}. Review and reconcile."
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_cloud_token"
resources:
- name: workspaces
path: "/workspaces/{{workspace_id}}/current-state-version"
inputParameters:
- name: workspace_id
in: path
operations:
- name: get-workspace-state
method: GET
- type: http
namespace: cloudasset
baseUri: "https://cloudasset.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: resources
path: "/projects/{{project_id}}/assets"
inputParameters:
- name: project_id
in: path
operations:
- name: search-resources
method: GET
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: issues
path: "/repos/{{repo}}/issues"
inputParameters:
- name: repo
in: path
operations:
- name: create-issue
method: POST
Evaluates vendor security posture, scores risk, creates assessment records, and notifies procurement.
naftiko: "0.5"
info:
label: "Vendor Risk Assessment Pipeline"
description: "Evaluates vendor security posture, scores risk, creates assessment records, and notifies procurement."
tags:
- procurement
- servicenow
- confluence
- slack
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: vendor_risk_assessment_pipeline
description: "Orchestrate vendor risk assessment pipeline workflow."
inputParameters:
- name: resource_id
in: body
type: string
description: "Primary resource identifier."
steps:
- name: get-servicenow
type: call
call: "servicenow.get-resource"
with:
resource_id: "{{resource_id}}"
- name: process-confluence
type: call
call: "confluence.process-resource"
with:
data: "{{get-servicenow.result}}"
- name: create-slack
type: call
call: "slack.create-resource"
with:
channel: "{{notification_channel}}"
text: "Vendor Risk Assessment Pipeline step 3 complete."
consumes:
- type: http
namespace: servicenow
baseUri: "https://alphabet.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: servicenow-op
method: POST
- type: http
namespace: confluence
baseUri: "https://alphabet.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: confluence-op
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: resources
path: "/resources/{{resource_id}}"
operations:
- name: slack-op
method: POST
Submits a batch prediction job to Vertex AI, monitors completion, stores results in BigQuery, and notifies via Google Chat.
naftiko: "0.5"
info:
label: "Vertex AI Batch Prediction Pipeline"
description: "Submits a batch prediction job to Vertex AI, monitors completion, stores results in BigQuery, and notifies via Google Chat."
tags:
- ai
- machine-learning
- google-cloud-platform
- bigquery
- google-workspace
capability:
exposes:
- type: mcp
namespace: vertex-batch
port: 8080
tools:
- name: run-batch-prediction
description: "Orchestrate a batch prediction pipeline across Vertex AI, BigQuery, and Google Chat."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: region
in: body
type: string
description: "The compute region."
- name: model_id
in: body
type: string
description: "The Vertex AI model resource ID."
- name: input_uri
in: body
type: string
description: "GCS URI for input data."
- name: output_dataset
in: body
type: string
description: "BigQuery dataset for results."
- name: chat_space
in: body
type: string
description: "Google Chat space for notifications."
steps:
- name: submit-prediction
type: call
call: "vertexai.create-batch-job"
with:
project_id: "{{project_id}}"
region: "{{region}}"
model: "{{model_id}}"
inputConfig: "{{input_uri}}"
- name: check-job
type: call
call: "vertexai.get-batch-job"
with:
project_id: "{{project_id}}"
region: "{{region}}"
job_id: "{{submit-prediction.name}}"
- name: load-results
type: call
call: "bigquery.insert-job"
with:
project_id: "{{project_id}}"
dataset: "{{output_dataset}}"
- name: notify
type: call
call: "googlechat.send-message"
with:
space: "{{chat_space}}"
text: "Batch prediction complete. Job: {{submit-prediction.name}}, loaded to {{output_dataset}}."
consumes:
- type: http
namespace: vertexai
baseUri: "https://aiplatform.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: batchPredictionJobs
path: "/projects/{{project_id}}/locations/{{region}}/batchPredictionJobs"
inputParameters:
- name: project_id
in: path
- name: region
in: path
operations:
- name: create-batch-job
method: POST
- name: get-batch-job
method: GET
- type: http
namespace: bigquery
baseUri: "https://bigquery.googleapis.com/bigquery/v2"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: jobs
path: "/projects/{{project_id}}/jobs"
inputParameters:
- name: project_id
in: path
operations:
- name: insert-job
method: POST
- type: http
namespace: googlechat
baseUri: "https://chat.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.google_chat_token"
resources:
- name: messages
path: "/spaces/{{space}}/messages"
inputParameters:
- name: space
in: path
operations:
- name: send-message
method: POST
Retrieves feature values from a Vertex AI Feature Store for online serving.
naftiko: "0.5"
info:
label: "Vertex AI Feature Store Lookup"
description: "Retrieves feature values from a Vertex AI Feature Store for online serving."
tags:
- ai
- machine-learning
- google-cloud-platform
capability:
exposes:
- type: mcp
namespace: vertexfeaturestore
port: 8080
tools:
- name: get-featurestore
description: "Retrieve a Vertex AI Feature Store instance and its configuration."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: region
in: body
type: string
description: "The feature store region."
- name: featurestore_id
in: body
type: string
description: "The feature store ID."
call: "vertexfeaturestore.get-featurestore"
with:
project_id: "{{project_id}}"
region: "{{region}}"
featurestore_id: "{{featurestore_id}}"
consumes:
- type: http
namespace: vertexfeaturestore
baseUri: "https://aiplatform.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: featurestores
path: "/projects/{{project_id}}/locations/{{region}}/featurestores/{{featurestore_id}}"
inputParameters:
- name: project_id
in: path
- name: region
in: path
- name: featurestore_id
in: path
operations:
- name: get-featurestore
method: GET
Checks a Vertex AI endpoint's deployment status, model version, and traffic split. Used by ML engineers to verify model serving readiness.
naftiko: "0.5"
info:
label: "Vertex AI Model Endpoint Health"
description: "Checks a Vertex AI endpoint's deployment status, model version, and traffic split. Used by ML engineers to verify model serving readiness."
tags:
- ai
- machine-learning
- vertex-ai
- google-cloud-platform
capability:
exposes:
- type: mcp
namespace: vertex-ml
port: 8080
tools:
- name: get-endpoint-health
description: "Retrieve Vertex AI endpoint deployment info by project, region, and endpoint ID."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: region
in: body
type: string
description: "The Vertex AI region."
- name: endpoint_id
in: body
type: string
description: "The Vertex AI endpoint identifier."
call: "vertexai.get-endpoint"
with:
project_id: "{{project_id}}"
region: "{{region}}"
endpoint_id: "{{endpoint_id}}"
outputParameters:
- name: display_name
type: string
mapping: "$.displayName"
- name: deployed_models
type: number
mapping: "$.deployedModels.length"
- name: traffic_split
type: string
mapping: "$.trafficSplit"
consumes:
- type: http
namespace: vertexai
baseUri: "https://us-central1-aiplatform.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: endpoints
path: "/projects/{{project_id}}/locations/{{region}}/endpoints/{{endpoint_id}}"
inputParameters:
- name: project_id
in: path
- name: region
in: path
- name: endpoint_id
in: path
operations:
- name: get-endpoint
method: GET
Scans VPC firewall rules for overly permissive entries, logs findings to BigQuery, and alerts the security team via Google Chat with a summary of non-compliant rules.
naftiko: "0.5"
info:
label: "VPC Firewall Audit Pipeline"
description: "Scans VPC firewall rules for overly permissive entries, logs findings to BigQuery, and alerts the security team via Google Chat with a summary of non-compliant rules."
tags:
- networking
- security
- vpc
- bigquery
- google-cloud-platform
capability:
exposes:
- type: mcp
namespace: vpc-firewall-audit
port: 8080
tools:
- name: audit-firewall-rules
description: "Scan VPC firewall rules, log findings to BigQuery, and alert security team."
inputParameters:
- name: project_id
in: body
type: string
description: "The GCP project ID."
- name: network_name
in: body
type: string
description: "The VPC network name to audit."
- name: chat_space
in: body
type: string
description: "Google Chat space for security alerts."
steps:
- name: list-rules
type: call
call: "compute.list-firewalls"
with:
project_id: "{{project_id}}"
network_name: "{{network_name}}"
- name: log-findings
type: call
call: "bigquery.insert-rows"
with:
project_id: "{{project_id}}"
dataset_id: "security_audits"
table_id: "firewall_findings"
rows: "{{list-rules.items}}"
- name: alert-team
type: call
call: "googlechat.send-message"
with:
space: "{{chat_space}}"
text: "Firewall audit for {{network_name}}: {{list-rules.items.length}} rules found. Review findings in BigQuery security_audits.firewall_findings."
consumes:
- type: http
namespace: compute
baseUri: "https://compute.googleapis.com/compute/v1"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: firewalls
path: "/projects/{{project_id}}/global/firewalls"
inputParameters:
- name: project_id
in: path
- name: filter
in: query
operations:
- name: list-firewalls
method: GET
- type: http
namespace: bigquery
baseUri: "https://bigquery.googleapis.com/bigquery/v2"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: tabledata
path: "/projects/{{project_id}}/datasets/{{dataset_id}}/tables/{{table_id}}/insertAll"
inputParameters:
- name: project_id
in: path
- name: dataset_id
in: path
- name: table_id
in: path
operations:
- name: insert-rows
method: POST
- type: http
namespace: googlechat
baseUri: "https://chat.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.google_chat_token"
resources:
- name: messages
path: "/spaces/{{space}}/messages"
inputParameters:
- name: space
in: path
operations:
- name: send-message
method: POST
Fetches group membership from Google Workspace Directory, compares with an HR source in Google Sheets, adds missing members, and logs changes to BigQuery.
naftiko: "0.5"
info:
label: "Workspace Group Membership Sync"
description: "Fetches group membership from Google Workspace Directory, compares with an HR source in Google Sheets, adds missing members, and logs changes to BigQuery."
tags:
- identity
- hr
- google-workspace
- google-sheets
- bigquery
capability:
exposes:
- type: mcp
namespace: workspace-sync
port: 8080
tools:
- name: sync-group-membership
description: "Sync Workspace group members against HR source in Sheets, add missing, log to BigQuery."
inputParameters:
- name: group_email
in: body
type: string
description: "The Google Workspace group email."
- name: spreadsheet_id
in: body
type: string
description: "The HR roster spreadsheet ID."
- name: sheet_range
in: body
type: string
description: "The range containing employee emails."
- name: project_id
in: body
type: string
description: "GCP project for audit logging."
steps:
- name: get-current-members
type: call
call: "workspace.list-group-members"
with:
group_email: "{{group_email}}"
- name: get-hr-roster
type: call
call: "sheets.get-values"
with:
spreadsheet_id: "{{spreadsheet_id}}"
range: "{{sheet_range}}"
- name: add-missing-members
type: call
call: "workspace.add-group-member"
with:
group_email: "{{group_email}}"
members: "{{get-hr-roster.values}}"
- name: log-sync
type: call
call: "bigquery.insert-rows"
with:
project_id: "{{project_id}}"
dataset_id: "identity_ops"
table_id: "group_sync_log"
rows: "[{\"group\": \"{{group_email}}\", \"action\": \"membership_sync\", \"source_count\": \"{{get-hr-roster.values.length}}\"}]"
consumes:
- type: http
namespace: workspace
baseUri: "https://admin.googleapis.com/admin/directory/v1"
authentication:
type: bearer
token: "$secrets.workspace_admin_token"
resources:
- name: group-members
path: "/groups/{{group_email}}/members"
inputParameters:
- name: group_email
in: path
operations:
- name: list-group-members
method: GET
- name: add-group-member
method: POST
- type: http
namespace: sheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: values
path: "/spreadsheets/{{spreadsheet_id}}/values/{{range}}"
inputParameters:
- name: spreadsheet_id
in: path
- name: range
in: path
operations:
- name: get-values
method: GET
- type: http
namespace: bigquery
baseUri: "https://bigquery.googleapis.com/bigquery/v2"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: tabledata
path: "/projects/{{project_id}}/datasets/{{dataset_id}}/tables/{{table_id}}/insertAll"
inputParameters:
- name: project_id
in: path
- name: dataset_id
in: path
- name: table_id
in: path
operations:
- name: insert-rows
method: POST
On employee termination, suspends the Google Workspace account, transfers Drive files to the manager, revokes OAuth tokens, and logs the offboarding event to BigQuery.
naftiko: "0.5"
info:
label: "Workspace User Offboarding Pipeline"
description: "On employee termination, suspends the Google Workspace account, transfers Drive files to the manager, revokes OAuth tokens, and logs the offboarding event to BigQuery."
tags:
- identity
- hr
- google-workspace
- google-drive
- bigquery
capability:
exposes:
- type: mcp
namespace: workspace-offboarding
port: 8080
tools:
- name: offboard-user
description: "Orchestrate user offboarding: suspend account, transfer files, revoke tokens, and audit log."
inputParameters:
- name: user_email
in: body
type: string
description: "The departing user's email address."
- name: manager_email
in: body
type: string
description: "The manager's email to receive file transfer."
- name: project_id
in: body
type: string
description: "GCP project for audit logging."
steps:
- name: suspend-user
type: call
call: "workspace.update-user"
with:
user_email: "{{user_email}}"
suspended: true
- name: transfer-drive
type: call
call: "drive.transfer-ownership"
with:
from_user: "{{user_email}}"
to_user: "{{manager_email}}"
- name: revoke-tokens
type: call
call: "workspace.revoke-tokens"
with:
user_email: "{{user_email}}"
- name: log-offboarding
type: call
call: "bigquery.insert-rows"
with:
project_id: "{{project_id}}"
dataset_id: "hr_events"
table_id: "offboarding_log"
rows: "[{\"user\": \"{{user_email}}\", \"manager\": \"{{manager_email}}\", \"action\": \"offboarded\"}]"
consumes:
- type: http
namespace: workspace
baseUri: "https://admin.googleapis.com/admin/directory/v1"
authentication:
type: bearer
token: "$secrets.workspace_admin_token"
resources:
- name: users
path: "/users/{{user_email}}"
inputParameters:
- name: user_email
in: path
operations:
- name: update-user
method: PUT
- name: revoke-tokens
method: DELETE
- type: http
namespace: drive
baseUri: "https://www.googleapis.com/drive/v3"
authentication:
type: bearer
token: "$secrets.workspace_admin_token"
resources:
- name: transfers
path: "/files/transfer"
operations:
- name: transfer-ownership
method: POST
- type: http
namespace: bigquery
baseUri: "https://bigquery.googleapis.com/bigquery/v2"
authentication:
type: bearer
token: "$secrets.gcp_access_token"
resources:
- name: tabledata
path: "/projects/{{project_id}}/datasets/{{dataset_id}}/tables/{{table_id}}/insertAll"
inputParameters:
- name: project_id
in: path
- name: dataset_id
in: path
- name: table_id
in: path
operations:
- name: insert-rows
method: POST
Retrieves analytics data for a YouTube channel including views, subscribers, and engagement metrics.
naftiko: "0.5"
info:
label: "YouTube Channel Analytics"
description: "Retrieves analytics data for a YouTube channel including views, subscribers, and engagement metrics."
tags:
- analytics
- youtube
capability:
exposes:
- type: mcp
namespace: youtubeanalytics
port: 8080
tools:
- name: query-report
description: "Query YouTube Analytics reports for channel metrics."
inputParameters:
- name: ids
in: body
type: string
description: "The channel identifier."
- name: start_date
in: body
type: string
description: "The report start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "The report end date in YYYY-MM-DD format."
- name: metrics
in: body
type: string
description: "Comma-separated list of metrics."
call: "youtubeanalytics.query-report"
with:
ids: "{{ids}}"
startDate: "{{start_date}}"
endDate: "{{end_date}}"
metrics: "{{metrics}}"
consumes:
- type: http
namespace: youtubeanalytics
baseUri: "https://youtubeanalytics.googleapis.com/v2"
authentication:
type: bearer
token: "$secrets.youtube_token"
resources:
- name: reports
path: "/reports"
inputParameters:
- name: ids
in: query
- name: startDate
in: query
- name: endDate
in: query
- name: metrics
in: query
operations:
- name: query-report
method: GET
Pulls YouTube channel stats and recent video analytics, exports the data to a Google Sheet dashboard, and sends a weekly content digest via Gmail.
naftiko: "0.5"
info:
label: "YouTube Content Performance Pipeline"
description: "Pulls YouTube channel stats and recent video analytics, exports the data to a Google Sheet dashboard, and sends a weekly content digest via Gmail."
tags:
- media
- analytics
- youtube
- google-sheets
- gmail
capability:
exposes:
- type: mcp
namespace: youtube-performance
port: 8080
tools:
- name: generate-content-report
description: "Fetch YouTube channel and video stats, export to Sheets, and email digest."
inputParameters:
- name: channel_id
in: body
type: string
description: "The YouTube channel ID."
- name: spreadsheet_id
in: body
type: string
description: "The Google Sheets spreadsheet ID for the dashboard."
- name: report_email
in: body
type: string
description: "Email for the content performance digest."
steps:
- name: get-channel-stats
type: call
call: "youtube.get-channel"
with:
channel_id: "{{channel_id}}"
- name: get-recent-videos
type: call
call: "youtube.list-videos"
with:
channel_id: "{{channel_id}}"
- name: update-dashboard
type: call
call: "sheets.update-values"
with:
spreadsheet_id: "{{spreadsheet_id}}"
range: "YouTubeReport!A1"
values: "{{get-recent-videos.items}}"
- name: send-digest
type: call
call: "gmail.send-message"
with:
to: "{{report_email}}"
subject: "YouTube Content Digest"
body: "Channel subscribers: {{get-channel-stats.items[0].statistics.subscriberCount}}. Total views: {{get-channel-stats.items[0].statistics.viewCount}}. Dashboard: https://docs.google.com/spreadsheets/d/{{spreadsheet_id}}."
consumes:
- type: http
namespace: youtube
baseUri: "https://www.googleapis.com/youtube/v3"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: channels
path: "/channels"
inputParameters:
- name: id
in: query
- name: part
in: query
value: "statistics"
operations:
- name: get-channel
method: GET
- name: search
path: "/search"
inputParameters:
- name: channelId
in: query
- name: order
in: query
value: "date"
- name: type
in: query
value: "video"
operations:
- name: list-videos
method: GET
- type: http
namespace: sheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: values
path: "/spreadsheets/{{spreadsheet_id}}/values/{{range}}"
inputParameters:
- name: spreadsheet_id
in: path
- name: range
in: path
operations:
- name: update-values
method: PUT
- type: http
namespace: gmail
baseUri: "https://gmail.googleapis.com/gmail/v1"
authentication:
type: bearer
token: "$secrets.google_oauth_token"
resources:
- name: messages
path: "/users/me/messages/send"
operations:
- name: send-message
method: POST